mirror of
https://github.com/Fishwaldo/opensbi.git
synced 2025-03-15 19:31:32 +00:00
sbi: sbi_pmu: Improve sbi_pmu_init() error handling
This patch makes the following changes: - As sbi_platform_pmu_init() returns a negative error code on failure, let sbi_pmu_init() print out the error code with sbi_dprintf(). - In order to distinguish the SBI_EFAIL error returned by sbi_pmu_add_*_counter_map(), return SBI_ENOENT to indicate that fdt_pmu_setup() failed to locate "riscv,pmu" node, and generic_pmu_init() ignores such case. Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Reviewed-by: Atish Patra <atishp@rivosinc.com>
This commit is contained in:
parent
bd74931d79
commit
291403f6f2
3 changed files with 13 additions and 3 deletions
|
@ -957,6 +957,7 @@ int sbi_pmu_init(struct sbi_scratch *scratch, bool cold_boot)
|
|||
int hpm_count = sbi_fls(sbi_hart_mhpm_mask(scratch));
|
||||
struct sbi_pmu_hart_state *phs;
|
||||
const struct sbi_platform *plat;
|
||||
int rc;
|
||||
|
||||
if (cold_boot) {
|
||||
hw_event_map = sbi_calloc(sizeof(*hw_event_map),
|
||||
|
@ -972,7 +973,10 @@ int sbi_pmu_init(struct sbi_scratch *scratch, bool cold_boot)
|
|||
|
||||
plat = sbi_platform_ptr(scratch);
|
||||
/* Initialize hw pmu events */
|
||||
sbi_platform_pmu_init(plat);
|
||||
rc = sbi_platform_pmu_init(plat);
|
||||
if (rc)
|
||||
sbi_dprintf("%s: platform pmu init failed "
|
||||
"(error %d)\n", __func__, rc);
|
||||
|
||||
/* mcycle & minstret is available always */
|
||||
if (!hpm_count)
|
||||
|
|
|
@ -74,7 +74,7 @@ int fdt_pmu_setup(void *fdt)
|
|||
|
||||
pmu_offset = fdt_node_offset_by_compatible(fdt, -1, "riscv,pmu");
|
||||
if (pmu_offset < 0)
|
||||
return SBI_EFAIL;
|
||||
return SBI_ENOENT;
|
||||
|
||||
event_ctr_map = fdt_getprop(fdt, pmu_offset,
|
||||
"riscv,event-to-mhpmcounters", &len);
|
||||
|
|
|
@ -265,7 +265,13 @@ static u32 generic_tlb_num_entries(void)
|
|||
|
||||
static int generic_pmu_init(void)
|
||||
{
|
||||
return fdt_pmu_setup(fdt_get_address());
|
||||
int rc;
|
||||
|
||||
rc = fdt_pmu_setup(fdt_get_address());
|
||||
if (rc && rc != SBI_ENOENT)
|
||||
return rc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint64_t generic_pmu_xlate_to_mhpmevent(uint32_t event_idx,
|
||||
|
|
Loading…
Add table
Reference in a new issue