Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
[linux-2.6] / arch / x86 / kernel / setup_64.c
1 /*
2  *  Copyright (C) 1995  Linus Torvalds
3  */
4
5 /*
6  * This file handles the architecture-dependent parts of initialization
7  */
8
9 #include <linux/errno.h>
10 #include <linux/sched.h>
11 #include <linux/kernel.h>
12 #include <linux/mm.h>
13 #include <linux/stddef.h>
14 #include <linux/unistd.h>
15 #include <linux/ptrace.h>
16 #include <linux/slab.h>
17 #include <linux/user.h>
18 #include <linux/a.out.h>
19 #include <linux/screen_info.h>
20 #include <linux/ioport.h>
21 #include <linux/delay.h>
22 #include <linux/init.h>
23 #include <linux/initrd.h>
24 #include <linux/highmem.h>
25 #include <linux/bootmem.h>
26 #include <linux/module.h>
27 #include <asm/processor.h>
28 #include <linux/console.h>
29 #include <linux/seq_file.h>
30 #include <linux/crash_dump.h>
31 #include <linux/root_dev.h>
32 #include <linux/pci.h>
33 #include <linux/acpi.h>
34 #include <linux/kallsyms.h>
35 #include <linux/edd.h>
36 #include <linux/mmzone.h>
37 #include <linux/kexec.h>
38 #include <linux/cpufreq.h>
39 #include <linux/dmi.h>
40 #include <linux/dma-mapping.h>
41 #include <linux/ctype.h>
42
43 #include <asm/mtrr.h>
44 #include <asm/uaccess.h>
45 #include <asm/system.h>
46 #include <asm/io.h>
47 #include <asm/smp.h>
48 #include <asm/msr.h>
49 #include <asm/desc.h>
50 #include <video/edid.h>
51 #include <asm/e820.h>
52 #include <asm/dma.h>
53 #include <asm/mpspec.h>
54 #include <asm/mmu_context.h>
55 #include <asm/proto.h>
56 #include <asm/setup.h>
57 #include <asm/mach_apic.h>
58 #include <asm/numa.h>
59 #include <asm/sections.h>
60 #include <asm/dmi.h>
61
62 /*
63  * Machine setup..
64  */
65
66 struct cpuinfo_x86 boot_cpu_data __read_mostly;
67 EXPORT_SYMBOL(boot_cpu_data);
68
69 unsigned long mmu_cr4_features;
70
71 /* Boot loader ID as an integer, for the benefit of proc_dointvec */
72 int bootloader_type;
73
74 unsigned long saved_video_mode;
75
76 int force_mwait __cpuinitdata;
77
78 /* 
79  * Early DMI memory
80  */
81 int dmi_alloc_index;
82 char dmi_alloc_data[DMI_MAX_DATA];
83
84 /*
85  * Setup options
86  */
87 struct screen_info screen_info;
88 EXPORT_SYMBOL(screen_info);
89 struct sys_desc_table_struct {
90         unsigned short length;
91         unsigned char table[0];
92 };
93
94 struct edid_info edid_info;
95 EXPORT_SYMBOL_GPL(edid_info);
96
97 extern int root_mountflags;
98
99 char __initdata command_line[COMMAND_LINE_SIZE];
100
101 struct resource standard_io_resources[] = {
102         { .name = "dma1", .start = 0x00, .end = 0x1f,
103                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
104         { .name = "pic1", .start = 0x20, .end = 0x21,
105                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
106         { .name = "timer0", .start = 0x40, .end = 0x43,
107                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
108         { .name = "timer1", .start = 0x50, .end = 0x53,
109                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
110         { .name = "keyboard", .start = 0x60, .end = 0x6f,
111                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
112         { .name = "dma page reg", .start = 0x80, .end = 0x8f,
113                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
114         { .name = "pic2", .start = 0xa0, .end = 0xa1,
115                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
116         { .name = "dma2", .start = 0xc0, .end = 0xdf,
117                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
118         { .name = "fpu", .start = 0xf0, .end = 0xff,
119                 .flags = IORESOURCE_BUSY | IORESOURCE_IO }
120 };
121
122 #define IORESOURCE_RAM (IORESOURCE_BUSY | IORESOURCE_MEM)
123
124 struct resource data_resource = {
125         .name = "Kernel data",
126         .start = 0,
127         .end = 0,
128         .flags = IORESOURCE_RAM,
129 };
130 struct resource code_resource = {
131         .name = "Kernel code",
132         .start = 0,
133         .end = 0,
134         .flags = IORESOURCE_RAM,
135 };
136
137 #ifdef CONFIG_PROC_VMCORE
138 /* elfcorehdr= specifies the location of elf core header
139  * stored by the crashed kernel. This option will be passed
140  * by kexec loader to the capture kernel.
141  */
142 static int __init setup_elfcorehdr(char *arg)
143 {
144         char *end;
145         if (!arg)
146                 return -EINVAL;
147         elfcorehdr_addr = memparse(arg, &end);
148         return end > arg ? 0 : -EINVAL;
149 }
150 early_param("elfcorehdr", setup_elfcorehdr);
151 #endif
152
153 #ifndef CONFIG_NUMA
154 static void __init
155 contig_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
156 {
157         unsigned long bootmap_size, bootmap;
158
159         bootmap_size = bootmem_bootmap_pages(end_pfn)<<PAGE_SHIFT;
160         bootmap = find_e820_area(0, end_pfn<<PAGE_SHIFT, bootmap_size);
161         if (bootmap == -1L)
162                 panic("Cannot find bootmem map of size %ld\n",bootmap_size);
163         bootmap_size = init_bootmem(bootmap >> PAGE_SHIFT, end_pfn);
164         e820_register_active_regions(0, start_pfn, end_pfn);
165         free_bootmem_with_active_regions(0, end_pfn);
166         reserve_bootmem(bootmap, bootmap_size);
167
168 #endif
169
170 #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
171 struct edd edd;
172 #ifdef CONFIG_EDD_MODULE
173 EXPORT_SYMBOL(edd);
174 #endif
175 /**
176  * copy_edd() - Copy the BIOS EDD information
177  *              from boot_params into a safe place.
178  *
179  */
180 static inline void copy_edd(void)
181 {
182      memcpy(edd.mbr_signature, boot_params.edd_mbr_sig_buffer,
183             sizeof(edd.mbr_signature));
184      memcpy(edd.edd_info, boot_params.eddbuf, sizeof(edd.edd_info));
185      edd.mbr_signature_nr = boot_params.edd_mbr_sig_buf_entries;
186      edd.edd_info_nr = boot_params.eddbuf_entries;
187 }
188 #else
189 static inline void copy_edd(void)
190 {
191 }
192 #endif
193
194 #ifdef CONFIG_KEXEC
195 static void __init reserve_crashkernel(void)
196 {
197         unsigned long long free_mem;
198         unsigned long long crash_size, crash_base;
199         int ret;
200
201         free_mem = ((unsigned long long)max_low_pfn - min_low_pfn) << PAGE_SHIFT;
202
203         ret = parse_crashkernel(boot_command_line, free_mem,
204                         &crash_size, &crash_base);
205         if (ret == 0 && crash_size) {
206                 if (crash_base > 0) {
207                         printk(KERN_INFO "Reserving %ldMB of memory at %ldMB "
208                                         "for crashkernel (System RAM: %ldMB)\n",
209                                         (unsigned long)(crash_size >> 20),
210                                         (unsigned long)(crash_base >> 20),
211                                         (unsigned long)(free_mem >> 20));
212                         crashk_res.start = crash_base;
213                         crashk_res.end   = crash_base + crash_size - 1;
214                         reserve_bootmem(crash_base, crash_size);
215                 } else
216                         printk(KERN_INFO "crashkernel reservation failed - "
217                                         "you have to specify a base address\n");
218         }
219 }
220 #else
221 static inline void __init reserve_crashkernel(void)
222 {}
223 #endif
224
225 #define EBDA_ADDR_POINTER 0x40E
226
227 unsigned __initdata ebda_addr;
228 unsigned __initdata ebda_size;
229
230 static void discover_ebda(void)
231 {
232         /*
233          * there is a real-mode segmented pointer pointing to the 
234          * 4K EBDA area at 0x40E
235          */
236         ebda_addr = *(unsigned short *)__va(EBDA_ADDR_POINTER);
237         ebda_addr <<= 4;
238
239         ebda_size = *(unsigned short *)__va(ebda_addr);
240
241         /* Round EBDA up to pages */
242         if (ebda_size == 0)
243                 ebda_size = 1;
244         ebda_size <<= 10;
245         ebda_size = round_up(ebda_size + (ebda_addr & ~PAGE_MASK), PAGE_SIZE);
246         if (ebda_size > 64*1024)
247                 ebda_size = 64*1024;
248 }
249
250 void __init setup_arch(char **cmdline_p)
251 {
252         printk(KERN_INFO "Command line: %s\n", boot_command_line);
253
254         ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev);
255         screen_info = boot_params.screen_info;
256         edid_info = boot_params.edid_info;
257         saved_video_mode = boot_params.hdr.vid_mode;
258         bootloader_type = boot_params.hdr.type_of_loader;
259
260 #ifdef CONFIG_BLK_DEV_RAM
261         rd_image_start = boot_params.hdr.ram_size & RAMDISK_IMAGE_START_MASK;
262         rd_prompt = ((boot_params.hdr.ram_size & RAMDISK_PROMPT_FLAG) != 0);
263         rd_doload = ((boot_params.hdr.ram_size & RAMDISK_LOAD_FLAG) != 0);
264 #endif
265         setup_memory_region();
266         copy_edd();
267
268         if (!boot_params.hdr.root_flags)
269                 root_mountflags &= ~MS_RDONLY;
270         init_mm.start_code = (unsigned long) &_text;
271         init_mm.end_code = (unsigned long) &_etext;
272         init_mm.end_data = (unsigned long) &_edata;
273         init_mm.brk = (unsigned long) &_end;
274
275         code_resource.start = virt_to_phys(&_text);
276         code_resource.end = virt_to_phys(&_etext)-1;
277         data_resource.start = virt_to_phys(&_etext);
278         data_resource.end = virt_to_phys(&_edata)-1;
279
280         early_identify_cpu(&boot_cpu_data);
281
282         strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
283         *cmdline_p = command_line;
284
285         parse_early_param();
286
287         finish_e820_parsing();
288
289         e820_register_active_regions(0, 0, -1UL);
290         /*
291          * partially used pages are not usable - thus
292          * we are rounding upwards:
293          */
294         end_pfn = e820_end_of_ram();
295         num_physpages = end_pfn;
296
297         check_efer();
298
299         discover_ebda();
300
301         init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
302
303         dmi_scan_machine();
304
305 #ifdef CONFIG_ACPI
306         /*
307          * Initialize the ACPI boot-time table parser (gets the RSDP and SDT).
308          * Call this early for SRAT node setup.
309          */
310         acpi_boot_table_init();
311 #endif
312
313         /* How many end-of-memory variables you have, grandma! */
314         max_low_pfn = end_pfn;
315         max_pfn = end_pfn;
316         high_memory = (void *)__va(end_pfn * PAGE_SIZE - 1) + 1;
317
318         /* Remove active ranges so rediscovery with NUMA-awareness happens */
319         remove_all_active_ranges();
320
321 #ifdef CONFIG_ACPI_NUMA
322         /*
323          * Parse SRAT to discover nodes.
324          */
325         acpi_numa_init();
326 #endif
327
328 #ifdef CONFIG_NUMA
329         numa_initmem_init(0, end_pfn); 
330 #else
331         contig_initmem_init(0, end_pfn);
332 #endif
333
334         /* Reserve direct mapping */
335         reserve_bootmem_generic(table_start << PAGE_SHIFT, 
336                                 (table_end - table_start) << PAGE_SHIFT);
337
338         /* reserve kernel */
339         reserve_bootmem_generic(__pa_symbol(&_text),
340                                 __pa_symbol(&_end) - __pa_symbol(&_text));
341
342         /*
343          * reserve physical page 0 - it's a special BIOS page on many boxes,
344          * enabling clean reboots, SMP operation, laptop functions.
345          */
346         reserve_bootmem_generic(0, PAGE_SIZE);
347
348         /* reserve ebda region */
349         if (ebda_addr)
350                 reserve_bootmem_generic(ebda_addr, ebda_size);
351 #ifdef CONFIG_NUMA
352         /* reserve nodemap region */
353         if (nodemap_addr)
354                 reserve_bootmem_generic(nodemap_addr, nodemap_size);
355 #endif
356
357 #ifdef CONFIG_SMP
358         /* Reserve SMP trampoline */
359         reserve_bootmem_generic(SMP_TRAMPOLINE_BASE, 2*PAGE_SIZE);
360 #endif
361
362 #ifdef CONFIG_ACPI_SLEEP
363        /*
364         * Reserve low memory region for sleep support.
365         */
366        acpi_reserve_bootmem();
367 #endif
368         /*
369          * Find and reserve possible boot-time SMP configuration:
370          */
371         find_smp_config();
372 #ifdef CONFIG_BLK_DEV_INITRD
373         if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) {
374                 unsigned long ramdisk_image = boot_params.hdr.ramdisk_image;
375                 unsigned long ramdisk_size  = boot_params.hdr.ramdisk_size;
376                 unsigned long ramdisk_end   = ramdisk_image + ramdisk_size;
377                 unsigned long end_of_mem    = end_pfn << PAGE_SHIFT;
378
379                 if (ramdisk_end <= end_of_mem) {
380                         reserve_bootmem_generic(ramdisk_image, ramdisk_size);
381                         initrd_start = ramdisk_image + PAGE_OFFSET;
382                         initrd_end = initrd_start+ramdisk_size;
383                 } else {
384                         printk(KERN_ERR "initrd extends beyond end of memory "
385                                "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
386                                ramdisk_end, end_of_mem);
387                         initrd_start = 0;
388                 }
389         }
390 #endif
391         reserve_crashkernel();
392         paging_init();
393
394 #ifdef CONFIG_PCI
395         early_quirks();
396 #endif
397
398         /*
399          * set this early, so we dont allocate cpu0
400          * if MADT list doesnt list BSP first
401          * mpparse.c/MP_processor_info() allocates logical cpu numbers.
402          */
403         cpu_set(0, cpu_present_map);
404 #ifdef CONFIG_ACPI
405         /*
406          * Read APIC and some other early information from ACPI tables.
407          */
408         acpi_boot_init();
409 #endif
410
411         init_cpu_to_node();
412
413         /*
414          * get boot-time SMP configuration:
415          */
416         if (smp_found_config)
417                 get_smp_config();
418         init_apic_mappings();
419
420         /*
421          * We trust e820 completely. No explicit ROM probing in memory.
422          */
423         e820_reserve_resources(); 
424         e820_mark_nosave_regions();
425
426         {
427         unsigned i;
428         /* request I/O space for devices used on all i[345]86 PCs */
429         for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++)
430                 request_resource(&ioport_resource, &standard_io_resources[i]);
431         }
432
433         e820_setup_gap();
434
435 #ifdef CONFIG_VT
436 #if defined(CONFIG_VGA_CONSOLE)
437         conswitchp = &vga_con;
438 #elif defined(CONFIG_DUMMY_CONSOLE)
439         conswitchp = &dummy_con;
440 #endif
441 #endif
442 }
443
444 static int __cpuinit get_model_name(struct cpuinfo_x86 *c)
445 {
446         unsigned int *v;
447
448         if (c->extended_cpuid_level < 0x80000004)
449                 return 0;
450
451         v = (unsigned int *) c->x86_model_id;
452         cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
453         cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
454         cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
455         c->x86_model_id[48] = 0;
456         return 1;
457 }
458
459
460 static void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
461 {
462         unsigned int n, dummy, eax, ebx, ecx, edx;
463
464         n = c->extended_cpuid_level;
465
466         if (n >= 0x80000005) {
467                 cpuid(0x80000005, &dummy, &ebx, &ecx, &edx);
468                 printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
469                         edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
470                 c->x86_cache_size=(ecx>>24)+(edx>>24);
471                 /* On K8 L1 TLB is inclusive, so don't count it */
472                 c->x86_tlbsize = 0;
473         }
474
475         if (n >= 0x80000006) {
476                 cpuid(0x80000006, &dummy, &ebx, &ecx, &edx);
477                 ecx = cpuid_ecx(0x80000006);
478                 c->x86_cache_size = ecx >> 16;
479                 c->x86_tlbsize += ((ebx >> 16) & 0xfff) + (ebx & 0xfff);
480
481                 printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
482                 c->x86_cache_size, ecx & 0xFF);
483         }
484
485         if (n >= 0x80000007)
486                 cpuid(0x80000007, &dummy, &dummy, &dummy, &c->x86_power); 
487         if (n >= 0x80000008) {
488                 cpuid(0x80000008, &eax, &dummy, &dummy, &dummy); 
489                 c->x86_virt_bits = (eax >> 8) & 0xff;
490                 c->x86_phys_bits = eax & 0xff;
491         }
492 }
493
494 #ifdef CONFIG_NUMA
495 static int nearby_node(int apicid)
496 {
497         int i;
498         for (i = apicid - 1; i >= 0; i--) {
499                 int node = apicid_to_node[i];
500                 if (node != NUMA_NO_NODE && node_online(node))
501                         return node;
502         }
503         for (i = apicid + 1; i < MAX_LOCAL_APIC; i++) {
504                 int node = apicid_to_node[i];
505                 if (node != NUMA_NO_NODE && node_online(node))
506                         return node;
507         }
508         return first_node(node_online_map); /* Shouldn't happen */
509 }
510 #endif
511
512 /*
513  * On a AMD dual core setup the lower bits of the APIC id distingush the cores.
514  * Assumes number of cores is a power of two.
515  */
516 static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
517 {
518 #ifdef CONFIG_SMP
519         unsigned bits;
520 #ifdef CONFIG_NUMA
521         int cpu = smp_processor_id();
522         int node = 0;
523         unsigned apicid = hard_smp_processor_id();
524 #endif
525         unsigned ecx = cpuid_ecx(0x80000008);
526
527         c->x86_max_cores = (ecx & 0xff) + 1;
528
529         /* CPU telling us the core id bits shift? */
530         bits = (ecx >> 12) & 0xF;
531
532         /* Otherwise recompute */
533         if (bits == 0) {
534                 while ((1 << bits) < c->x86_max_cores)
535                         bits++;
536         }
537
538         /* Low order bits define the core id (index of core in socket) */
539         c->cpu_core_id = c->phys_proc_id & ((1 << bits)-1);
540         /* Convert the APIC ID into the socket ID */
541         c->phys_proc_id = phys_pkg_id(bits);
542
543 #ifdef CONFIG_NUMA
544         node = c->phys_proc_id;
545         if (apicid_to_node[apicid] != NUMA_NO_NODE)
546                 node = apicid_to_node[apicid];
547         if (!node_online(node)) {
548                 /* Two possibilities here:
549                    - The CPU is missing memory and no node was created.
550                    In that case try picking one from a nearby CPU
551                    - The APIC IDs differ from the HyperTransport node IDs
552                    which the K8 northbridge parsing fills in.
553                    Assume they are all increased by a constant offset,
554                    but in the same order as the HT nodeids.
555                    If that doesn't result in a usable node fall back to the
556                    path for the previous case.  */
557                 int ht_nodeid = apicid - (cpu_data[0].phys_proc_id << bits);
558                 if (ht_nodeid >= 0 &&
559                     apicid_to_node[ht_nodeid] != NUMA_NO_NODE)
560                         node = apicid_to_node[ht_nodeid];
561                 /* Pick a nearby node */
562                 if (!node_online(node))
563                         node = nearby_node(apicid);
564         }
565         numa_set_node(cpu, node);
566
567         printk(KERN_INFO "CPU %d/%x -> Node %d\n", cpu, apicid, node);
568 #endif
569 #endif
570 }
571
572 #define ENABLE_C1E_MASK         0x18000000
573 #define CPUID_PROCESSOR_SIGNATURE       1
574 #define CPUID_XFAM              0x0ff00000
575 #define CPUID_XFAM_K8           0x00000000
576 #define CPUID_XFAM_10H          0x00100000
577 #define CPUID_XFAM_11H          0x00200000
578 #define CPUID_XMOD              0x000f0000
579 #define CPUID_XMOD_REV_F        0x00040000
580
581 /* AMD systems with C1E don't have a working lAPIC timer. Check for that. */
582 static __cpuinit int amd_apic_timer_broken(void)
583 {
584         u32 lo, hi;
585         u32 eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
586         switch (eax & CPUID_XFAM) {
587         case CPUID_XFAM_K8:
588                 if ((eax & CPUID_XMOD) < CPUID_XMOD_REV_F)
589                         break;
590         case CPUID_XFAM_10H:
591         case CPUID_XFAM_11H:
592                 rdmsr(MSR_K8_ENABLE_C1E, lo, hi);
593                 if (lo & ENABLE_C1E_MASK)
594                         return 1;
595                 break;
596         default:
597                 /* err on the side of caution */
598                 return 1;
599         }
600         return 0;
601 }
602
603 static void __cpuinit init_amd(struct cpuinfo_x86 *c)
604 {
605         unsigned level;
606
607 #ifdef CONFIG_SMP
608         unsigned long value;
609
610         /*
611          * Disable TLB flush filter by setting HWCR.FFDIS on K8
612          * bit 6 of msr C001_0015
613          *
614          * Errata 63 for SH-B3 steppings
615          * Errata 122 for all steppings (F+ have it disabled by default)
616          */
617         if (c->x86 == 15) {
618                 rdmsrl(MSR_K8_HWCR, value);
619                 value |= 1 << 6;
620                 wrmsrl(MSR_K8_HWCR, value);
621         }
622 #endif
623
624         /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
625            3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
626         clear_bit(0*32+31, &c->x86_capability);
627         
628         /* On C+ stepping K8 rep microcode works well for copy/memset */
629         level = cpuid_eax(1);
630         if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58))
631                 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
632         if (c->x86 == 0x10 || c->x86 == 0x11)
633                 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
634
635         /* Enable workaround for FXSAVE leak */
636         if (c->x86 >= 6)
637                 set_bit(X86_FEATURE_FXSAVE_LEAK, &c->x86_capability);
638
639         level = get_model_name(c);
640         if (!level) {
641                 switch (c->x86) { 
642                 case 15:
643                         /* Should distinguish Models here, but this is only
644                            a fallback anyways. */
645                         strcpy(c->x86_model_id, "Hammer");
646                         break; 
647                 } 
648         } 
649         display_cacheinfo(c);
650
651         /* c->x86_power is 8000_0007 edx. Bit 8 is constant TSC */
652         if (c->x86_power & (1<<8))
653                 set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability);
654
655         /* Multi core CPU? */
656         if (c->extended_cpuid_level >= 0x80000008)
657                 amd_detect_cmp(c);
658
659         if (c->extended_cpuid_level >= 0x80000006 &&
660                 (cpuid_edx(0x80000006) & 0xf000))
661                 num_cache_leaves = 4;
662         else
663                 num_cache_leaves = 3;
664
665         if (c->x86 == 0xf || c->x86 == 0x10 || c->x86 == 0x11)
666                 set_bit(X86_FEATURE_K8, &c->x86_capability);
667
668         /* RDTSC can be speculated around */
669         clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
670
671         /* Family 10 doesn't support C states in MWAIT so don't use it */
672         if (c->x86 == 0x10 && !force_mwait)
673                 clear_bit(X86_FEATURE_MWAIT, &c->x86_capability);
674
675         if (amd_apic_timer_broken())
676                 disable_apic_timer = 1;
677 }
678
679 static void __cpuinit detect_ht(struct cpuinfo_x86 *c)
680 {
681 #ifdef CONFIG_SMP
682         u32     eax, ebx, ecx, edx;
683         int     index_msb, core_bits;
684
685         cpuid(1, &eax, &ebx, &ecx, &edx);
686
687
688         if (!cpu_has(c, X86_FEATURE_HT))
689                 return;
690         if (cpu_has(c, X86_FEATURE_CMP_LEGACY))
691                 goto out;
692
693         smp_num_siblings = (ebx & 0xff0000) >> 16;
694
695         if (smp_num_siblings == 1) {
696                 printk(KERN_INFO  "CPU: Hyper-Threading is disabled\n");
697         } else if (smp_num_siblings > 1 ) {
698
699                 if (smp_num_siblings > NR_CPUS) {
700                         printk(KERN_WARNING "CPU: Unsupported number of the siblings %d", smp_num_siblings);
701                         smp_num_siblings = 1;
702                         return;
703                 }
704
705                 index_msb = get_count_order(smp_num_siblings);
706                 c->phys_proc_id = phys_pkg_id(index_msb);
707
708                 smp_num_siblings = smp_num_siblings / c->x86_max_cores;
709
710                 index_msb = get_count_order(smp_num_siblings) ;
711
712                 core_bits = get_count_order(c->x86_max_cores);
713
714                 c->cpu_core_id = phys_pkg_id(index_msb) &
715                                                ((1 << core_bits) - 1);
716         }
717 out:
718         if ((c->x86_max_cores * smp_num_siblings) > 1) {
719                 printk(KERN_INFO  "CPU: Physical Processor ID: %d\n", c->phys_proc_id);
720                 printk(KERN_INFO  "CPU: Processor Core ID: %d\n", c->cpu_core_id);
721         }
722
723 #endif
724 }
725
726 /*
727  * find out the number of processor cores on the die
728  */
729 static int __cpuinit intel_num_cpu_cores(struct cpuinfo_x86 *c)
730 {
731         unsigned int eax, t;
732
733         if (c->cpuid_level < 4)
734                 return 1;
735
736         cpuid_count(4, 0, &eax, &t, &t, &t);
737
738         if (eax & 0x1f)
739                 return ((eax >> 26) + 1);
740         else
741                 return 1;
742 }
743
744 static void srat_detect_node(void)
745 {
746 #ifdef CONFIG_NUMA
747         unsigned node;
748         int cpu = smp_processor_id();
749         int apicid = hard_smp_processor_id();
750
751         /* Don't do the funky fallback heuristics the AMD version employs
752            for now. */
753         node = apicid_to_node[apicid];
754         if (node == NUMA_NO_NODE)
755                 node = first_node(node_online_map);
756         numa_set_node(cpu, node);
757
758         printk(KERN_INFO "CPU %d/%x -> Node %d\n", cpu, apicid, node);
759 #endif
760 }
761
762 static void __cpuinit init_intel(struct cpuinfo_x86 *c)
763 {
764         /* Cache sizes */
765         unsigned n;
766
767         init_intel_cacheinfo(c);
768         if (c->cpuid_level > 9 ) {
769                 unsigned eax = cpuid_eax(10);
770                 /* Check for version and the number of counters */
771                 if ((eax & 0xff) && (((eax>>8) & 0xff) > 1))
772                         set_bit(X86_FEATURE_ARCH_PERFMON, &c->x86_capability);
773         }
774
775         if (cpu_has_ds) {
776                 unsigned int l1, l2;
777                 rdmsr(MSR_IA32_MISC_ENABLE, l1, l2);
778                 if (!(l1 & (1<<11)))
779                         set_bit(X86_FEATURE_BTS, c->x86_capability);
780                 if (!(l1 & (1<<12)))
781                         set_bit(X86_FEATURE_PEBS, c->x86_capability);
782         }
783
784         n = c->extended_cpuid_level;
785         if (n >= 0x80000008) {
786                 unsigned eax = cpuid_eax(0x80000008);
787                 c->x86_virt_bits = (eax >> 8) & 0xff;
788                 c->x86_phys_bits = eax & 0xff;
789                 /* CPUID workaround for Intel 0F34 CPU */
790                 if (c->x86_vendor == X86_VENDOR_INTEL &&
791                     c->x86 == 0xF && c->x86_model == 0x3 &&
792                     c->x86_mask == 0x4)
793                         c->x86_phys_bits = 36;
794         }
795
796         if (c->x86 == 15)
797                 c->x86_cache_alignment = c->x86_clflush_size * 2;
798         if ((c->x86 == 0xf && c->x86_model >= 0x03) ||
799             (c->x86 == 0x6 && c->x86_model >= 0x0e))
800                 set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability);
801         if (c->x86 == 6)
802                 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
803         if (c->x86 == 15)
804                 set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
805         else
806                 clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
807         c->x86_max_cores = intel_num_cpu_cores(c);
808
809         srat_detect_node();
810 }
811
812 static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c)
813 {
814         char *v = c->x86_vendor_id;
815
816         if (!strcmp(v, "AuthenticAMD"))
817                 c->x86_vendor = X86_VENDOR_AMD;
818         else if (!strcmp(v, "GenuineIntel"))
819                 c->x86_vendor = X86_VENDOR_INTEL;
820         else
821                 c->x86_vendor = X86_VENDOR_UNKNOWN;
822 }
823
824 struct cpu_model_info {
825         int vendor;
826         int family;
827         char *model_names[16];
828 };
829
830 /* Do some early cpuid on the boot CPU to get some parameter that are
831    needed before check_bugs. Everything advanced is in identify_cpu
832    below. */
833 void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
834 {
835         u32 tfms;
836
837         c->loops_per_jiffy = loops_per_jiffy;
838         c->x86_cache_size = -1;
839         c->x86_vendor = X86_VENDOR_UNKNOWN;
840         c->x86_model = c->x86_mask = 0; /* So far unknown... */
841         c->x86_vendor_id[0] = '\0'; /* Unset */
842         c->x86_model_id[0] = '\0';  /* Unset */
843         c->x86_clflush_size = 64;
844         c->x86_cache_alignment = c->x86_clflush_size;
845         c->x86_max_cores = 1;
846         c->extended_cpuid_level = 0;
847         memset(&c->x86_capability, 0, sizeof c->x86_capability);
848
849         /* Get vendor name */
850         cpuid(0x00000000, (unsigned int *)&c->cpuid_level,
851               (unsigned int *)&c->x86_vendor_id[0],
852               (unsigned int *)&c->x86_vendor_id[8],
853               (unsigned int *)&c->x86_vendor_id[4]);
854                 
855         get_cpu_vendor(c);
856
857         /* Initialize the standard set of capabilities */
858         /* Note that the vendor-specific code below might override */
859
860         /* Intel-defined flags: level 0x00000001 */
861         if (c->cpuid_level >= 0x00000001) {
862                 __u32 misc;
863                 cpuid(0x00000001, &tfms, &misc, &c->x86_capability[4],
864                       &c->x86_capability[0]);
865                 c->x86 = (tfms >> 8) & 0xf;
866                 c->x86_model = (tfms >> 4) & 0xf;
867                 c->x86_mask = tfms & 0xf;
868                 if (c->x86 == 0xf)
869                         c->x86 += (tfms >> 20) & 0xff;
870                 if (c->x86 >= 0x6)
871                         c->x86_model += ((tfms >> 16) & 0xF) << 4;
872                 if (c->x86_capability[0] & (1<<19)) 
873                         c->x86_clflush_size = ((misc >> 8) & 0xff) * 8;
874         } else {
875                 /* Have CPUID level 0 only - unheard of */
876                 c->x86 = 4;
877         }
878
879 #ifdef CONFIG_SMP
880         c->phys_proc_id = (cpuid_ebx(1) >> 24) & 0xff;
881 #endif
882 }
883
884 /*
885  * This does the hard work of actually picking apart the CPU stuff...
886  */
887 void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
888 {
889         int i;
890         u32 xlvl;
891
892         early_identify_cpu(c);
893
894         /* AMD-defined flags: level 0x80000001 */
895         xlvl = cpuid_eax(0x80000000);
896         c->extended_cpuid_level = xlvl;
897         if ((xlvl & 0xffff0000) == 0x80000000) {
898                 if (xlvl >= 0x80000001) {
899                         c->x86_capability[1] = cpuid_edx(0x80000001);
900                         c->x86_capability[6] = cpuid_ecx(0x80000001);
901                 }
902                 if (xlvl >= 0x80000004)
903                         get_model_name(c); /* Default name */
904         }
905
906         /* Transmeta-defined flags: level 0x80860001 */
907         xlvl = cpuid_eax(0x80860000);
908         if ((xlvl & 0xffff0000) == 0x80860000) {
909                 /* Don't set x86_cpuid_level here for now to not confuse. */
910                 if (xlvl >= 0x80860001)
911                         c->x86_capability[2] = cpuid_edx(0x80860001);
912         }
913
914         init_scattered_cpuid_features(c);
915
916         c->apicid = phys_pkg_id(0);
917
918         /*
919          * Vendor-specific initialization.  In this section we
920          * canonicalize the feature flags, meaning if there are
921          * features a certain CPU supports which CPUID doesn't
922          * tell us, CPUID claiming incorrect flags, or other bugs,
923          * we handle them here.
924          *
925          * At the end of this section, c->x86_capability better
926          * indicate the features this CPU genuinely supports!
927          */
928         switch (c->x86_vendor) {
929         case X86_VENDOR_AMD:
930                 init_amd(c);
931                 break;
932
933         case X86_VENDOR_INTEL:
934                 init_intel(c);
935                 break;
936
937         case X86_VENDOR_UNKNOWN:
938         default:
939                 display_cacheinfo(c);
940                 break;
941         }
942
943         select_idle_routine(c);
944         detect_ht(c); 
945
946         /*
947          * On SMP, boot_cpu_data holds the common feature set between
948          * all CPUs; so make sure that we indicate which features are
949          * common between the CPUs.  The first time this routine gets
950          * executed, c == &boot_cpu_data.
951          */
952         if (c != &boot_cpu_data) {
953                 /* AND the already accumulated flags with these */
954                 for (i = 0 ; i < NCAPINTS ; i++)
955                         boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
956         }
957
958 #ifdef CONFIG_X86_MCE
959         mcheck_init(c);
960 #endif
961         if (c != &boot_cpu_data)
962                 mtrr_ap_init();
963 #ifdef CONFIG_NUMA
964         numa_add_cpu(smp_processor_id());
965 #endif
966 }
967  
968
969 void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
970 {
971         if (c->x86_model_id[0])
972                 printk("%s", c->x86_model_id);
973
974         if (c->x86_mask || c->cpuid_level >= 0) 
975                 printk(" stepping %02x\n", c->x86_mask);
976         else
977                 printk("\n");
978 }
979
980 /*
981  *      Get CPU information for use by the procfs.
982  */
983
984 static int show_cpuinfo(struct seq_file *m, void *v)
985 {
986         struct cpuinfo_x86 *c = v;
987
988         /* 
989          * These flag bits must match the definitions in <asm/cpufeature.h>.
990          * NULL means this bit is undefined or reserved; either way it doesn't
991          * have meaning as far as Linux is concerned.  Note that it's important
992          * to realize there is a difference between this table and CPUID -- if
993          * applications want to get the raw CPUID data, they should access
994          * /dev/cpu/<cpu_nr>/cpuid instead.
995          */
996         static const char *const x86_cap_flags[] = {
997                 /* Intel-defined */
998                 "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
999                 "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
1000                 "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
1001                 "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",
1002
1003                 /* AMD-defined */
1004                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1005                 NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
1006                 NULL, NULL, NULL, NULL, "nx", NULL, "mmxext", NULL,
1007                 NULL, "fxsr_opt", "pdpe1gb", "rdtscp", NULL, "lm",
1008                 "3dnowext", "3dnow",
1009
1010                 /* Transmeta-defined */
1011                 "recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
1012                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1013                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1014                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1015
1016                 /* Other (Linux-defined) */
1017                 "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr",
1018                 NULL, NULL, NULL, NULL,
1019                 "constant_tsc", "up", NULL, "arch_perfmon",
1020                 "pebs", "bts", NULL, "sync_rdtsc",
1021                 "rep_good", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1022                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1023
1024                 /* Intel-defined (#2) */
1025                 "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est",
1026                 "tm2", "ssse3", "cid", NULL, NULL, "cx16", "xtpr", NULL,
1027                 NULL, NULL, "dca", NULL, NULL, NULL, NULL, "popcnt",
1028                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1029
1030                 /* VIA/Cyrix/Centaur-defined */
1031                 NULL, NULL, "rng", "rng_en", NULL, NULL, "ace", "ace_en",
1032                 "ace2", "ace2_en", "phe", "phe_en", "pmm", "pmm_en", NULL, NULL,
1033                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1034                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1035
1036                 /* AMD-defined (#2) */
1037                 "lahf_lm", "cmp_legacy", "svm", "extapic", "cr8_legacy",
1038                 "altmovcr8", "abm", "sse4a",
1039                 "misalignsse", "3dnowprefetch",
1040                 "osvw", "ibs", NULL, NULL, NULL, NULL,
1041                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1042                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1043
1044                 /* Auxiliary (Linux-defined) */
1045                 "ida", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1046                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1047                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1048                 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1049         };
1050         static const char *const x86_power_flags[] = {
1051                 "ts",   /* temperature sensor */
1052                 "fid",  /* frequency id control */
1053                 "vid",  /* voltage id control */
1054                 "ttp",  /* thermal trip */
1055                 "tm",
1056                 "stc",
1057                 "100mhzsteps",
1058                 "hwpstate",
1059                 "",     /* tsc invariant mapped to constant_tsc */
1060                 /* nothing */
1061         };
1062
1063
1064 #ifdef CONFIG_SMP
1065         if (!cpu_online(c-cpu_data))
1066                 return 0;
1067 #endif
1068
1069         seq_printf(m,"processor\t: %u\n"
1070                      "vendor_id\t: %s\n"
1071                      "cpu family\t: %d\n"
1072                      "model\t\t: %d\n"
1073                      "model name\t: %s\n",
1074                      (unsigned)(c-cpu_data),
1075                      c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
1076                      c->x86,
1077                      (int)c->x86_model,
1078                      c->x86_model_id[0] ? c->x86_model_id : "unknown");
1079         
1080         if (c->x86_mask || c->cpuid_level >= 0)
1081                 seq_printf(m, "stepping\t: %d\n", c->x86_mask);
1082         else
1083                 seq_printf(m, "stepping\t: unknown\n");
1084         
1085         if (cpu_has(c,X86_FEATURE_TSC)) {
1086                 unsigned int freq = cpufreq_quick_get((unsigned)(c-cpu_data));
1087                 if (!freq)
1088                         freq = cpu_khz;
1089                 seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
1090                              freq / 1000, (freq % 1000));
1091         }
1092
1093         /* Cache size */
1094         if (c->x86_cache_size >= 0) 
1095                 seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
1096         
1097 #ifdef CONFIG_SMP
1098         if (smp_num_siblings * c->x86_max_cores > 1) {
1099                 int cpu = c - cpu_data;
1100                 seq_printf(m, "physical id\t: %d\n", c->phys_proc_id);
1101                 seq_printf(m, "siblings\t: %d\n",
1102                                cpus_weight(per_cpu(cpu_core_map, cpu)));
1103                 seq_printf(m, "core id\t\t: %d\n", c->cpu_core_id);
1104                 seq_printf(m, "cpu cores\t: %d\n", c->booted_cores);
1105         }
1106 #endif  
1107
1108         seq_printf(m,
1109                 "fpu\t\t: yes\n"
1110                 "fpu_exception\t: yes\n"
1111                 "cpuid level\t: %d\n"
1112                 "wp\t\t: yes\n"
1113                 "flags\t\t:",
1114                    c->cpuid_level);
1115
1116         { 
1117                 int i; 
1118                 for ( i = 0 ; i < 32*NCAPINTS ; i++ )
1119                         if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
1120                                 seq_printf(m, " %s", x86_cap_flags[i]);
1121         }
1122                 
1123         seq_printf(m, "\nbogomips\t: %lu.%02lu\n",
1124                    c->loops_per_jiffy/(500000/HZ),
1125                    (c->loops_per_jiffy/(5000/HZ)) % 100);
1126
1127         if (c->x86_tlbsize > 0) 
1128                 seq_printf(m, "TLB size\t: %d 4K pages\n", c->x86_tlbsize);
1129         seq_printf(m, "clflush size\t: %d\n", c->x86_clflush_size);
1130         seq_printf(m, "cache_alignment\t: %d\n", c->x86_cache_alignment);
1131
1132         seq_printf(m, "address sizes\t: %u bits physical, %u bits virtual\n", 
1133                    c->x86_phys_bits, c->x86_virt_bits);
1134
1135         seq_printf(m, "power management:");
1136         {
1137                 unsigned i;
1138                 for (i = 0; i < 32; i++) 
1139                         if (c->x86_power & (1 << i)) {
1140                                 if (i < ARRAY_SIZE(x86_power_flags) &&
1141                                         x86_power_flags[i])
1142                                         seq_printf(m, "%s%s",
1143                                                 x86_power_flags[i][0]?" ":"",
1144                                                 x86_power_flags[i]);
1145                                 else
1146                                         seq_printf(m, " [%d]", i);
1147                         }
1148         }
1149
1150         seq_printf(m, "\n\n");
1151
1152         return 0;
1153 }
1154
1155 static void *c_start(struct seq_file *m, loff_t *pos)
1156 {
1157         return *pos < NR_CPUS ? cpu_data + *pos : NULL;
1158 }
1159
1160 static void *c_next(struct seq_file *m, void *v, loff_t *pos)
1161 {
1162         ++*pos;
1163         return c_start(m, pos);
1164 }
1165
1166 static void c_stop(struct seq_file *m, void *v)
1167 {
1168 }
1169
1170 struct seq_operations cpuinfo_op = {
1171         .start =c_start,
1172         .next = c_next,
1173         .stop = c_stop,
1174         .show = show_cpuinfo,
1175 };