From: Andre Przywara <[email protected]>

H616 supports and needs bigger SPL than 32 KiB, mostly due to big DRAM
driver and need for PMIC configuration, which pull several drivers which
are not needed otherwise.

Signed-off-by: Andre Przywara <[email protected]>
Signed-off-by: Jernej Skrabec <[email protected]>
---
 arch/arm/mach-sunxi/board.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c
index 7a8b303f233c..296efd615769 100644
--- a/arch/arm/mach-sunxi/board.c
+++ b/arch/arm/mach-sunxi/board.c
@@ -277,6 +277,14 @@ uint32_t sunxi_get_boot_device(void)
 }
 
 #ifdef CONFIG_SPL_BUILD
+static u32 sunxi_get_spl_size(void)
+{
+       if (!is_boot0_magic(SPL_ADDR + 4)) /* eGON.BT0 */
+               return 32768;
+
+       return readl(SPL_ADDR + 0x10);
+}
+
 /*
  * The eGON SPL image can be located at 8KB or at 128KB into an SD card or
  * an eMMC device. The boot source has bit 4 set in the latter case.
@@ -286,6 +294,7 @@ uint32_t sunxi_get_boot_device(void)
 unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc)
 {
        unsigned long sector = CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR;
+       u32 spl_size = sunxi_get_spl_size();
 
        switch (sunxi_get_boot_source()) {
        case SUNXI_BOOTED_FROM_MMC0_HIGH:
@@ -294,6 +303,9 @@ unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc)
                break;
        }
 
+       if (spl_size > 32768)
+               sector += (spl_size - 32768) / 512;
+
        return sector;
 }
 
-- 
2.30.0

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/20210103092633.36226-8-jernej.skrabec%40siol.net.

Reply via email to