From 84cd4fc913e6475083f0a15993f2b4ad0705c717 Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Wed, 15 Jan 2020 13:31:12 +0530 Subject: [PATCH] lib: Initialize TLB management directly from coldboot/warmboot path Currently, the remote TLB management is initialized via IPI init which is counter intuitive. This patch initializes remote TLB management directly from init_coldboot() and init_warmboot() after IPI init is done. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- lib/sbi/sbi_init.c | 9 +++++++++ lib/sbi/sbi_ipi.c | 6 ------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index 4afeed28..c5a899c3 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #define BANNER \ @@ -103,6 +104,10 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid) if (rc) sbi_hart_hang(); + rc = sbi_tlb_init(scratch, TRUE); + if (rc) + sbi_hart_hang(); + rc = sbi_timer_init(scratch, TRUE); if (rc) sbi_hart_hang(); @@ -152,6 +157,10 @@ static void __noreturn init_warmboot(struct sbi_scratch *scratch, u32 hartid) if (rc) sbi_hart_hang(); + rc = sbi_tlb_init(scratch, FALSE); + if (rc) + sbi_hart_hang(); + rc = sbi_timer_init(scratch, FALSE); if (rc) sbi_hart_hang(); diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c index a900fda2..206931c6 100644 --- a/lib/sbi/sbi_ipi.c +++ b/lib/sbi/sbi_ipi.c @@ -17,8 +17,6 @@ #include #include #include -#include -#include struct sbi_ipi_data { unsigned long ipi_type; @@ -232,10 +230,6 @@ int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot) ipi_data = sbi_scratch_offset_ptr(scratch, ipi_data_off); ipi_data->ipi_type = 0x00; - ret = sbi_tlb_init(scratch, cold_boot); - if (ret) - return ret; - /* Platform init */ ret = sbi_platform_ipi_init(sbi_platform_ptr(scratch), cold_boot); if (ret)