From: Ye Li <ye...@nxp.com>

When booting from boot part1/2, the image offset should be 0, but
ROM has a bug to return 0x8000. Has to workaround the issue before
ROM fix it.

Use a ROM function to know boot from emmc boot part or user part
So we can set the image offset accordingly.

Signed-off-by: Ye Li <ye...@nxp.com>
---
 arch/arm/mach-imx/image-container.c |  7 +++++++
 arch/arm/mach-imx/imx8ulp/soc.c     | 10 ++++++++++
 2 files changed, 17 insertions(+)

diff --git a/arch/arm/mach-imx/image-container.c 
b/arch/arm/mach-imx/image-container.c
index c3f62872c6..68b30bcfc5 100644
--- a/arch/arm/mach-imx/image-container.c
+++ b/arch/arm/mach-imx/image-container.c
@@ -265,10 +265,17 @@ unsigned long spl_nor_get_uboot_base(void)
 #endif
 
 #ifdef CONFIG_SPL_BOOTROM_SUPPORT
+u32 __weak spl_arch_boot_image_offset(u32 image_offset, u32 rom_bt_dev)
+{
+       return image_offset;
+}
+
 ulong spl_romapi_get_uboot_base(u32 image_offset, u32 rom_bt_dev)
 {
        ulong end;
 
+       image_offset = spl_arch_boot_image_offset(image_offset, rom_bt_dev);
+
        end = get_imageset_end((void *)(ulong)image_offset, ROM_API_DEV);
        end = ROUND(end, SZ_1K);
 
diff --git a/arch/arm/mach-imx/imx8ulp/soc.c b/arch/arm/mach-imx/imx8ulp/soc.c
index 709895fa22..ab2af57acd 100644
--- a/arch/arm/mach-imx/imx8ulp/soc.c
+++ b/arch/arm/mach-imx/imx8ulp/soc.c
@@ -532,3 +532,13 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
 {
        memset(mac, 0, 6);
 }
+
+int (*card_emmc_is_boot_part_en)(void) = (void *)0x67cc;
+u32 spl_arch_boot_image_offset(u32 image_offset, u32 rom_bt_dev)
+{
+       /* Hard code for eMMC image_offset on 8ULP ROM, need fix by ROM, temp 
workaround */
+       if (((rom_bt_dev >> 16) & 0xff) == BT_DEV_TYPE_MMC && 
card_emmc_is_boot_part_en())
+               image_offset = 0;
+
+       return image_offset;
+}
-- 
2.30.0

Reply via email to