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 <samuel.holland@sifive.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
Samuel Holland
2025-02-20 10:42:30 -08:00
committed by Anup Patel
parent 757f7acafd
commit 949c83a799
9 changed files with 11 additions and 24 deletions

View File

@@ -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) if (plat && sbi_platform_ops(plat)->get_tlb_num_entries)
return 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();
} }
/** /**

View File

@@ -220,9 +220,6 @@ extern u32 sbi_scratch_hart_count;
#define sbi_for_each_hartindex(__var) \ #define sbi_for_each_hartindex(__var) \
for (u32 __var = 0; __var < sbi_hart_count(); ++__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 */ /** Check whether a particular HART index is valid or not */
#define sbi_hartindex_valid(__hartindex) ((__hartindex) < sbi_hart_count()) #define sbi_hartindex_valid(__hartindex) ((__hartindex) < sbi_hart_count())

View File

@@ -770,11 +770,9 @@ int sbi_domain_finalize(struct sbi_scratch *scratch)
int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid) int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid)
{ {
u32 i;
int rc; int rc;
struct sbi_hartmask *root_hmask; struct sbi_hartmask *root_hmask;
struct sbi_domain_memregion *root_memregs; struct sbi_domain_memregion *root_memregs;
const struct sbi_platform *plat = sbi_platform_ptr(scratch);
SBI_INIT_LIST_HEAD(&domain_list); 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.next_mode = scratch->next_mode;
/* Root domain possible and assigned HARTs */ /* 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); sbi_hartmask_set_hartindex(i, root_hmask);
/* Finally register the root domain */ /* Finally register the root domain */

View File

@@ -238,7 +238,6 @@ static void hsm_device_hart_resume(void)
int sbi_hsm_init(struct sbi_scratch *scratch, bool cold_boot) int sbi_hsm_init(struct sbi_scratch *scratch, bool cold_boot)
{ {
u32 i;
struct sbi_scratch *rscratch; struct sbi_scratch *rscratch;
struct sbi_hsm_data *hdata; struct sbi_hsm_data *hdata;
@@ -248,7 +247,7 @@ int sbi_hsm_init(struct sbi_scratch *scratch, bool cold_boot)
return SBI_ENOMEM; return SBI_ENOMEM;
/* Initialize hart state data for every hart */ /* 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); rscratch = sbi_hartindex_to_scratch(i);
if (!rscratch) if (!rscratch)
continue; continue;

View File

@@ -54,7 +54,6 @@ int sbi_scratch_init(struct sbi_scratch *scratch)
unsigned long sbi_scratch_alloc_offset(unsigned long size) unsigned long sbi_scratch_alloc_offset(unsigned long size)
{ {
u32 i;
void *ptr; void *ptr;
unsigned long ret = 0; unsigned long ret = 0;
struct sbi_scratch *rscratch; struct sbi_scratch *rscratch;
@@ -86,7 +85,7 @@ done:
spin_unlock(&extra_lock); spin_unlock(&extra_lock);
if (ret) { if (ret) {
for (i = 0; i <= sbi_scratch_last_hartindex(); i++) { sbi_for_each_hartindex(i) {
rscratch = sbi_hartindex_to_scratch(i); rscratch = sbi_hartindex_to_scratch(i);
if (!rscratch) if (!rscratch)
continue; continue;

View File

@@ -12,7 +12,6 @@
#include <sbi/riscv_io.h> #include <sbi/riscv_io.h>
#include <sbi/sbi_error.h> #include <sbi/sbi_error.h>
#include <sbi/sbi_heap.h> #include <sbi/sbi_heap.h>
#include <sbi/sbi_platform.h>
#include <sbi/sbi_scratch.h> #include <sbi/sbi_scratch.h>
#include <sbi_utils/fdt/fdt_helper.h> #include <sbi_utils/fdt/fdt_helper.h>
#include <sbi_utils/irqchip/fdt_irqchip.h> #include <sbi_utils/irqchip/fdt_irqchip.h>
@@ -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, static int irqchip_plic_cold_init(const void *fdt, int nodeoff,
const struct fdt_match *match) const struct fdt_match *match)
{ {
struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
const struct sbi_platform *plat = sbi_platform_ptr(scratch);
int rc; int rc;
struct plic_data *pd; struct plic_data *pd;
pd = sbi_zalloc(PLIC_DATA_SIZE(plat->hart_count)); pd = sbi_zalloc(PLIC_DATA_SIZE(sbi_hart_count()));
if (!pd) if (!pd)
return SBI_ENOMEM; return SBI_ENOMEM;

View File

@@ -135,7 +135,7 @@ void plic_suspend(void)
if (!data_word) if (!data_word)
return; 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]; u32 context_id = plic->context_map[h][PLIC_S_CONTEXT];
if (context_id < 0) if (context_id < 0)
@@ -166,7 +166,7 @@ void plic_resume(void)
if (!data_word) if (!data_word)
return; 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]; u32 context_id = plic->context_map[h][PLIC_S_CONTEXT];
if (context_id < 0) if (context_id < 0)
@@ -236,7 +236,7 @@ int plic_cold_irqchip_init(struct plic_data *plic)
if (plic->flags & PLIC_FLAG_ENABLE_PM) { if (plic->flags & PLIC_FLAG_ENABLE_PM) {
unsigned long data_size = 0; 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) if (plic->context_map[i][PLIC_S_CONTEXT] < 0)
continue; continue;
@@ -270,7 +270,7 @@ int plic_cold_irqchip_init(struct plic_data *plic)
if (ret) if (ret)
return 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 && if (plic->context_map[i][PLIC_M_CONTEXT] < 0 &&
plic->context_map[i][PLIC_S_CONTEXT] < 0) plic->context_map[i][PLIC_S_CONTEXT] < 0)
continue; continue;

View File

@@ -12,7 +12,6 @@
#include <sbi/sbi_ecall_interface.h> #include <sbi/sbi_ecall_interface.h>
#include <sbi/sbi_error.h> #include <sbi/sbi_error.h>
#include <sbi/sbi_hart.h> #include <sbi/sbi_hart.h>
#include <sbi/sbi_platform.h>
#include <sbi/sbi_system.h> #include <sbi/sbi_system.h>
#include <sbi_utils/fdt/fdt_driver.h> #include <sbi_utils/fdt/fdt_driver.h>
#include <sbi_utils/fdt/fdt_helper.h> #include <sbi_utils/fdt/fdt_helper.h>
@@ -59,9 +58,7 @@ static int ae350_system_reset_check(u32 type, u32 reason)
static void ae350_system_reset(u32 type, u32 reason) static void ae350_system_reset(u32 type, u32 reason)
{ {
const struct sbi_platform *plat = sbi_platform_thishart_ptr(); sbi_for_each_hartindex(i)
for (int i = 0; i < sbi_platform_hart_count(plat); i++)
if (smu_set_reset_vector(&smu, FLASH_BASE, i)) if (smu_set_reset_vector(&smu, FLASH_BASE, i))
goto fail; goto fail;

View File

@@ -367,7 +367,7 @@ static u32 generic_tlb_num_entries(void)
{ {
if (generic_plat && generic_plat->tlb_num_entries) if (generic_plat && generic_plat->tlb_num_entries)
return generic_plat->tlb_num_entries(generic_plat_match); 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) static int generic_pmu_init(void)