aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPunit Agrawal <punit.agrawal@arm.com>2014-02-19 07:17:02 -0500
committerArnd Bergmann <arnd@arndb.de>2014-02-25 13:36:16 -0500
commit6fb0c4a74239416b572f088a827d5ff783902380 (patch)
treead1560018b9c1943945183e179a45e29e8b51d87
parent23453853e40539e64592b5ae771020e43ed371a2 (diff)
drivers: cci: Extend support to CCI revisions > r1p2
The driver queries the CCI IP revision to distinguish between r0 and r1 scheme for event numbers and currently supports upto version r1p2. To minimise code churn every time there's a new version of the IP, assume that event numbering doesn't change for revisions > r1p0 (which is the case). The driver will still need an update for future revisions that change the event numbers. Signed-off-by: Punit Agrawal <punit.agrawal@arm.com> Reviewed-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--drivers/bus/arm-cci.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/drivers/bus/arm-cci.c b/drivers/bus/arm-cci.c
index 962fd35cbd8d..da485ae2f595 100644
--- a/drivers/bus/arm-cci.c
+++ b/drivers/bus/arm-cci.c
@@ -88,8 +88,7 @@ static unsigned long cci_ctrl_phys;
88 88
89#define CCI_REV_R0 0 89#define CCI_REV_R0 0
90#define CCI_REV_R1 1 90#define CCI_REV_R1 1
91#define CCI_REV_R0_P4 4 91#define CCI_REV_R1_PX 5
92#define CCI_REV_R1_P2 6
93 92
94#define CCI_PMU_EVT_SEL 0x000 93#define CCI_PMU_EVT_SEL 0x000
95#define CCI_PMU_CNTR 0x004 94#define CCI_PMU_CNTR 0x004
@@ -193,21 +192,16 @@ static int probe_cci_revision(void)
193 rev = readl_relaxed(cci_ctrl_base + CCI_PID2) & CCI_PID2_REV_MASK; 192 rev = readl_relaxed(cci_ctrl_base + CCI_PID2) & CCI_PID2_REV_MASK;
194 rev >>= CCI_PID2_REV_SHIFT; 193 rev >>= CCI_PID2_REV_SHIFT;
195 194
196 if (rev <= CCI_REV_R0_P4) 195 if (rev < CCI_REV_R1_PX)
197 return CCI_REV_R0; 196 return CCI_REV_R0;
198 else if (rev <= CCI_REV_R1_P2) 197 else
199 return CCI_REV_R1; 198 return CCI_REV_R1;
200
201 return -ENOENT;
202} 199}
203 200
204static struct pmu_port_event_ranges *port_range_by_rev(void) 201static struct pmu_port_event_ranges *port_range_by_rev(void)
205{ 202{
206 int rev = probe_cci_revision(); 203 int rev = probe_cci_revision();
207 204
208 if (rev < 0)
209 return NULL;
210
211 return &port_event_range[rev]; 205 return &port_event_range[rev];
212} 206}
213 207