From 949c83a799e91cb57903932a84ec63fd14de5dc6 Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Thu, 20 Feb 2025 10:42:30 -0800 Subject: [PATCH] lib: sbi: Use sbi_hart_count() and sbi_for_each_hartindex() Simplify the code and improve consistency by using the new macros where possible. sbi_hart_count() obsoletes sbi_scratch_last_hartindex(). Signed-off-by: Samuel Holland Reviewed-by: Anup Patel --- include/sbi/sbi_platform.h | 2 +- include/sbi/sbi_scratch.h | 3 --- lib/sbi/sbi_domain.c | 4 +--- lib/sbi/sbi_hsm.c | 3 +-- lib/sbi/sbi_scratch.c | 3 +-- lib/utils/irqchip/fdt_irqchip_plic.c | 5 +---- lib/utils/irqchip/plic.c | 8 ++++---- lib/utils/reset/fdt_reset_atcwdt200.c | 5 +---- platform/generic/platform.c | 2 +- 9 files changed, 11 insertions(+), 24 deletions(-) diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index 5e50c997..3c99d439 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -326,7 +326,7 @@ static inline u32 sbi_platform_tlb_fifo_num_entries(const struct sbi_platform *p { if (plat && sbi_platform_ops(plat)->get_tlb_num_entries) return sbi_platform_ops(plat)->get_tlb_num_entries(); - return sbi_scratch_last_hartindex() + 1; + return sbi_hart_count(); } /** diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h index 293625f1..3cf44c7d 100644 --- a/include/sbi/sbi_scratch.h +++ b/include/sbi/sbi_scratch.h @@ -220,9 +220,6 @@ extern u32 sbi_scratch_hart_count; #define sbi_for_each_hartindex(__var) \ for (u32 __var = 0; __var < sbi_hart_count(); ++__var) -/** Get last HART index having a sbi_scratch pointer */ -#define sbi_scratch_last_hartindex() (sbi_hart_count() - 1) - /** Check whether a particular HART index is valid or not */ #define sbi_hartindex_valid(__hartindex) ((__hartindex) < sbi_hart_count()) diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c index 51c82a75..461c7e53 100644 --- a/lib/sbi/sbi_domain.c +++ b/lib/sbi/sbi_domain.c @@ -770,11 +770,9 @@ int sbi_domain_finalize(struct sbi_scratch *scratch) int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid) { - u32 i; int rc; struct sbi_hartmask *root_hmask; struct sbi_domain_memregion *root_memregs; - const struct sbi_platform *plat = sbi_platform_ptr(scratch); SBI_INIT_LIST_HEAD(&domain_list); @@ -855,7 +853,7 @@ int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid) root.next_mode = scratch->next_mode; /* Root domain possible and assigned HARTs */ - for (i = 0; i < plat->hart_count; i++) + sbi_for_each_hartindex(i) sbi_hartmask_set_hartindex(i, root_hmask); /* Finally register the root domain */ diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c index cf0eb84b..dfe8408d 100644 --- a/lib/sbi/sbi_hsm.c +++ b/lib/sbi/sbi_hsm.c @@ -238,7 +238,6 @@ static void hsm_device_hart_resume(void) int sbi_hsm_init(struct sbi_scratch *scratch, bool cold_boot) { - u32 i; struct sbi_scratch *rscratch; struct sbi_hsm_data *hdata; @@ -248,7 +247,7 @@ int sbi_hsm_init(struct sbi_scratch *scratch, bool cold_boot) return SBI_ENOMEM; /* Initialize hart state data for every hart */ - for (i = 0; i <= sbi_scratch_last_hartindex(); i++) { + sbi_for_each_hartindex(i) { rscratch = sbi_hartindex_to_scratch(i); if (!rscratch) continue; diff --git a/lib/sbi/sbi_scratch.c b/lib/sbi/sbi_scratch.c index 7e04e115..8c7eeaf8 100644 --- a/lib/sbi/sbi_scratch.c +++ b/lib/sbi/sbi_scratch.c @@ -54,7 +54,6 @@ int sbi_scratch_init(struct sbi_scratch *scratch) unsigned long sbi_scratch_alloc_offset(unsigned long size) { - u32 i; void *ptr; unsigned long ret = 0; struct sbi_scratch *rscratch; @@ -86,7 +85,7 @@ done: spin_unlock(&extra_lock); if (ret) { - for (i = 0; i <= sbi_scratch_last_hartindex(); i++) { + sbi_for_each_hartindex(i) { rscratch = sbi_hartindex_to_scratch(i); if (!rscratch) continue; diff --git a/lib/utils/irqchip/fdt_irqchip_plic.c b/lib/utils/irqchip/fdt_irqchip_plic.c index 494358d8..65a9de15 100644 --- a/lib/utils/irqchip/fdt_irqchip_plic.c +++ b/lib/utils/irqchip/fdt_irqchip_plic.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -66,12 +65,10 @@ static int irqchip_plic_update_context_map(const void *fdt, int nodeoff, static int irqchip_plic_cold_init(const void *fdt, int nodeoff, const struct fdt_match *match) { - struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); - const struct sbi_platform *plat = sbi_platform_ptr(scratch); int rc; struct plic_data *pd; - pd = sbi_zalloc(PLIC_DATA_SIZE(plat->hart_count)); + pd = sbi_zalloc(PLIC_DATA_SIZE(sbi_hart_count())); if (!pd) return SBI_ENOMEM; diff --git a/lib/utils/irqchip/plic.c b/lib/utils/irqchip/plic.c index 8b2190f8..581a41bb 100644 --- a/lib/utils/irqchip/plic.c +++ b/lib/utils/irqchip/plic.c @@ -135,7 +135,7 @@ void plic_suspend(void) if (!data_word) return; - for (u32 h = 0; h <= sbi_scratch_last_hartindex(); h++) { + sbi_for_each_hartindex(h) { u32 context_id = plic->context_map[h][PLIC_S_CONTEXT]; if (context_id < 0) @@ -166,7 +166,7 @@ void plic_resume(void) if (!data_word) return; - for (u32 h = 0; h <= sbi_scratch_last_hartindex(); h++) { + sbi_for_each_hartindex(h) { u32 context_id = plic->context_map[h][PLIC_S_CONTEXT]; if (context_id < 0) @@ -236,7 +236,7 @@ int plic_cold_irqchip_init(struct plic_data *plic) if (plic->flags & PLIC_FLAG_ENABLE_PM) { unsigned long data_size = 0; - for (u32 i = 0; i <= sbi_scratch_last_hartindex(); i++) { + sbi_for_each_hartindex(i) { if (plic->context_map[i][PLIC_S_CONTEXT] < 0) continue; @@ -270,7 +270,7 @@ int plic_cold_irqchip_init(struct plic_data *plic) if (ret) return ret; - for (u32 i = 0; i <= sbi_scratch_last_hartindex(); i++) { + sbi_for_each_hartindex(i) { if (plic->context_map[i][PLIC_M_CONTEXT] < 0 && plic->context_map[i][PLIC_S_CONTEXT] < 0) continue; diff --git a/lib/utils/reset/fdt_reset_atcwdt200.c b/lib/utils/reset/fdt_reset_atcwdt200.c index 97ec7431..2304582a 100644 --- a/lib/utils/reset/fdt_reset_atcwdt200.c +++ b/lib/utils/reset/fdt_reset_atcwdt200.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -59,9 +58,7 @@ static int ae350_system_reset_check(u32 type, u32 reason) static void ae350_system_reset(u32 type, u32 reason) { - const struct sbi_platform *plat = sbi_platform_thishart_ptr(); - - for (int i = 0; i < sbi_platform_hart_count(plat); i++) + sbi_for_each_hartindex(i) if (smu_set_reset_vector(&smu, FLASH_BASE, i)) goto fail; diff --git a/platform/generic/platform.c b/platform/generic/platform.c index 14cbf08e..b2f29e8b 100644 --- a/platform/generic/platform.c +++ b/platform/generic/platform.c @@ -367,7 +367,7 @@ static u32 generic_tlb_num_entries(void) { if (generic_plat && generic_plat->tlb_num_entries) return generic_plat->tlb_num_entries(generic_plat_match); - return sbi_scratch_last_hartindex() + 1; + return sbi_hart_count(); } static int generic_pmu_init(void)