[U-Boot] [PATCH 1/7] arm: K3: Avoid use of MCU_PSRAM0 before SYSFW is loaded

Lokesh Vutla lokeshvutla at ti.com
Thu Feb 14 03:32:59 UTC 2019



On 14/02/19 12:07 AM, Andrew F. Davis wrote:
> On HS devices the 512b region of reset isolated memory called
> MCU_PSRAM0 is firewalled by default. Until SYSFW is loaded we
> cannot use this memory. It is only used to store a single value
> left at the end of SRAM by ROM that will be needed later. Save
> that value to a global variable stored in the .data section.
> This section is used as .bss will be cleared between saving
> this value and using it.
> 
> Signed-off-by: Andrew F. Davis <afd at ti.com>
> ---
>  arch/arm/mach-k3/am6_init.c                  | 8 +++-----
>  arch/arm/mach-k3/include/mach/am6_hardware.h | 3 ---
>  2 files changed, 3 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/mach-k3/am6_init.c b/arch/arm/mach-k3/am6_init.c
> index a5553190b4..462538e45d 100644
> --- a/arch/arm/mach-k3/am6_init.c
> +++ b/arch/arm/mach-k3/am6_init.c
> @@ -49,11 +49,11 @@ static void ctrl_mmr_unlock(void)
>  	mmr_unlock(CTRL_MMR0_BASE, 7);
>  }
>  
> +u32 bootindex __attribute__((section(".data")));

After thinking a bit more I realized that backup bootmode might fail. R5 SPL is
fine but when it jumps to A53 SPL it is trying to read the bootindex again from
K3_BOOT_PARAM_TABLE_INDEX_VAL(this is already the case and is wrong). It is not
guaranteed that R5 SPL did not damage this ROM param table. We should somehow
pass bootindex to A53 SPL using scratchpad space.

> +
>  static void store_boot_index_from_rom(void)
>  {
> -	u32 *boot_index = (u32 *)K3_BOOT_PARAM_TABLE_INDEX_VAL;
> -
> -	*boot_index = *(u32 *)(CONFIG_SYS_K3_BOOT_PARAM_TABLE_INDEX);
> +	bootindex = *(u32 *)(CONFIG_SYS_K3_BOOT_PARAM_TABLE_INDEX);
>  }
>  
>  void board_init_f(ulong dummy)
> @@ -94,7 +94,6 @@ u32 spl_boot_mode(const u32 boot_device)
>  {
>  #if defined(CONFIG_SUPPORT_EMMC_BOOT)
>  	u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
> -	u32 bootindex = readl(K3_BOOT_PARAM_TABLE_INDEX_VAL);
>  
>  	u32 bootmode = (devstat & CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK) >>
>  			CTRLMMR_MAIN_DEVSTAT_BOOTMODE_SHIFT;
> @@ -170,7 +169,6 @@ static u32 __get_primary_bootmedia(u32 devstat)
>  u32 spl_boot_device(void)
>  {
>  	u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
> -	u32 bootindex = readl(K3_BOOT_PARAM_TABLE_INDEX_VAL);
>  
>  	if (bootindex == K3_PRIMARY_BOOTMODE)
>  		return __get_primary_bootmedia(devstat);
> diff --git a/arch/arm/mach-k3/include/mach/am6_hardware.h b/arch/arm/mach-k3/include/mach/am6_hardware.h
> index b5244609af..3343233aa3 100644
> --- a/arch/arm/mach-k3/include/mach/am6_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/am6_hardware.h
> @@ -44,7 +44,4 @@
>  #define CTRLMMR_LOCK_KICK1				0x0100c
>  #define CTRLMMR_LOCK_KICK1_UNLOCK_VAL			0xd172bc5a
>  
> -/* MCU SCRATCHPAD usage */
> -#define K3_BOOT_PARAM_TABLE_INDEX_VAL	CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE

Can we move scratchpad base to a different location ? This will be used for
eeprom storing also.

Thanks and regards,
Lokesh

> -
>  #endif /* __ASM_ARCH_AM6_HARDWARE_H */
> 


More information about the U-Boot mailing list