diff --git a/include/sbi_utils/fdt/fdt_pmu.h b/include/sbi_utils/fdt/fdt_pmu.h index c65cad78..b10ae270 100644 --- a/include/sbi_utils/fdt/fdt_pmu.h +++ b/include/sbi_utils/fdt/fdt_pmu.h @@ -13,6 +13,23 @@ #include +struct fdt_pmu_hw_event_select_map { + uint32_t eidx; + uint64_t select; +}; + +struct fdt_pmu_hw_event_counter_map { + uint32_t eidx_start; + uint32_t eidx_end; + uint32_t ctr_map; +}; + +struct fdt_pmu_raw_event_counter_map { + uint64_t select; + uint64_t select_mask; + uint32_t ctr_map; +}; + #ifdef CONFIG_FDT_PMU /** @@ -26,7 +43,7 @@ * * @param fdt device tree blob */ -void fdt_pmu_fixup(void *fdt); +int fdt_pmu_fixup(void *fdt); /** * Setup PMU data from device tree @@ -45,6 +62,11 @@ int fdt_pmu_setup(void *fdt); */ uint64_t fdt_pmu_get_select_value(uint32_t event_idx); +/** The event index to selector value table instance */ +extern struct fdt_pmu_hw_event_select_map fdt_pmu_evt_select[]; +/** The number of valid entries in fdt_pmu_evt_select[] */ +extern uint32_t hw_event_count; + #else static inline void fdt_pmu_fixup(void *fdt) { } diff --git a/lib/utils/fdt/fdt_pmu.c b/lib/utils/fdt/fdt_pmu.c index a8d76482..684981eb 100644 --- a/lib/utils/fdt/fdt_pmu.c +++ b/lib/utils/fdt/fdt_pmu.c @@ -14,21 +14,17 @@ #include #include #include +#include #define FDT_PMU_HW_EVENT_MAX (SBI_PMU_HW_EVENT_MAX * 2) -struct fdt_pmu_hw_event_select { - uint32_t eidx; - uint64_t select; -}; - -static struct fdt_pmu_hw_event_select fdt_pmu_evt_select[FDT_PMU_HW_EVENT_MAX] = {0}; -static uint32_t hw_event_count; +struct fdt_pmu_hw_event_select_map fdt_pmu_evt_select[FDT_PMU_HW_EVENT_MAX] = {0}; +uint32_t hw_event_count; uint64_t fdt_pmu_get_select_value(uint32_t event_idx) { int i; - struct fdt_pmu_hw_event_select *event; + struct fdt_pmu_hw_event_select_map *event; for (i = 0; i < SBI_PMU_HW_EVENT_MAX; i++) { event = &fdt_pmu_evt_select[i]; @@ -65,7 +61,7 @@ int fdt_pmu_setup(void *fdt) int i, pmu_offset, len, result; const u32 *event_val; const u32 *event_ctr_map; - struct fdt_pmu_hw_event_select *event; + struct fdt_pmu_hw_event_select_map *event; uint64_t raw_selector, select_mask; u32 event_idx_start, event_idx_end, ctr_map;