summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPadmarao Begari <padmarao.begari@amd.com>2024-10-11 17:04:35 +0530
committerMichal Simek <michal.simek@amd.com>2024-10-25 14:10:31 +0200
commitdcded570386c4d481d8f8248b7725f48e45c30b0 (patch)
tree9651bdb59c02cb5d11b4a86facf8b32031d9dd3f
parent5b3c46061706b2a4facf30e5093cd62cbb8f7c13 (diff)
arm64: zynqmp: fix tcm initialization for mini u-boot
Fix the issue introduced by commit fed064477c2c ("arm64: zynqmp: Print an error for split to lock mode switch"). The mini u-boot is hanging, because of the tcm is not initialized. The mini u-boot is using the tcm to reserve the mmu table and currently it is not initialized, so allowing u-boot to initialize the tcm. Signed-off-by: Padmarao Begari <padmarao.begari@amd.com> Link: https://lore.kernel.org/r/20241011113435.1966604-1-padmarao.begari@amd.com Signed-off-by: Michal Simek <michal.simek@amd.com>
-rw-r--r--arch/arm/mach-zynqmp/cpu.c7
-rw-r--r--arch/arm/mach-zynqmp/include/mach/sys_proto.h2
2 files changed, 6 insertions, 3 deletions
diff --git a/arch/arm/mach-zynqmp/cpu.c b/arch/arm/mach-zynqmp/cpu.c
index 5db99e2a73a..960ffac2105 100644
--- a/arch/arm/mach-zynqmp/cpu.c
+++ b/arch/arm/mach-zynqmp/cpu.c
@@ -112,7 +112,7 @@ u64 get_page_table_size(void)
return 0x14000;
}
-#if defined(CONFIG_SYS_MEM_RSVD_FOR_MMU) || defined(CONFIG_DEFINE_TCM_OCM_MMAP)
+#if defined(CONFIG_DEFINE_TCM_OCM_MMAP)
void tcm_init(u8 mode)
{
int ret;
@@ -134,7 +134,10 @@ void tcm_init(u8 mode)
#ifdef CONFIG_SYS_MEM_RSVD_FOR_MMU
int arm_reserve_mmu(void)
{
- tcm_init(TCM_LOCK);
+ puts("WARNING: Initializing TCM overwrites TCM content\n");
+ initialize_tcm(TCM_LOCK);
+ memset((void *)ZYNQMP_TCM_BASE_ADDR, 0, ZYNQMP_TCM_SIZE);
+
gd->arch.tlb_size = PGTABLE_SIZE;
gd->arch.tlb_addr = ZYNQMP_TCM_BASE_ADDR;
diff --git a/arch/arm/mach-zynqmp/include/mach/sys_proto.h b/arch/arm/mach-zynqmp/include/mach/sys_proto.h
index b3396db28f0..9af3ab5d6b6 100644
--- a/arch/arm/mach-zynqmp/include/mach/sys_proto.h
+++ b/arch/arm/mach-zynqmp/include/mach/sys_proto.h
@@ -51,7 +51,7 @@ unsigned int zynqmp_get_silicon_version(void);
int check_tcm_mode(bool mode);
void initialize_tcm(bool mode);
void mem_map_fill(void);
-#if defined(CONFIG_SYS_MEM_RSVD_FOR_MMU) || defined(CONFIG_DEFINE_TCM_OCM_MMAP)
+#if defined(CONFIG_DEFINE_TCM_OCM_MMAP)
void tcm_init(u8 mode);
#endif