On 29.09.23 13:56, Tom Rini wrote:
On Fri, Sep 29, 2023 at 02:57:42AM +0200, Heinrich Schuchardt wrote:
On 9/27/23 23:44, Jonas Karlman wrote:
spl_board_prepare_for_boot() is not called before jumping/invoking atf,
optee, opensbi or linux images.

Jump to image at the end of board_init_r() to fix this.

Signed-off-by: Jonas Karlman <jo...@kwiboo.se>
---
This patch have dependencies on the following patches:

spl: add __noreturn attribute to spl_invoke_opensbi function
https://patchwork.ozlabs.org/patch/1827057/

spl: add __noreturn attribute to spl_invoke_atf function
https://patchwork.ozlabs.org/patch/1831366/

spl: Drop the switch() statement for OS selection
from the "spl: Preparation for Universal Payload" series
https://patchwork.ozlabs.org/patch/1839731/
---
   common/spl/spl.c | 12 +++++++-----
   1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/common/spl/spl.c b/common/spl/spl.c
index f7608f14e365..79c39820262a 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -647,6 +647,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
                BOOT_DEVICE_NONE,
                BOOT_DEVICE_NONE,
        };
+       typedef void __noreturn (*jump_to_image_t)(struct spl_image_info *);
+       jump_to_image_t jump_to_image = &jump_to_image_no_args;
        struct spl_image_info spl_image;
        int ret, os;

@@ -735,20 +737,20 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        } else if (CONFIG_IS_ENABLED(ATF) && os == IH_OS_ARM_TRUSTED_FIRMWARE) {
                debug("Jumping to U-Boot via ARM Trusted Firmware\n");
                spl_fixup_fdt(spl_image_fdt_addr(&spl_image));
-               spl_invoke_atf(&spl_image);
+               jump_to_image = &spl_invoke_atf;
        } else if (CONFIG_IS_ENABLED(OPTEE_IMAGE) && os == IH_OS_TEE) {
                debug("Jumping to U-Boot via OP-TEE\n");
                spl_board_prepare_for_optee(spl_image_fdt_addr(&spl_image));
-               jump_to_image_optee(&spl_image);
+               jump_to_image = &jump_to_image_optee;
        } else if (CONFIG_IS_ENABLED(OPENSBI) && os == IH_OS_OPENSBI) {
                debug("Jumping to U-Boot via RISC-V OpenSBI\n");
-               spl_invoke_opensbi(&spl_image);
+               jump_to_image = &spl_invoke_opensbi;
        } else if (CONFIG_IS_ENABLED(OS_BOOT) && os == IH_OS_LINUX) {
                debug("Jumping to Linux\n");
                if (IS_ENABLED(CONFIG_SPL_OS_BOOT))
                        spl_fixup_fdt((void *)SPL_PAYLOAD_ARGS_ADDR);
                spl_board_prepare_for_linux();
-               jump_to_image_linux(&spl_image);
+               jump_to_image = &jump_to_image_linux;
        } else {
                debug("Unsupported OS image.. Jumping nevertheless..\n");
        }
@@ -788,7 +790,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        }

        spl_board_prepare_for_boot();
-       jump_to_image_no_args(&spl_image);
+       jump_to_image(&spl_image);
   }

   /*

In SPL we are fighting for every byte of binary size.

What is the impact of this change on the code size?

I would expect that your increasing it; especially if only one of the
CONFIG_OPTIONS is enabled.

If so, NAK to this patch despite all elegance.

We aren't _that_ strict, no.  And a very quick peek shows that this
seems fine overall.  Since you raised the question I'll do a quick
world build but socfpga_agilex_vab (as a config I had size change
results for in front of me for something else) shrank by 4 bytes with
just the prerequsites and this patch applied.


Shrinking the size sounds great. Thanks for measuring.

Best regards

Heinrich

Reply via email to