Lines Matching refs:c
174 static void init_amd_k5(struct cpuinfo_x86 *c) in init_amd_k5() argument
186 if (c->x86_model == 9 || c->x86_model == 10) { in init_amd_k5()
193 static void init_amd_k6(struct cpuinfo_x86 *c) in init_amd_k6() argument
199 if (c->x86_model < 6) { in init_amd_k6()
201 if (c->x86_model == 0) { in init_amd_k6()
202 clear_cpu_cap(c, X86_FEATURE_APIC); in init_amd_k6()
203 set_cpu_cap(c, X86_FEATURE_PGE); in init_amd_k6()
208 if (c->x86_model == 6 && c->x86_stepping == 1) { in init_amd_k6()
237 if (c->x86_model < 8 || in init_amd_k6()
238 (c->x86_model == 8 && c->x86_stepping < 8)) { in init_amd_k6()
257 if ((c->x86_model == 8 && c->x86_stepping > 7) || in init_amd_k6()
258 c->x86_model == 9 || c->x86_model == 13) { in init_amd_k6()
279 if (c->x86_model == 10) { in init_amd_k6()
287 static void init_amd_k7(struct cpuinfo_x86 *c) in init_amd_k7() argument
297 if (c->x86_model >= 6 && c->x86_model <= 10) { in init_amd_k7()
298 if (!cpu_has(c, X86_FEATURE_XMM)) { in init_amd_k7()
301 set_cpu_cap(c, X86_FEATURE_XMM); in init_amd_k7()
310 if ((c->x86_model == 8 && c->x86_stepping >= 1) || (c->x86_model > 8)) { in init_amd_k7()
320 if (!c->cpu_index) in init_amd_k7()
328 if ((c->x86_model == 6) && ((c->x86_stepping == 0) || in init_amd_k7()
329 (c->x86_stepping == 1))) in init_amd_k7()
333 if ((c->x86_model == 7) && (c->x86_stepping == 0)) in init_amd_k7()
343 if (((c->x86_model == 6) && (c->x86_stepping >= 2)) || in init_amd_k7()
344 ((c->x86_model == 7) && (c->x86_stepping >= 1)) || in init_amd_k7()
345 (c->x86_model > 7)) in init_amd_k7()
346 if (cpu_has(c, X86_FEATURE_MP)) in init_amd_k7()
389 static void legacy_fixup_core_id(struct cpuinfo_x86 *c) in legacy_fixup_core_id() argument
393 if (c->x86 >= 0x17) in legacy_fixup_core_id()
396 cus_per_node = c->x86_max_cores / nodes_per_socket; in legacy_fixup_core_id()
397 c->cpu_core_id %= cus_per_node; in legacy_fixup_core_id()
406 static void amd_get_topology(struct cpuinfo_x86 *c) in amd_get_topology() argument
417 c->cpu_die_id = ecx & 0xff; in amd_get_topology()
419 if (c->x86 == 0x15) in amd_get_topology()
420 c->cu_id = ebx & 0xff; in amd_get_topology()
422 if (c->x86 >= 0x17) { in amd_get_topology()
423 c->cpu_core_id = ebx & 0xff; in amd_get_topology()
426 c->x86_max_cores /= smp_num_siblings; in amd_get_topology()
433 err = detect_extended_topology(c); in amd_get_topology()
435 c->x86_coreid_bits = get_count_order(c->x86_max_cores); in amd_get_topology()
437 cacheinfo_amd_init_llc_id(c, cpu); in amd_get_topology()
439 } else if (cpu_has(c, X86_FEATURE_NODEID_MSR)) { in amd_get_topology()
443 c->cpu_die_id = value & 7; in amd_get_topology()
445 per_cpu(cpu_llc_id, cpu) = c->cpu_die_id; in amd_get_topology()
450 set_cpu_cap(c, X86_FEATURE_AMD_DCM); in amd_get_topology()
451 legacy_fixup_core_id(c); in amd_get_topology()
459 static void amd_detect_cmp(struct cpuinfo_x86 *c) in amd_detect_cmp() argument
464 bits = c->x86_coreid_bits; in amd_detect_cmp()
466 c->cpu_core_id = c->initial_apicid & ((1 << bits)-1); in amd_detect_cmp()
468 c->phys_proc_id = c->initial_apicid >> bits; in amd_detect_cmp()
470 per_cpu(cpu_llc_id, cpu) = c->cpu_die_id = c->phys_proc_id; in amd_detect_cmp()
479 static void srat_detect_node(struct cpuinfo_x86 *c) in srat_detect_node() argument
484 unsigned apicid = c->apicid; in srat_detect_node()
496 x86_cpuinit.fixup_cpu_id(c, node); in srat_detect_node()
518 int ht_nodeid = c->initial_apicid; in srat_detect_node()
530 static void early_init_amd_mc(struct cpuinfo_x86 *c) in early_init_amd_mc() argument
536 if (c->extended_cpuid_level < 0x80000008) in early_init_amd_mc()
541 c->x86_max_cores = (ecx & 0xff) + 1; in early_init_amd_mc()
548 while ((1 << bits) < c->x86_max_cores) in early_init_amd_mc()
552 c->x86_coreid_bits = bits; in early_init_amd_mc()
556 static void bsp_init_amd(struct cpuinfo_x86 *c) in bsp_init_amd() argument
558 if (cpu_has(c, X86_FEATURE_CONSTANT_TSC)) { in bsp_init_amd()
560 if (c->x86 > 0x10 || in bsp_init_amd()
561 (c->x86 == 0x10 && c->x86_model >= 0x2)) { in bsp_init_amd()
570 if (c->x86 == 0x15) { in bsp_init_amd()
585 if (cpu_has(c, X86_FEATURE_MWAITX)) in bsp_init_amd()
602 c->x86 >= 0x15 && c->x86 <= 0x17) { in bsp_init_amd()
605 switch (c->x86) { in bsp_init_amd()
622 resctrl_cpu_detect(c); in bsp_init_amd()
625 static void early_detect_mem_encrypt(struct cpuinfo_x86 *c) in early_detect_mem_encrypt() argument
643 if (cpu_has(c, X86_FEATURE_SME) || cpu_has(c, X86_FEATURE_SEV)) { in early_detect_mem_encrypt()
654 c->x86_phys_bits -= (cpuid_ebx(0x8000001f) >> 6) & 0x3f; in early_detect_mem_encrypt()
676 static void early_init_amd(struct cpuinfo_x86 *c) in early_init_amd() argument
681 early_init_amd_mc(c); in early_init_amd()
683 if (c->x86 >= 0xf) in early_init_amd()
684 set_cpu_cap(c, X86_FEATURE_K8); in early_init_amd()
686 rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy); in early_init_amd()
692 if (c->x86_power & (1 << 8)) { in early_init_amd()
693 set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); in early_init_amd()
694 set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC); in early_init_amd()
698 if (c->x86_power & BIT(12)) in early_init_amd()
699 set_cpu_cap(c, X86_FEATURE_ACC_POWER); in early_init_amd()
702 if (c->x86_power & BIT(14)) in early_init_amd()
703 set_cpu_cap(c, X86_FEATURE_RAPL); in early_init_amd()
706 set_cpu_cap(c, X86_FEATURE_SYSCALL32); in early_init_amd()
709 if (c->x86 == 5) in early_init_amd()
710 if (c->x86_model == 13 || c->x86_model == 9 || in early_init_amd()
711 (c->x86_model == 8 && c->x86_stepping >= 8)) in early_init_amd()
712 set_cpu_cap(c, X86_FEATURE_K6_MTRR); in early_init_amd()
722 if (c->x86 > 0x16) in early_init_amd()
723 set_cpu_cap(c, X86_FEATURE_EXTD_APICID); in early_init_amd()
724 else if (c->x86 >= 0xf) { in early_init_amd()
730 set_cpu_cap(c, X86_FEATURE_EXTD_APICID); in early_init_amd()
740 set_cpu_cap(c, X86_FEATURE_VMMCALL); in early_init_amd()
743 if (c->x86 == 0x16 && c->x86_model <= 0xf) in early_init_amd()
752 if (cpu_has_amd_erratum(c, amd_erratum_400)) in early_init_amd()
753 set_cpu_bug(c, X86_BUG_AMD_E400); in early_init_amd()
755 early_detect_mem_encrypt(c); in early_init_amd()
758 if (c->x86 == 0x15 && in early_init_amd()
759 (c->x86_model >= 0x10 && c->x86_model <= 0x6f) && in early_init_amd()
760 !cpu_has(c, X86_FEATURE_TOPOEXT)) { in early_init_amd()
765 set_cpu_cap(c, X86_FEATURE_TOPOEXT); in early_init_amd()
771 if (cpu_has(c, X86_FEATURE_TOPOEXT)) in early_init_amd()
774 if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && !cpu_has(c, X86_FEATURE_IBPB_BRTYPE)) { in early_init_amd()
775 if (c->x86 == 0x17 && boot_cpu_has(X86_FEATURE_AMD_IBPB)) in early_init_amd()
777 else if (c->x86 >= 0x19 && !wrmsrl_safe(MSR_IA32_PRED_CMD, PRED_CMD_SBPB)) { in early_init_amd()
784 static void init_amd_k8(struct cpuinfo_x86 *c) in init_amd_k8() argument
792 set_cpu_cap(c, X86_FEATURE_REP_GOOD); in init_amd_k8()
799 if (c->x86_model < 0x14 && cpu_has(c, X86_FEATURE_LAHF_LM)) { in init_amd_k8()
800 clear_cpu_cap(c, X86_FEATURE_LAHF_LM); in init_amd_k8()
807 if (!c->x86_model_id[0]) in init_amd_k8()
808 strcpy(c->x86_model_id, "Hammer"); in init_amd_k8()
820 set_cpu_bug(c, X86_BUG_SWAPGS_FENCE); in init_amd_k8()
823 static void init_amd_gh(struct cpuinfo_x86 *c) in init_amd_gh() argument
827 if (c == &boot_cpu_data) in init_amd_gh()
854 if (cpu_has_amd_erratum(c, amd_erratum_383)) in init_amd_gh()
855 set_cpu_bug(c, X86_BUG_AMD_TLB_MMATCH); in init_amd_gh()
858 static void init_amd_ln(struct cpuinfo_x86 *c) in init_amd_ln() argument
883 static void clear_rdrand_cpuid_bit(struct cpuinfo_x86 *c) in clear_rdrand_cpuid_bit() argument
911 clear_cpu_cap(c, X86_FEATURE_RDRAND); in clear_rdrand_cpuid_bit()
915 static void init_amd_jg(struct cpuinfo_x86 *c) in init_amd_jg() argument
922 clear_rdrand_cpuid_bit(c); in init_amd_jg()
925 static void init_amd_bd(struct cpuinfo_x86 *c) in init_amd_bd() argument
933 if ((c->x86_model >= 0x02) && (c->x86_model < 0x20)) { in init_amd_bd()
945 clear_rdrand_cpuid_bit(c); in init_amd_bd()
948 void init_spectral_chicken(struct cpuinfo_x86 *c) in init_spectral_chicken() argument
961 if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && cpu_has(c, X86_FEATURE_AMD_STIBP)) { in init_spectral_chicken()
976 clear_cpu_cap(c, X86_FEATURE_XSAVES); in init_spectral_chicken()
979 static void init_amd_zn(struct cpuinfo_x86 *c) in init_amd_zn() argument
981 set_cpu_cap(c, X86_FEATURE_ZEN); in init_amd_zn()
988 if (!cpu_has(c, X86_FEATURE_HYPERVISOR)) { in init_amd_zn()
991 if (!cpu_has(c, X86_FEATURE_CPB)) in init_amd_zn()
992 set_cpu_cap(c, X86_FEATURE_CPB); in init_amd_zn()
999 if (c->x86 == 0x19 && !cpu_has(c, X86_FEATURE_BTC_NO)) in init_amd_zn()
1000 set_cpu_cap(c, X86_FEATURE_BTC_NO); in init_amd_zn()
1026 static void zenbleed_check(struct cpuinfo_x86 *c) in zenbleed_check() argument
1028 if (!cpu_has_amd_erratum(c, amd_zenbleed)) in zenbleed_check()
1031 if (cpu_has(c, X86_FEATURE_HYPERVISOR)) in zenbleed_check()
1034 if (!cpu_has(c, X86_FEATURE_AVX)) in zenbleed_check()
1045 static void init_amd(struct cpuinfo_x86 *c) in init_amd() argument
1047 early_init_amd(c); in init_amd()
1053 clear_cpu_cap(c, 0*32+31); in init_amd()
1055 if (c->x86 >= 0x10) in init_amd()
1056 set_cpu_cap(c, X86_FEATURE_REP_GOOD); in init_amd()
1059 if (cpu_has(c, X86_FEATURE_FSRM)) in init_amd()
1060 set_cpu_cap(c, X86_FEATURE_FSRS); in init_amd()
1063 c->apicid = read_apic_id(); in init_amd()
1066 if (c->x86 < 6) in init_amd()
1067 clear_cpu_cap(c, X86_FEATURE_MCE); in init_amd()
1069 switch (c->x86) { in init_amd()
1070 case 4: init_amd_k5(c); break; in init_amd()
1071 case 5: init_amd_k6(c); break; in init_amd()
1072 case 6: init_amd_k7(c); break; in init_amd()
1073 case 0xf: init_amd_k8(c); break; in init_amd()
1074 case 0x10: init_amd_gh(c); break; in init_amd()
1075 case 0x12: init_amd_ln(c); break; in init_amd()
1076 case 0x15: init_amd_bd(c); break; in init_amd()
1077 case 0x16: init_amd_jg(c); break; in init_amd()
1078 case 0x17: init_spectral_chicken(c); in init_amd()
1080 case 0x19: init_amd_zn(c); break; in init_amd()
1087 if ((c->x86 >= 6) && (!cpu_has(c, X86_FEATURE_XSAVEERPTR))) in init_amd()
1088 set_cpu_bug(c, X86_BUG_FXSAVE_LEAK); in init_amd()
1090 cpu_detect_cache_sizes(c); in init_amd()
1092 amd_detect_cmp(c); in init_amd()
1093 amd_get_topology(c); in init_amd()
1094 srat_detect_node(c); in init_amd()
1096 init_amd_cacheinfo(c); in init_amd()
1098 if (!cpu_has(c, X86_FEATURE_LFENCE_RDTSC) && cpu_has(c, X86_FEATURE_XMM2)) { in init_amd()
1109 set_cpu_cap(c, X86_FEATURE_LFENCE_RDTSC); in init_amd()
1116 if (c->x86 > 0x11) in init_amd()
1117 set_cpu_cap(c, X86_FEATURE_ARAT); in init_amd()
1120 if (!cpu_has(c, X86_FEATURE_3DNOWPREFETCH)) in init_amd()
1121 if (cpu_has(c, X86_FEATURE_3DNOW) || cpu_has(c, X86_FEATURE_LM)) in init_amd()
1122 set_cpu_cap(c, X86_FEATURE_3DNOWPREFETCH); in init_amd()
1126 set_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS); in init_amd()
1133 if (cpu_has(c, X86_FEATURE_IRPERF) && in init_amd()
1134 !cpu_has_amd_erratum(c, amd_erratum_1054)) in init_amd()
1137 check_null_seg_clears_base(c); in init_amd()
1147 cpu_has(c, X86_FEATURE_AUTOIBRS)) in init_amd()
1150 zenbleed_check(c); in init_amd()
1152 if (cpu_has_amd_erratum(c, amd_div0)) { in init_amd()
1157 if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && in init_amd()
1158 cpu_has_amd_erratum(c, amd_erratum_1485)) in init_amd()
1163 static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size) in amd_size_cache() argument
1166 if (c->x86 == 6) { in amd_size_cache()
1168 if (c->x86_model == 3 && c->x86_stepping == 0) in amd_size_cache()
1171 if (c->x86_model == 4 && in amd_size_cache()
1172 (c->x86_stepping == 0 || c->x86_stepping == 1)) in amd_size_cache()
1179 static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c) in cpu_detect_tlb_amd() argument
1184 if (c->x86 < 0xf) in cpu_detect_tlb_amd()
1187 if (c->extended_cpuid_level < 0x80000006) in cpu_detect_tlb_amd()
1199 if (c->x86 == 0xf) { in cpu_detect_tlb_amd()
1216 if (c->x86 == 0x15 && c->x86_model <= 0x1f) { in cpu_detect_tlb_amd()
1295 struct cpuinfo_x86 *c = &boot_cpu_data; in amd_get_highest_perf() local
1297 if (c->x86 == 0x17 && ((c->x86_model >= 0x30 && c->x86_model < 0x40) || in amd_get_highest_perf()
1298 (c->x86_model >= 0x70 && c->x86_model < 0x80))) in amd_get_highest_perf()
1301 if (c->x86 == 0x19 && ((c->x86_model >= 0x20 && c->x86_model < 0x30) || in amd_get_highest_perf()
1302 (c->x86_model >= 0x40 && c->x86_model < 0x70))) in amd_get_highest_perf()
1311 struct cpuinfo_x86 *c = &cpu_data(smp_processor_id()); in zenbleed_check_cpu() local
1313 zenbleed_check(c); in zenbleed_check_cpu()