diff options
author | Max Krummenacher <max.krummenacher@toradex.com> | 2024-02-20 17:30:06 +0100 |
---|---|---|
committer | Max Krummenacher <max.krummenacher@toradex.com> | 2024-02-20 17:30:25 +0100 |
commit | 5a86ca588b3f989d3d0a4841446b699aae8beec4 (patch) | |
tree | 02932ce91902ff067d2cec9c1263f7cefaa1538c | |
parent | 56ad67babb7fbc461007632243e216a1c814d210 (diff) |
Revert "perf/imx_ddr: don't enable counter0 if none of 4 counters are used"
This reverts commit c7802ff51adce9ae2e8392b926943342549de38c.
Downstream NXP and stable have deviated to far, do not pull this in.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
-rw-r--r-- | drivers/perf/fsl_imx8_ddr_perf.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/drivers/perf/fsl_imx8_ddr_perf.c b/drivers/perf/fsl_imx8_ddr_perf.c index 4daa782c48df..b1b2a55de77f 100644 --- a/drivers/perf/fsl_imx8_ddr_perf.c +++ b/drivers/perf/fsl_imx8_ddr_perf.c @@ -102,7 +102,6 @@ struct ddr_pmu { const struct fsl_ddr_devtype_data *devtype_data; int irq; int id; - int active_counter; }; static ssize_t ddr_perf_identifier_show(struct device *dev, @@ -497,10 +496,6 @@ static void ddr_perf_event_start(struct perf_event *event, int flags) ddr_perf_counter_enable(pmu, event->attr.config, counter, true); - if (!pmu->active_counter++) - ddr_perf_counter_enable(pmu, EVENT_CYCLES_ID, - EVENT_CYCLES_COUNTER, true); - hwc->state = 0; } @@ -555,10 +550,6 @@ static void ddr_perf_event_stop(struct perf_event *event, int flags) ddr_perf_counter_enable(pmu, event->attr.config, counter, false); ddr_perf_event_update(event); - if (!--pmu->active_counter) - ddr_perf_counter_enable(pmu, EVENT_CYCLES_ID, - EVENT_CYCLES_COUNTER, false); - hwc->state |= PERF_HES_STOPPED; } @@ -577,10 +568,25 @@ static void ddr_perf_event_del(struct perf_event *event, int flags) static void ddr_perf_pmu_enable(struct pmu *pmu) { + struct ddr_pmu *ddr_pmu = to_ddr_pmu(pmu); + + /* enable cycle counter if cycle is not active event list */ + if (ddr_pmu->events[EVENT_CYCLES_COUNTER] == NULL) + ddr_perf_counter_enable(ddr_pmu, + EVENT_CYCLES_ID, + EVENT_CYCLES_COUNTER, + true); } static void ddr_perf_pmu_disable(struct pmu *pmu) { + struct ddr_pmu *ddr_pmu = to_ddr_pmu(pmu); + + if (ddr_pmu->events[EVENT_CYCLES_COUNTER] == NULL) + ddr_perf_counter_enable(ddr_pmu, + EVENT_CYCLES_ID, + EVENT_CYCLES_COUNTER, + false); } static int ddr_perf_init(struct ddr_pmu *pmu, void __iomem *base, |