]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: mach-k3: am642: Store boot info from ROM
authorDave Gerlach <d-gerlach@ti.com>
Fri, 23 Apr 2021 16:27:35 +0000 (11:27 -0500)
committerLokesh Vutla <lokeshvutla@ti.com>
Wed, 12 May 2021 10:57:57 +0000 (16:27 +0530)
For AM642, ROM supports loading system firmware directly
from boot image. ROM passes information about the number of
images that are loaded to bootloader at a specific address
that is temporary.  Add support for storing this information
somewhere permanent before it gets corrupted.

Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
arch/arm/mach-k3/am642_init.c
arch/arm/mach-k3/include/mach/am64_hardware.h

index aa0eb72a870926148e33f24fce589f0ce7bbeacf..08f0b736a1a8da5cf1640374436b6dfe88d2afbc 100644 (file)
@@ -29,12 +29,33 @@ static void ctrl_mmr_unlock(void)
        mmr_unlock(CTRL_MMR0_BASE, 6);
 }
 
+/*
+ * This uninitialized global variable would normal end up in the .bss section,
+ * but the .bss is cleared between writing and reading this variable, so move
+ * it to the .data section.
+ */
+u32 bootindex __section(".data");
+static struct rom_extended_boot_data bootdata __section(.data);
+
+static void store_boot_info_from_rom(void)
+{
+       bootindex = *(u32 *)(CONFIG_SYS_K3_BOOT_PARAM_TABLE_INDEX);
+       memcpy(&bootdata, (uintptr_t *)ROM_ENTENDED_BOOT_DATA_INFO,
+              sizeof(struct rom_extended_boot_data));
+}
+
 void board_init_f(ulong dummy)
 {
 #if defined(CONFIG_CPU_V7R)
        setup_k3_mpu_regions();
 #endif
 
+       /*
+        * Cannot delay this further as there is a chance that
+        * K3_BOOT_PARAM_TABLE_INDEX can be over written by SPL MALLOC section.
+        */
+       store_boot_info_from_rom();
+
        ctrl_mmr_unlock();
 
        /* Init DM early */
index 06b19b80db28072f9a05ab9c86529c6158be5528..8dc318bfbfc250bb432a761cfbf8257286578351 100644 (file)
@@ -47,4 +47,6 @@
 #define CTRLMMR_LOCK_KICK1                             0x0100c
 #define CTRLMMR_LOCK_KICK1_UNLOCK_VAL                  0xd172bc5a
 
+#define ROM_ENTENDED_BOOT_DATA_INFO                    0x701beb00
+
 #endif /* __ASM_ARCH_DRA8_HARDWARE_H */