Imported Upstream version 1.30
[platform/upstream/x86info.git] / Intel / identify-family15.c
1 /*
2  *  (C) 2008 Dave Jones.
3  *
4  *  Licensed under the terms of the GNU GPL License version 2.
5  *
6  *  Intel family 15 specific identification.
7  */
8
9 #include <stdio.h>
10 #include <string.h>
11 #include "../x86info.h"
12 #include "Intel.h"
13
14 static char p4_423_datasheet[]="http://developer.intel.com/design/pentium4/datashts/24919805.pdf";
15 static char p4_478_datasheet[]="http://developer.intel.com/design/pentium4/datashts/24988703.pdf\n\thttp://developer.intel.com/design/pentium4/datashts/29864304.pdf";
16 static char p4_errata[]="http://developer.intel.com/design/pentium4/specupdt/249199.htm";
17
18 static char *intel_nameptr;
19 #define add_to_cpuname(x)   intel_nameptr += snprintf(intel_nameptr, sizeof(x), "%s", x)
20
21 void Identify_Intel_family15(struct cpudata *cpu)
22 {
23         intel_nameptr = cpu->name;
24
25         switch (model(cpu)) {
26         case 0x0:       /* Family 15 */
27                 cpu->connector = CONN_SOCKET_423;
28                 cpu->datasheet_url = strdup(p4_423_datasheet);
29                 cpu->errata_url = strdup(p4_errata);
30                 add_to_cpuname("Pentium 4");
31                 switch (cpu->stepping) {
32                 case 7:
33                         //SL4QD SL4SF = 1.3GHz
34                         //SL4SG SL4SC = 1.4GHz
35                         //SL4SH SL4TY = 1.5GHz
36                         add_to_cpuname(" [B2]");
37                         break;
38                 case 0xA:
39                         //SL5FW SL5GC 1.3GHz
40                         //SL4WS SL4X2 SL59U SL5N7 1.4GHz
41                         //SL4WT SL4X3 SL59V SL5NB 1.5GHz
42                         //SL4WU SL4X4 SL5US SL5UW 1.6GHz
43                         //SL57W SL57V SL59X SL5N9 1.7GHz
44                         //SL4WV SL4X5 SL5UT SL5UV 1.8GHz
45                         add_to_cpuname(" [C1]");
46                         break;
47                 }
48                 break;
49
50         case 0x1:
51                 cpu->connector = CONN_SOCKET_423;
52                 add_to_cpuname("Pentium 4 (Willamette)");
53                 cpu->datasheet_url = strdup(p4_423_datasheet);
54                 cpu->errata_url = strdup(p4_errata);
55                 switch (cpu->stepping) {
56                 case 1:
57                         //400FSB 256K L2
58                         //SSpec MHz L3
59                         //SL5G8 1.6 1M
60                         //SL5S4 1.6 1M
61                         //SL5FZ 1.4 512K
62                         //SL5RZ 1.4 512K
63                         //SL5G2 1.5 512K
64                         //SL5RW 1.5 512K
65                         add_to_cpuname(" [C0]");
66                         break;
67                 case 2:
68                         //SL5TG SL5UE 1.4GHz
69                         //SL5SX SL5TJ SL5UF SL62Y SL5TN 1.5GHz
70                         //SL5VL SL5UL SL5VH SL5UJ 1.6GHz
71                         //SL5SY SL5TK SL5UG SL62Z 1.7GHz
72                         //SL5VM SL5VM SL5VJ SL5UK 1.8GHz
73                         //SL5VN SL5WH SL5VK SL5WG 1.9GHz
74                         //SL5SZ SL5TQ SL5TL 2GHz
75                         add_to_cpuname(" [D0]");
76                         break;
77                 case 3:
78                         //SL6BC SL679 1.6GHz
79                         //SL6BD SL67A 1.7GHz
80                         //SL6BE SL78B 1.8GHz
81                         //SL6BF SL67C 1.9GHz
82                         add_to_cpuname(" [E0]");
83                         break;
84                 }
85                 break;
86         case 0x2:
87                 cpu->connector = CONN_SOCKET_478;
88                 cpu->datasheet_url = strdup(p4_478_datasheet);
89                 cpu->errata_url = strdup(p4_errata);
90                 switch (cpu->brand) {
91                         case 15:
92                                 add_to_cpuname("Celeron (P4 core)");
93                                 break;
94                         case 7:
95                         default:
96                                 add_to_cpuname("Pentium 4 (Northwood)");
97                                 break;
98                 }
99                 switch (cpu->stepping) {
100                 case 2:
101                         //512K L2
102                         //          L3
103                         //SL6GZ 1.5 1M
104                         //SL6KB 1.5 1M
105                         //SL6H2 1.9 2M
106                         //SL6KC 1.9 2M
107                         //SL66Z 2.0 1M
108                         //SL6KD 2.0 1M
109                         add_to_cpuname(" [A0]");
110                         break;
111                 case 4:
112                         //SL66B 1.6GHz
113                         //SL63X SL62P SL6BQ 1.8GHz
114                         //SL6BR SL5YR 2GHz
115                         //SL5YS SL6BS SL5ZU 2.2GHz
116                         //SL6B3 SL67Y 2.26GHz (533MHz FSB)
117                         //SL6BT SL65R SL67R 2.4GHz (400MHz FSB)
118                         //SL6B4 SL67Z 2.4GHz (533MHz FSB)
119                         //SL6B5 SL6B2 2.53GHz (533MHz FSB)
120                         add_to_cpuname(" [B0]");
121                         break;
122                 case 5:
123                         /*[M0] */
124                         //SL6Z3 2.4GHz (800FSB)
125                         //SL6Z5 2.8GHz (800FSB)
126                         /* P4 Extreme edition.*/
127                         //SL7AA 3.2GHz (800FSB) 2MB L3 cache
128                         //SL7CH 3.4GHz (800FSB) 2MB L3 cache
129
130                         /* 400FSB B1 512K L2 */
131                         //SL6YJ 2.0 1M L3
132                         //SL6Z6 2.0 1M L3
133                         //SL6Z2 2.5 1M L3
134                         //SL6Z7 2.5 1M L3
135                         //SL6YL 2.8 2M L3
136                         //SL6Z8 2.8 2M L3
137                         add_to_cpuname(" [M0]");
138                         break;
139                 case 6:
140                         //400FSB 512K L2
141                         //SL79V 3.0 4M L3
142                         //SL79Z 2.7 2M L3
143                         //SL7A5 2.2 2M L3
144                         add_to_cpuname(" [C0]");
145                         break;
146                 case 7:
147                         //SL6HL SL6K6 2.8GHz (533MHz FSB)
148                         //SL6LA SL6S6 1.8GHz
149                         //SL6GQ SL6S7 SL6E7 2GHz
150                         //SL6GR SL6SB SL6EB 2.2GHz
151                         //SL6DU SL6RY SL6EE 2.26GHz (533FSB)
152                         //SL6EF SL6DV SL6S9 SL6RZ SL6E9 2.4GHz (533FSB)
153                         //SL6SA 2.5GHz (400FSB)
154                         //SL6EG SL6S2 SL6DW 2.53GHz (533FSB)
155                         //SL6SB 2.6GHz (400FSB)
156                         //SL6S3 SL6SK 2.66GHz (533FSB)
157                         //SL6S4 SL6SL 2.8GHz (533FSB)
158                         //SL6S5 SL6K7 SL6SM SL6JJ 3.06GHz (533FSB)
159                         add_to_cpuname(" [C1]");
160                         break;
161                 case 9:
162                         //SL6QL 1.8GHz
163                         //SL6QM SL6PK 2.0GHz
164                         //SL6QN SL6PL 2.2GHz
165                         //SL6QR SL6PB 2.26GHz (533FSB)
166                         //SL6QP SL6PM 2.4GHz
167                         //SL6QB SL6PC 2.4GHz (533FSB)
168                         //SL6WF SL6WR 2.4GHz (800FSB)
169                         //SL6QQ 2.5GHz
170                         //SL6Q9 SL6PD 2.53GHz (533FSB)
171                         //SL6QR 2.6GHz
172                         //SL6WH SL6WS 2.6GHz (800FSB)
173                         //SL6QA SL6PE 2.66GHz (533FSB)
174                         //SL6QB SL6PF 2.8GHz (533FSB)
175                         //SL6WJ SL6WT 2.8GHz (800FSB)
176                         //SL6WU SL6WK 3GHz (800FSB)
177                         //SL6QC SL6PG 3.06GHz (533FSB)
178                         //SL6WG SL6WE 3.2GHz (800FSB)
179                         //SL793 3.4GHz (800FSB)
180                         add_to_cpuname(" [D1]");
181                         break;
182                 }
183                 break;
184         case 0x3:
185                 switch (cpu->stepping) {
186                 case 3:
187                         /*
188                         sspec speed   fsb l2 90nm
189                         SL7D7 2.26GHz 533 512K
190                         SL7FY 2.4GHz  800 1M
191                         SL7E8 2.4GHz  533 1M
192                         SL7E9 2.66GHz 533 1M
193                         SL7D8 2.8GHz  533 1M
194                         SL79K 2.8GHz  800 1M
195                         SL79L 3.0GHz  800 1M
196                         SL79M 3.2GHz  800 1M
197                         SL7B8 3.2GHz  800 1M
198                         SL7B9 3.4GHz  800 1M
199                         SL7AJ 3.4GHz  800 1M
200
201                         process = "0.09u";
202                         125 million transistors
203                         112mm2 die size
204                         pipeline_stages=31
205                         */
206                         add_to_cpuname("Pentium 4 (Prescott) [C0]");
207                         break;
208                 case 4:
209                         /*
210                         1M L2 90nm
211                         sspec speed   fsb
212                         SL7E2 2.8GHz  533
213                         SL7E3 2.8GHz  800
214                         SL7KA 2.8GHz  800
215                         SL7K9 2.8GHz  533
216                         SL7E4 3.0GHz  800
217                         SL7KB 3.0GHz  800
218                         SL7L4 3.0GHz  800
219                         SL7L5 3.2GHz  800
220                         SL7E5 3.2GHz  800
221                         SL7KC 3.2GHz  800
222                         SL7E6 3.4GHz  800
223                         SL7KD 3.4GHz  800
224                         SL7YP 2.4GHz  533
225                         SL7YU 2.66GHz 533
226                         SL7J4 2.8GHz  533
227                         SL7J5 2.8GHz  800
228                         SL7KH 2.8GHz  533
229                         SL7KJ 2.8GHz  800
230                         SL7YV 2.93GHz 533
231                         SL7J6 3.0GHz  800
232                         SL7KK 3.0GHz  800
233                         SL7J7 3.2GHz  800
234                         SL7KL 3.2GHz  800
235                         SL7LA 3.2GHz  800
236                         SL7J8 3.4GHz  800
237                         SL7KM 3.4GHz  800
238                         SL7L8 3.4GHz  800
239                         SL7J9 3.6GHz  800
240                         SL7KN 3.6GHz  800
241                         SL7L9 3.6GHz  800
242                          */
243                         add_to_cpuname("Pentium 4 (Prescott) [D0]");
244                         break;
245                 }
246                 break;
247
248         case 0x4:
249                 add_to_cpuname("Pentium 4 ");
250                 switch (cpu->stepping) {
251                 case 1:
252                         /*
253                          1M L2 90nm
254                         SL88F 2.4GHz  533
255                         SL8B3 2.66GHz 533
256                         SL88G 2.8GHz  533
257                         SL88H 2.8GHz  800
258                         SL7PL 2.8GHz  800
259                         SL7PK 2.8GHz  533
260                         SL7PM 3GHz    800
261                         SL88J 3GHz    800
262                         SL7PN 3.2GHz  800
263                         SL88K 3.2GHz  800
264                         SL88L 3.4GHz  800
265                         SL7PP 3.4GHz  800
266                         SL7PT 2.66GHz 533
267                         SL82P 2.8GHz  800
268                         SL7PR 2.8GHz  800
269                         SL8HX 2.8GHz  800
270                         SL85U 2.66GHz 533
271                         SL8J8 2.66GHz 533
272                         SL85V 2.93GHz 533
273                         SL8J9 2.93GHz 533
274                         SL87L 3.06GHz 533
275                         SL8JA 3.06GHz 533
276                         SL82X 3.0GHz  800
277                         SL7PU 3.0GHz  800
278                         SL8HZ 3.0GHz  800
279                         SL7PW 3.2GHz  800
280                         SL7PX 3.2GHz  800
281                         SL82Z 3.2GHz  800
282                         SL8J2 3.2GHz  800
283                         SL7PY 3.4GHz  800
284                         SL7PZ 3.4GHz  800
285                         SL833 3.4GHz  800
286                         SL7ZW 3.4GHz  800
287                         SL8J5 3.4GHz  800
288                         SL84X 3.6GHz  800
289                         SL7Q2 3.6GHz  800
290                         SL7NZ 3.6GHz  800
291                         SL8J6 3.6GHz  800
292                         SL82U 3.8GHz  800
293                         SL84Y 3.8GHz  800
294                         SL7P2 3.8GHz  800
295                         SL8J7 3.8GHz  800
296                          */
297                         /*
298                          8MB L3 [C-0]
299                          SL8EY 3.3GHz 667
300                          SL8EW 3GHz   667
301                          4MB L3
302                          SL8ED 2.8GHz 667
303                          */
304                         add_to_cpuname("(Prescott) [E0]");
305                         break;
306                 case 3:
307                         /*
308                          2M L2 90nm
309                          SL7Z9 3.0GHz  800
310                          SL7Z8 3.2GHz  800
311                          SL8Z7 3.4GHz  800
312                          SL7Z5 3.6GHz  800
313                          SL7Z4 3.73GHz 800
314                          SL7Z3 3.8GHz  800
315                          */
316                         add_to_cpuname("(Prescott) [N0]");
317                         break;
318                 case 4:
319                         /*
320                            1Mx2 L2      800MHz FSB
321                            SL88T        2.8GHz
322                            SL88S        3GHz
323                            SL88R        3.2GHz
324                            SL8FK        3.2GHz
325                          */
326                         add_to_cpuname("Extreme Edition [A0]");
327                         break;
328                 default:
329                         add_to_cpuname("D (Foster)");
330                         break;
331                 }
332                 break;
333
334         case 0x5:
335                 cpu->connector = CONN_SOCKET_603;
336 //              cpu->datasheet_url = strdup(p4_478_datasheet);
337 //              cpu->errata_url = strdup(p4_errata);
338                 add_to_cpuname("Pentium 4 Xeon (Foster)");
339                 break;
340         default:
341                 add_to_cpuname("Unknown CPU");
342                 break;
343         }
344 }