1*2b54f0dbSXin Li #include <stdint.h>
2*2b54f0dbSXin Li
3*2b54f0dbSXin Li #include <cpuinfo.h>
4*2b54f0dbSXin Li #include <x86/api.h>
5*2b54f0dbSXin Li
6*2b54f0dbSXin Li
cpuinfo_x86_decode_cache_descriptor(uint8_t descriptor,enum cpuinfo_vendor vendor,const struct cpuinfo_x86_model_info * model_info,struct cpuinfo_x86_caches * cache,struct cpuinfo_tlb * itlb_4KB,struct cpuinfo_tlb * itlb_2MB,struct cpuinfo_tlb * itlb_4MB,struct cpuinfo_tlb * dtlb0_4KB,struct cpuinfo_tlb * dtlb0_2MB,struct cpuinfo_tlb * dtlb0_4MB,struct cpuinfo_tlb * dtlb_4KB,struct cpuinfo_tlb * dtlb_2MB,struct cpuinfo_tlb * dtlb_4MB,struct cpuinfo_tlb * dtlb_1GB,struct cpuinfo_tlb * stlb2_4KB,struct cpuinfo_tlb * stlb2_2MB,struct cpuinfo_tlb * stlb2_1GB,uint32_t * prefetch_size)7*2b54f0dbSXin Li void cpuinfo_x86_decode_cache_descriptor(
8*2b54f0dbSXin Li uint8_t descriptor, enum cpuinfo_vendor vendor,
9*2b54f0dbSXin Li const struct cpuinfo_x86_model_info* model_info,
10*2b54f0dbSXin Li struct cpuinfo_x86_caches* cache,
11*2b54f0dbSXin Li struct cpuinfo_tlb* itlb_4KB,
12*2b54f0dbSXin Li struct cpuinfo_tlb* itlb_2MB,
13*2b54f0dbSXin Li struct cpuinfo_tlb* itlb_4MB,
14*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb0_4KB,
15*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb0_2MB,
16*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb0_4MB,
17*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb_4KB,
18*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb_2MB,
19*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb_4MB,
20*2b54f0dbSXin Li struct cpuinfo_tlb* dtlb_1GB,
21*2b54f0dbSXin Li struct cpuinfo_tlb* stlb2_4KB,
22*2b54f0dbSXin Li struct cpuinfo_tlb* stlb2_2MB,
23*2b54f0dbSXin Li struct cpuinfo_tlb* stlb2_1GB,
24*2b54f0dbSXin Li uint32_t* prefetch_size)
25*2b54f0dbSXin Li {
26*2b54f0dbSXin Li /*
27*2b54f0dbSXin Li * Descriptors are parsed according to:
28*2b54f0dbSXin Li * - Application Note 485: Intel Processor Indentification and CPUID Instruction, May 2012, Order Number 241618-039
29*2b54f0dbSXin Li * - Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 2 (2A, 2B, 2C & 2D): Instruction Set
30*2b54f0dbSXin Li * Reference, A-Z, December 2016. Order Number: 325383-061US
31*2b54f0dbSXin Li * - Cyrix CPU Detection Guide, Preliminary Revision 1.01
32*2b54f0dbSXin Li * - Geode(TM) GX1 Processor Series: Low Power Integrated x86 Solution
33*2b54f0dbSXin Li */
34*2b54f0dbSXin Li switch (descriptor) {
35*2b54f0dbSXin Li case 0x01:
36*2b54f0dbSXin Li /*
37*2b54f0dbSXin Li * Intel ISA Reference:
38*2b54f0dbSXin Li * "Instruction TLB: 4 KByte pages, 4-way set associative, 32 entries"
39*2b54f0dbSXin Li * Application Note 485:
40*2b54f0dbSXin Li * "Instruction TLB: 4-KB Pages, 4-way set associative, 32 entries"
41*2b54f0dbSXin Li */
42*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
43*2b54f0dbSXin Li .entries = 32,
44*2b54f0dbSXin Li .associativity = 4,
45*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
46*2b54f0dbSXin Li };
47*2b54f0dbSXin Li break;
48*2b54f0dbSXin Li case 0x02:
49*2b54f0dbSXin Li /*
50*2b54f0dbSXin Li * Intel ISA Reference:
51*2b54f0dbSXin Li * "Instruction TLB: 4 MByte pages, fully associative, 2 entries"
52*2b54f0dbSXin Li * Application Note 485:
53*2b54f0dbSXin Li * "Instruction TLB: 4-MB Pages, fully associative, 2 entries"
54*2b54f0dbSXin Li */
55*2b54f0dbSXin Li *itlb_4MB = (struct cpuinfo_tlb) {
56*2b54f0dbSXin Li .entries = 2,
57*2b54f0dbSXin Li .associativity = 2,
58*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4MB,
59*2b54f0dbSXin Li };
60*2b54f0dbSXin Li break;
61*2b54f0dbSXin Li case 0x03:
62*2b54f0dbSXin Li /*
63*2b54f0dbSXin Li * Intel ISA Reference:
64*2b54f0dbSXin Li * "Data TLB: 4 KByte pages, 4-way set associative, 64 entries"
65*2b54f0dbSXin Li * Application Note 485:
66*2b54f0dbSXin Li * "Data TLB: 4-KB Pages, 4-way set associative, 64 entries"
67*2b54f0dbSXin Li */
68*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
69*2b54f0dbSXin Li .entries = 64,
70*2b54f0dbSXin Li .associativity = 4,
71*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
72*2b54f0dbSXin Li };
73*2b54f0dbSXin Li break;
74*2b54f0dbSXin Li case 0x04:
75*2b54f0dbSXin Li /*
76*2b54f0dbSXin Li * Intel ISA Reference:
77*2b54f0dbSXin Li * "Data TLB: 4 MByte pages, 4-way set associative, 8 entries"
78*2b54f0dbSXin Li * Application Note 485:
79*2b54f0dbSXin Li * "Data TLB: 4-MB Pages, 4-way set associative, 8 entries"
80*2b54f0dbSXin Li */
81*2b54f0dbSXin Li *dtlb_4MB = (struct cpuinfo_tlb) {
82*2b54f0dbSXin Li .entries = 8,
83*2b54f0dbSXin Li .associativity = 4,
84*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4MB,
85*2b54f0dbSXin Li };
86*2b54f0dbSXin Li break;
87*2b54f0dbSXin Li case 0x05:
88*2b54f0dbSXin Li /*
89*2b54f0dbSXin Li * Intel ISA Reference:
90*2b54f0dbSXin Li * "Data TLB1: 4 MByte pages, 4-way set associative, 32 entries"
91*2b54f0dbSXin Li * Application Note 485:
92*2b54f0dbSXin Li * "Data TLB: 4-MB Pages, 4-way set associative, 32 entries"
93*2b54f0dbSXin Li */
94*2b54f0dbSXin Li *dtlb_4MB = (struct cpuinfo_tlb) {
95*2b54f0dbSXin Li .entries = 32,
96*2b54f0dbSXin Li .associativity = 4,
97*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4MB,
98*2b54f0dbSXin Li };
99*2b54f0dbSXin Li break;
100*2b54f0dbSXin Li case 0x06:
101*2b54f0dbSXin Li /*
102*2b54f0dbSXin Li * Intel ISA Reference:
103*2b54f0dbSXin Li * "1st-level instruction cache: 8 KBytes, 4-way set associative, 32 byte line size"
104*2b54f0dbSXin Li * Application Note 485:
105*2b54f0dbSXin Li * "1st-level instruction cache: 8-KB, 4-way set associative, 32-byte line size"
106*2b54f0dbSXin Li */
107*2b54f0dbSXin Li cache->l1i = (struct cpuinfo_x86_cache) {
108*2b54f0dbSXin Li .size = 8 * 1024,
109*2b54f0dbSXin Li .associativity = 4,
110*2b54f0dbSXin Li .sets = 64,
111*2b54f0dbSXin Li .partitions = 1,
112*2b54f0dbSXin Li .line_size = 32,
113*2b54f0dbSXin Li };
114*2b54f0dbSXin Li break;
115*2b54f0dbSXin Li case 0x08:
116*2b54f0dbSXin Li /*
117*2b54f0dbSXin Li * Intel ISA Reference:
118*2b54f0dbSXin Li * "1st-level instruction cache: 16 KBytes, 4-way set associative, 32 byte line size"
119*2b54f0dbSXin Li * Application Note 485:
120*2b54f0dbSXin Li * "1st-level instruction cache: 16-KB, 4-way set associative, 32-byte line size"
121*2b54f0dbSXin Li */
122*2b54f0dbSXin Li cache->l1i = (struct cpuinfo_x86_cache) {
123*2b54f0dbSXin Li .size = 16 * 1024,
124*2b54f0dbSXin Li .associativity = 4,
125*2b54f0dbSXin Li .sets = 128,
126*2b54f0dbSXin Li .partitions = 1,
127*2b54f0dbSXin Li .line_size = 32,
128*2b54f0dbSXin Li };
129*2b54f0dbSXin Li break;
130*2b54f0dbSXin Li case 0x09:
131*2b54f0dbSXin Li /*
132*2b54f0dbSXin Li * Intel ISA Reference:
133*2b54f0dbSXin Li * "1st-level instruction cache: 32KBytes, 4-way set associative, 64 byte line size"
134*2b54f0dbSXin Li * Application Note 485:
135*2b54f0dbSXin Li * "1st-level Instruction Cache: 32-KB, 4-way set associative, 64-byte line size"
136*2b54f0dbSXin Li */
137*2b54f0dbSXin Li cache->l1i = (struct cpuinfo_x86_cache) {
138*2b54f0dbSXin Li .size = 32 * 1024,
139*2b54f0dbSXin Li .associativity = 4,
140*2b54f0dbSXin Li .sets = 128,
141*2b54f0dbSXin Li .partitions = 1,
142*2b54f0dbSXin Li .line_size = 64,
143*2b54f0dbSXin Li };
144*2b54f0dbSXin Li break;
145*2b54f0dbSXin Li case 0x0A:
146*2b54f0dbSXin Li /*
147*2b54f0dbSXin Li * Intel ISA Reference:
148*2b54f0dbSXin Li * "1st-level data cache: 8 KBytes, 2-way set associative, 32 byte line size"
149*2b54f0dbSXin Li * Application Note 485:
150*2b54f0dbSXin Li * "1st-level data cache: 8-KB, 2-way set associative, 32-byte line size"
151*2b54f0dbSXin Li */
152*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
153*2b54f0dbSXin Li .size = 8 * 1024,
154*2b54f0dbSXin Li .associativity = 2,
155*2b54f0dbSXin Li .sets = 128,
156*2b54f0dbSXin Li .partitions = 1,
157*2b54f0dbSXin Li .line_size = 32,
158*2b54f0dbSXin Li };
159*2b54f0dbSXin Li break;
160*2b54f0dbSXin Li case 0x0B:
161*2b54f0dbSXin Li /*
162*2b54f0dbSXin Li * Intel ISA Reference:
163*2b54f0dbSXin Li * "Instruction TLB: 4 MByte pages, 4-way set associative, 4 entries"
164*2b54f0dbSXin Li * Application Note 485:
165*2b54f0dbSXin Li * "Instruction TLB: 4-MB pages, 4-way set associative, 4 entries"
166*2b54f0dbSXin Li */
167*2b54f0dbSXin Li *itlb_4MB = (struct cpuinfo_tlb) {
168*2b54f0dbSXin Li .entries = 4,
169*2b54f0dbSXin Li .associativity = 4,
170*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4MB,
171*2b54f0dbSXin Li };
172*2b54f0dbSXin Li break;
173*2b54f0dbSXin Li case 0x0C:
174*2b54f0dbSXin Li /*
175*2b54f0dbSXin Li * Intel ISA Reference:
176*2b54f0dbSXin Li * "1st-level data cache: 16 KBytes, 4-way set associative, 32 byte line size"
177*2b54f0dbSXin Li * Application Note 485:
178*2b54f0dbSXin Li * "1st-level data cache: 16-KB, 4-way set associative, 32-byte line size"
179*2b54f0dbSXin Li */
180*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
181*2b54f0dbSXin Li .size = 16 * 1024,
182*2b54f0dbSXin Li .associativity = 4,
183*2b54f0dbSXin Li .sets = 128,
184*2b54f0dbSXin Li .partitions = 1,
185*2b54f0dbSXin Li .line_size = 32,
186*2b54f0dbSXin Li };
187*2b54f0dbSXin Li break;
188*2b54f0dbSXin Li case 0x0D:
189*2b54f0dbSXin Li /*
190*2b54f0dbSXin Li * Intel ISA Reference:
191*2b54f0dbSXin Li * "1st-level data cache: 16 KBytes, 4-way set associative, 64 byte line size"
192*2b54f0dbSXin Li * Application Note 485:
193*2b54f0dbSXin Li * "1st-level Data Cache: 16-KB, 4-way set associative, 64-byte line size"
194*2b54f0dbSXin Li */
195*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
196*2b54f0dbSXin Li .size = 16 * 1024,
197*2b54f0dbSXin Li .associativity = 4,
198*2b54f0dbSXin Li .sets = 64,
199*2b54f0dbSXin Li .partitions = 1,
200*2b54f0dbSXin Li .line_size = 64,
201*2b54f0dbSXin Li };
202*2b54f0dbSXin Li break;
203*2b54f0dbSXin Li case 0x0E:
204*2b54f0dbSXin Li /*
205*2b54f0dbSXin Li * Intel ISA Reference:
206*2b54f0dbSXin Li * "1st-level data cache: 24 KBytes, 6-way set associative, 64 byte line size"
207*2b54f0dbSXin Li * Application Note 485:
208*2b54f0dbSXin Li * "1st-level Data Cache: 24-KB, 6-way set associative, 64-byte line size"
209*2b54f0dbSXin Li */
210*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
211*2b54f0dbSXin Li .size = 24 * 1024,
212*2b54f0dbSXin Li .associativity = 6,
213*2b54f0dbSXin Li .sets = 64,
214*2b54f0dbSXin Li .partitions = 1,
215*2b54f0dbSXin Li .line_size = 64,
216*2b54f0dbSXin Li };
217*2b54f0dbSXin Li break;
218*2b54f0dbSXin Li case 0x1D:
219*2b54f0dbSXin Li /*
220*2b54f0dbSXin Li * Intel ISA Reference:
221*2b54f0dbSXin Li * "2nd-level cache: 128 KBytes, 2-way set associative, 64 byte line size"
222*2b54f0dbSXin Li */
223*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
224*2b54f0dbSXin Li .size = 128 * 1024,
225*2b54f0dbSXin Li .associativity = 2,
226*2b54f0dbSXin Li .sets = 1024,
227*2b54f0dbSXin Li .partitions = 1,
228*2b54f0dbSXin Li .line_size = 64,
229*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
230*2b54f0dbSXin Li };
231*2b54f0dbSXin Li case 0x21:
232*2b54f0dbSXin Li /*
233*2b54f0dbSXin Li * Intel ISA Reference:
234*2b54f0dbSXin Li * "2nd-level cache: 256 KBytes, 8-way set associative, 64 byte line size"
235*2b54f0dbSXin Li * Application Note 485:
236*2b54f0dbSXin Li * "2nd-level cache: 256-KB, 8-way set associative, 64-byte line size"
237*2b54f0dbSXin Li */
238*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
239*2b54f0dbSXin Li .size = 256 * 1024,
240*2b54f0dbSXin Li .associativity = 8,
241*2b54f0dbSXin Li .sets = 512,
242*2b54f0dbSXin Li .partitions = 1,
243*2b54f0dbSXin Li .line_size = 64,
244*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
245*2b54f0dbSXin Li };
246*2b54f0dbSXin Li break;
247*2b54f0dbSXin Li case 0x22:
248*2b54f0dbSXin Li /*
249*2b54f0dbSXin Li * Intel ISA Reference:
250*2b54f0dbSXin Li * "3rd-level cache: 512 KBytes, 4-way set associative, 64 byte line size, 2 lines per sector"
251*2b54f0dbSXin Li * Application Note 485:
252*2b54f0dbSXin Li * "3rd-level cache: 512-KB, 4-way set associative, sectored cache, 64-byte line size"
253*2b54f0dbSXin Li */
254*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
255*2b54f0dbSXin Li .size = 512 * 1024,
256*2b54f0dbSXin Li .associativity = 4,
257*2b54f0dbSXin Li .sets = 2048,
258*2b54f0dbSXin Li .partitions = 1,
259*2b54f0dbSXin Li .line_size = 64,
260*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
261*2b54f0dbSXin Li };
262*2b54f0dbSXin Li break;
263*2b54f0dbSXin Li case 0x23:
264*2b54f0dbSXin Li /*
265*2b54f0dbSXin Li * Intel ISA Reference:
266*2b54f0dbSXin Li * "3rd-level cache: 1 MBytes, 8-way set associative, 64 byte line size, 2 lines per sector"
267*2b54f0dbSXin Li * Application Note 485:
268*2b54f0dbSXin Li * "3rd-level cache: 1-MB, 8-way set associative, sectored cache, 64-byte line size"
269*2b54f0dbSXin Li */
270*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
271*2b54f0dbSXin Li .size = 1024 * 1024,
272*2b54f0dbSXin Li .associativity = 8,
273*2b54f0dbSXin Li .sets = 2048,
274*2b54f0dbSXin Li .partitions = 1,
275*2b54f0dbSXin Li .line_size = 64,
276*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
277*2b54f0dbSXin Li };
278*2b54f0dbSXin Li break;
279*2b54f0dbSXin Li case 0x24:
280*2b54f0dbSXin Li /*
281*2b54f0dbSXin Li * Intel ISA Reference:
282*2b54f0dbSXin Li * "2nd-level cache: 1 MBytes, 16-way set associative, 64 byte line size"
283*2b54f0dbSXin Li */
284*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
285*2b54f0dbSXin Li .size = 1024 * 1024,
286*2b54f0dbSXin Li .associativity = 16,
287*2b54f0dbSXin Li .sets = 1024,
288*2b54f0dbSXin Li .partitions = 1,
289*2b54f0dbSXin Li .line_size = 64,
290*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
291*2b54f0dbSXin Li };
292*2b54f0dbSXin Li break;
293*2b54f0dbSXin Li case 0x25:
294*2b54f0dbSXin Li /*
295*2b54f0dbSXin Li * Intel ISA Reference:
296*2b54f0dbSXin Li * "3rd-level cache: 2 MBytes, 8-way set associative, 64 byte line size, 2 lines per sector"
297*2b54f0dbSXin Li * Application Note 485:
298*2b54f0dbSXin Li * "3rd-level cache: 2-MB, 8-way set associative, sectored cache, 64-byte line size"
299*2b54f0dbSXin Li */
300*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
301*2b54f0dbSXin Li .size = 2 * 1024 * 1024,
302*2b54f0dbSXin Li .associativity = 8,
303*2b54f0dbSXin Li .sets = 4096,
304*2b54f0dbSXin Li .partitions = 1,
305*2b54f0dbSXin Li .line_size = 64,
306*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
307*2b54f0dbSXin Li };
308*2b54f0dbSXin Li break;
309*2b54f0dbSXin Li case 0x29:
310*2b54f0dbSXin Li /*
311*2b54f0dbSXin Li * Intel ISA Reference:
312*2b54f0dbSXin Li * "3rd-level cache: 4 MBytes, 8-way set associative, 64 byte line size, 2 lines per sector"
313*2b54f0dbSXin Li * Application Note 485:
314*2b54f0dbSXin Li * "3rd-level cache: 4-MB, 8-way set associative, sectored cache, 64-byte line size"
315*2b54f0dbSXin Li */
316*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
317*2b54f0dbSXin Li .size = 4 * 1024 * 1024,
318*2b54f0dbSXin Li .associativity = 8,
319*2b54f0dbSXin Li .sets = 8192,
320*2b54f0dbSXin Li .partitions = 1,
321*2b54f0dbSXin Li .line_size = 64,
322*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
323*2b54f0dbSXin Li };
324*2b54f0dbSXin Li break;
325*2b54f0dbSXin Li case 0x2C:
326*2b54f0dbSXin Li /*
327*2b54f0dbSXin Li * Intel ISA Reference:
328*2b54f0dbSXin Li * "1st-level data cache: 32 KBytes, 8-way set associative, 64 byte line size"
329*2b54f0dbSXin Li * Application Note 485:
330*2b54f0dbSXin Li * "1st-level data cache: 32-KB, 8-way set associative, 64-byte line size"
331*2b54f0dbSXin Li */
332*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
333*2b54f0dbSXin Li .size = 32 * 1024,
334*2b54f0dbSXin Li .associativity = 8,
335*2b54f0dbSXin Li .sets = 64,
336*2b54f0dbSXin Li .partitions = 1,
337*2b54f0dbSXin Li .line_size = 64,
338*2b54f0dbSXin Li };
339*2b54f0dbSXin Li break;
340*2b54f0dbSXin Li case 0x30:
341*2b54f0dbSXin Li /*
342*2b54f0dbSXin Li * Intel ISA Reference:
343*2b54f0dbSXin Li * "1st-level instruction cache: 32 KBytes, 8-way set associative, 64 byte line size"
344*2b54f0dbSXin Li * Application Note 485:
345*2b54f0dbSXin Li * "1st-level instruction cache: 32-KB, 8-way set associative, 64-byte line size"
346*2b54f0dbSXin Li */
347*2b54f0dbSXin Li cache->l1i = (struct cpuinfo_x86_cache) {
348*2b54f0dbSXin Li .size = 32 * 1024,
349*2b54f0dbSXin Li .associativity = 8,
350*2b54f0dbSXin Li .sets = 64,
351*2b54f0dbSXin Li .partitions = 1,
352*2b54f0dbSXin Li .line_size = 64,
353*2b54f0dbSXin Li };
354*2b54f0dbSXin Li break;
355*2b54f0dbSXin Li case 0x39:
356*2b54f0dbSXin Li /* Where does this come from? */
357*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
358*2b54f0dbSXin Li .size = 128 * 1024,
359*2b54f0dbSXin Li .associativity = 4,
360*2b54f0dbSXin Li .sets = 512,
361*2b54f0dbSXin Li .partitions = 1,
362*2b54f0dbSXin Li .line_size = 64,
363*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
364*2b54f0dbSXin Li };
365*2b54f0dbSXin Li break;
366*2b54f0dbSXin Li case 0x3A:
367*2b54f0dbSXin Li /* Where does this come from? */
368*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
369*2b54f0dbSXin Li .size = 192 * 1024,
370*2b54f0dbSXin Li .associativity = 6,
371*2b54f0dbSXin Li .sets = 512,
372*2b54f0dbSXin Li .partitions = 1,
373*2b54f0dbSXin Li .line_size = 64,
374*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
375*2b54f0dbSXin Li };
376*2b54f0dbSXin Li break;
377*2b54f0dbSXin Li case 0x3B:
378*2b54f0dbSXin Li /* Where does this come from? */
379*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
380*2b54f0dbSXin Li .size = 128 * 1024,
381*2b54f0dbSXin Li .associativity = 2,
382*2b54f0dbSXin Li .sets = 1024,
383*2b54f0dbSXin Li .partitions = 1,
384*2b54f0dbSXin Li .line_size = 64,
385*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
386*2b54f0dbSXin Li };
387*2b54f0dbSXin Li break;
388*2b54f0dbSXin Li case 0x3C:
389*2b54f0dbSXin Li /* Where does this come from? */
390*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
391*2b54f0dbSXin Li .size = 256 * 1024,
392*2b54f0dbSXin Li .associativity = 4,
393*2b54f0dbSXin Li .sets = 1024,
394*2b54f0dbSXin Li .partitions = 1,
395*2b54f0dbSXin Li .line_size = 64,
396*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
397*2b54f0dbSXin Li };
398*2b54f0dbSXin Li break;
399*2b54f0dbSXin Li case 0x3D:
400*2b54f0dbSXin Li /* Where does this come from? */
401*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
402*2b54f0dbSXin Li .size = 384 * 1024,
403*2b54f0dbSXin Li .associativity = 6,
404*2b54f0dbSXin Li .sets = 1024,
405*2b54f0dbSXin Li .partitions = 1,
406*2b54f0dbSXin Li .line_size = 64,
407*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
408*2b54f0dbSXin Li };
409*2b54f0dbSXin Li break;
410*2b54f0dbSXin Li case 0x3E:
411*2b54f0dbSXin Li /* Where does this come from? */
412*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
413*2b54f0dbSXin Li .size = 512 * 1024,
414*2b54f0dbSXin Li .associativity = 4,
415*2b54f0dbSXin Li .sets = 2048,
416*2b54f0dbSXin Li .partitions = 1,
417*2b54f0dbSXin Li .line_size = 64,
418*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
419*2b54f0dbSXin Li };
420*2b54f0dbSXin Li break;
421*2b54f0dbSXin Li case 0x40:
422*2b54f0dbSXin Li /*
423*2b54f0dbSXin Li * Intel ISA Reference:
424*2b54f0dbSXin Li * "No 2nd-level cache or, if processor contains a valid 2nd-level cache, no 3rd-level cache"
425*2b54f0dbSXin Li * Application Note 485:
426*2b54f0dbSXin Li * "No 2nd-level cache or, if processor contains a valid 2nd-level cache, no 3rd-level cache"
427*2b54f0dbSXin Li */
428*2b54f0dbSXin Li break;
429*2b54f0dbSXin Li case 0x41:
430*2b54f0dbSXin Li /*
431*2b54f0dbSXin Li * Intel ISA Reference:
432*2b54f0dbSXin Li * "2nd-level cache: 128 KBytes, 4-way set associative, 32 byte line size"
433*2b54f0dbSXin Li * Application Note 485:
434*2b54f0dbSXin Li * "2nd-level cache: 128-KB, 4-way set associative, 32-byte line size"
435*2b54f0dbSXin Li */
436*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
437*2b54f0dbSXin Li .size = 128 * 1024,
438*2b54f0dbSXin Li .associativity = 4,
439*2b54f0dbSXin Li .sets = 1024,
440*2b54f0dbSXin Li .partitions = 1,
441*2b54f0dbSXin Li .line_size = 32,
442*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
443*2b54f0dbSXin Li };
444*2b54f0dbSXin Li break;
445*2b54f0dbSXin Li case 0x42:
446*2b54f0dbSXin Li /*
447*2b54f0dbSXin Li * Intel ISA Reference:
448*2b54f0dbSXin Li * "2nd-level cache: 256 KBytes, 4-way set associative, 32 byte line size"
449*2b54f0dbSXin Li * Application Note 485:
450*2b54f0dbSXin Li * "2nd-level cache: 256-KB, 4-way set associative, 32-byte line size"
451*2b54f0dbSXin Li */
452*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
453*2b54f0dbSXin Li .size = 256 * 1024,
454*2b54f0dbSXin Li .associativity = 4,
455*2b54f0dbSXin Li .sets = 2048,
456*2b54f0dbSXin Li .partitions = 1,
457*2b54f0dbSXin Li .line_size = 32,
458*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
459*2b54f0dbSXin Li };
460*2b54f0dbSXin Li break;
461*2b54f0dbSXin Li case 0x43:
462*2b54f0dbSXin Li /*
463*2b54f0dbSXin Li * Intel ISA Reference:
464*2b54f0dbSXin Li * "2nd-level cache: 512 KBytes, 4-way set associative, 32 byte line size"
465*2b54f0dbSXin Li * Application Note 485:
466*2b54f0dbSXin Li * "2nd-level cache: 512-KB, 4-way set associative, 32-byte line size"
467*2b54f0dbSXin Li */
468*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
469*2b54f0dbSXin Li .size = 512 * 1024,
470*2b54f0dbSXin Li .associativity = 4,
471*2b54f0dbSXin Li .sets = 4096,
472*2b54f0dbSXin Li .partitions = 1,
473*2b54f0dbSXin Li .line_size = 32,
474*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
475*2b54f0dbSXin Li };
476*2b54f0dbSXin Li break;
477*2b54f0dbSXin Li case 0x44:
478*2b54f0dbSXin Li /*
479*2b54f0dbSXin Li * Intel ISA Reference:
480*2b54f0dbSXin Li * "2nd-level cache: 1 MByte, 4-way set associative, 32 byte line size"
481*2b54f0dbSXin Li * Application Note 485:
482*2b54f0dbSXin Li * "2nd-level cache: 1-MB, 4-way set associative, 32-byte line size"
483*2b54f0dbSXin Li */
484*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
485*2b54f0dbSXin Li .size = 1024 * 1024,
486*2b54f0dbSXin Li .associativity = 4,
487*2b54f0dbSXin Li .sets = 8192,
488*2b54f0dbSXin Li .partitions = 1,
489*2b54f0dbSXin Li .line_size = 32,
490*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
491*2b54f0dbSXin Li };
492*2b54f0dbSXin Li break;
493*2b54f0dbSXin Li case 0x45:
494*2b54f0dbSXin Li /*
495*2b54f0dbSXin Li * Intel ISA Reference:
496*2b54f0dbSXin Li * "2nd-level cache: 2 MByte, 4-way set associative, 32 byte line size"
497*2b54f0dbSXin Li * Application Note 485:
498*2b54f0dbSXin Li * "2nd-level cache: 2-MB, 4-way set associative, 32-byte line size"
499*2b54f0dbSXin Li */
500*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
501*2b54f0dbSXin Li .size = 2 * 1024 * 1024,
502*2b54f0dbSXin Li .associativity = 4,
503*2b54f0dbSXin Li .sets = 16384,
504*2b54f0dbSXin Li .partitions = 1,
505*2b54f0dbSXin Li .line_size = 32,
506*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
507*2b54f0dbSXin Li };
508*2b54f0dbSXin Li break;
509*2b54f0dbSXin Li case 0x46:
510*2b54f0dbSXin Li /*
511*2b54f0dbSXin Li * Intel ISA Reference:
512*2b54f0dbSXin Li * "3rd-level cache: 4 MByte, 4-way set associative, 64 byte line size"
513*2b54f0dbSXin Li * Application Note 485:
514*2b54f0dbSXin Li * "3rd-level cache: 4-MB, 4-way set associative, 64-byte line size"
515*2b54f0dbSXin Li */
516*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
517*2b54f0dbSXin Li .size = 4 * 1024 * 1024,
518*2b54f0dbSXin Li .associativity = 4,
519*2b54f0dbSXin Li .sets = 16384,
520*2b54f0dbSXin Li .partitions = 1,
521*2b54f0dbSXin Li .line_size = 64,
522*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
523*2b54f0dbSXin Li };
524*2b54f0dbSXin Li break;
525*2b54f0dbSXin Li case 0x47:
526*2b54f0dbSXin Li /*
527*2b54f0dbSXin Li * Intel ISA Reference:
528*2b54f0dbSXin Li * "3rd-level cache: 8 MByte, 8-way set associative, 64 byte line size"
529*2b54f0dbSXin Li * Application Note 485:
530*2b54f0dbSXin Li * "3rd-level cache: 8-MB, 8-way set associative, 64-byte line size"
531*2b54f0dbSXin Li */
532*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
533*2b54f0dbSXin Li .size = 8 * 1024 * 1024,
534*2b54f0dbSXin Li .associativity = 8,
535*2b54f0dbSXin Li .sets = 16384,
536*2b54f0dbSXin Li .partitions = 1,
537*2b54f0dbSXin Li .line_size = 64,
538*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
539*2b54f0dbSXin Li };
540*2b54f0dbSXin Li break;
541*2b54f0dbSXin Li case 0x48:
542*2b54f0dbSXin Li /*
543*2b54f0dbSXin Li * Intel ISA Reference:
544*2b54f0dbSXin Li * "2nd-level cache: 3MByte, 12-way set associative, 64 byte line size"
545*2b54f0dbSXin Li * Application Note 485:
546*2b54f0dbSXin Li * "2nd-level cache: 3-MB, 12-way set associative, 64-byte line size, unified on-die"
547*2b54f0dbSXin Li */
548*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
549*2b54f0dbSXin Li .size = 3 * 1024 * 1024,
550*2b54f0dbSXin Li .associativity = 12,
551*2b54f0dbSXin Li .sets = 4096,
552*2b54f0dbSXin Li .partitions = 1,
553*2b54f0dbSXin Li .line_size = 64,
554*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
555*2b54f0dbSXin Li };
556*2b54f0dbSXin Li break;
557*2b54f0dbSXin Li case 0x49:
558*2b54f0dbSXin Li /*
559*2b54f0dbSXin Li * Intel ISA Reference:
560*2b54f0dbSXin Li * "3rd-level cache: 4MB, 16-way set associative, 64-byte line size (Intel Xeon processor MP,
561*2b54f0dbSXin Li * Family 0FH, Model 06H); 2nd-level cache: 4 MByte, 16-way set associative, 64 byte line size"
562*2b54f0dbSXin Li * Application Note 485:
563*2b54f0dbSXin Li * "3rd-level cache: 4-MB, 16-way set associative, 64-byte line size (Intel Xeon processor MP,
564*2b54f0dbSXin Li * Family 0Fh, Model 06h)
565*2b54f0dbSXin Li * 2nd-level cache: 4-MB, 16-way set associative, 64-byte line size"
566*2b54f0dbSXin Li */
567*2b54f0dbSXin Li if ((vendor == cpuinfo_vendor_intel) && (model_info->model == 0x06) && (model_info->family == 0x0F)) {
568*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
569*2b54f0dbSXin Li .size = 4 * 1024 * 1024,
570*2b54f0dbSXin Li .associativity = 16,
571*2b54f0dbSXin Li .sets = 4096,
572*2b54f0dbSXin Li .partitions = 1,
573*2b54f0dbSXin Li .line_size = 64,
574*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
575*2b54f0dbSXin Li };
576*2b54f0dbSXin Li } else {
577*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
578*2b54f0dbSXin Li .size = 4 * 1024 * 1024,
579*2b54f0dbSXin Li .associativity = 16,
580*2b54f0dbSXin Li .sets = 4096,
581*2b54f0dbSXin Li .partitions = 1,
582*2b54f0dbSXin Li .line_size = 64,
583*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
584*2b54f0dbSXin Li };
585*2b54f0dbSXin Li }
586*2b54f0dbSXin Li break;
587*2b54f0dbSXin Li case 0x4A:
588*2b54f0dbSXin Li /*
589*2b54f0dbSXin Li * Intel ISA Reference:
590*2b54f0dbSXin Li * "3rd-level cache: 6MByte, 12-way set associative, 64 byte line size"
591*2b54f0dbSXin Li * Application Note 485:
592*2b54f0dbSXin Li * "3rd-level cache: 6-MB, 12-way set associative, 64-byte line size"
593*2b54f0dbSXin Li */
594*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
595*2b54f0dbSXin Li .size = 6 * 1024 * 1024,
596*2b54f0dbSXin Li .associativity = 12,
597*2b54f0dbSXin Li .sets = 8192,
598*2b54f0dbSXin Li .partitions = 1,
599*2b54f0dbSXin Li .line_size = 64,
600*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
601*2b54f0dbSXin Li };
602*2b54f0dbSXin Li break;
603*2b54f0dbSXin Li case 0x4B:
604*2b54f0dbSXin Li /*
605*2b54f0dbSXin Li * Intel ISA Reference:
606*2b54f0dbSXin Li * "3rd-level cache: 8MByte, 16-way set associative, 64 byte line size"
607*2b54f0dbSXin Li * Application Note 485:
608*2b54f0dbSXin Li * "3rd-level cache: 8-MB, 16-way set associative, 64-byte line size"
609*2b54f0dbSXin Li */
610*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
611*2b54f0dbSXin Li .size = 8 * 1024 * 1024,
612*2b54f0dbSXin Li .associativity = 16,
613*2b54f0dbSXin Li .sets = 8192,
614*2b54f0dbSXin Li .partitions = 1,
615*2b54f0dbSXin Li .line_size = 64,
616*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
617*2b54f0dbSXin Li };
618*2b54f0dbSXin Li break;
619*2b54f0dbSXin Li case 0x4C:
620*2b54f0dbSXin Li /*
621*2b54f0dbSXin Li * Intel ISA Reference:
622*2b54f0dbSXin Li * "3rd-level cache: 12MByte, 12-way set associative, 64 byte line size"
623*2b54f0dbSXin Li * Application Note 485:
624*2b54f0dbSXin Li * "3rd-level cache: 12-MB, 12-way set associative, 64-byte line size"
625*2b54f0dbSXin Li */
626*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
627*2b54f0dbSXin Li .size = 12 * 1024 * 1024,
628*2b54f0dbSXin Li .associativity = 12,
629*2b54f0dbSXin Li .sets = 16384,
630*2b54f0dbSXin Li .partitions = 1,
631*2b54f0dbSXin Li .line_size = 64,
632*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
633*2b54f0dbSXin Li };
634*2b54f0dbSXin Li break;
635*2b54f0dbSXin Li case 0x4D:
636*2b54f0dbSXin Li /*
637*2b54f0dbSXin Li * Intel ISA Reference:
638*2b54f0dbSXin Li * "3rd-level cache: 16MByte, 16-way set associative, 64 byte line size"
639*2b54f0dbSXin Li * Application Note 485:
640*2b54f0dbSXin Li * "3rd-level cache: 16-MB, 16-way set associative, 64-byte line size"
641*2b54f0dbSXin Li */
642*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
643*2b54f0dbSXin Li .size = 16 * 1024 * 1024,
644*2b54f0dbSXin Li .associativity = 16,
645*2b54f0dbSXin Li .sets = 16384,
646*2b54f0dbSXin Li .partitions = 1,
647*2b54f0dbSXin Li .line_size = 64,
648*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
649*2b54f0dbSXin Li };
650*2b54f0dbSXin Li break;
651*2b54f0dbSXin Li case 0x4E:
652*2b54f0dbSXin Li /*
653*2b54f0dbSXin Li * Intel ISA Reference:
654*2b54f0dbSXin Li * "2nd-level cache: 6MByte, 24-way set associative, 64 byte line size"
655*2b54f0dbSXin Li * Application Note 485:
656*2b54f0dbSXin Li * "2nd-level cache: 6-MB, 24-way set associative, 64-byte line size"
657*2b54f0dbSXin Li */
658*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
659*2b54f0dbSXin Li .size = 6 * 1024 * 1024,
660*2b54f0dbSXin Li .associativity = 24,
661*2b54f0dbSXin Li .sets = 4096,
662*2b54f0dbSXin Li .partitions = 1,
663*2b54f0dbSXin Li .line_size = 64,
664*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
665*2b54f0dbSXin Li };
666*2b54f0dbSXin Li break;
667*2b54f0dbSXin Li case 0x4F:
668*2b54f0dbSXin Li /*
669*2b54f0dbSXin Li * Intel ISA Reference:
670*2b54f0dbSXin Li * "Instruction TLB: 4 KByte pages, 32 entries"
671*2b54f0dbSXin Li * Application Note 485:
672*2b54f0dbSXin Li * "Instruction TLB: 4-KB pages, 32 entries"
673*2b54f0dbSXin Li */
674*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
675*2b54f0dbSXin Li .entries = 32,
676*2b54f0dbSXin Li /* Assume full associativity from nearby entries: manual lacks detail */
677*2b54f0dbSXin Li .associativity = 32,
678*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
679*2b54f0dbSXin Li };
680*2b54f0dbSXin Li break;
681*2b54f0dbSXin Li case 0x50:
682*2b54f0dbSXin Li /*
683*2b54f0dbSXin Li * Intel ISA Reference:
684*2b54f0dbSXin Li * "Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 64 entries"
685*2b54f0dbSXin Li * Application Note 485:
686*2b54f0dbSXin Li * "Instruction TLB: 4-KB, 2-MB or 4-MB pages, fully associative, 64 entries"
687*2b54f0dbSXin Li */
688*2b54f0dbSXin Li *itlb_4KB = *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) {
689*2b54f0dbSXin Li .entries = 64,
690*2b54f0dbSXin Li .associativity = 64,
691*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
692*2b54f0dbSXin Li };
693*2b54f0dbSXin Li break;
694*2b54f0dbSXin Li case 0x51:
695*2b54f0dbSXin Li /*
696*2b54f0dbSXin Li * Intel ISA Reference:
697*2b54f0dbSXin Li * "Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 128 entries"
698*2b54f0dbSXin Li * Application Note 485:
699*2b54f0dbSXin Li * "Instruction TLB: 4-KB, 2-MB or 4-MB pages, fully associative, 128 entries"
700*2b54f0dbSXin Li */
701*2b54f0dbSXin Li *itlb_4KB = *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) {
702*2b54f0dbSXin Li .entries = 128,
703*2b54f0dbSXin Li .associativity = 128,
704*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
705*2b54f0dbSXin Li };
706*2b54f0dbSXin Li break;
707*2b54f0dbSXin Li case 0x52:
708*2b54f0dbSXin Li /*
709*2b54f0dbSXin Li * Intel ISA Reference:
710*2b54f0dbSXin Li * "Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 256 entries"
711*2b54f0dbSXin Li * Application Note 485:
712*2b54f0dbSXin Li * "Instruction TLB: 4-KB, 2-MB or 4-MB pages, fully associative, 256 entries"
713*2b54f0dbSXin Li */
714*2b54f0dbSXin Li *itlb_4KB = *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) {
715*2b54f0dbSXin Li .entries = 256,
716*2b54f0dbSXin Li .associativity = 256,
717*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
718*2b54f0dbSXin Li };
719*2b54f0dbSXin Li break;
720*2b54f0dbSXin Li case 0x55:
721*2b54f0dbSXin Li /*
722*2b54f0dbSXin Li * Intel ISA Reference:
723*2b54f0dbSXin Li * "Instruction TLB: 2-MByte or 4-MByte pages, fully associative, 7 entries"
724*2b54f0dbSXin Li * Application Note 485:
725*2b54f0dbSXin Li * "Instruction TLB: 2-MB or 4-MB pages, fully associative, 7 entries"
726*2b54f0dbSXin Li */
727*2b54f0dbSXin Li *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) {
728*2b54f0dbSXin Li .entries = 7,
729*2b54f0dbSXin Li .associativity = 7,
730*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
731*2b54f0dbSXin Li };
732*2b54f0dbSXin Li break;
733*2b54f0dbSXin Li case 0x56:
734*2b54f0dbSXin Li /*
735*2b54f0dbSXin Li * Intel ISA Reference:
736*2b54f0dbSXin Li * "Data TLB0: 4 MByte pages, 4-way set associative, 16 entries"
737*2b54f0dbSXin Li * Application Note 485:
738*2b54f0dbSXin Li * "L1 Data TLB: 4-MB pages, 4-way set associative, 16 entries"
739*2b54f0dbSXin Li */
740*2b54f0dbSXin Li *dtlb0_4MB = (struct cpuinfo_tlb) {
741*2b54f0dbSXin Li .entries = 16,
742*2b54f0dbSXin Li .associativity = 4,
743*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4MB,
744*2b54f0dbSXin Li };
745*2b54f0dbSXin Li break;
746*2b54f0dbSXin Li case 0x57:
747*2b54f0dbSXin Li /*
748*2b54f0dbSXin Li * Intel ISA Reference:
749*2b54f0dbSXin Li * "Data TLB0: 4 KByte pages, 4-way associative, 16 entries"
750*2b54f0dbSXin Li * Application Note 485:
751*2b54f0dbSXin Li * "L1 Data TLB: 4-KB pages, 4-way set associative, 16 entries"
752*2b54f0dbSXin Li */
753*2b54f0dbSXin Li *dtlb0_4KB = (struct cpuinfo_tlb) {
754*2b54f0dbSXin Li .entries = 16,
755*2b54f0dbSXin Li .associativity = 4,
756*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
757*2b54f0dbSXin Li };
758*2b54f0dbSXin Li break;
759*2b54f0dbSXin Li case 0x59:
760*2b54f0dbSXin Li /*
761*2b54f0dbSXin Li * Intel ISA Reference:
762*2b54f0dbSXin Li * "Data TLB0: 4 KByte pages, fully associative, 16 entries"
763*2b54f0dbSXin Li * Application Note 485:
764*2b54f0dbSXin Li * "Data TLB0: 4-KB pages, fully associative, 16 entries"
765*2b54f0dbSXin Li */
766*2b54f0dbSXin Li *dtlb0_4KB = (struct cpuinfo_tlb) {
767*2b54f0dbSXin Li .entries = 16,
768*2b54f0dbSXin Li .associativity = 16,
769*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
770*2b54f0dbSXin Li };
771*2b54f0dbSXin Li break;
772*2b54f0dbSXin Li case 0x5A:
773*2b54f0dbSXin Li /*
774*2b54f0dbSXin Li * Intel ISA Reference:
775*2b54f0dbSXin Li * "Data TLB0: 2 MByte or 4 MByte pages, 4-way set associative, 32 entries"
776*2b54f0dbSXin Li * Application Note 485:
777*2b54f0dbSXin Li * "Data TLB0: 2-MB or 4-MB pages, 4-way associative, 32 entries"
778*2b54f0dbSXin Li */
779*2b54f0dbSXin Li *dtlb0_2MB = *dtlb0_4MB = (struct cpuinfo_tlb) {
780*2b54f0dbSXin Li .entries = 32,
781*2b54f0dbSXin Li .associativity = 4,
782*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
783*2b54f0dbSXin Li };
784*2b54f0dbSXin Li break;
785*2b54f0dbSXin Li case 0x5B:
786*2b54f0dbSXin Li /*
787*2b54f0dbSXin Li * Intel ISA Reference:
788*2b54f0dbSXin Li * "Data TLB: 4 KByte and 4 MByte pages, 64 entries"
789*2b54f0dbSXin Li * Application Note 485:
790*2b54f0dbSXin Li * "Data TLB: 4-KB or 4-MB pages, fully associative, 64 entries"
791*2b54f0dbSXin Li */
792*2b54f0dbSXin Li *dtlb_4KB = *dtlb_4MB = (struct cpuinfo_tlb) {
793*2b54f0dbSXin Li .entries = 64,
794*2b54f0dbSXin Li .associativity = 64,
795*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB,
796*2b54f0dbSXin Li };
797*2b54f0dbSXin Li break;
798*2b54f0dbSXin Li case 0x5C:
799*2b54f0dbSXin Li /*
800*2b54f0dbSXin Li * Intel ISA Reference:
801*2b54f0dbSXin Li * "Data TLB: 4 KByte and 4 MByte pages, 128 entries"
802*2b54f0dbSXin Li * Application Note 485:
803*2b54f0dbSXin Li * "Data TLB: 4-KB or 4-MB pages, fully associative, 128 entries"
804*2b54f0dbSXin Li */
805*2b54f0dbSXin Li *dtlb_4KB = *dtlb_4MB = (struct cpuinfo_tlb) {
806*2b54f0dbSXin Li .entries = 128,
807*2b54f0dbSXin Li .associativity = 128,
808*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB,
809*2b54f0dbSXin Li };
810*2b54f0dbSXin Li break;
811*2b54f0dbSXin Li case 0x5D:
812*2b54f0dbSXin Li /*
813*2b54f0dbSXin Li * Intel ISA Reference:
814*2b54f0dbSXin Li * "Data TLB: 4 KByte and 4 MByte pages, 256 entries"
815*2b54f0dbSXin Li * Application Note 485:
816*2b54f0dbSXin Li * "Data TLB: 4-KB or 4-MB pages, fully associative, 256 entries"
817*2b54f0dbSXin Li */
818*2b54f0dbSXin Li *dtlb_4KB = *dtlb_4MB = (struct cpuinfo_tlb) {
819*2b54f0dbSXin Li .entries = 256,
820*2b54f0dbSXin Li .associativity = 256,
821*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB,
822*2b54f0dbSXin Li };
823*2b54f0dbSXin Li break;
824*2b54f0dbSXin Li case 0x60:
825*2b54f0dbSXin Li /*
826*2b54f0dbSXin Li * Application Note 485:
827*2b54f0dbSXin Li * "1st-level data cache: 16-KB, 8-way set associative, sectored cache, 64-byte line size"
828*2b54f0dbSXin Li */
829*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
830*2b54f0dbSXin Li .size = 16 * 1024,
831*2b54f0dbSXin Li .associativity = 8,
832*2b54f0dbSXin Li .sets = 32,
833*2b54f0dbSXin Li .partitions = 1,
834*2b54f0dbSXin Li .line_size = 64,
835*2b54f0dbSXin Li };
836*2b54f0dbSXin Li break;
837*2b54f0dbSXin Li case 0x61:
838*2b54f0dbSXin Li /*
839*2b54f0dbSXin Li * Intel ISA Reference:
840*2b54f0dbSXin Li * "Instruction TLB: 4 KByte pages, fully associative, 48 entries"
841*2b54f0dbSXin Li */
842*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
843*2b54f0dbSXin Li .entries = 48,
844*2b54f0dbSXin Li .associativity = 48,
845*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
846*2b54f0dbSXin Li };
847*2b54f0dbSXin Li break;
848*2b54f0dbSXin Li case 0x63:
849*2b54f0dbSXin Li /*
850*2b54f0dbSXin Li * Intel ISA Reference:
851*2b54f0dbSXin Li * "Data TLB: 2 MByte or 4 MByte pages, 4-way set associative, 32 entries and
852*2b54f0dbSXin Li * a separate array with 1 GByte pages, 4-way set associative, 4 entries"
853*2b54f0dbSXin Li */
854*2b54f0dbSXin Li *dtlb_2MB = *dtlb_4MB = (struct cpuinfo_tlb) {
855*2b54f0dbSXin Li .entries = 32,
856*2b54f0dbSXin Li .associativity = 4,
857*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
858*2b54f0dbSXin Li };
859*2b54f0dbSXin Li *dtlb_1GB = (struct cpuinfo_tlb) {
860*2b54f0dbSXin Li .entries = 4,
861*2b54f0dbSXin Li .associativity = 4,
862*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_1GB,
863*2b54f0dbSXin Li };
864*2b54f0dbSXin Li break;
865*2b54f0dbSXin Li case 0x64:
866*2b54f0dbSXin Li /*
867*2b54f0dbSXin Li * Intel ISA Reference:
868*2b54f0dbSXin Li * "Data TLB: 4 KByte pages, 4-way set associative, 512 entries"
869*2b54f0dbSXin Li *
870*2b54f0dbSXin Li */
871*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
872*2b54f0dbSXin Li .entries = 512,
873*2b54f0dbSXin Li .associativity = 4,
874*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
875*2b54f0dbSXin Li };
876*2b54f0dbSXin Li break;
877*2b54f0dbSXin Li case 0x66:
878*2b54f0dbSXin Li /*
879*2b54f0dbSXin Li * Application Note 485:
880*2b54f0dbSXin Li * "1st-level data cache: 8-KB, 4-way set associative, sectored cache, 64-byte line size"
881*2b54f0dbSXin Li */
882*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
883*2b54f0dbSXin Li .size = 8 * 1024,
884*2b54f0dbSXin Li .associativity = 4,
885*2b54f0dbSXin Li .sets = 32,
886*2b54f0dbSXin Li .partitions = 1,
887*2b54f0dbSXin Li .line_size = 64,
888*2b54f0dbSXin Li };
889*2b54f0dbSXin Li break;
890*2b54f0dbSXin Li case 0x67:
891*2b54f0dbSXin Li /*
892*2b54f0dbSXin Li * Application Note 485:
893*2b54f0dbSXin Li * "1st-level data cache: 16-KB, 4-way set associative, sectored cache, 64-byte line size"
894*2b54f0dbSXin Li */
895*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
896*2b54f0dbSXin Li .size = 16 * 1024,
897*2b54f0dbSXin Li .associativity = 4,
898*2b54f0dbSXin Li .sets = 64,
899*2b54f0dbSXin Li .partitions = 1,
900*2b54f0dbSXin Li .line_size = 64,
901*2b54f0dbSXin Li };
902*2b54f0dbSXin Li break;
903*2b54f0dbSXin Li case 0x68:
904*2b54f0dbSXin Li /*
905*2b54f0dbSXin Li * Application Note 485:
906*2b54f0dbSXin Li * "1st-level data cache: 32-KB, 4 way set associative, sectored cache, 64-byte line size"
907*2b54f0dbSXin Li */
908*2b54f0dbSXin Li cache->l1d = (struct cpuinfo_x86_cache) {
909*2b54f0dbSXin Li .size = 32 * 1024,
910*2b54f0dbSXin Li .associativity = 4,
911*2b54f0dbSXin Li .sets = 128,
912*2b54f0dbSXin Li .partitions = 1,
913*2b54f0dbSXin Li .line_size = 64,
914*2b54f0dbSXin Li };
915*2b54f0dbSXin Li break;
916*2b54f0dbSXin Li case 0x6A:
917*2b54f0dbSXin Li /*
918*2b54f0dbSXin Li * Intel ISA Reference:
919*2b54f0dbSXin Li * "uTLB: 4 KByte pages, 8-way set associative, 64 entries"
920*2b54f0dbSXin Li */
921*2b54f0dbSXin Li
922*2b54f0dbSXin Li /* uTLB is, an fact, a normal 1-level DTLB on Silvermont & Knoghts Landing */
923*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
924*2b54f0dbSXin Li .entries = 64,
925*2b54f0dbSXin Li .associativity = 8,
926*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
927*2b54f0dbSXin Li };
928*2b54f0dbSXin Li break;
929*2b54f0dbSXin Li case 0x6B:
930*2b54f0dbSXin Li /*
931*2b54f0dbSXin Li * Intel ISA Reference:
932*2b54f0dbSXin Li * "DTLB: 4 KByte pages, 8-way set associative, 256 entries"
933*2b54f0dbSXin Li */
934*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
935*2b54f0dbSXin Li .entries = 256,
936*2b54f0dbSXin Li .associativity = 8,
937*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
938*2b54f0dbSXin Li };
939*2b54f0dbSXin Li break;
940*2b54f0dbSXin Li case 0x6C:
941*2b54f0dbSXin Li /*
942*2b54f0dbSXin Li * Intel ISA Reference:
943*2b54f0dbSXin Li * "DTLB: 2M/4M pages, 8-way set associative, 128 entries"
944*2b54f0dbSXin Li */
945*2b54f0dbSXin Li *dtlb_2MB = *dtlb_4MB = (struct cpuinfo_tlb) {
946*2b54f0dbSXin Li .entries = 128,
947*2b54f0dbSXin Li .associativity = 8,
948*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
949*2b54f0dbSXin Li };
950*2b54f0dbSXin Li break;
951*2b54f0dbSXin Li case 0x6D:
952*2b54f0dbSXin Li /*
953*2b54f0dbSXin Li * Intel ISA Reference:
954*2b54f0dbSXin Li * "DTLB: 1 GByte pages, fully associative, 16 entries"
955*2b54f0dbSXin Li */
956*2b54f0dbSXin Li *dtlb_1GB = (struct cpuinfo_tlb) {
957*2b54f0dbSXin Li .entries = 16,
958*2b54f0dbSXin Li .associativity = 16,
959*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_1GB,
960*2b54f0dbSXin Li };
961*2b54f0dbSXin Li break;
962*2b54f0dbSXin Li case 0x70:
963*2b54f0dbSXin Li /*
964*2b54f0dbSXin Li * Intel ISA Reference:
965*2b54f0dbSXin Li * "Trace cache: 12 K-uop, 8-way set associative"
966*2b54f0dbSXin Li * Application Note 485:
967*2b54f0dbSXin Li * "Trace cache: 12K-uops, 8-way set associative"
968*2b54f0dbSXin Li * Cyrix CPU Detection Guide and Geode GX1 Processor Series:
969*2b54f0dbSXin Li * "TLB, 32 entries, 4-way set associative, 4K-Byte Pages"
970*2b54f0dbSXin Li */
971*2b54f0dbSXin Li switch (vendor) {
972*2b54f0dbSXin Li #if CPUINFO_ARCH_X86
973*2b54f0dbSXin Li case cpuinfo_vendor_cyrix:
974*2b54f0dbSXin Li case cpuinfo_vendor_nsc:
975*2b54f0dbSXin Li *dtlb_4KB = *itlb_4KB = (struct cpuinfo_tlb) {
976*2b54f0dbSXin Li .entries = 32,
977*2b54f0dbSXin Li .associativity = 4,
978*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
979*2b54f0dbSXin Li };
980*2b54f0dbSXin Li break;
981*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_X86 */
982*2b54f0dbSXin Li default:
983*2b54f0dbSXin Li cache->trace = (struct cpuinfo_trace_cache) {
984*2b54f0dbSXin Li .uops = 12 * 1024,
985*2b54f0dbSXin Li .associativity = 8,
986*2b54f0dbSXin Li };
987*2b54f0dbSXin Li }
988*2b54f0dbSXin Li break;
989*2b54f0dbSXin Li case 0x71:
990*2b54f0dbSXin Li /*
991*2b54f0dbSXin Li * Intel ISA Reference:
992*2b54f0dbSXin Li * "Trace cache: 16 K-uop, 8-way set associative"
993*2b54f0dbSXin Li * Application Note 485:
994*2b54f0dbSXin Li * "Trace cache: 16K-uops, 8-way set associative"
995*2b54f0dbSXin Li */
996*2b54f0dbSXin Li cache->trace = (struct cpuinfo_trace_cache) {
997*2b54f0dbSXin Li .uops = 16 * 1024,
998*2b54f0dbSXin Li .associativity = 8,
999*2b54f0dbSXin Li };
1000*2b54f0dbSXin Li break;
1001*2b54f0dbSXin Li case 0x72:
1002*2b54f0dbSXin Li /*
1003*2b54f0dbSXin Li * Intel ISA Reference:
1004*2b54f0dbSXin Li * "Trace cache: 32 K-μop, 8-way set associative"
1005*2b54f0dbSXin Li * Application Note 485:
1006*2b54f0dbSXin Li * "Trace cache: 32K-uops, 8-way set associative"
1007*2b54f0dbSXin Li */
1008*2b54f0dbSXin Li cache->trace = (struct cpuinfo_trace_cache) {
1009*2b54f0dbSXin Li .uops = 32 * 1024,
1010*2b54f0dbSXin Li .associativity = 8,
1011*2b54f0dbSXin Li };
1012*2b54f0dbSXin Li break;
1013*2b54f0dbSXin Li case 0x73:
1014*2b54f0dbSXin Li /* Where does this come from? */
1015*2b54f0dbSXin Li cache->trace = (struct cpuinfo_trace_cache) {
1016*2b54f0dbSXin Li .uops = 64 * 1024,
1017*2b54f0dbSXin Li .associativity = 8,
1018*2b54f0dbSXin Li };
1019*2b54f0dbSXin Li break;
1020*2b54f0dbSXin Li case 0x76:
1021*2b54f0dbSXin Li /*
1022*2b54f0dbSXin Li * Intel ISA Reference:
1023*2b54f0dbSXin Li * "Instruction TLB: 2M/4M pages, fully associative, 8 entries"
1024*2b54f0dbSXin Li * Application Note 485:
1025*2b54f0dbSXin Li * "Instruction TLB: 2M/4M pages, fully associative, 8 entries"
1026*2b54f0dbSXin Li */
1027*2b54f0dbSXin Li *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) {
1028*2b54f0dbSXin Li .entries = 8,
1029*2b54f0dbSXin Li .associativity = 8,
1030*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
1031*2b54f0dbSXin Li };
1032*2b54f0dbSXin Li break;
1033*2b54f0dbSXin Li case 0x78:
1034*2b54f0dbSXin Li /*
1035*2b54f0dbSXin Li * Intel ISA Reference:
1036*2b54f0dbSXin Li * "2nd-level cache: 1 MByte, 4-way set associative, 64byte line size"
1037*2b54f0dbSXin Li * Application Note 485:
1038*2b54f0dbSXin Li * "2nd-level cache: 1-MB, 4-way set associative, 64-byte line size"
1039*2b54f0dbSXin Li */
1040*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1041*2b54f0dbSXin Li .size = 1024 * 1024,
1042*2b54f0dbSXin Li .associativity = 4,
1043*2b54f0dbSXin Li .sets = 4096,
1044*2b54f0dbSXin Li .partitions = 1,
1045*2b54f0dbSXin Li .line_size = 64,
1046*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1047*2b54f0dbSXin Li };
1048*2b54f0dbSXin Li break;
1049*2b54f0dbSXin Li case 0x79:
1050*2b54f0dbSXin Li /*
1051*2b54f0dbSXin Li * Intel ISA Reference:
1052*2b54f0dbSXin Li * "2nd-level cache: 128 KByte, 8-way set associative, 64 byte line size, 2 lines per sector"
1053*2b54f0dbSXin Li * Application Note 485:
1054*2b54f0dbSXin Li * "2nd-level cache: 128-KB, 8-way set associative, sectored cache, 64-byte line size"
1055*2b54f0dbSXin Li */
1056*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1057*2b54f0dbSXin Li .size = 128 * 1024,
1058*2b54f0dbSXin Li .associativity = 8,
1059*2b54f0dbSXin Li .sets = 256,
1060*2b54f0dbSXin Li .partitions = 1,
1061*2b54f0dbSXin Li .line_size = 64,
1062*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1063*2b54f0dbSXin Li };
1064*2b54f0dbSXin Li break;
1065*2b54f0dbSXin Li case 0x7A:
1066*2b54f0dbSXin Li /*
1067*2b54f0dbSXin Li * Intel ISA Reference:
1068*2b54f0dbSXin Li * "2nd-level cache: 256 KByte, 8-way set associative, 64 byte line size, 2 lines per sector"
1069*2b54f0dbSXin Li * Application Note 485:
1070*2b54f0dbSXin Li * "2nd-level cache: 256-KB, 8-way set associative, sectored cache, 64-byte line size"
1071*2b54f0dbSXin Li */
1072*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1073*2b54f0dbSXin Li .size = 256 * 1024,
1074*2b54f0dbSXin Li .associativity = 8,
1075*2b54f0dbSXin Li .sets = 512,
1076*2b54f0dbSXin Li .partitions = 1,
1077*2b54f0dbSXin Li .line_size = 64,
1078*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1079*2b54f0dbSXin Li };
1080*2b54f0dbSXin Li break;
1081*2b54f0dbSXin Li case 0x7B:
1082*2b54f0dbSXin Li /*
1083*2b54f0dbSXin Li * Intel ISA Reference:
1084*2b54f0dbSXin Li * "2nd-level cache: 512 KByte, 8-way set associative, 64 byte line size, 2 lines per sector"
1085*2b54f0dbSXin Li * Application Note 485:
1086*2b54f0dbSXin Li * "2nd-level cache: 512-KB, 8-way set associative, sectored cache, 64-byte line size"
1087*2b54f0dbSXin Li */
1088*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1089*2b54f0dbSXin Li .size = 512 * 1024,
1090*2b54f0dbSXin Li .associativity = 8,
1091*2b54f0dbSXin Li .sets = 1024,
1092*2b54f0dbSXin Li .partitions = 1,
1093*2b54f0dbSXin Li .line_size = 64,
1094*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1095*2b54f0dbSXin Li };
1096*2b54f0dbSXin Li break;
1097*2b54f0dbSXin Li case 0x7C:
1098*2b54f0dbSXin Li /*
1099*2b54f0dbSXin Li * Intel ISA Reference:
1100*2b54f0dbSXin Li * "2nd-level cache: 1 MByte, 8-way set associative, 64 byte line size, 2 lines per sector"
1101*2b54f0dbSXin Li * Application Note 485:
1102*2b54f0dbSXin Li * "2nd-level cache: 1-MB, 8-way set associative, sectored cache, 64-byte line size"
1103*2b54f0dbSXin Li */
1104*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1105*2b54f0dbSXin Li .size = 1024 * 1024,
1106*2b54f0dbSXin Li .associativity = 8,
1107*2b54f0dbSXin Li .sets = 2048,
1108*2b54f0dbSXin Li .partitions = 1,
1109*2b54f0dbSXin Li .line_size = 64,
1110*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1111*2b54f0dbSXin Li };
1112*2b54f0dbSXin Li break;
1113*2b54f0dbSXin Li case 0x7D:
1114*2b54f0dbSXin Li /*
1115*2b54f0dbSXin Li * Intel ISA Reference:
1116*2b54f0dbSXin Li * "2nd-level cache: 2 MByte, 8-way set associative, 64byte line size"
1117*2b54f0dbSXin Li * Application Note 485:
1118*2b54f0dbSXin Li * "2nd-level cache: 2-MB, 8-way set associative, 64-byte line size"
1119*2b54f0dbSXin Li */
1120*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1121*2b54f0dbSXin Li .size = 2 * 1024 * 1024,
1122*2b54f0dbSXin Li .associativity = 8,
1123*2b54f0dbSXin Li .sets = 4096,
1124*2b54f0dbSXin Li .partitions = 1,
1125*2b54f0dbSXin Li .line_size = 64,
1126*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1127*2b54f0dbSXin Li };
1128*2b54f0dbSXin Li break;
1129*2b54f0dbSXin Li case 0x7F:
1130*2b54f0dbSXin Li /*
1131*2b54f0dbSXin Li * Intel ISA Reference:
1132*2b54f0dbSXin Li * "2nd-level cache: 512 KByte, 2-way set associative, 64-byte line size"
1133*2b54f0dbSXin Li * Application Note 485:
1134*2b54f0dbSXin Li * "2nd-level cache: 512-KB, 2-way set associative, 64-byte line size"
1135*2b54f0dbSXin Li */
1136*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1137*2b54f0dbSXin Li .size = 512 * 1024,
1138*2b54f0dbSXin Li .associativity = 2,
1139*2b54f0dbSXin Li .sets = 4096,
1140*2b54f0dbSXin Li .partitions = 1,
1141*2b54f0dbSXin Li .line_size = 64,
1142*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1143*2b54f0dbSXin Li };
1144*2b54f0dbSXin Li break;
1145*2b54f0dbSXin Li case 0x80:
1146*2b54f0dbSXin Li /*
1147*2b54f0dbSXin Li * Intel ISA Reference:
1148*2b54f0dbSXin Li * "2nd-level cache: 512 KByte, 8-way set associative, 64-byte line size"
1149*2b54f0dbSXin Li * Application Note 485:
1150*2b54f0dbSXin Li * "2nd-level cache: 512-KB, 8-way set associative, 64-byte line size"
1151*2b54f0dbSXin Li * Cyrix CPU Detection Guide and Geode GX1 Processor Series:
1152*2b54f0dbSXin Li * "Level 1 Cache, 16K, 4-way set associative, 16 Bytes/Line"
1153*2b54f0dbSXin Li */
1154*2b54f0dbSXin Li switch (vendor) {
1155*2b54f0dbSXin Li #if CPUINFO_ARCH_X86 && !defined(__ANDROID__)
1156*2b54f0dbSXin Li case cpuinfo_vendor_cyrix:
1157*2b54f0dbSXin Li case cpuinfo_vendor_nsc:
1158*2b54f0dbSXin Li cache->l1i = cache->l1d = (struct cpuinfo_x86_cache) {
1159*2b54f0dbSXin Li .size = 16 * 1024,
1160*2b54f0dbSXin Li .associativity = 4,
1161*2b54f0dbSXin Li .sets = 256,
1162*2b54f0dbSXin Li .partitions = 1,
1163*2b54f0dbSXin Li .line_size = 16,
1164*2b54f0dbSXin Li .flags = CPUINFO_CACHE_UNIFIED,
1165*2b54f0dbSXin Li };
1166*2b54f0dbSXin Li break;
1167*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_X86 */
1168*2b54f0dbSXin Li default:
1169*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1170*2b54f0dbSXin Li .size = 512 * 1024,
1171*2b54f0dbSXin Li .associativity = 8,
1172*2b54f0dbSXin Li .sets = 1024,
1173*2b54f0dbSXin Li .partitions = 1,
1174*2b54f0dbSXin Li .line_size = 64,
1175*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1176*2b54f0dbSXin Li };
1177*2b54f0dbSXin Li }
1178*2b54f0dbSXin Li break;
1179*2b54f0dbSXin Li case 0x82:
1180*2b54f0dbSXin Li /*
1181*2b54f0dbSXin Li * Intel ISA Reference:
1182*2b54f0dbSXin Li * "2nd-level cache: 256 KByte, 8-way set associative, 32 byte line size"
1183*2b54f0dbSXin Li * Application Note 485:
1184*2b54f0dbSXin Li * "2nd-level cache: 256-KB, 8-way set associative, 32-byte line size"
1185*2b54f0dbSXin Li */
1186*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1187*2b54f0dbSXin Li .size = 256 * 1024,
1188*2b54f0dbSXin Li .associativity = 4,
1189*2b54f0dbSXin Li .sets = 2048,
1190*2b54f0dbSXin Li .partitions = 1,
1191*2b54f0dbSXin Li .line_size = 32,
1192*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1193*2b54f0dbSXin Li };
1194*2b54f0dbSXin Li break;
1195*2b54f0dbSXin Li case 0x83:
1196*2b54f0dbSXin Li /*
1197*2b54f0dbSXin Li * Intel ISA Reference:
1198*2b54f0dbSXin Li * "2nd-level cache: 512 KByte, 8-way set associative, 32 byte line size"
1199*2b54f0dbSXin Li * Application Note 485:
1200*2b54f0dbSXin Li * "2nd-level cache: 512-KB, 8-way set associative, 32-byte line size"
1201*2b54f0dbSXin Li */
1202*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1203*2b54f0dbSXin Li .size = 512 * 1024,
1204*2b54f0dbSXin Li .associativity = 8,
1205*2b54f0dbSXin Li .sets = 2048,
1206*2b54f0dbSXin Li .partitions = 1,
1207*2b54f0dbSXin Li .line_size = 32,
1208*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1209*2b54f0dbSXin Li };
1210*2b54f0dbSXin Li break;
1211*2b54f0dbSXin Li case 0x84:
1212*2b54f0dbSXin Li /*
1213*2b54f0dbSXin Li * Intel ISA Reference:
1214*2b54f0dbSXin Li * "2nd-level cache: 1 MByte, 8-way set associative, 32 byte line size"
1215*2b54f0dbSXin Li * Application Note 485:
1216*2b54f0dbSXin Li * "2nd-level cache: 1-MB, 8-way set associative, 32-byte line size"
1217*2b54f0dbSXin Li */
1218*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1219*2b54f0dbSXin Li .size = 1024 * 1024,
1220*2b54f0dbSXin Li .associativity = 8,
1221*2b54f0dbSXin Li .sets = 4096,
1222*2b54f0dbSXin Li .partitions = 1,
1223*2b54f0dbSXin Li .line_size = 32,
1224*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1225*2b54f0dbSXin Li };
1226*2b54f0dbSXin Li break;
1227*2b54f0dbSXin Li case 0x85:
1228*2b54f0dbSXin Li /*
1229*2b54f0dbSXin Li * Intel ISA Reference:
1230*2b54f0dbSXin Li * "2nd-level cache: 2 MByte, 8-way set associative, 32 byte line size"
1231*2b54f0dbSXin Li * Application Note 485:
1232*2b54f0dbSXin Li * "2nd-level cache: 2-MB, 8-way set associative, 32-byte line size"
1233*2b54f0dbSXin Li */
1234*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1235*2b54f0dbSXin Li .size = 2 * 1024 * 1024,
1236*2b54f0dbSXin Li .associativity = 8,
1237*2b54f0dbSXin Li .sets = 8192,
1238*2b54f0dbSXin Li .partitions = 1,
1239*2b54f0dbSXin Li .line_size = 32,
1240*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1241*2b54f0dbSXin Li };
1242*2b54f0dbSXin Li break;
1243*2b54f0dbSXin Li case 0x86:
1244*2b54f0dbSXin Li /*
1245*2b54f0dbSXin Li * Intel ISA Reference:
1246*2b54f0dbSXin Li * "2nd-level cache: 512 KByte, 4-way set associative, 64 byte line size"
1247*2b54f0dbSXin Li * Application Note 485:
1248*2b54f0dbSXin Li * "2nd-level cache: 512-KB, 4-way set associative, 64-byte line size"
1249*2b54f0dbSXin Li */
1250*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1251*2b54f0dbSXin Li .size = 512 * 1024,
1252*2b54f0dbSXin Li .associativity = 4,
1253*2b54f0dbSXin Li .sets = 2048,
1254*2b54f0dbSXin Li .partitions = 1,
1255*2b54f0dbSXin Li .line_size = 64,
1256*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1257*2b54f0dbSXin Li };
1258*2b54f0dbSXin Li break;
1259*2b54f0dbSXin Li case 0x87:
1260*2b54f0dbSXin Li /*
1261*2b54f0dbSXin Li * Intel ISA Reference:
1262*2b54f0dbSXin Li * "2nd-level cache: 1 MByte, 8-way set associative, 64 byte line size"
1263*2b54f0dbSXin Li * Application Note 485:
1264*2b54f0dbSXin Li * "2nd-level cache: 1-MB, 8-way set associative, 64-byte line size"
1265*2b54f0dbSXin Li */
1266*2b54f0dbSXin Li cache->l2 = (struct cpuinfo_x86_cache) {
1267*2b54f0dbSXin Li .size = 1024 * 1024,
1268*2b54f0dbSXin Li .associativity = 8,
1269*2b54f0dbSXin Li .sets = 2048,
1270*2b54f0dbSXin Li .partitions = 1,
1271*2b54f0dbSXin Li .line_size = 64,
1272*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1273*2b54f0dbSXin Li };
1274*2b54f0dbSXin Li break;
1275*2b54f0dbSXin Li case 0xA0:
1276*2b54f0dbSXin Li /*
1277*2b54f0dbSXin Li * Intel ISA Reference:
1278*2b54f0dbSXin Li * "DTLB: 4k pages, fully associative, 32 entries"
1279*2b54f0dbSXin Li */
1280*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
1281*2b54f0dbSXin Li .entries = 32,
1282*2b54f0dbSXin Li .associativity = 32,
1283*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1284*2b54f0dbSXin Li };
1285*2b54f0dbSXin Li break;
1286*2b54f0dbSXin Li case 0xB0:
1287*2b54f0dbSXin Li /*
1288*2b54f0dbSXin Li * Intel ISA Reference:
1289*2b54f0dbSXin Li * "Instruction TLB: 4 KByte pages, 4-way set associative, 128 entries"
1290*2b54f0dbSXin Li * Application Note 485:
1291*2b54f0dbSXin Li * "Instruction TLB: 4-KB Pages, 4-way set associative, 128 entries"
1292*2b54f0dbSXin Li */
1293*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
1294*2b54f0dbSXin Li .entries = 128,
1295*2b54f0dbSXin Li .associativity = 4,
1296*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1297*2b54f0dbSXin Li };
1298*2b54f0dbSXin Li break;
1299*2b54f0dbSXin Li case 0xB1:
1300*2b54f0dbSXin Li /*
1301*2b54f0dbSXin Li * Intel ISA Reference:
1302*2b54f0dbSXin Li * "Instruction TLB: 2M pages, 4-way, 8 entries or 4M pages, 4-way, 4 entries"
1303*2b54f0dbSXin Li * Application Note 485:
1304*2b54f0dbSXin Li * "Instruction TLB: 2-MB pages, 4-way, 8 entries or 4M pages, 4-way, 4 entries"
1305*2b54f0dbSXin Li */
1306*2b54f0dbSXin Li *itlb_2MB = (struct cpuinfo_tlb) {
1307*2b54f0dbSXin Li .entries = 8,
1308*2b54f0dbSXin Li .associativity = 4,
1309*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
1310*2b54f0dbSXin Li };
1311*2b54f0dbSXin Li *itlb_4MB = (struct cpuinfo_tlb) {
1312*2b54f0dbSXin Li .entries = 4,
1313*2b54f0dbSXin Li .associativity = 4,
1314*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
1315*2b54f0dbSXin Li };
1316*2b54f0dbSXin Li break;
1317*2b54f0dbSXin Li case 0xB2:
1318*2b54f0dbSXin Li /*
1319*2b54f0dbSXin Li * Intel ISA Reference:
1320*2b54f0dbSXin Li * "Instruction TLB: 4KByte pages, 4-way set associative, 64 entries"
1321*2b54f0dbSXin Li * Application Note 485:
1322*2b54f0dbSXin Li * "Instruction TLB: 4-KB pages, 4-way set associative, 64 entries"
1323*2b54f0dbSXin Li */
1324*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
1325*2b54f0dbSXin Li .entries = 64,
1326*2b54f0dbSXin Li .associativity = 4,
1327*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1328*2b54f0dbSXin Li };
1329*2b54f0dbSXin Li break;
1330*2b54f0dbSXin Li case 0xB3:
1331*2b54f0dbSXin Li /*
1332*2b54f0dbSXin Li * Intel ISA Reference:
1333*2b54f0dbSXin Li * "Data TLB: 4 KByte pages, 4-way set associative, 128 entries"
1334*2b54f0dbSXin Li * Application Note 485:
1335*2b54f0dbSXin Li * "Data TLB: 4-KB Pages, 4-way set associative, 128 entries"
1336*2b54f0dbSXin Li */
1337*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
1338*2b54f0dbSXin Li .entries = 128,
1339*2b54f0dbSXin Li .associativity = 4,
1340*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1341*2b54f0dbSXin Li };
1342*2b54f0dbSXin Li break;
1343*2b54f0dbSXin Li case 0xB4:
1344*2b54f0dbSXin Li /*
1345*2b54f0dbSXin Li * Intel ISA Reference:
1346*2b54f0dbSXin Li * "Data TLB1: 4 KByte pages, 4-way associative, 256 entries"
1347*2b54f0dbSXin Li * Application Note 485:
1348*2b54f0dbSXin Li * "Data TLB: 4-KB Pages, 4-way set associative, 256 entries"
1349*2b54f0dbSXin Li */
1350*2b54f0dbSXin Li *dtlb_4KB = (struct cpuinfo_tlb) {
1351*2b54f0dbSXin Li .entries = 256,
1352*2b54f0dbSXin Li .associativity = 4,
1353*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1354*2b54f0dbSXin Li };
1355*2b54f0dbSXin Li break;
1356*2b54f0dbSXin Li case 0xB5:
1357*2b54f0dbSXin Li /*
1358*2b54f0dbSXin Li * Intel ISA Reference:
1359*2b54f0dbSXin Li * "Instruction TLB: 4KByte pages, 8-way set associative, 64 entries"
1360*2b54f0dbSXin Li */
1361*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
1362*2b54f0dbSXin Li .entries = 64,
1363*2b54f0dbSXin Li .associativity = 8,
1364*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1365*2b54f0dbSXin Li };
1366*2b54f0dbSXin Li break;
1367*2b54f0dbSXin Li case 0xB6:
1368*2b54f0dbSXin Li /*
1369*2b54f0dbSXin Li * Intel ISA Reference:
1370*2b54f0dbSXin Li * "Instruction TLB: 4KByte pages, 8-way set associative, 128 entries"
1371*2b54f0dbSXin Li */
1372*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
1373*2b54f0dbSXin Li .entries = 128,
1374*2b54f0dbSXin Li .associativity = 8,
1375*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1376*2b54f0dbSXin Li };
1377*2b54f0dbSXin Li break;
1378*2b54f0dbSXin Li case 0xBA:
1379*2b54f0dbSXin Li /*
1380*2b54f0dbSXin Li * Intel ISA Reference:
1381*2b54f0dbSXin Li * "Data TLB1: 4 KByte pages, 4-way associative, 64 entries"
1382*2b54f0dbSXin Li * Application Note 485:
1383*2b54f0dbSXin Li * "Data TLB: 4-KB Pages, 4-way set associative, 64 entries"
1384*2b54f0dbSXin Li */
1385*2b54f0dbSXin Li *itlb_4KB = (struct cpuinfo_tlb) {
1386*2b54f0dbSXin Li .entries = 64,
1387*2b54f0dbSXin Li .associativity = 4,
1388*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1389*2b54f0dbSXin Li };
1390*2b54f0dbSXin Li break;
1391*2b54f0dbSXin Li case 0xC0:
1392*2b54f0dbSXin Li /*
1393*2b54f0dbSXin Li * Intel ISA Reference:
1394*2b54f0dbSXin Li * "Data TLB: 4 KByte and 4 MByte pages, 4-way associative, 8 entries"
1395*2b54f0dbSXin Li * Application Note 485:
1396*2b54f0dbSXin Li * "Data TLB: 4-KB or 4-MB Pages, 4-way set associative, 8 entries"
1397*2b54f0dbSXin Li */
1398*2b54f0dbSXin Li *itlb_4KB = *itlb_4MB = (struct cpuinfo_tlb) {
1399*2b54f0dbSXin Li .entries = 8,
1400*2b54f0dbSXin Li .associativity = 4,
1401*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB,
1402*2b54f0dbSXin Li };
1403*2b54f0dbSXin Li break;
1404*2b54f0dbSXin Li case 0xC1:
1405*2b54f0dbSXin Li /*
1406*2b54f0dbSXin Li * Intel ISA Reference:
1407*2b54f0dbSXin Li * "Shared 2nd-Level TLB: 4 KByte/2MByte pages, 8-way associative, 1024 entries"
1408*2b54f0dbSXin Li */
1409*2b54f0dbSXin Li *stlb2_4KB = *stlb2_2MB = (struct cpuinfo_tlb) {
1410*2b54f0dbSXin Li .entries = 1024,
1411*2b54f0dbSXin Li .associativity = 8,
1412*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB,
1413*2b54f0dbSXin Li };
1414*2b54f0dbSXin Li break;
1415*2b54f0dbSXin Li case 0xC2:
1416*2b54f0dbSXin Li /*
1417*2b54f0dbSXin Li * Intel ISA Reference:
1418*2b54f0dbSXin Li * "DTLB: 4 KByte/2 MByte pages, 4-way associative, 16 entries"
1419*2b54f0dbSXin Li */
1420*2b54f0dbSXin Li *dtlb_4KB = *dtlb_2MB = (struct cpuinfo_tlb) {
1421*2b54f0dbSXin Li .entries = 16,
1422*2b54f0dbSXin Li .associativity = 4,
1423*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB,
1424*2b54f0dbSXin Li };
1425*2b54f0dbSXin Li break;
1426*2b54f0dbSXin Li case 0xC3:
1427*2b54f0dbSXin Li /*
1428*2b54f0dbSXin Li * Intel ISA Reference:
1429*2b54f0dbSXin Li * "Shared 2nd-Level TLB: 4 KByte/2 MByte pages, 6-way associative, 1536 entries.
1430*2b54f0dbSXin Li * Also 1GBbyte pages, 4-way, 16 entries."
1431*2b54f0dbSXin Li */
1432*2b54f0dbSXin Li *stlb2_4KB = *stlb2_2MB = (struct cpuinfo_tlb) {
1433*2b54f0dbSXin Li .entries = 1536,
1434*2b54f0dbSXin Li .associativity = 6,
1435*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB,
1436*2b54f0dbSXin Li };
1437*2b54f0dbSXin Li *stlb2_1GB = (struct cpuinfo_tlb) {
1438*2b54f0dbSXin Li .entries = 16,
1439*2b54f0dbSXin Li .associativity = 4,
1440*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_1GB,
1441*2b54f0dbSXin Li };
1442*2b54f0dbSXin Li break;
1443*2b54f0dbSXin Li case 0xC4:
1444*2b54f0dbSXin Li /*
1445*2b54f0dbSXin Li * Intel ISA Reference:
1446*2b54f0dbSXin Li * "DTLB: 2M/4M Byte pages, 4-way associative, 32 entries"
1447*2b54f0dbSXin Li */
1448*2b54f0dbSXin Li *dtlb_2MB = *dtlb_4MB = (struct cpuinfo_tlb) {
1449*2b54f0dbSXin Li .entries = 32,
1450*2b54f0dbSXin Li .associativity = 4,
1451*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB,
1452*2b54f0dbSXin Li };
1453*2b54f0dbSXin Li break;
1454*2b54f0dbSXin Li case 0xCA:
1455*2b54f0dbSXin Li /*
1456*2b54f0dbSXin Li * Intel ISA Reference:
1457*2b54f0dbSXin Li * "Shared 2nd-Level TLB: 4 KByte pages, 4-way associative, 512 entries"
1458*2b54f0dbSXin Li * Application Note 485:
1459*2b54f0dbSXin Li * "Shared 2nd-level TLB: 4 KB pages, 4-way set associative, 512 entries"
1460*2b54f0dbSXin Li */
1461*2b54f0dbSXin Li *stlb2_4KB = (struct cpuinfo_tlb) {
1462*2b54f0dbSXin Li .entries = 512,
1463*2b54f0dbSXin Li .associativity = 4,
1464*2b54f0dbSXin Li .pages = CPUINFO_PAGE_SIZE_4KB,
1465*2b54f0dbSXin Li };
1466*2b54f0dbSXin Li break;
1467*2b54f0dbSXin Li case 0xD0:
1468*2b54f0dbSXin Li /*
1469*2b54f0dbSXin Li * Intel ISA Reference:
1470*2b54f0dbSXin Li * "3rd-level cache: 512 KByte, 4-way set associative, 64 byte line size"
1471*2b54f0dbSXin Li * Application Note 485:
1472*2b54f0dbSXin Li * "3rd-level cache: 512-kB, 4-way set associative, 64-byte line size"
1473*2b54f0dbSXin Li */
1474*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1475*2b54f0dbSXin Li .size = 512 * 1024,
1476*2b54f0dbSXin Li .associativity = 4,
1477*2b54f0dbSXin Li .sets = 2048,
1478*2b54f0dbSXin Li .partitions = 1,
1479*2b54f0dbSXin Li .line_size = 64,
1480*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1481*2b54f0dbSXin Li };
1482*2b54f0dbSXin Li break;
1483*2b54f0dbSXin Li case 0xD1:
1484*2b54f0dbSXin Li /*
1485*2b54f0dbSXin Li * Intel ISA Reference:
1486*2b54f0dbSXin Li * "3rd-level cache: 1 MByte, 4-way set associative, 64 byte line size"
1487*2b54f0dbSXin Li * Application Note 485:
1488*2b54f0dbSXin Li * "3rd-level cache: 1-MB, 4-way set associative, 64-byte line size"
1489*2b54f0dbSXin Li */
1490*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1491*2b54f0dbSXin Li .size = 1024 * 1024,
1492*2b54f0dbSXin Li .associativity = 4,
1493*2b54f0dbSXin Li .sets = 4096,
1494*2b54f0dbSXin Li .partitions = 1,
1495*2b54f0dbSXin Li .line_size = 64,
1496*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1497*2b54f0dbSXin Li };
1498*2b54f0dbSXin Li break;
1499*2b54f0dbSXin Li case 0xD2:
1500*2b54f0dbSXin Li /*
1501*2b54f0dbSXin Li * Intel ISA Reference:
1502*2b54f0dbSXin Li * "3rd-level cache: 2 MByte, 4-way set associative, 64 byte line size"
1503*2b54f0dbSXin Li * Application Note 485:
1504*2b54f0dbSXin Li * "3rd-level cache: 2-MB, 4-way set associative, 64-byte line size"
1505*2b54f0dbSXin Li */
1506*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1507*2b54f0dbSXin Li .size = 2 * 1024 * 2014,
1508*2b54f0dbSXin Li .associativity = 4,
1509*2b54f0dbSXin Li .sets = 8192,
1510*2b54f0dbSXin Li .partitions = 1,
1511*2b54f0dbSXin Li .line_size = 64,
1512*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1513*2b54f0dbSXin Li };
1514*2b54f0dbSXin Li break;
1515*2b54f0dbSXin Li case 0xD6:
1516*2b54f0dbSXin Li /*
1517*2b54f0dbSXin Li * Intel ISA Reference:
1518*2b54f0dbSXin Li * "3rd-level cache: 1 MByte, 8-way set associative, 64 byte line size"
1519*2b54f0dbSXin Li * Application Note 485:
1520*2b54f0dbSXin Li * "3rd-level cache: 1-MB, 8-way set associative, 64-byte line size"
1521*2b54f0dbSXin Li */
1522*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1523*2b54f0dbSXin Li .size = 1024 * 1024,
1524*2b54f0dbSXin Li .associativity = 8,
1525*2b54f0dbSXin Li .sets = 2048,
1526*2b54f0dbSXin Li .partitions = 1,
1527*2b54f0dbSXin Li .line_size = 64,
1528*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1529*2b54f0dbSXin Li };
1530*2b54f0dbSXin Li break;
1531*2b54f0dbSXin Li case 0xD7:
1532*2b54f0dbSXin Li /*
1533*2b54f0dbSXin Li * Intel ISA Reference:
1534*2b54f0dbSXin Li * "3rd-level cache: 2 MByte, 8-way set associative, 64 byte line size"
1535*2b54f0dbSXin Li * Application Note 485:
1536*2b54f0dbSXin Li * "3rd-level cache: 2-MB, 8-way set associative, 64-byte line size"
1537*2b54f0dbSXin Li */
1538*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1539*2b54f0dbSXin Li .size = 2 * 1024 * 1024,
1540*2b54f0dbSXin Li .associativity = 8,
1541*2b54f0dbSXin Li .sets = 4096,
1542*2b54f0dbSXin Li .partitions = 1,
1543*2b54f0dbSXin Li .line_size = 64,
1544*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1545*2b54f0dbSXin Li };
1546*2b54f0dbSXin Li break;
1547*2b54f0dbSXin Li case 0xD8:
1548*2b54f0dbSXin Li /*
1549*2b54f0dbSXin Li * Intel ISA Reference:
1550*2b54f0dbSXin Li * "3rd-level cache: 4 MByte, 8-way set associative, 64 byte line size"
1551*2b54f0dbSXin Li * Application Note 485:
1552*2b54f0dbSXin Li * "3rd-level cache: 4-MB, 8-way set associative, 64-byte line size"
1553*2b54f0dbSXin Li */
1554*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1555*2b54f0dbSXin Li .size = 4 * 1024 * 1024,
1556*2b54f0dbSXin Li .associativity = 8,
1557*2b54f0dbSXin Li .sets = 8192,
1558*2b54f0dbSXin Li .partitions = 1,
1559*2b54f0dbSXin Li .line_size = 64,
1560*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1561*2b54f0dbSXin Li };
1562*2b54f0dbSXin Li break;
1563*2b54f0dbSXin Li case 0xDC:
1564*2b54f0dbSXin Li /*
1565*2b54f0dbSXin Li * Intel ISA Reference:
1566*2b54f0dbSXin Li * "3rd-level cache: 1.5 MByte, 12-way set associative, 64 byte line size"
1567*2b54f0dbSXin Li * Application Note 485:
1568*2b54f0dbSXin Li * "3rd-level cache: 1.5-MB, 12-way set associative, 64-byte line size"
1569*2b54f0dbSXin Li */
1570*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1571*2b54f0dbSXin Li .size = 3 * 512 * 1024,
1572*2b54f0dbSXin Li .associativity = 12,
1573*2b54f0dbSXin Li .sets = 2048,
1574*2b54f0dbSXin Li .partitions = 1,
1575*2b54f0dbSXin Li .line_size = 64,
1576*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1577*2b54f0dbSXin Li };
1578*2b54f0dbSXin Li break;
1579*2b54f0dbSXin Li case 0xDD:
1580*2b54f0dbSXin Li /*
1581*2b54f0dbSXin Li * Intel ISA Reference:
1582*2b54f0dbSXin Li * "3rd-level cache: 3 MByte, 12-way set associative, 64 byte line size"
1583*2b54f0dbSXin Li * Application Note 485:
1584*2b54f0dbSXin Li * "3rd-level cache: 3-MB, 12-way set associative, 64-byte line size"
1585*2b54f0dbSXin Li */
1586*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1587*2b54f0dbSXin Li .size = 3 * 1024 * 1024,
1588*2b54f0dbSXin Li .associativity = 12,
1589*2b54f0dbSXin Li .sets = 4096,
1590*2b54f0dbSXin Li .partitions = 1,
1591*2b54f0dbSXin Li .line_size = 64,
1592*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1593*2b54f0dbSXin Li };
1594*2b54f0dbSXin Li break;
1595*2b54f0dbSXin Li case 0xDE:
1596*2b54f0dbSXin Li /*
1597*2b54f0dbSXin Li * Intel ISA Reference:
1598*2b54f0dbSXin Li * "3rd-level cache: 6 MByte, 12-way set associative, 64 byte line size"
1599*2b54f0dbSXin Li * Application Note 485:
1600*2b54f0dbSXin Li * "3rd-level cache: 6-MB, 12-way set associative, 64-byte line size"
1601*2b54f0dbSXin Li */
1602*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1603*2b54f0dbSXin Li .size = 6 * 1024 * 1024,
1604*2b54f0dbSXin Li .associativity = 12,
1605*2b54f0dbSXin Li .sets = 8192,
1606*2b54f0dbSXin Li .partitions = 1,
1607*2b54f0dbSXin Li .line_size = 64,
1608*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1609*2b54f0dbSXin Li };
1610*2b54f0dbSXin Li break;
1611*2b54f0dbSXin Li case 0xE2:
1612*2b54f0dbSXin Li /*
1613*2b54f0dbSXin Li * Intel ISA Reference:
1614*2b54f0dbSXin Li * "3rd-level cache: 2 MByte, 16-way set associative, 64 byte line size"
1615*2b54f0dbSXin Li * Application Note 485:
1616*2b54f0dbSXin Li * "3rd-level cache: 2-MB, 16-way set associative, 64-byte line size"
1617*2b54f0dbSXin Li */
1618*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1619*2b54f0dbSXin Li .size = 2 * 1024 * 1024,
1620*2b54f0dbSXin Li .associativity = 16,
1621*2b54f0dbSXin Li .sets = 2048,
1622*2b54f0dbSXin Li .partitions = 1,
1623*2b54f0dbSXin Li .line_size = 64,
1624*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1625*2b54f0dbSXin Li };
1626*2b54f0dbSXin Li break;
1627*2b54f0dbSXin Li case 0xE3:
1628*2b54f0dbSXin Li /*
1629*2b54f0dbSXin Li * Intel ISA Reference:
1630*2b54f0dbSXin Li * "3rd-level cache: 4 MByte, 16-way set associative, 64 byte line size"
1631*2b54f0dbSXin Li * Application Note 485:
1632*2b54f0dbSXin Li * "3rd-level cache: 4-MB, 16-way set associative, 64-byte line size"
1633*2b54f0dbSXin Li */
1634*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1635*2b54f0dbSXin Li .size = 4 * 1024 * 1024,
1636*2b54f0dbSXin Li .associativity = 16,
1637*2b54f0dbSXin Li .sets = 4096,
1638*2b54f0dbSXin Li .partitions = 1,
1639*2b54f0dbSXin Li .line_size = 64,
1640*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1641*2b54f0dbSXin Li };
1642*2b54f0dbSXin Li break;
1643*2b54f0dbSXin Li case 0xE4:
1644*2b54f0dbSXin Li /*
1645*2b54f0dbSXin Li * Intel ISA Reference:
1646*2b54f0dbSXin Li * "3rd-level cache: 8 MByte, 16-way set associative, 64 byte line size"
1647*2b54f0dbSXin Li * Application Note 485:
1648*2b54f0dbSXin Li * "3rd-level cache: 8-MB, 16-way set associative, 64-byte line size"
1649*2b54f0dbSXin Li */
1650*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1651*2b54f0dbSXin Li .size = 8 * 1024 * 1024,
1652*2b54f0dbSXin Li .associativity = 16,
1653*2b54f0dbSXin Li .sets = 8192,
1654*2b54f0dbSXin Li .partitions = 1,
1655*2b54f0dbSXin Li .line_size = 64,
1656*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1657*2b54f0dbSXin Li };
1658*2b54f0dbSXin Li break;
1659*2b54f0dbSXin Li case 0xEA:
1660*2b54f0dbSXin Li /*
1661*2b54f0dbSXin Li * Intel ISA Reference:
1662*2b54f0dbSXin Li * "3rd-level cache: 12MByte, 24-way set associative, 64 byte line size"
1663*2b54f0dbSXin Li * Application Note 485:
1664*2b54f0dbSXin Li * "3rd-level cache: 12-MB, 24-way set associative, 64-byte line size"
1665*2b54f0dbSXin Li */
1666*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1667*2b54f0dbSXin Li .size = 12 * 1024 * 1024,
1668*2b54f0dbSXin Li .associativity = 24,
1669*2b54f0dbSXin Li .sets = 8192,
1670*2b54f0dbSXin Li .partitions = 1,
1671*2b54f0dbSXin Li .line_size = 64,
1672*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1673*2b54f0dbSXin Li };
1674*2b54f0dbSXin Li break;
1675*2b54f0dbSXin Li case 0xEB:
1676*2b54f0dbSXin Li /*
1677*2b54f0dbSXin Li * Intel ISA Reference:
1678*2b54f0dbSXin Li * "3rd-level cache: 18MByte, 24-way set associative, 64 byte line size"
1679*2b54f0dbSXin Li * Application Note 485:
1680*2b54f0dbSXin Li * "3rd-level cache: 18-MB, 24-way set associative, 64-byte line size"
1681*2b54f0dbSXin Li */
1682*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1683*2b54f0dbSXin Li .size = 18 * 1024 * 1024,
1684*2b54f0dbSXin Li .associativity = 24,
1685*2b54f0dbSXin Li .sets = 12288,
1686*2b54f0dbSXin Li .partitions = 1,
1687*2b54f0dbSXin Li .line_size = 64,
1688*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1689*2b54f0dbSXin Li };
1690*2b54f0dbSXin Li break;
1691*2b54f0dbSXin Li case 0xEC:
1692*2b54f0dbSXin Li /*
1693*2b54f0dbSXin Li * Intel ISA Reference:
1694*2b54f0dbSXin Li * "3rd-level cache: 24MByte, 24-way set associative, 64 byte line size"
1695*2b54f0dbSXin Li * Application Note 485:
1696*2b54f0dbSXin Li * "3rd-level cache: 24-MB, 24-way set associative, 64-byte line size"
1697*2b54f0dbSXin Li */
1698*2b54f0dbSXin Li cache->l3 = (struct cpuinfo_x86_cache) {
1699*2b54f0dbSXin Li .size = 24 * 1024 * 1024,
1700*2b54f0dbSXin Li .associativity = 24,
1701*2b54f0dbSXin Li .sets = 16384,
1702*2b54f0dbSXin Li .partitions = 1,
1703*2b54f0dbSXin Li .line_size = 64,
1704*2b54f0dbSXin Li .flags = CPUINFO_CACHE_INCLUSIVE,
1705*2b54f0dbSXin Li };
1706*2b54f0dbSXin Li break;
1707*2b54f0dbSXin Li case 0xF0:
1708*2b54f0dbSXin Li /*
1709*2b54f0dbSXin Li * Intel ISA Reference:
1710*2b54f0dbSXin Li * "64-Byte prefetching"
1711*2b54f0dbSXin Li * Application Note 485:
1712*2b54f0dbSXin Li * "64-byte Prefetching"
1713*2b54f0dbSXin Li */
1714*2b54f0dbSXin Li cache->prefetch_size = 64;
1715*2b54f0dbSXin Li break;
1716*2b54f0dbSXin Li case 0xF1:
1717*2b54f0dbSXin Li /*
1718*2b54f0dbSXin Li * Intel ISA Reference:
1719*2b54f0dbSXin Li * "128-Byte prefetching"
1720*2b54f0dbSXin Li * Application Note 485:
1721*2b54f0dbSXin Li * "128-byte Prefetching"
1722*2b54f0dbSXin Li */
1723*2b54f0dbSXin Li cache->prefetch_size = 128;
1724*2b54f0dbSXin Li break;
1725*2b54f0dbSXin Li }
1726*2b54f0dbSXin Li }
1727