|
47 | 47 | #define HISI_PCIE_EVENT_M GENMASK_ULL(15, 0)
|
48 | 48 | #define HISI_PCIE_THR_MODE_M GENMASK_ULL(27, 27)
|
49 | 49 | #define HISI_PCIE_THR_M GENMASK_ULL(31, 28)
|
| 50 | +#define HISI_PCIE_LEN_M GENMASK_ULL(35, 34) |
50 | 51 | #define HISI_PCIE_TARGET_M GENMASK_ULL(52, 36)
|
51 | 52 | #define HISI_PCIE_TRIG_MODE_M GENMASK_ULL(53, 53)
|
52 | 53 | #define HISI_PCIE_TRIG_M GENMASK_ULL(59, 56)
|
53 | 54 |
|
| 55 | +/* Default config of TLP length mode, will count both TLP headers and payloads */ |
| 56 | +#define HISI_PCIE_LEN_M_DEFAULT 3ULL |
| 57 | + |
54 | 58 | #define HISI_PCIE_MAX_COUNTERS 8
|
55 | 59 | #define HISI_PCIE_REG_STEP 8
|
56 | 60 | #define HISI_PCIE_THR_MAX_VAL 10
|
@@ -91,6 +95,7 @@ HISI_PCIE_PMU_FILTER_ATTR(thr_len, config1, 3, 0);
|
91 | 95 | HISI_PCIE_PMU_FILTER_ATTR(thr_mode, config1, 4, 4);
|
92 | 96 | HISI_PCIE_PMU_FILTER_ATTR(trig_len, config1, 8, 5);
|
93 | 97 | HISI_PCIE_PMU_FILTER_ATTR(trig_mode, config1, 9, 9);
|
| 98 | +HISI_PCIE_PMU_FILTER_ATTR(len_mode, config1, 11, 10); |
94 | 99 | HISI_PCIE_PMU_FILTER_ATTR(port, config2, 15, 0);
|
95 | 100 | HISI_PCIE_PMU_FILTER_ATTR(bdf, config2, 31, 16);
|
96 | 101 |
|
@@ -215,8 +220,8 @@ static void hisi_pcie_pmu_config_filter(struct perf_event *event)
|
215 | 220 | {
|
216 | 221 | struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu);
|
217 | 222 | struct hw_perf_event *hwc = &event->hw;
|
| 223 | + u64 port, trig_len, thr_len, len_mode; |
218 | 224 | u64 reg = HISI_PCIE_INIT_SET;
|
219 |
| - u64 port, trig_len, thr_len; |
220 | 225 |
|
221 | 226 | /* Config HISI_PCIE_EVENT_CTRL according to event. */
|
222 | 227 | reg |= FIELD_PREP(HISI_PCIE_EVENT_M, hisi_pcie_get_real_event(event));
|
@@ -245,6 +250,12 @@ static void hisi_pcie_pmu_config_filter(struct perf_event *event)
|
245 | 250 | reg |= HISI_PCIE_THR_EN;
|
246 | 251 | }
|
247 | 252 |
|
| 253 | + len_mode = hisi_pcie_get_len_mode(event); |
| 254 | + if (len_mode) |
| 255 | + reg |= FIELD_PREP(HISI_PCIE_LEN_M, len_mode); |
| 256 | + else |
| 257 | + reg |= FIELD_PREP(HISI_PCIE_LEN_M, HISI_PCIE_LEN_M_DEFAULT); |
| 258 | + |
248 | 259 | hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, hwc->idx, reg);
|
249 | 260 | }
|
250 | 261 |
|
@@ -711,6 +722,7 @@ static struct attribute *hisi_pcie_pmu_format_attr[] = {
|
711 | 722 | HISI_PCIE_PMU_FORMAT_ATTR(thr_mode, "config1:4"),
|
712 | 723 | HISI_PCIE_PMU_FORMAT_ATTR(trig_len, "config1:5-8"),
|
713 | 724 | HISI_PCIE_PMU_FORMAT_ATTR(trig_mode, "config1:9"),
|
| 725 | + HISI_PCIE_PMU_FORMAT_ATTR(len_mode, "config1:10-11"), |
714 | 726 | HISI_PCIE_PMU_FORMAT_ATTR(port, "config2:0-15"),
|
715 | 727 | HISI_PCIE_PMU_FORMAT_ATTR(bdf, "config2:16-31"),
|
716 | 728 | NULL
|
|
0 commit comments