diff options
| author | Anup Patel <[email protected]> | 2020-01-15 13:31:12 +0530 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2020-01-22 12:10:49 +0530 |
| commit | 84cd4fc913e6475083f0a15993f2b4ad0705c717 (patch) | |
| tree | 030f032e7665506f982a8bfecf623cd76f519a10 | |
| parent | 817d50d0d477c2e830b92c3afb523711ca0bae3f (diff) | |
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 <[email protected]>
Reviewed-by: Atish Patra <[email protected]>
| -rw-r--r-- | lib/sbi/sbi_init.c | 9 | ||||
| -rw-r--r-- | 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 <sbi/sbi_platform.h> #include <sbi/sbi_system.h> #include <sbi/sbi_timer.h> +#include <sbi/sbi_tlb.h> #include <sbi/sbi_version.h> #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 <sbi/sbi_init.h> #include <sbi/sbi_ipi.h> #include <sbi/sbi_platform.h> -#include <sbi/sbi_tlb.h> -#include <sbi/sbi_trap.h> 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) |
