summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2024-02-20 17:30:06 +0100
committerMax Krummenacher <max.krummenacher@toradex.com>2024-02-20 17:30:25 +0100
commit5a86ca588b3f989d3d0a4841446b699aae8beec4 (patch)
tree02932ce91902ff067d2cec9c1263f7cefaa1538c
parent56ad67babb7fbc461007632243e216a1c814d210 (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.c24
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,