PAPI 7.1.0.0
Loading...
Searching...
No Matches
powerpc_cpu_utils.c
Go to the documentation of this file.
1#include "sysdetect.h"
2#include "powerpc_cpu_utils.h"
3#include "os_cpu_utils.h"
4
6 { // level 1 begins
7 2,
8 {
9 {PAPI_MH_TYPE_INST, 65536, 128, 512, 1},
10 {PAPI_MH_TYPE_DATA, 32768, 128, 256, 2}
11 }
12 },
13 { // level 2 begins
14 1,
15 {
16 {PAPI_MH_TYPE_UNIFIED, 524288, 128, 4096, 8},
17 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
18 }
19 },
20};
21
23 { // level 1 begins
24 2,
25 {
26 {PAPI_MH_TYPE_INST, 65536, 128, 512, 2},
27 {PAPI_MH_TYPE_DATA, 32768, 128, 256, 4}
28 }
29 },
30 { // level 2 begins
31 1,
32 {
33 {PAPI_MH_TYPE_UNIFIED, 1966080, 128, 15360, 10},
34 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
35 }
36 },
37 { // level 3 begins
38 1,
39 {
40 {PAPI_MH_TYPE_UNIFIED, 37748736, 256, 147456, 12},
41 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
42 }
43 },
44};
45
47 { // level 1 begins
48 2,
49 {
50 {PAPI_MH_TYPE_INST, 65536, 128, 512, 4},
51 {PAPI_MH_TYPE_DATA, 65536, 128, 512, 8}
52 }
53 },
54 { // level 2 begins
55 1,
56 {
57 {PAPI_MH_TYPE_UNIFIED, 4194304, 128, 16384, 8},
58 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
59 }
60 },
61 { // level 3 begins
62 1,
63 {
64 {PAPI_MH_TYPE_UNIFIED, 33554432, 128, 262144, 16},
65 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
66 }
67 },
68};
69
71 { // level 1 begins
72 2,
73 {
74 {PAPI_MH_TYPE_INST, 32768, 128, 64, 4},
75 {PAPI_MH_TYPE_DATA, 32768, 128, 32, 8}
76 }
77 },
78 { // level 2 begins
79 1,
80 {
81 {PAPI_MH_TYPE_UNIFIED, 524288, 128, 256, 8},
82 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
83 }
84 },
85 { // level 3 begins
86 1,
87 {
88 {PAPI_MH_TYPE_UNIFIED, 4194304, 128, 4096, 8},
89 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
90 }
91 },
92};
93
95 { // level 1 begins
96 2,
97 {
98 {PAPI_MH_TYPE_INST, 32768, 128, 64, 8},
99 {PAPI_MH_TYPE_DATA, 65536, 128, 512, 8}
100 }
101 },
102 { // level 2 begins
103 1,
104 {
105 {PAPI_MH_TYPE_UNIFIED, 262144, 128, 256, 8},
106 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
107 }
108 },
109 { // level 3 begins
110 1,
111 {
112 {PAPI_MH_TYPE_UNIFIED, 8388608, 128, 65536, 8},
113 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
114 }
115 },
116};
117
119 { // level 1 begins
120 2,
121 {
122 {PAPI_MH_TYPE_INST, 32768, 128, 256, 8},
123 {PAPI_MH_TYPE_DATA, 32768, 128, 256, 8}
124 }
125 },
126 { // level 2 begins
127 1,
128 {
129 {PAPI_MH_TYPE_UNIFIED, 524288, 128, 4096, 8},
130 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
131 }
132 },
133 { // level 3 begins
134 1,
135 {
136 {PAPI_MH_TYPE_UNIFIED, 10485760, 128, 81920, 20},
137 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
138 }
139 },
140};
141
143 { // level 1 begins
144 2,
145 {
146 {PAPI_MH_TYPE_INST, 49152, 128, 384, 6},
147 {PAPI_MH_TYPE_DATA, 32768, 128, 256, 8}
148 }
149 },
150 { // level 2 begins
151 1,
152 {
153 {PAPI_MH_TYPE_UNIFIED, 1048576, 128, 8192, 8},
154 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
155 }
156 },
157 { // level 3 begins
158 1,
159 {
160 {PAPI_MH_TYPE_UNIFIED, 4194304, 128, 32768, 16},
161 {PAPI_MH_TYPE_EMPTY, -1, -1, -1, -1}
162 }
163 },
164};
165
166#define SPRN_PVR 0x11F /* Processor Version Register */
167#define PVR_PROCESSOR_SHIFT 16
168
169static unsigned int mfpvr( void );
170static int get_cache_info( CPU_attr_e attr, int level, int *value );
171
172int
174{
175 return CPU_SUCCESS;
176}
177
178int
180{
181 return CPU_SUCCESS;
182}
183
184int
186{
187 return os_cpu_get_vendor(vendor);
188}
189
190int
192{
193 return os_cpu_get_name(name);
194}
195
196int
198{
199 return os_cpu_get_attribute(attr, value);
200}
201
202int
203powerpc_cpu_get_attribute_at( CPU_attr_e attr, int loc, int *value )
204{
205 int status = CPU_SUCCESS;
206
207 switch(attr) {
223 status = get_cache_info(attr, loc, value);
224 break;
227 status = os_cpu_get_attribute_at(attr, loc, value);
228 break;
229 default:
230 status = CPU_ERROR;
231 }
232
233 return status;
234}
235
236int
237get_cache_info( CPU_attr_e attr, int level, int *value )
238{
239 unsigned int pvr = mfpvr() >> PVR_PROCESSOR_SHIFT;
240 static _sysdetect_cache_level_info_t *clevel_ptr;
241
242 if (clevel_ptr) {
243 return cpu_get_cache_info(attr, level, clevel_ptr, value);
244 }
245
246 switch(pvr) {
247 case 0x39: /* PPC970 */
248 case 0x3C: /* PPC970FX */
249 case 0x44: /* PPC970MP */
250 case 0x45: /* PPC970GX */
251 clevel_ptr = ppc970_cache_info;
252 break;
253 case 0x3A: /* POWER5 */
254 case 0x3B: /* POWER5+ */
255 clevel_ptr = power5_cache_info;
256 break;
257 case 0x3E: /* POWER6 */
258 clevel_ptr = power6_cache_info;
259 break;
260 case 0x3F: /* POWER7 */
261 clevel_ptr = power7_cache_info;
262 break;
263 case 0x4b: /* POWER8 */
264 clevel_ptr = power8_cache_info;
265 break;
266 case 0x4e: /* POWER9 */
267 clevel_ptr = power9_cache_info;
268 break;
269 case 0x80: /* POWER10 */
270 clevel_ptr = power10_cache_info;
271 break;
272 default:
273 return CPU_ERROR;
274 }
275
276 return cpu_get_cache_info(attr, level, clevel_ptr, value);
277}
278
279unsigned int
280mfpvr( void )
281{
282 unsigned long pvr;
283 __asm__ ("mfspr %0,%1"
284 : "=r" (pvr)
285 : "i" (SPRN_PVR));
286 return pvr;
287}
int cpu_get_cache_info(CPU_attr_e attr, int level, _sysdetect_cache_level_info_t *clevel_ptr, int *value)
Definition: cpu_utils.c:94
#define CPU_ERROR
Definition: cpu_utils.h:5
#define CPU_SUCCESS
Definition: cpu_utils.h:4
CPU_attr_e
Definition: cpu_utils.h:7
@ CPU_ATTR__CACHE_INST_TOT_SIZE
Definition: cpu_utils.h:21
@ CPU_ATTR__HWTHREAD_NUMA_AFFINITY
Definition: cpu_utils.h:34
@ CPU_ATTR__CACHE_UNIF_TOT_SIZE
Definition: cpu_utils.h:29
@ CPU_ATTR__CACHE_DATA_ASSOCIATIVITY
Definition: cpu_utils.h:28
@ CPU_ATTR__CACHE_INST_LINE_SIZE
Definition: cpu_utils.h:22
@ CPU_ATTR__NUMA_MEM_SIZE
Definition: cpu_utils.h:36
@ CPU_ATTR__CACHE_UNIF_LINE_SIZE
Definition: cpu_utils.h:30
@ CPU_ATTR__CACHE_DATA_NUM_LINES
Definition: cpu_utils.h:27
@ CPU_ATTR__CACHE_UNIF_ASSOCIATIVITY
Definition: cpu_utils.h:32
@ CPU_ATTR__CACHE_INST_PRESENT
Definition: cpu_utils.h:18
@ CPU_ATTR__CACHE_DATA_PRESENT
Definition: cpu_utils.h:19
@ CPU_ATTR__CACHE_DATA_LINE_SIZE
Definition: cpu_utils.h:26
@ CPU_ATTR__CACHE_INST_ASSOCIATIVITY
Definition: cpu_utils.h:24
@ CPU_ATTR__CACHE_INST_NUM_LINES
Definition: cpu_utils.h:23
@ CPU_ATTR__CACHE_UNIF_NUM_LINES
Definition: cpu_utils.h:31
@ CPU_ATTR__CACHE_DATA_TOT_SIZE
Definition: cpu_utils.h:25
@ CPU_ATTR__CACHE_UNIF_PRESENT
Definition: cpu_utils.h:20
int os_cpu_get_attribute(CPU_attr_e attr, int *value)
Definition: os_cpu_utils.c:30
int os_cpu_get_vendor(char *vendor)
Definition: os_cpu_utils.c:6
int os_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
Definition: os_cpu_utils.c:42
int os_cpu_get_name(char *name)
Definition: os_cpu_utils.c:18
#define PAPI_MH_TYPE_DATA
Definition: papi.h:720
#define PAPI_MH_TYPE_INST
Definition: papi.h:719
#define PAPI_MH_TYPE_EMPTY
Definition: papi.h:718
#define PAPI_MH_TYPE_UNIFIED
Definition: papi.h:723
int powerpc_cpu_get_name(char *name)
_sysdetect_cache_level_info_t power6_cache_info[]
_sysdetect_cache_level_info_t power5_cache_info[]
_sysdetect_cache_level_info_t power9_cache_info[]
_sysdetect_cache_level_info_t power8_cache_info[]
_sysdetect_cache_level_info_t power7_cache_info[]
_sysdetect_cache_level_info_t ppc970_cache_info[]
int powerpc_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
_sysdetect_cache_level_info_t power10_cache_info[]
int powerpc_cpu_init(void)
static unsigned int mfpvr(void)
static int get_cache_info(CPU_attr_e attr, int level, int *value)
int powerpc_cpu_finalize(void)
int powerpc_cpu_get_attribute(CPU_attr_e attr, int *value)
#define PVR_PROCESSOR_SHIFT
int powerpc_cpu_get_vendor(char *vendor)
#define SPRN_PVR
const char * name
Definition: rocs.c:225