All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yu-Chien Peter Lin <peterlin@andestech.com>
To: opensbi@lists.infradead.org
Subject: [PATCH v4 14/15] platform: andes: Add Andes default PMU mapping support
Date: Mon, 18 Dec 2023 15:32:52 +0800	[thread overview]
Message-ID: <ZX_1pFkVE0DKgdh1@APC323> (raw)
In-Reply-To: <CAOnJCU+Hi-3i8GYAiqSZmAFtnwH5CPDbDWg58wpEkYtJtg3Djg@mail.gmail.com>

On Tue, Dec 05, 2023 at 05:53:19PM -0800, Atish Patra wrote:
> On Thu, Nov 30, 2023 at 4:44?AM Yu Chien Peter Lin
> <peterlin@andestech.com> wrote:
> >
> > Provide the andes_pmu_setup() to populate default mappings in
> > hw_event_map[] and fdt_pmu_evt_select[] when fdt_pmu_setup()
> > cannot find the PMU node.
> >
> > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> > Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > ---
> > Changes v2 -> v3:
> >   - New patch
> >   - Drop fdt_add_pmu_mappings() (suggested by Anup [1])
> > Changes v3 -> v4:
> >   - Include TB tag from Prabhakar
> >   - Staticize andes_pmu_setup() when CONFIG_PLATFORM_ANDES_AE350 is not set
> >
> > [1] https://patchwork.ozlabs.org/project/opensbi/patch/20231019113713.3508153-11-peterlin at andestech.com/
> > ---
> >  include/sbi/sbi_ecall_interface.h          |   5 +
> >  platform/generic/Kconfig                   |   2 +
> >  platform/generic/andes/Kconfig             |   7 +
> >  platform/generic/andes/andes_hpm.c         | 405 +++++++++++++++++++++
> >  platform/generic/andes/objects.mk          |   1 +
> >  platform/generic/include/andes/andes_hpm.h |  69 ++++
> >  6 files changed, 489 insertions(+)
> >  create mode 100644 platform/generic/andes/andes_hpm.c
> >
> > diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h
> > index 1fe469e..89187e7 100644
> > --- a/include/sbi/sbi_ecall_interface.h
> > +++ b/include/sbi/sbi_ecall_interface.h
> > @@ -155,6 +155,11 @@ enum sbi_pmu_hw_cache_op_result_id {
> >         SBI_PMU_HW_CACHE_RESULT_MAX,
> >  };
> >
> > +#define SBI_PMU_HW_CACHE_EVENT_IDX(id, op, res) \
> > +       (SBI_PMU_EVENT_TYPE_HW_CACHE << SBI_PMU_EVENT_IDX_TYPE_OFFSET | \
> > +       SBI_PMU_HW_CACHE_##id << 3 | SBI_PMU_HW_CACHE_OP_##op << 1 | \
> > +       SBI_PMU_HW_CACHE_RESULT_##res)
> > +
> >  /**
> >   * Special "firmware" events provided by the OpenSBI, even if the hardware
> >   * does not support performance events. These events are encoded as a raw
> > diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
> > index c9b6011..e652645 100644
> > --- a/platform/generic/Kconfig
> > +++ b/platform/generic/Kconfig
> > @@ -32,6 +32,7 @@ config PLATFORM_ALLWINNER_D1
> >  config PLATFORM_ANDES_AE350
> >         bool "Andes AE350 support"
> >         select SYS_ATCSMU
> > +       select ANDES_HPM
> >         select ANDES_PMU
> >         default n
> >
> > @@ -39,6 +40,7 @@ config PLATFORM_RENESAS_RZFIVE
> >         bool "Renesas RZ/Five support"
> >         select ANDES45_PMA
> >         select ANDES_SBI
> > +       select ANDES_HPM
> >         select ANDES_PMU
> >         default n
> >
> > diff --git a/platform/generic/andes/Kconfig b/platform/generic/andes/Kconfig
> > index 3665b33..eb697a6 100644
> > --- a/platform/generic/andes/Kconfig
> > +++ b/platform/generic/andes/Kconfig
> > @@ -8,6 +8,13 @@ config ANDES_SBI
> >         bool "Andes SBI support"
> >         default n
> >
> > +config ANDES_HPM
> > +       bool "Andes HPM support"
> > +       default n
> > +       help
> > +         This provides default HPM event counter mappings
> > +         when a pmu node is missing.
> > +
> >  config ANDES_PMU
> >         bool "Andes PMU extension (XAndesPMU) support"
> >         default n
> > diff --git a/platform/generic/andes/andes_hpm.c b/platform/generic/andes/andes_hpm.c
> > new file mode 100644
> > index 0000000..7fe5ac5
> > --- /dev/null
> > +++ b/platform/generic/andes/andes_hpm.c
> > @@ -0,0 +1,405 @@
> > +// SPDX-License-Identifier: BSD-2-Clause
> > +/*
> > + * andes_hpm.c - Default event mappings and helper routine
> > + *
> > + * Copyright (c) 2023 Andes Technology Corporation
> > + */
> > +
> > +#include <andes/andes45.h>
> > +#include <andes/andes_hpm.h>
> > +#include <sbi/sbi_ecall_interface.h>
> > +#include <sbi/sbi_pmu.h>
> > +#include <sbi_utils/fdt/fdt_pmu.h>
> > +
> > +static const struct fdt_pmu_hw_event_select_map andes45_hw_evt_selects[] = {
> > +       /* Hardware general events (Type #0) */
> > +       {
> > +               /* perf: cycles (eidx: 0x1) */
> > +               .eidx = SBI_PMU_HW_CPU_CYCLES,
> > +               .select = ANDES_CYCLES
> > +       },
> > +       {
> > +               /* perf: instructions (eidx: 0x2) */
> > +               .eidx = SBI_PMU_HW_INSTRUCTIONS,
> > +               .select = ANDES_INSTRET
> > +       },
> > +       {
> > +               /* perf: cache-references (eidx: 0x3) */
> > +               .eidx = SBI_PMU_HW_CACHE_REFERENCES,
> > +               .select = ANDES_DCACHE_ACCESS
> > +       },
> > +       {
> > +               /* perf: cache-misses (eidx: 0x4) */
> > +               .eidx = SBI_PMU_HW_CACHE_MISSES,
> > +               .select = ANDES_DCACHE_MISS
> > +       },
> > +       {
> > +               /* perf: branches (eidx: 0x5) */
> > +               .eidx = SBI_PMU_HW_BRANCH_INSTRUCTIONS,
> > +               .select = ANDES_CONDITION_BR,
> > +       },
> > +       {
> > +               /* perf: branch-misses (eidx: 0x6) */
> > +               .eidx = SBI_PMU_HW_BRANCH_MISSES,
> > +               .select = ANDES_MISPREDICT_CONDITION_BR,
> > +       },
> > +       /* Hardware cache events (Type #1) */
> > +       {
> > +               /* perf: L1-dcache-loads (eidx: 0x10000) */
> > +               .eidx = SBI_PMU_HW_CACHE_EVENT_IDX(L1D, READ, ACCESS),
> > +               .select = ANDES_DCACHE_LOAD_ACCESS
> > +       },
> > +       {
> > +               /* perf: L1-dcache-loads-misses (eidx: 0x10001) */
> > +               .eidx = SBI_PMU_HW_CACHE_EVENT_IDX(L1D, READ, MISS),
> > +               .select = ANDES_DCACHE_LOAD_MISS
> > +       },
> > +       {
> > +               /* perf: L1-dcache-stores (eidx: 0x10002) */
> > +               .eidx = SBI_PMU_HW_CACHE_EVENT_IDX(L1D, WRITE, ACCESS),
> > +               .select = ANDES_DCACHE_STORE_ACCESS
> > +       },
> > +       {
> > +               /* perf: L1-dcache-store-misses (eidx: 0x10003) */
> > +               .eidx = SBI_PMU_HW_CACHE_EVENT_IDX(L1D, WRITE, MISS),
> > +               .select = ANDES_DCACHE_STORE_MISS
> > +       },
> > +       {
> > +               /* perf: L1-icache-load (eidx: 0x10008) */
> > +               .eidx = SBI_PMU_HW_CACHE_EVENT_IDX(L1I, READ, ACCESS),
> > +               .select = ANDES_ICACHE_ACCESS
> > +       },
> > +       {
> > +               /* perf: L1-icache-load-misses (eidx: 0x10009) */
> > +               .eidx = SBI_PMU_HW_CACHE_EVENT_IDX(L1I, READ, MISS),
> > +               .select = ANDES_ICACHE_MISS
> > +       },
> > +};
> > +
> 
> Is there a specific reason why the platform code populates instead of
> a PMU DT node added by whoever generates the DT (not at boot time in
> OpenSBI in your earlier version versions)?

Hi Atish,

Either way works for me. I intended to provide a default mapping when
the PMU node is missing. If adding a PMU node is encouraged, I'm OK
to drop PATCH14 and revert PATCH12.

Hi Prabhakar,

Any thought on this?

Thanks.
Peter Lin

> 
> > +static const struct fdt_pmu_hw_event_counter_map andes45_hw_evt_counters[] = {
> > +       {
> > +               /* perf: cycles (eidx: 0x1) */
> > +               .eidx_start = SBI_PMU_HW_CPU_CYCLES,
> > +               /* perf: branch-misses (eidx: 0x6) */
> > +               .eidx_end = SBI_PMU_HW_BRANCH_MISSES,
> > +               .ctr_map  = ANDES_MHPM_MAP,
> > +       },
> > +       {
> > +               /* perf: L1-dcache-loads (eidx: 0x10000) */
> > +               .eidx_start = SBI_PMU_HW_CACHE_EVENT_IDX(L1D, READ, ACCESS),
> > +               /* perf: L1-dcache-store-misses (eidx: 0x10003) */
> > +               .eidx_end = SBI_PMU_HW_CACHE_EVENT_IDX(L1D, WRITE, MISS),
> > +               .ctr_map  = ANDES_MHPM_MAP,
> > +       },
> > +       {
> > +               /* perf: L1-icache-load (eidx: 0x10008) */
> > +               .eidx_start = SBI_PMU_HW_CACHE_EVENT_IDX(L1I, READ, ACCESS),
> > +               /* perf: L1-icache-load-misses (eidx: 0x10009) */
> > +               .eidx_end = SBI_PMU_HW_CACHE_EVENT_IDX(L1I, READ, MISS),
> > +               .ctr_map  = ANDES_MHPM_MAP,
> > +       },
> > +};
> > +
> > +static const struct fdt_pmu_raw_event_counter_map andes45_raw_evt_counters[] = {
> > +       {
> > +               .select = ANDES_CYCLES,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INSTRET,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INT_LOAD_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INT_STORE_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_ATOMIC_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_SYS_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INT_COMPUTE_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CONDITION_BR,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_TAKEN_CONDITION_BR,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_JAL_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_JALR_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_RET_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CONTROL_TRANS_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_EX9_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INT_MUL_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INT_DIV_REMAINDER_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_FLOAT_LOAD_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_FLOAT_STORE_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_FLOAT_ADD_SUB_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_FLOAT_MUL_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_FLOAT_FUSED_MULADD_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_FLOAT_DIV_SQUARE_ROOT_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_OTHER_FLOAT_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_INT_MUL_AND_SUB_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_RETIRED_OP,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_ILM_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DLM_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_ICACHE_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_ICACHE_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_LOAD_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_LOAD_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_STORE_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_STORE_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_DCACHE_WB,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CYCLE_WAIT_ICACHE_FILL,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CYCLE_WAIT_DCACHE_FILL,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_UNCACHED_IFETCH_FROM_BUS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_UNCACHED_LOAD_FROM_BUS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CYCLE_WAIT_UNCACHED_IFETCH,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CYCLE_WAIT_UNCACHED_LOAD,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MAIN_ITLB_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MAIN_ITLB_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MAIN_DTLB_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MAIN_DTLB_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_CYCLE_WAIT_ITLB_FILL,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_PIPE_STALL_CYCLE_DTLB_MISS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_HW_PREFETCH_BUS_ACCESS,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MISPREDICT_CONDITION_BR,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MISPREDICT_TAKE_CONDITION_BR,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +       {
> > +               .select = ANDES_MISPREDICT_TARGET_RET_INST,
> > +               .select_mask = ANDES_RAW_EVENT_MASK,
> > +               .ctr_map = ANDES_MHPM_MAP
> > +       },
> > +};
> > +
> > +int andes_pmu_setup(void)
> > +{
> > +       int i, rc;
> > +       struct fdt_pmu_hw_event_select_map *event;
> > +
> > +       /*
> > +        * At the moment, simply create mapping for any 45-series core
> > +        * based on marchid, we may check and differentiate the mapping
> > +        * by mimpid.
> > +        */
> > +       if (!is_andes(45))
> 
> nit: A macro would be nice here.
> 
> > +               return 0;
> > +
> > +       for (i = 0; i < array_size(andes45_hw_evt_counters); i++) {
> > +               rc = sbi_pmu_add_hw_event_counter_map(
> > +                       andes45_hw_evt_counters[i].eidx_start,
> > +                       andes45_hw_evt_counters[i].eidx_end,
> > +                       andes45_hw_evt_counters[i].ctr_map);
> > +               if (rc)
> > +                       return rc;
> > +       }
> > +
> > +       for (i = 0; i < array_size(andes45_hw_evt_selects); i++) {
> > +               event         = &fdt_pmu_evt_select[hw_event_count];
> > +               event->eidx   = andes45_hw_evt_selects[i].eidx;
> > +               event->select = andes45_hw_evt_selects[i].select;
> > +               hw_event_count++;
> > +       }
> > +
> > +       for (i = 0; i < array_size(andes45_raw_evt_counters); i++) {
> > +               rc = sbi_pmu_add_raw_event_counter_map(
> > +                       andes45_raw_evt_counters[i].select,
> > +                       andes45_raw_evt_counters[i].select_mask,
> > +                       andes45_raw_evt_counters[i].ctr_map);
> > +               if (rc)
> > +                       return rc;
> > +       }
> > +
> > +       return 0;
> > +}
> > diff --git a/platform/generic/andes/objects.mk b/platform/generic/andes/objects.mk
> > index 6a8c66c..57caaf6 100644
> > --- a/platform/generic/andes/objects.mk
> > +++ b/platform/generic/andes/objects.mk
> > @@ -8,3 +8,4 @@ platform-objs-$(CONFIG_PLATFORM_ANDES_AE350) += andes/ae350.o andes/sleep.o
> >  platform-objs-$(CONFIG_ANDES45_PMA) += andes/andes45-pma.o
> >  platform-objs-$(CONFIG_ANDES_SBI) += andes/andes_sbi.o
> >  platform-objs-$(CONFIG_ANDES_PMU) += andes/andes_pmu.o
> > +platform-objs-$(CONFIG_ANDES_HPM) += andes/andes_hpm.o
> > diff --git a/platform/generic/include/andes/andes_hpm.h b/platform/generic/include/andes/andes_hpm.h
> > index b4d71b9..0ae391f 100644
> > --- a/platform/generic/include/andes/andes_hpm.h
> > +++ b/platform/generic/include/andes/andes_hpm.h
> > @@ -7,6 +7,75 @@
> >  #ifndef _ANDES_HPM_H_
> >  #define _ANDES_HPM_H_
> >
> > +#define ANDES_MHPM_MAP         0x78
> > +#define ANDES_RAW_EVENT_MASK   ~0ULL
> > +
> > +/* Event selector for instruction commit events */
> > +#define ANDES_CYCLES                           0x10
> > +#define ANDES_INSTRET                          0x20
> > +#define ANDES_INT_LOAD_INST                    0x30
> > +#define ANDES_INT_STORE_INST                   0x40
> > +#define ANDES_ATOMIC_INST                      0x50
> > +#define ANDES_SYS_INST                         0x60
> > +#define ANDES_INT_COMPUTE_INST                 0x70
> > +#define ANDES_CONDITION_BR                     0x80
> > +#define ANDES_TAKEN_CONDITION_BR               0x90
> > +#define ANDES_JAL_INST                         0xA0
> > +#define ANDES_JALR_INST                                0xB0
> > +#define ANDES_RET_INST                         0xC0
> > +#define ANDES_CONTROL_TRANS_INST               0xD0
> > +#define ANDES_EX9_INST                         0xE0
> > +#define ANDES_INT_MUL_INST                     0xF0
> > +#define ANDES_INT_DIV_REMAINDER_INST           0x100
> > +#define ANDES_FLOAT_LOAD_INST                  0x110
> > +#define ANDES_FLOAT_STORE_INST                 0x120
> > +#define ANDES_FLOAT_ADD_SUB_INST               0x130
> > +#define ANDES_FLOAT_MUL_INST                   0x140
> > +#define ANDES_FLOAT_FUSED_MULADD_INST          0x150
> > +#define ANDES_FLOAT_DIV_SQUARE_ROOT_INST       0x160
> > +#define ANDES_OTHER_FLOAT_INST                 0x170
> > +#define ANDES_INT_MUL_AND_SUB_INST             0x180
> > +#define ANDES_RETIRED_OP                       0x190
> > +
> > +/* Event selector for memory system events */
> > +#define ANDES_ILM_ACCESS                       0x01
> > +#define ANDES_DLM_ACCESS                       0x11
> > +#define ANDES_ICACHE_ACCESS                    0x21
> > +#define ANDES_ICACHE_MISS                      0x31
> > +#define ANDES_DCACHE_ACCESS                    0x41
> > +#define ANDES_DCACHE_MISS                      0x51
> > +#define ANDES_DCACHE_LOAD_ACCESS               0x61
> > +#define ANDES_DCACHE_LOAD_MISS                 0x71
> > +#define ANDES_DCACHE_STORE_ACCESS              0x81
> > +#define ANDES_DCACHE_STORE_MISS                        0x91
> > +#define ANDES_DCACHE_WB                                0xA1
> > +#define ANDES_CYCLE_WAIT_ICACHE_FILL           0xB1
> > +#define ANDES_CYCLE_WAIT_DCACHE_FILL           0xC1
> > +#define ANDES_UNCACHED_IFETCH_FROM_BUS         0xD1
> > +#define ANDES_UNCACHED_LOAD_FROM_BUS           0xE1
> > +#define ANDES_CYCLE_WAIT_UNCACHED_IFETCH       0xF1
> > +#define ANDES_CYCLE_WAIT_UNCACHED_LOAD         0x101
> > +#define ANDES_MAIN_ITLB_ACCESS                 0x111
> > +#define ANDES_MAIN_ITLB_MISS                   0x121
> > +#define ANDES_MAIN_DTLB_ACCESS                 0x131
> > +#define ANDES_MAIN_DTLB_MISS                   0x141
> > +#define ANDES_CYCLE_WAIT_ITLB_FILL             0x151
> > +#define ANDES_PIPE_STALL_CYCLE_DTLB_MISS       0x161
> > +#define ANDES_HW_PREFETCH_BUS_ACCESS           0x171
> > +
> > +/* Event selector for microarchitecture events */
> > +#define ANDES_MISPREDICT_CONDITION_BR          0x02
> > +#define ANDES_MISPREDICT_TAKE_CONDITION_BR     0x12
> > +#define ANDES_MISPREDICT_TARGET_RET_INST       0x22
> > +
> > +#ifdef CONFIG_ANDES_HPM
> > +
> > +int andes_pmu_setup(void);
> > +
> > +#else
> > +
> >  static inline int andes_pmu_setup(void) { return 0; }
> >
> > +#endif /* CONFIG_ANDES_HPM */
> > +
> >  #endif /* _ANDES_HPM_H_ */
> > --
> > 2.34.1
> >
> 
> 
> -- 
> Regards,
> Atish


  reply	other threads:[~2023-12-18  7:32 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-30 12:41 [PATCH v4 00/15] Add Andes PMU extension support Yu Chien Peter Lin
2023-11-30 12:41 ` [PATCH v4 01/15] lib: ipi: Adjust Andes PLICSW to single-bit-per-hart scheme Yu Chien Peter Lin
2023-12-06 12:03   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 02/15] sbi: sbi_pmu: Improve sbi_pmu_init() error handling Yu Chien Peter Lin
2023-12-06  1:55   ` Atish Patra
2023-11-30 12:42 ` [PATCH v4 03/15] lib: sbi: Add XAndesPMU in hart extensions Yu Chien Peter Lin
2023-12-06 12:04   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 04/15] sbi: sbi_pmu: Add hw_counter_filter_mode() to pmu device Yu Chien Peter Lin
2023-12-04  9:02   ` Atish Patra
2023-12-06 12:05   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 05/15] platform: include: andes45: Add PMU related CSR defines Yu Chien Peter Lin
2023-11-30 12:42 ` [PATCH v4 06/15] platform: generic: Introduce pmu_init() platform override Yu Chien Peter Lin
2023-12-06 12:19   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 07/15] platform: andes: Add Andes custom PMU support Yu Chien Peter Lin
2023-12-06 12:24   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 08/15] platform: andes: Enable Andes PMU for AE350 Yu Chien Peter Lin
2023-12-06 12:26   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 09/15] platform: rzfive: Enable Andes PMU for RZ/Five Yu Chien Peter Lin
2023-12-06 12:28   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 10/15] lib: utils: fdt_fixup: Allow preserving PMU properties Yu Chien Peter Lin
2023-12-04  9:05   ` Atish Patra
2023-12-06 12:31   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 11/15] platform: andes: Factor out is_andes() helper Yu Chien Peter Lin
2023-11-30 12:42 ` [PATCH v4 12/15] lib: utils: fdt_pmu: Make the fdt_pmu_evt_select table global variable Yu Chien Peter Lin
2023-12-06  1:54   ` Atish Patra
2023-12-06 12:49   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 13/15] lib: utils: fdt_pmu: Do not iterate over the fdt_pmu_evt_select table Yu Chien Peter Lin
2023-12-04  9:09   ` Atish Patra
2023-12-06 12:50   ` Anup Patel
2023-11-30 12:42 ` [PATCH v4 14/15] platform: andes: Add Andes default PMU mapping support Yu Chien Peter Lin
2023-12-06  1:53   ` Atish Patra
2023-12-18  7:32     ` Yu-Chien Peter Lin [this message]
2023-11-30 12:42 ` [PATCH v4 15/15] docs: pmu: Add Andes PMU node example Yu Chien Peter Lin
2023-12-06 14:23 ` [PATCH v4 00/15] Add Andes PMU extension support Anup Patel
2023-12-18  5:45   ` Anup Patel
2023-12-18  7:16     ` Yu-Chien Peter Lin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZX_1pFkVE0DKgdh1@APC323 \
    --to=peterlin@andestech.com \
    --cc=opensbi@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.