mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00
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:

committed by
Anup Patel

parent
757f7acafd
commit
949c83a799
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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())
|
||||||
|
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user