u-boot was crashing in qemu as the modeled hardware enforced overly
strict memory reads.

While this code will work on existing hardware, fix to avoid future issues.

Fixes: 12770d0df0e8 ("ast2600: spl: Add boot mode detection")
Link: https://gitlab.com/qemu-project/qemu/-/issues/2636
Signed-off-by: Joel Stanley <[email protected]>
---
GCC 14 was using this sequence to read the value, leading to the
crash:

 ldrbpl.w       r0, [r0, #1280] @ 0x500

 arch/arm/mach-aspeed/ast2600/spl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-aspeed/ast2600/spl.c 
b/arch/arm/mach-aspeed/ast2600/spl.c
index 05390c16f3af..0c5a82ed0947 100644
--- a/arch/arm/mach-aspeed/ast2600/spl.c
+++ b/arch/arm/mach-aspeed/ast2600/spl.c
@@ -45,10 +45,10 @@ u32 spl_boot_device(void)
        }
 
        /* boot from UART has higher priority */
-       if (scu->hwstrap2 & SCU_HWSTRAP2_BOOT_UART)
+       if (readl(&scu->hwstrap2) & SCU_HWSTRAP2_BOOT_UART)
                return BOOT_DEVICE_UART;
 
-       if (scu->hwstrap1 & SCU_HWSTRAP1_BOOT_EMMC)
+       if (readl(&scu->hwstrap1) & SCU_HWSTRAP1_BOOT_EMMC)
                return BOOT_DEVICE_MMC1;
 
 out:
-- 
2.45.2

Reply via email to