aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/setup_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/setup_64.c')
-rw-r--r--arch/x86/kernel/setup_64.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
index 84f66b7b4d2e..63dd39b843b5 100644
--- a/arch/x86/kernel/setup_64.c
+++ b/arch/x86/kernel/setup_64.c
@@ -661,19 +661,19 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
661 661
662 /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; 662 /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
663 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ 663 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
664 clear_bit(0*32+31, &c->x86_capability); 664 clear_bit(0*32+31, (unsigned long *)&c->x86_capability);
665 665
666 /* On C+ stepping K8 rep microcode works well for copy/memset */ 666 /* On C+ stepping K8 rep microcode works well for copy/memset */
667 level = cpuid_eax(1); 667 level = cpuid_eax(1);
668 if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || 668 if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) ||
669 level >= 0x0f58)) 669 level >= 0x0f58))
670 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); 670 set_bit(X86_FEATURE_REP_GOOD, (unsigned long *)&c->x86_capability);
671 if (c->x86 == 0x10 || c->x86 == 0x11) 671 if (c->x86 == 0x10 || c->x86 == 0x11)
672 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); 672 set_bit(X86_FEATURE_REP_GOOD, (unsigned long *)&c->x86_capability);
673 673
674 /* Enable workaround for FXSAVE leak */ 674 /* Enable workaround for FXSAVE leak */
675 if (c->x86 >= 6) 675 if (c->x86 >= 6)
676 set_bit(X86_FEATURE_FXSAVE_LEAK, &c->x86_capability); 676 set_bit(X86_FEATURE_FXSAVE_LEAK, (unsigned long *)&c->x86_capability);
677 677
678 level = get_model_name(c); 678 level = get_model_name(c);
679 if (!level) { 679 if (!level) {
@@ -689,7 +689,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
689 689
690 /* c->x86_power is 8000_0007 edx. Bit 8 is constant TSC */ 690 /* c->x86_power is 8000_0007 edx. Bit 8 is constant TSC */
691 if (c->x86_power & (1<<8)) 691 if (c->x86_power & (1<<8))
692 set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability); 692 set_bit(X86_FEATURE_CONSTANT_TSC, (unsigned long *)&c->x86_capability);
693 693
694 /* Multi core CPU? */ 694 /* Multi core CPU? */
695 if (c->extended_cpuid_level >= 0x80000008) 695 if (c->extended_cpuid_level >= 0x80000008)
@@ -702,14 +702,14 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
702 num_cache_leaves = 3; 702 num_cache_leaves = 3;
703 703
704 if (c->x86 == 0xf || c->x86 == 0x10 || c->x86 == 0x11) 704 if (c->x86 == 0xf || c->x86 == 0x10 || c->x86 == 0x11)
705 set_bit(X86_FEATURE_K8, &c->x86_capability); 705 set_bit(X86_FEATURE_K8, (unsigned long *)&c->x86_capability);
706 706
707 /* RDTSC can be speculated around */ 707 /* RDTSC can be speculated around */
708 clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); 708 clear_bit(X86_FEATURE_SYNC_RDTSC, (unsigned long *)&c->x86_capability);
709 709
710 /* Family 10 doesn't support C states in MWAIT so don't use it */ 710 /* Family 10 doesn't support C states in MWAIT so don't use it */
711 if (c->x86 == 0x10 && !force_mwait) 711 if (c->x86 == 0x10 && !force_mwait)
712 clear_bit(X86_FEATURE_MWAIT, &c->x86_capability); 712 clear_bit(X86_FEATURE_MWAIT, (unsigned long *)&c->x86_capability);
713 713
714 if (amd_apic_timer_broken()) 714 if (amd_apic_timer_broken())
715 disable_apic_timer = 1; 715 disable_apic_timer = 1;
@@ -811,16 +811,17 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
811 unsigned eax = cpuid_eax(10); 811 unsigned eax = cpuid_eax(10);
812 /* Check for version and the number of counters */ 812 /* Check for version and the number of counters */
813 if ((eax & 0xff) && (((eax>>8) & 0xff) > 1)) 813 if ((eax & 0xff) && (((eax>>8) & 0xff) > 1))
814 set_bit(X86_FEATURE_ARCH_PERFMON, &c->x86_capability); 814 set_bit(X86_FEATURE_ARCH_PERFMON,
815 (unsigned long *)&c->x86_capability);
815 } 816 }
816 817
817 if (cpu_has_ds) { 818 if (cpu_has_ds) {
818 unsigned int l1, l2; 819 unsigned int l1, l2;
819 rdmsr(MSR_IA32_MISC_ENABLE, l1, l2); 820 rdmsr(MSR_IA32_MISC_ENABLE, l1, l2);
820 if (!(l1 & (1<<11))) 821 if (!(l1 & (1<<11)))
821 set_bit(X86_FEATURE_BTS, c->x86_capability); 822 set_bit(X86_FEATURE_BTS, (unsigned long *)c->x86_capability);
822 if (!(l1 & (1<<12))) 823 if (!(l1 & (1<<12)))
823 set_bit(X86_FEATURE_PEBS, c->x86_capability); 824 set_bit(X86_FEATURE_PEBS, (unsigned long *)c->x86_capability);
824 } 825 }
825 826
826 n = c->extended_cpuid_level; 827 n = c->extended_cpuid_level;
@@ -839,13 +840,13 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
839 c->x86_cache_alignment = c->x86_clflush_size * 2; 840 c->x86_cache_alignment = c->x86_clflush_size * 2;
840 if ((c->x86 == 0xf && c->x86_model >= 0x03) || 841 if ((c->x86 == 0xf && c->x86_model >= 0x03) ||
841 (c->x86 == 0x6 && c->x86_model >= 0x0e)) 842 (c->x86 == 0x6 && c->x86_model >= 0x0e))
842 set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability); 843 set_bit(X86_FEATURE_CONSTANT_TSC, (unsigned long *)&c->x86_capability);
843 if (c->x86 == 6) 844 if (c->x86 == 6)
844 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); 845 set_bit(X86_FEATURE_REP_GOOD, (unsigned long *)&c->x86_capability);
845 if (c->x86 == 15) 846 if (c->x86 == 15)
846 set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); 847 set_bit(X86_FEATURE_SYNC_RDTSC, (unsigned long *)&c->x86_capability);
847 else 848 else
848 clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); 849 clear_bit(X86_FEATURE_SYNC_RDTSC, (unsigned long *)&c->x86_capability);
849 c->x86_max_cores = intel_num_cpu_cores(c); 850 c->x86_max_cores = intel_num_cpu_cores(c);
850 851
851 srat_detect_node(); 852 srat_detect_node();