7272/* For most nodes, this is all there is */
7373#define CMN_PMU_EVENT_SEL 0x000
7474#define CMN__PMU_CBUSY_SNTHROTTLE_SEL GENMASK_ULL(44, 42)
75+ #define CMN__PMU_SN_HOME_SEL GENMASK_ULL(40, 39)
76+ #define CMN__PMU_HBT_LBT_SEL GENMASK_ULL(38, 37)
7577#define CMN__PMU_CLASS_OCCUP_ID GENMASK_ULL(36, 35)
7678/* Technically this is 4 bits wide on DNs, but we only use 2 there anyway */
7779#define CMN__PMU_OCCUP1_ID GENMASK_ULL(34, 32)
@@ -226,6 +228,7 @@ enum cmn_revision {
226228 REV_CMN700_R0P0 = 0 ,
227229 REV_CMN700_R1P0 ,
228230 REV_CMN700_R2P0 ,
231+ REV_CMN700_R3P0 ,
229232 REV_CI700_R0P0 = 0 ,
230233 REV_CI700_R1P0 ,
231234 REV_CI700_R2P0 ,
@@ -254,6 +257,9 @@ enum cmn_node_type {
254257 CMN_TYPE_CCHA ,
255258 CMN_TYPE_CCLA ,
256259 CMN_TYPE_CCLA_RNI ,
260+ CMN_TYPE_HNS = 0x200 ,
261+ CMN_TYPE_HNS_MPAM_S ,
262+ CMN_TYPE_HNS_MPAM_NS ,
257263 /* Not a real node type */
258264 CMN_TYPE_WP = 0x7770
259265};
@@ -263,6 +269,8 @@ enum cmn_filter_select {
263269 SEL_OCCUP1ID ,
264270 SEL_CLASS_OCCUP_ID ,
265271 SEL_CBUSY_SNTHROTTLE_SEL ,
272+ SEL_HBT_LBT_SEL ,
273+ SEL_SN_HOME_SEL ,
266274 SEL_MAX
267275};
268276
@@ -768,6 +776,8 @@ static umode_t arm_cmn_event_attr_is_visible(struct kobject *kobj,
768776 CMN_EVENT_ATTR(CMN_ANY, ccla_##_name, CMN_TYPE_CCLA, _event)
769777#define CMN_EVENT_CCLA_RNI (_name , _event ) \
770778 CMN_EVENT_ATTR(CMN_ANY, ccla_rni_##_name, CMN_TYPE_CCLA_RNI, _event)
779+ #define CMN_EVENT_HNS (_name , _event ) \
780+ CMN_EVENT_ATTR(CMN_ANY, hns_##_name, CMN_TYPE_HNS, _event)
771781
772782#define CMN_EVENT_DVM (_model , _name , _event ) \
773783 _CMN_EVENT_DVM(_model, _name, _event, 0, SEL_NONE)
@@ -803,6 +813,23 @@ static umode_t arm_cmn_event_attr_is_visible(struct kobject *kobj,
803813#define CMN_EVENT_HNF_SNT (_model , _name , _event ) \
804814 CMN_EVENT_HN_SNT(_model, hnf_##_name, CMN_TYPE_HNF, _event)
805815
816+ #define CMN_EVENT_HNS_OCC (_name , _event ) \
817+ CMN_EVENT_HN_OCC(CMN_ANY, hns_##_name, CMN_TYPE_HNS, _event), \
818+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_rxsnp, CMN_TYPE_HNS, _event, 5, SEL_OCCUP1ID), \
819+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_lbt, CMN_TYPE_HNS, _event, 6, SEL_OCCUP1ID), \
820+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_hbt, CMN_TYPE_HNS, _event, 7, SEL_OCCUP1ID)
821+ #define CMN_EVENT_HNS_CLS ( _name , _event ) \
822+ CMN_EVENT_HN_CLS(CMN_ANY, hns_##_name, CMN_TYPE_HNS, _event)
823+ #define CMN_EVENT_HNS_SNT (_name , _event ) \
824+ CMN_EVENT_HN_SNT(CMN_ANY, hns_##_name, CMN_TYPE_HNS, _event)
825+ #define CMN_EVENT_HNS_HBT (_name , _event ) \
826+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_all, CMN_TYPE_HNS, _event, 0, SEL_HBT_LBT_SEL), \
827+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_hbt, CMN_TYPE_HNS, _event, 1, SEL_HBT_LBT_SEL), \
828+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_lbt, CMN_TYPE_HNS, _event, 2, SEL_HBT_LBT_SEL)
829+ #define CMN_EVENT_HNS_SNH (_name , _event ) \
830+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_all, CMN_TYPE_HNS, _event, 0, SEL_SN_HOME_SEL), \
831+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_sn, CMN_TYPE_HNS, _event, 1, SEL_SN_HOME_SEL), \
832+ _CMN_EVENT_ATTR(CMN_ANY, hns_##_name##_home, CMN_TYPE_HNS, _event, 2, SEL_SN_HOME_SEL)
806833
807834#define _CMN_EVENT_XP_MESH (_name , _event ) \
808835 __CMN_EVENT_XP(e_##_name, (_event) | (0 << 2)), \
@@ -1151,6 +1178,66 @@ static struct attribute *arm_cmn_event_attrs[] = {
11511178 CMN_EVENT_CCLA (pfwd_sndr_stalls_static_crd , 0x2a ),
11521179 CMN_EVENT_CCLA (pfwd_sndr_stalls_dynmaic_crd , 0x2b ),
11531180
1181+ CMN_EVENT_HNS_HBT (cache_miss , 0x01 ),
1182+ CMN_EVENT_HNS_HBT (slc_sf_cache_access , 0x02 ),
1183+ CMN_EVENT_HNS_HBT (cache_fill , 0x03 ),
1184+ CMN_EVENT_HNS_HBT (pocq_retry , 0x04 ),
1185+ CMN_EVENT_HNS_HBT (pocq_reqs_recvd , 0x05 ),
1186+ CMN_EVENT_HNS_HBT (sf_hit , 0x06 ),
1187+ CMN_EVENT_HNS_HBT (sf_evictions , 0x07 ),
1188+ CMN_EVENT_HNS (dir_snoops_sent , 0x08 ),
1189+ CMN_EVENT_HNS (brd_snoops_sent , 0x09 ),
1190+ CMN_EVENT_HNS_HBT (slc_eviction , 0x0a ),
1191+ CMN_EVENT_HNS_HBT (slc_fill_invalid_way , 0x0b ),
1192+ CMN_EVENT_HNS (mc_retries_local , 0x0c ),
1193+ CMN_EVENT_HNS_SNH (mc_reqs_local , 0x0d ),
1194+ CMN_EVENT_HNS (qos_hh_retry , 0x0e ),
1195+ CMN_EVENT_HNS_OCC (qos_pocq_occupancy , 0x0f ),
1196+ CMN_EVENT_HNS (pocq_addrhaz , 0x10 ),
1197+ CMN_EVENT_HNS (pocq_atomic_addrhaz , 0x11 ),
1198+ CMN_EVENT_HNS (ld_st_swp_adq_full , 0x12 ),
1199+ CMN_EVENT_HNS (cmp_adq_full , 0x13 ),
1200+ CMN_EVENT_HNS (txdat_stall , 0x14 ),
1201+ CMN_EVENT_HNS (txrsp_stall , 0x15 ),
1202+ CMN_EVENT_HNS (seq_full , 0x16 ),
1203+ CMN_EVENT_HNS (seq_hit , 0x17 ),
1204+ CMN_EVENT_HNS (snp_sent , 0x18 ),
1205+ CMN_EVENT_HNS (sfbi_dir_snp_sent , 0x19 ),
1206+ CMN_EVENT_HNS (sfbi_brd_snp_sent , 0x1a ),
1207+ CMN_EVENT_HNS (intv_dirty , 0x1c ),
1208+ CMN_EVENT_HNS (stash_snp_sent , 0x1d ),
1209+ CMN_EVENT_HNS (stash_data_pull , 0x1e ),
1210+ CMN_EVENT_HNS (snp_fwded , 0x1f ),
1211+ CMN_EVENT_HNS (atomic_fwd , 0x20 ),
1212+ CMN_EVENT_HNS (mpam_hardlim , 0x21 ),
1213+ CMN_EVENT_HNS (mpam_softlim , 0x22 ),
1214+ CMN_EVENT_HNS (snp_sent_cluster , 0x23 ),
1215+ CMN_EVENT_HNS (sf_imprecise_evict , 0x24 ),
1216+ CMN_EVENT_HNS (sf_evict_shared_line , 0x25 ),
1217+ CMN_EVENT_HNS_CLS (pocq_class_occup , 0x26 ),
1218+ CMN_EVENT_HNS_CLS (pocq_class_retry , 0x27 ),
1219+ CMN_EVENT_HNS_CLS (class_mc_reqs_local , 0x28 ),
1220+ CMN_EVENT_HNS_CLS (class_cgnt_cmin , 0x29 ),
1221+ CMN_EVENT_HNS_SNT (sn_throttle , 0x2a ),
1222+ CMN_EVENT_HNS_SNT (sn_throttle_min , 0x2b ),
1223+ CMN_EVENT_HNS (sf_precise_to_imprecise , 0x2c ),
1224+ CMN_EVENT_HNS (snp_intv_cln , 0x2d ),
1225+ CMN_EVENT_HNS (nc_excl , 0x2e ),
1226+ CMN_EVENT_HNS (excl_mon_ovfl , 0x2f ),
1227+ CMN_EVENT_HNS (snp_req_recvd , 0x30 ),
1228+ CMN_EVENT_HNS (snp_req_byp_pocq , 0x31 ),
1229+ CMN_EVENT_HNS (dir_ccgha_snp_sent , 0x32 ),
1230+ CMN_EVENT_HNS (brd_ccgha_snp_sent , 0x33 ),
1231+ CMN_EVENT_HNS (ccgha_snp_stall , 0x34 ),
1232+ CMN_EVENT_HNS (lbt_req_hardlim , 0x35 ),
1233+ CMN_EVENT_HNS (hbt_req_hardlim , 0x36 ),
1234+ CMN_EVENT_HNS (sf_reupdate , 0x37 ),
1235+ CMN_EVENT_HNS (excl_sf_imprecise , 0x38 ),
1236+ CMN_EVENT_HNS (snp_pocq_addrhaz , 0x39 ),
1237+ CMN_EVENT_HNS (mc_retries_remote , 0x3a ),
1238+ CMN_EVENT_HNS_SNH (mc_reqs_remote , 0x3b ),
1239+ CMN_EVENT_HNS_CLS (class_mc_reqs_remote , 0x3c ),
1240+
11541241 NULL
11551242};
11561243
@@ -1392,6 +1479,10 @@ static int arm_cmn_set_event_sel_hi(struct arm_cmn_node *dn,
13921479 dn -> occupid [fsel ].val = occupid ;
13931480 reg = FIELD_PREP (CMN__PMU_CBUSY_SNTHROTTLE_SEL ,
13941481 dn -> occupid [SEL_CBUSY_SNTHROTTLE_SEL ].val ) |
1482+ FIELD_PREP (CMN__PMU_SN_HOME_SEL ,
1483+ dn -> occupid [SEL_SN_HOME_SEL ].val ) |
1484+ FIELD_PREP (CMN__PMU_HBT_LBT_SEL ,
1485+ dn -> occupid [SEL_HBT_LBT_SEL ].val ) |
13951486 FIELD_PREP (CMN__PMU_CLASS_OCCUP_ID ,
13961487 dn -> occupid [SEL_CLASS_OCCUP_ID ].val ) |
13971488 FIELD_PREP (CMN__PMU_OCCUP1_ID ,
@@ -2219,13 +2310,16 @@ static int arm_cmn_discover(struct arm_cmn *cmn, unsigned int rgn_offset)
22192310 case CMN_TYPE_CCRA :
22202311 case CMN_TYPE_CCHA :
22212312 case CMN_TYPE_CCLA :
2313+ case CMN_TYPE_HNS :
22222314 dn ++ ;
22232315 break ;
22242316 /* Nothing to see here */
22252317 case CMN_TYPE_MPAM_S :
22262318 case CMN_TYPE_MPAM_NS :
22272319 case CMN_TYPE_RNSAM :
22282320 case CMN_TYPE_CXLA :
2321+ case CMN_TYPE_HNS_MPAM_S :
2322+ case CMN_TYPE_HNS_MPAM_NS :
22292323 break ;
22302324 /*
22312325 * Split "optimised" combination nodes into separate
0 commit comments