blob: 4e5bae45ea63627c690735878a0868264c628f49 [file] [log] [blame]
Patrick Williams2194f502022-10-16 14:26:09 -05001From 806c281f4307dd321fe8a38ce557e8c983c3ce84 Mon Sep 17 00:00:00 2001
Brad Bishopbec4ebc2022-08-03 09:55:16 -04002From: Robin Murphy <robin.murphy@arm.com>
3Date: Fri, 3 Dec 2021 11:45:02 +0000
Patrick Williams2194f502022-10-16 14:26:09 -05004Subject: [PATCH 26/40] perf/arm-cmn: Add CI-700 Support
Brad Bishopbec4ebc2022-08-03 09:55:16 -04005
6Add the identifiers and events for the CI-700 coherent interconnect.
7
8Signed-off-by: Robin Murphy <robin.murphy@arm.com>
9Link: https://lore.kernel.org/r/28f566ab23a83733c6c9ef9414c010b760b4549c.1638530442.git.robin.murphy@arm.com
10Signed-off-by: Will Deacon <will@kernel.org>
11
12Upstream-Status: Backport [https://lore.kernel.org/r/28f566ab23a83733c6c9ef9414c010b760b4549c.1638530442.git.robin.murphy@arm.com]
13Signed-off-by: Rupinderjit Singh <rupinderjit.singh@arm.com>
14---
15 drivers/perf/arm-cmn.c | 57 +++++++++++++++++++++++++++++++++++++++---
16 1 file changed, 53 insertions(+), 4 deletions(-)
17
18diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c
Patrick Williams2194f502022-10-16 14:26:09 -050019index 0a3f33a83c01..28ab87a6cde4 100644
Brad Bishopbec4ebc2022-08-03 09:55:16 -040020--- a/drivers/perf/arm-cmn.c
21+++ b/drivers/perf/arm-cmn.c
22@@ -175,6 +175,7 @@
23 enum cmn_model {
24 CMN_ANY = -1,
25 CMN600 = 1,
26+ CI700 = 2,
27 };
28
29 /* CMN-600 r0px shouldn't exist in silicon, thankfully */
30@@ -186,6 +187,9 @@ enum cmn_revision {
31 CMN600_R2P0,
32 CMN600_R3P0,
33 CMN600_R3P1,
34+ CI700_R0P0 = 0,
35+ CI700_R1P0,
36+ CI700_R2P0,
37 };
38
39 enum cmn_node_type {
40@@ -401,8 +405,10 @@ struct arm_cmn_format_attr {
41 static bool arm_cmn_is_occup_event(enum cmn_model model,
42 enum cmn_node_type type, unsigned int id)
43 {
44- return (type == CMN_TYPE_DVM && id == 0x05) ||
45- (type == CMN_TYPE_HNF && id == 0x0f);
46+ if (type == CMN_TYPE_DVM)
47+ return (model == CMN600 && id == 0x05) ||
48+ (model == CI700 && id == 0x0c);
49+ return type == CMN_TYPE_HNF && id == 0x0f;
50 }
51
52 static ssize_t arm_cmn_event_show(struct device *dev,
53@@ -497,14 +503,19 @@ static umode_t arm_cmn_event_attr_is_visible(struct kobject *kobj,
54 __CMN_EVENT_XP(n_##_name, (_event) | (2 << 2)), \
55 __CMN_EVENT_XP(s_##_name, (_event) | (3 << 2)), \
56 __CMN_EVENT_XP(p0_##_name, (_event) | (4 << 2)), \
57- __CMN_EVENT_XP(p1_##_name, (_event) | (5 << 2))
58+ __CMN_EVENT_XP(p1_##_name, (_event) | (5 << 2)), \
59+ __CMN_EVENT_XP(p2_##_name, (_event) | (6 << 2)), \
60+ __CMN_EVENT_XP(p3_##_name, (_event) | (7 << 2))
61
62 /* Good thing there are only 3 fundamental XP events... */
63 #define CMN_EVENT_XP(_name, _event) \
64 _CMN_EVENT_XP(req_##_name, (_event) | (0 << 5)), \
65 _CMN_EVENT_XP(rsp_##_name, (_event) | (1 << 5)), \
66 _CMN_EVENT_XP(snp_##_name, (_event) | (2 << 5)), \
67- _CMN_EVENT_XP(dat_##_name, (_event) | (3 << 5))
68+ _CMN_EVENT_XP(dat_##_name, (_event) | (3 << 5)), \
69+ _CMN_EVENT_XP(pub_##_name, (_event) | (4 << 5)), \
70+ _CMN_EVENT_XP(rsp2_##_name, (_event) | (5 << 5)), \
71+ _CMN_EVENT_XP(dat2_##_name, (_event) | (6 << 5))
72
73
74 static struct attribute *arm_cmn_event_attrs[] = {
75@@ -522,6 +533,20 @@ static struct attribute *arm_cmn_event_attrs[] = {
76 _CMN_EVENT_DVM(CMN600, rxreq_trk_occupancy_all, 0x05, 0),
77 _CMN_EVENT_DVM(CMN600, rxreq_trk_occupancy_dvmop, 0x05, 1),
78 _CMN_EVENT_DVM(CMN600, rxreq_trk_occupancy_dvmsync, 0x05, 2),
79+ CMN_EVENT_DVM(CI700, dvmop_tlbi, 0x01),
80+ CMN_EVENT_DVM(CI700, dvmop_bpi, 0x02),
81+ CMN_EVENT_DVM(CI700, dvmop_pici, 0x03),
82+ CMN_EVENT_DVM(CI700, dvmop_vici, 0x04),
83+ CMN_EVENT_DVM(CI700, dvmsync, 0x05),
84+ CMN_EVENT_DVM(CI700, vmid_filtered, 0x06),
85+ CMN_EVENT_DVM(CI700, rndop_filtered, 0x07),
86+ CMN_EVENT_DVM(CI700, retry, 0x08),
87+ CMN_EVENT_DVM(CI700, txsnp_flitv, 0x09),
88+ CMN_EVENT_DVM(CI700, txsnp_stall, 0x0a),
89+ CMN_EVENT_DVM(CI700, trkfull, 0x0b),
90+ _CMN_EVENT_DVM(CI700, trk_occupancy_all, 0x0c, 0),
91+ _CMN_EVENT_DVM(CI700, trk_occupancy_dvmop, 0x0c, 1),
92+ _CMN_EVENT_DVM(CI700, trk_occupancy_dvmsync, 0x0c, 2),
93
94 CMN_EVENT_HNF(CMN_ANY, cache_miss, 0x01),
95 CMN_EVENT_HNF(CMN_ANY, slc_sf_cache_access, 0x02),
96@@ -558,6 +583,9 @@ static struct attribute *arm_cmn_event_attrs[] = {
97 CMN_EVENT_HNF(CMN_ANY, stash_snp_sent, 0x1d),
98 CMN_EVENT_HNF(CMN_ANY, stash_data_pull, 0x1e),
99 CMN_EVENT_HNF(CMN_ANY, snp_fwded, 0x1f),
100+ CMN_EVENT_HNF(CI700, atomic_fwd, 0x20),
101+ CMN_EVENT_HNF(CI700, mpam_hardlim, 0x21),
102+ CMN_EVENT_HNF(CI700, mpam_softlim, 0x22),
103
104 CMN_EVENT_HNI(rrt_rd_occ_cnt_ovfl, 0x20),
105 CMN_EVENT_HNI(rrt_wr_occ_cnt_ovfl, 0x21),
106@@ -598,6 +626,7 @@ static struct attribute *arm_cmn_event_attrs[] = {
107 CMN_EVENT_SBSX(CMN_ANY, wdb_occ_cnt_ovfl, 0x14),
108 CMN_EVENT_SBSX(CMN_ANY, rd_axi_trkr_occ_cnt_ovfl, 0x15),
109 CMN_EVENT_SBSX(CMN_ANY, cmo_axi_trkr_occ_cnt_ovfl, 0x16),
110+ CMN_EVENT_SBSX(CI700, rdb_occ_cnt_ovfl, 0x17),
111 CMN_EVENT_SBSX(CMN_ANY, arvalid_no_arready, 0x21),
112 CMN_EVENT_SBSX(CMN_ANY, awvalid_no_awready, 0x22),
113 CMN_EVENT_SBSX(CMN_ANY, wvalid_no_wready, 0x23),
114@@ -624,6 +653,25 @@ static struct attribute *arm_cmn_event_attrs[] = {
115 CMN_EVENT_RNID(CMN600, rdb_replay, 0x12),
116 CMN_EVENT_RNID(CMN600, rdb_hybrid, 0x13),
117 CMN_EVENT_RNID(CMN600, rdb_ord, 0x14),
118+ CMN_EVENT_RNID(CI700, padb_occ_ovfl, 0x11),
119+ CMN_EVENT_RNID(CI700, rpdb_occ_ovfl, 0x12),
120+ CMN_EVENT_RNID(CI700, rrt_occup_ovfl_slice1, 0x13),
121+ CMN_EVENT_RNID(CI700, rrt_occup_ovfl_slice2, 0x14),
122+ CMN_EVENT_RNID(CI700, rrt_occup_ovfl_slice3, 0x15),
123+ CMN_EVENT_RNID(CI700, wrt_throttled, 0x16),
124+
125+ CMN_EVENT_MTSX(tc_lookup, 0x01),
126+ CMN_EVENT_MTSX(tc_fill, 0x02),
127+ CMN_EVENT_MTSX(tc_miss, 0x03),
128+ CMN_EVENT_MTSX(tdb_forward, 0x04),
129+ CMN_EVENT_MTSX(tcq_hazard, 0x05),
130+ CMN_EVENT_MTSX(tcq_rd_alloc, 0x06),
131+ CMN_EVENT_MTSX(tcq_wr_alloc, 0x07),
132+ CMN_EVENT_MTSX(tcq_cmo_alloc, 0x08),
133+ CMN_EVENT_MTSX(axi_rd_req, 0x09),
134+ CMN_EVENT_MTSX(axi_wr_req, 0x0a),
135+ CMN_EVENT_MTSX(tcq_occ_cnt_ovfl, 0x0b),
136+ CMN_EVENT_MTSX(tdb_occ_cnt_ovfl, 0x0c),
137
138 NULL
139 };
140@@ -1773,6 +1821,7 @@ static int arm_cmn_remove(struct platform_device *pdev)
141 #ifdef CONFIG_OF
142 static const struct of_device_id arm_cmn_of_match[] = {
143 { .compatible = "arm,cmn-600", .data = (void *)CMN600 },
144+ { .compatible = "arm,ci-700", .data = (void *)CI700 },
145 {}
146 };
147 MODULE_DEVICE_TABLE(of, arm_cmn_of_match);
148--
Patrick Williams2194f502022-10-16 14:26:09 -05001492.34.1
Brad Bishopbec4ebc2022-08-03 09:55:16 -0400150