@@ -33,6 +33,14 @@ static inline void write_pmevtypern(int n, unsigned long val)
3333 PMEVN_SWITCH (n , WRITE_PMEVTYPERN );
3434}
3535
36+ #define RETURN_READ_PMEVTYPERN (n ) \
37+ return read_sysreg(pmevtyper##n##_el0)
38+ static inline unsigned long read_pmevtypern (int n )
39+ {
40+ PMEVN_SWITCH (n , RETURN_READ_PMEVTYPERN );
41+ return 0 ;
42+ }
43+
3644static inline unsigned long read_pmmir (void )
3745{
3846 return read_cpuid (PMMIR_EL1 );
@@ -46,6 +54,14 @@ static inline u32 read_pmuver(void)
4654 ID_AA64DFR0_EL1_PMUVer_SHIFT );
4755}
4856
57+ static inline bool pmuv3_has_icntr (void )
58+ {
59+ u64 dfr1 = read_sysreg (id_aa64dfr1_el1 );
60+
61+ return !!cpuid_feature_extract_unsigned_field (dfr1 ,
62+ ID_AA64DFR1_EL1_PMICNTR_SHIFT );
63+ }
64+
4965static inline void write_pmcr (u64 val )
5066{
5167 write_sysreg (val , pmcr_el0 );
@@ -71,22 +87,32 @@ static inline u64 read_pmccntr(void)
7187 return read_sysreg (pmccntr_el0 );
7288}
7389
74- static inline void write_pmcntenset (u32 val )
90+ static inline void write_pmicntr (u64 val )
91+ {
92+ write_sysreg_s (val , SYS_PMICNTR_EL0 );
93+ }
94+
95+ static inline u64 read_pmicntr (void )
96+ {
97+ return read_sysreg_s (SYS_PMICNTR_EL0 );
98+ }
99+
100+ static inline void write_pmcntenset (u64 val )
75101{
76102 write_sysreg (val , pmcntenset_el0 );
77103}
78104
79- static inline void write_pmcntenclr (u32 val )
105+ static inline void write_pmcntenclr (u64 val )
80106{
81107 write_sysreg (val , pmcntenclr_el0 );
82108}
83109
84- static inline void write_pmintenset (u32 val )
110+ static inline void write_pmintenset (u64 val )
85111{
86112 write_sysreg (val , pmintenset_el1 );
87113}
88114
89- static inline void write_pmintenclr (u32 val )
115+ static inline void write_pmintenclr (u64 val )
90116{
91117 write_sysreg (val , pmintenclr_el1 );
92118}
@@ -96,12 +122,27 @@ static inline void write_pmccfiltr(u64 val)
96122 write_sysreg (val , pmccfiltr_el0 );
97123}
98124
99- static inline void write_pmovsclr (u32 val )
125+ static inline u64 read_pmccfiltr (void )
126+ {
127+ return read_sysreg (pmccfiltr_el0 );
128+ }
129+
130+ static inline void write_pmicfiltr (u64 val )
131+ {
132+ write_sysreg_s (val , SYS_PMICFILTR_EL0 );
133+ }
134+
135+ static inline u64 read_pmicfiltr (void )
136+ {
137+ return read_sysreg_s (SYS_PMICFILTR_EL0 );
138+ }
139+
140+ static inline void write_pmovsclr (u64 val )
100141{
101142 write_sysreg (val , pmovsclr_el0 );
102143}
103144
104- static inline u32 read_pmovsclr (void )
145+ static inline u64 read_pmovsclr (void )
105146{
106147 return read_sysreg (pmovsclr_el0 );
107148}
0 commit comments