GNU Linux-libre 4.19.281-gnu1
[releases.git] / arch / x86 / kernel / cpu / amd.c
1 #include <linux/export.h>
2 #include <linux/bitops.h>
3 #include <linux/elf.h>
4 #include <linux/mm.h>
5
6 #include <linux/io.h>
7 #include <linux/sched.h>
8 #include <linux/sched/clock.h>
9 #include <linux/random.h>
10 #include <asm/processor.h>
11 #include <asm/apic.h>
12 #include <asm/cacheinfo.h>
13 #include <asm/cpu.h>
14 #include <asm/spec-ctrl.h>
15 #include <asm/smp.h>
16 #include <asm/pci-direct.h>
17 #include <asm/delay.h>
18
19 #ifdef CONFIG_X86_64
20 # include <asm/mmconfig.h>
21 # include <asm/set_memory.h>
22 #endif
23
24 #include "cpu.h"
25
26 static const int amd_erratum_383[];
27 static const int amd_erratum_400[];
28 static const int amd_erratum_1054[];
29 static bool cpu_has_amd_erratum(struct cpuinfo_x86 *cpu, const int *erratum);
30
31 /*
32  * nodes_per_socket: Stores the number of nodes per socket.
33  * Refer to Fam15h Models 00-0fh BKDG - CPUID Fn8000_001E_ECX
34  * Node Identifiers[10:8]
35  */
36 static u32 nodes_per_socket = 1;
37
38 static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p)
39 {
40         u32 gprs[8] = { 0 };
41         int err;
42
43         WARN_ONCE((boot_cpu_data.x86 != 0xf),
44                   "%s should only be used on K8!\n", __func__);
45
46         gprs[1] = msr;
47         gprs[7] = 0x9c5a203a;
48
49         err = rdmsr_safe_regs(gprs);
50
51         *p = gprs[0] | ((u64)gprs[2] << 32);
52
53         return err;
54 }
55
56 static inline int wrmsrl_amd_safe(unsigned msr, unsigned long long val)
57 {
58         u32 gprs[8] = { 0 };
59
60         WARN_ONCE((boot_cpu_data.x86 != 0xf),
61                   "%s should only be used on K8!\n", __func__);
62
63         gprs[0] = (u32)val;
64         gprs[1] = msr;
65         gprs[2] = val >> 32;
66         gprs[7] = 0x9c5a203a;
67
68         return wrmsr_safe_regs(gprs);
69 }
70
71 /*
72  *      B step AMD K6 before B 9730xxxx have hardware bugs that can cause
73  *      misexecution of code under Linux. Owners of such processors should
74  *      contact AMD for precise details and a CPU swap.
75  *
76  *      See     http://www.multimania.com/poulot/k6bug.html
77  *      and     section 2.6.2 of "AMD-K6 Processor Revision Guide - Model 6"
78  *              (Publication # 21266  Issue Date: August 1998)
79  *
80  *      The following test is erm.. interesting. AMD neglected to up
81  *      the chip setting when fixing the bug but they also tweaked some
82  *      performance at the same time..
83  */
84
85 extern __visible void vide(void);
86 __asm__(".globl vide\n"
87         ".type vide, @function\n"
88         ".align 4\n"
89         "vide: ret\n");
90
91 static void init_amd_k5(struct cpuinfo_x86 *c)
92 {
93 #ifdef CONFIG_X86_32
94 /*
95  * General Systems BIOSen alias the cpu frequency registers
96  * of the Elan at 0x000df000. Unfortunately, one of the Linux
97  * drivers subsequently pokes it, and changes the CPU speed.
98  * Workaround : Remove the unneeded alias.
99  */
100 #define CBAR            (0xfffc) /* Configuration Base Address  (32-bit) */
101 #define CBAR_ENB        (0x80000000)
102 #define CBAR_KEY        (0X000000CB)
103         if (c->x86_model == 9 || c->x86_model == 10) {
104                 if (inl(CBAR) & CBAR_ENB)
105                         outl(0 | CBAR_KEY, CBAR);
106         }
107 #endif
108 }
109
110 static void init_amd_k6(struct cpuinfo_x86 *c)
111 {
112 #ifdef CONFIG_X86_32
113         u32 l, h;
114         int mbytes = get_num_physpages() >> (20-PAGE_SHIFT);
115
116         if (c->x86_model < 6) {
117                 /* Based on AMD doc 20734R - June 2000 */
118                 if (c->x86_model == 0) {
119                         clear_cpu_cap(c, X86_FEATURE_APIC);
120                         set_cpu_cap(c, X86_FEATURE_PGE);
121                 }
122                 return;
123         }
124
125         if (c->x86_model == 6 && c->x86_stepping == 1) {
126                 const int K6_BUG_LOOP = 1000000;
127                 int n;
128                 void (*f_vide)(void);
129                 u64 d, d2;
130
131                 pr_info("AMD K6 stepping B detected - ");
132
133                 /*
134                  * It looks like AMD fixed the 2.6.2 bug and improved indirect
135                  * calls at the same time.
136                  */
137
138                 n = K6_BUG_LOOP;
139                 f_vide = vide;
140                 OPTIMIZER_HIDE_VAR(f_vide);
141                 d = rdtsc();
142                 while (n--)
143                         f_vide();
144                 d2 = rdtsc();
145                 d = d2-d;
146
147                 if (d > 20*K6_BUG_LOOP)
148                         pr_cont("system stability may be impaired when more than 32 MB are used.\n");
149                 else
150                         pr_cont("probably OK (after B9730xxxx).\n");
151         }
152
153         /* K6 with old style WHCR */
154         if (c->x86_model < 8 ||
155            (c->x86_model == 8 && c->x86_stepping < 8)) {
156                 /* We can only write allocate on the low 508Mb */
157                 if (mbytes > 508)
158                         mbytes = 508;
159
160                 rdmsr(MSR_K6_WHCR, l, h);
161                 if ((l&0x0000FFFF) == 0) {
162                         unsigned long flags;
163                         l = (1<<0)|((mbytes/4)<<1);
164                         local_irq_save(flags);
165                         wbinvd();
166                         wrmsr(MSR_K6_WHCR, l, h);
167                         local_irq_restore(flags);
168                         pr_info("Enabling old style K6 write allocation for %d Mb\n",
169                                 mbytes);
170                 }
171                 return;
172         }
173
174         if ((c->x86_model == 8 && c->x86_stepping > 7) ||
175              c->x86_model == 9 || c->x86_model == 13) {
176                 /* The more serious chips .. */
177
178                 if (mbytes > 4092)
179                         mbytes = 4092;
180
181                 rdmsr(MSR_K6_WHCR, l, h);
182                 if ((l&0xFFFF0000) == 0) {
183                         unsigned long flags;
184                         l = ((mbytes>>2)<<22)|(1<<16);
185                         local_irq_save(flags);
186                         wbinvd();
187                         wrmsr(MSR_K6_WHCR, l, h);
188                         local_irq_restore(flags);
189                         pr_info("Enabling new style K6 write allocation for %d Mb\n",
190                                 mbytes);
191                 }
192
193                 return;
194         }
195
196         if (c->x86_model == 10) {
197                 /* AMD Geode LX is model 10 */
198                 /* placeholder for any needed mods */
199                 return;
200         }
201 #endif
202         /*
203          * Work around Erratum 1386.  The XSAVES instruction malfunctions in
204          * certain circumstances on Zen1/2 uarch, and not all parts have had
205          * updated microcode at the time of writing (March 2023).
206          *
207          * Affected parts all have no supervisor XSAVE states, meaning that
208          * the XSAVEC instruction (which works fine) is equivalent.
209          */
210         clear_cpu_cap(c, X86_FEATURE_XSAVES);
211 }
212
213 static void init_amd_k7(struct cpuinfo_x86 *c)
214 {
215 #ifdef CONFIG_X86_32
216         u32 l, h;
217
218         /*
219          * Bit 15 of Athlon specific MSR 15, needs to be 0
220          * to enable SSE on Palomino/Morgan/Barton CPU's.
221          * If the BIOS didn't enable it already, enable it here.
222          */
223         if (c->x86_model >= 6 && c->x86_model <= 10) {
224                 if (!cpu_has(c, X86_FEATURE_XMM)) {
225                         pr_info("Enabling disabled K7/SSE Support.\n");
226                         msr_clear_bit(MSR_K7_HWCR, 15);
227                         set_cpu_cap(c, X86_FEATURE_XMM);
228                 }
229         }
230
231         /*
232          * It's been determined by AMD that Athlons since model 8 stepping 1
233          * are more robust with CLK_CTL set to 200xxxxx instead of 600xxxxx
234          * As per AMD technical note 27212 0.2
235          */
236         if ((c->x86_model == 8 && c->x86_stepping >= 1) || (c->x86_model > 8)) {
237                 rdmsr(MSR_K7_CLK_CTL, l, h);
238                 if ((l & 0xfff00000) != 0x20000000) {
239                         pr_info("CPU: CLK_CTL MSR was %x. Reprogramming to %x\n",
240                                 l, ((l & 0x000fffff)|0x20000000));
241                         wrmsr(MSR_K7_CLK_CTL, (l & 0x000fffff)|0x20000000, h);
242                 }
243         }
244
245         /* calling is from identify_secondary_cpu() ? */
246         if (!c->cpu_index)
247                 return;
248
249         /*
250          * Certain Athlons might work (for various values of 'work') in SMP
251          * but they are not certified as MP capable.
252          */
253         /* Athlon 660/661 is valid. */
254         if ((c->x86_model == 6) && ((c->x86_stepping == 0) ||
255             (c->x86_stepping == 1)))
256                 return;
257
258         /* Duron 670 is valid */
259         if ((c->x86_model == 7) && (c->x86_stepping == 0))
260                 return;
261
262         /*
263          * Athlon 662, Duron 671, and Athlon >model 7 have capability
264          * bit. It's worth noting that the A5 stepping (662) of some
265          * Athlon XP's have the MP bit set.
266          * See http://www.heise.de/newsticker/data/jow-18.10.01-000 for
267          * more.
268          */
269         if (((c->x86_model == 6) && (c->x86_stepping >= 2)) ||
270             ((c->x86_model == 7) && (c->x86_stepping >= 1)) ||
271              (c->x86_model > 7))
272                 if (cpu_has(c, X86_FEATURE_MP))
273                         return;
274
275         /* If we get here, not a certified SMP capable AMD system. */
276
277         /*
278          * Don't taint if we are running SMP kernel on a single non-MP
279          * approved Athlon
280          */
281         WARN_ONCE(1, "WARNING: This combination of AMD"
282                 " processors is not suitable for SMP.\n");
283         add_taint(TAINT_CPU_OUT_OF_SPEC, LOCKDEP_NOW_UNRELIABLE);
284 #endif
285 }
286
287 #ifdef CONFIG_NUMA
288 /*
289  * To workaround broken NUMA config.  Read the comment in
290  * srat_detect_node().
291  */
292 static int nearby_node(int apicid)
293 {
294         int i, node;
295
296         for (i = apicid - 1; i >= 0; i--) {
297                 node = __apicid_to_node[i];
298                 if (node != NUMA_NO_NODE && node_online(node))
299                         return node;
300         }
301         for (i = apicid + 1; i < MAX_LOCAL_APIC; i++) {
302                 node = __apicid_to_node[i];
303                 if (node != NUMA_NO_NODE && node_online(node))
304                         return node;
305         }
306         return first_node(node_online_map); /* Shouldn't happen */
307 }
308 #endif
309
310 /*
311  * Fix up cpu_core_id for pre-F17h systems to be in the
312  * [0 .. cores_per_node - 1] range. Not really needed but
313  * kept so as not to break existing setups.
314  */
315 static void legacy_fixup_core_id(struct cpuinfo_x86 *c)
316 {
317         u32 cus_per_node;
318
319         if (c->x86 >= 0x17)
320                 return;
321
322         cus_per_node = c->x86_max_cores / nodes_per_socket;
323         c->cpu_core_id %= cus_per_node;
324 }
325
326
327 static void amd_get_topology_early(struct cpuinfo_x86 *c)
328 {
329         if (cpu_has(c, X86_FEATURE_TOPOEXT))
330                 smp_num_siblings = ((cpuid_ebx(0x8000001e) >> 8) & 0xff) + 1;
331 }
332
333 /*
334  * Fixup core topology information for
335  * (1) AMD multi-node processors
336  *     Assumption: Number of cores in each internal node is the same.
337  * (2) AMD processors supporting compute units
338  */
339 static void amd_get_topology(struct cpuinfo_x86 *c)
340 {
341         u8 node_id;
342         int cpu = smp_processor_id();
343
344         /* get information required for multi-node processors */
345         if (boot_cpu_has(X86_FEATURE_TOPOEXT)) {
346                 int err;
347                 u32 eax, ebx, ecx, edx;
348
349                 cpuid(0x8000001e, &eax, &ebx, &ecx, &edx);
350
351                 node_id  = ecx & 0xff;
352
353                 if (c->x86 == 0x15)
354                         c->cu_id = ebx & 0xff;
355
356                 if (c->x86 >= 0x17) {
357                         c->cpu_core_id = ebx & 0xff;
358
359                         if (smp_num_siblings > 1)
360                                 c->x86_max_cores /= smp_num_siblings;
361                 }
362
363                 /*
364                  * In case leaf B is available, use it to derive
365                  * topology information.
366                  */
367                 err = detect_extended_topology(c);
368                 if (!err)
369                         c->x86_coreid_bits = get_count_order(c->x86_max_cores);
370
371                 cacheinfo_amd_init_llc_id(c, cpu, node_id);
372
373         } else if (cpu_has(c, X86_FEATURE_NODEID_MSR)) {
374                 u64 value;
375
376                 rdmsrl(MSR_FAM10H_NODE_ID, value);
377                 node_id = value & 7;
378
379                 per_cpu(cpu_llc_id, cpu) = node_id;
380         } else
381                 return;
382
383         if (nodes_per_socket > 1) {
384                 set_cpu_cap(c, X86_FEATURE_AMD_DCM);
385                 legacy_fixup_core_id(c);
386         }
387 }
388
389 /*
390  * On a AMD dual core setup the lower bits of the APIC id distinguish the cores.
391  * Assumes number of cores is a power of two.
392  */
393 static void amd_detect_cmp(struct cpuinfo_x86 *c)
394 {
395         unsigned bits;
396         int cpu = smp_processor_id();
397
398         bits = c->x86_coreid_bits;
399         /* Low order bits define the core id (index of core in socket) */
400         c->cpu_core_id = c->initial_apicid & ((1 << bits)-1);
401         /* Convert the initial APIC ID into the socket ID */
402         c->phys_proc_id = c->initial_apicid >> bits;
403         /* use socket ID also for last level cache */
404         per_cpu(cpu_llc_id, cpu) = c->phys_proc_id;
405 }
406
407 u16 amd_get_nb_id(int cpu)
408 {
409         return per_cpu(cpu_llc_id, cpu);
410 }
411 EXPORT_SYMBOL_GPL(amd_get_nb_id);
412
413 u32 amd_get_nodes_per_socket(void)
414 {
415         return nodes_per_socket;
416 }
417 EXPORT_SYMBOL_GPL(amd_get_nodes_per_socket);
418
419 static void srat_detect_node(struct cpuinfo_x86 *c)
420 {
421 #ifdef CONFIG_NUMA
422         int cpu = smp_processor_id();
423         int node;
424         unsigned apicid = c->apicid;
425
426         node = numa_cpu_node(cpu);
427         if (node == NUMA_NO_NODE)
428                 node = per_cpu(cpu_llc_id, cpu);
429
430         /*
431          * On multi-fabric platform (e.g. Numascale NumaChip) a
432          * platform-specific handler needs to be called to fixup some
433          * IDs of the CPU.
434          */
435         if (x86_cpuinit.fixup_cpu_id)
436                 x86_cpuinit.fixup_cpu_id(c, node);
437
438         if (!node_online(node)) {
439                 /*
440                  * Two possibilities here:
441                  *
442                  * - The CPU is missing memory and no node was created.  In
443                  *   that case try picking one from a nearby CPU.
444                  *
445                  * - The APIC IDs differ from the HyperTransport node IDs
446                  *   which the K8 northbridge parsing fills in.  Assume
447                  *   they are all increased by a constant offset, but in
448                  *   the same order as the HT nodeids.  If that doesn't
449                  *   result in a usable node fall back to the path for the
450                  *   previous case.
451                  *
452                  * This workaround operates directly on the mapping between
453                  * APIC ID and NUMA node, assuming certain relationship
454                  * between APIC ID, HT node ID and NUMA topology.  As going
455                  * through CPU mapping may alter the outcome, directly
456                  * access __apicid_to_node[].
457                  */
458                 int ht_nodeid = c->initial_apicid;
459
460                 if (__apicid_to_node[ht_nodeid] != NUMA_NO_NODE)
461                         node = __apicid_to_node[ht_nodeid];
462                 /* Pick a nearby node */
463                 if (!node_online(node))
464                         node = nearby_node(apicid);
465         }
466         numa_set_node(cpu, node);
467 #endif
468 }
469
470 static void early_init_amd_mc(struct cpuinfo_x86 *c)
471 {
472 #ifdef CONFIG_SMP
473         unsigned bits, ecx;
474
475         /* Multi core CPU? */
476         if (c->extended_cpuid_level < 0x80000008)
477                 return;
478
479         ecx = cpuid_ecx(0x80000008);
480
481         c->x86_max_cores = (ecx & 0xff) + 1;
482
483         /* CPU telling us the core id bits shift? */
484         bits = (ecx >> 12) & 0xF;
485
486         /* Otherwise recompute */
487         if (bits == 0) {
488                 while ((1 << bits) < c->x86_max_cores)
489                         bits++;
490         }
491
492         c->x86_coreid_bits = bits;
493 #endif
494 }
495
496 static void bsp_init_amd(struct cpuinfo_x86 *c)
497 {
498
499 #ifdef CONFIG_X86_64
500         if (c->x86 >= 0xf) {
501                 unsigned long long tseg;
502
503                 /*
504                  * Split up direct mapping around the TSEG SMM area.
505                  * Don't do it for gbpages because there seems very little
506                  * benefit in doing so.
507                  */
508                 if (!rdmsrl_safe(MSR_K8_TSEG_ADDR, &tseg)) {
509                         unsigned long pfn = tseg >> PAGE_SHIFT;
510
511                         pr_debug("tseg: %010llx\n", tseg);
512                         if (pfn_range_is_mapped(pfn, pfn + 1))
513                                 set_memory_4k((unsigned long)__va(tseg), 1);
514                 }
515         }
516 #endif
517
518         if (cpu_has(c, X86_FEATURE_CONSTANT_TSC)) {
519
520                 if (c->x86 > 0x10 ||
521                     (c->x86 == 0x10 && c->x86_model >= 0x2)) {
522                         u64 val;
523
524                         rdmsrl(MSR_K7_HWCR, val);
525                         if (!(val & BIT(24)))
526                                 pr_warn(FW_BUG "TSC doesn't count with P0 frequency!\n");
527                 }
528         }
529
530         if (c->x86 == 0x15) {
531                 unsigned long upperbit;
532                 u32 cpuid, assoc;
533
534                 cpuid    = cpuid_edx(0x80000005);
535                 assoc    = cpuid >> 16 & 0xff;
536                 upperbit = ((cpuid >> 24) << 10) / assoc;
537
538                 va_align.mask     = (upperbit - 1) & PAGE_MASK;
539                 va_align.flags    = ALIGN_VA_32 | ALIGN_VA_64;
540
541                 /* A random value per boot for bit slice [12:upper_bit) */
542                 va_align.bits = get_random_int() & va_align.mask;
543         }
544
545         if (cpu_has(c, X86_FEATURE_MWAITX))
546                 use_mwaitx_delay();
547
548         if (boot_cpu_has(X86_FEATURE_TOPOEXT)) {
549                 u32 ecx;
550
551                 ecx = cpuid_ecx(0x8000001e);
552                 nodes_per_socket = ((ecx >> 8) & 7) + 1;
553         } else if (boot_cpu_has(X86_FEATURE_NODEID_MSR)) {
554                 u64 value;
555
556                 rdmsrl(MSR_FAM10H_NODE_ID, value);
557                 nodes_per_socket = ((value >> 3) & 7) + 1;
558         }
559
560         if (!boot_cpu_has(X86_FEATURE_AMD_SSBD) &&
561             !boot_cpu_has(X86_FEATURE_VIRT_SSBD) &&
562             c->x86 >= 0x15 && c->x86 <= 0x17) {
563                 unsigned int bit;
564
565                 switch (c->x86) {
566                 case 0x15: bit = 54; break;
567                 case 0x16: bit = 33; break;
568                 case 0x17: bit = 10; break;
569                 default: return;
570                 }
571                 /*
572                  * Try to cache the base value so further operations can
573                  * avoid RMW. If that faults, do not enable SSBD.
574                  */
575                 if (!rdmsrl_safe(MSR_AMD64_LS_CFG, &x86_amd_ls_cfg_base)) {
576                         setup_force_cpu_cap(X86_FEATURE_LS_CFG_SSBD);
577                         setup_force_cpu_cap(X86_FEATURE_SSBD);
578                         x86_amd_ls_cfg_ssbd_mask = 1ULL << bit;
579                 }
580         }
581 }
582
583 static void early_detect_mem_encrypt(struct cpuinfo_x86 *c)
584 {
585         u64 msr;
586
587         /*
588          * BIOS support is required for SME and SEV.
589          *   For SME: If BIOS has enabled SME then adjust x86_phys_bits by
590          *            the SME physical address space reduction value.
591          *            If BIOS has not enabled SME then don't advertise the
592          *            SME feature (set in scattered.c).
593          *   For SEV: If BIOS has not enabled SEV then don't advertise the
594          *            SEV feature (set in scattered.c).
595          *
596          *   In all cases, since support for SME and SEV requires long mode,
597          *   don't advertise the feature under CONFIG_X86_32.
598          */
599         if (cpu_has(c, X86_FEATURE_SME) || cpu_has(c, X86_FEATURE_SEV)) {
600                 /* Check if memory encryption is enabled */
601                 rdmsrl(MSR_K8_SYSCFG, msr);
602                 if (!(msr & MSR_K8_SYSCFG_MEM_ENCRYPT))
603                         goto clear_all;
604
605                 /*
606                  * Always adjust physical address bits. Even though this
607                  * will be a value above 32-bits this is still done for
608                  * CONFIG_X86_32 so that accurate values are reported.
609                  */
610                 c->x86_phys_bits -= (cpuid_ebx(0x8000001f) >> 6) & 0x3f;
611
612                 if (IS_ENABLED(CONFIG_X86_32))
613                         goto clear_all;
614
615                 rdmsrl(MSR_K7_HWCR, msr);
616                 if (!(msr & MSR_K7_HWCR_SMMLOCK))
617                         goto clear_sev;
618
619                 return;
620
621 clear_all:
622                 setup_clear_cpu_cap(X86_FEATURE_SME);
623 clear_sev:
624                 setup_clear_cpu_cap(X86_FEATURE_SEV);
625         }
626 }
627
628 static void early_init_amd(struct cpuinfo_x86 *c)
629 {
630         u64 value;
631         u32 dummy;
632
633         early_init_amd_mc(c);
634
635 #ifdef CONFIG_X86_32
636         if (c->x86 == 6)
637                 set_cpu_cap(c, X86_FEATURE_K7);
638 #endif
639
640         if (c->x86 >= 0xf)
641                 set_cpu_cap(c, X86_FEATURE_K8);
642
643         rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy);
644
645         /*
646          * c->x86_power is 8000_0007 edx. Bit 8 is TSC runs at constant rate
647          * with P/T states and does not stop in deep C-states
648          */
649         if (c->x86_power & (1 << 8)) {
650                 set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
651                 set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC);
652         }
653
654         /* Bit 12 of 8000_0007 edx is accumulated power mechanism. */
655         if (c->x86_power & BIT(12))
656                 set_cpu_cap(c, X86_FEATURE_ACC_POWER);
657
658 #ifdef CONFIG_X86_64
659         set_cpu_cap(c, X86_FEATURE_SYSCALL32);
660 #else
661         /*  Set MTRR capability flag if appropriate */
662         if (c->x86 == 5)
663                 if (c->x86_model == 13 || c->x86_model == 9 ||
664                     (c->x86_model == 8 && c->x86_stepping >= 8))
665                         set_cpu_cap(c, X86_FEATURE_K6_MTRR);
666 #endif
667 #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_PCI)
668         /*
669          * ApicID can always be treated as an 8-bit value for AMD APIC versions
670          * >= 0x10, but even old K8s came out of reset with version 0x10. So, we
671          * can safely set X86_FEATURE_EXTD_APICID unconditionally for families
672          * after 16h.
673          */
674         if (boot_cpu_has(X86_FEATURE_APIC)) {
675                 if (c->x86 > 0x16)
676                         set_cpu_cap(c, X86_FEATURE_EXTD_APICID);
677                 else if (c->x86 >= 0xf) {
678                         /* check CPU config space for extended APIC ID */
679                         unsigned int val;
680
681                         val = read_pci_config(0, 24, 0, 0x68);
682                         if ((val >> 17 & 0x3) == 0x3)
683                                 set_cpu_cap(c, X86_FEATURE_EXTD_APICID);
684                 }
685         }
686 #endif
687
688         /*
689          * This is only needed to tell the kernel whether to use VMCALL
690          * and VMMCALL.  VMMCALL is never executed except under virt, so
691          * we can set it unconditionally.
692          */
693         set_cpu_cap(c, X86_FEATURE_VMMCALL);
694
695         /* F16h erratum 793, CVE-2013-6885 */
696         if (c->x86 == 0x16 && c->x86_model <= 0xf)
697                 msr_set_bit(MSR_AMD64_LS_CFG, 15);
698
699         /*
700          * Check whether the machine is affected by erratum 400. This is
701          * used to select the proper idle routine and to enable the check
702          * whether the machine is affected in arch_post_acpi_init(), which
703          * sets the X86_BUG_AMD_APIC_C1E bug depending on the MSR check.
704          */
705         if (cpu_has_amd_erratum(c, amd_erratum_400))
706                 set_cpu_bug(c, X86_BUG_AMD_E400);
707
708         early_detect_mem_encrypt(c);
709
710         /* Re-enable TopologyExtensions if switched off by BIOS */
711         if (c->x86 == 0x15 &&
712             (c->x86_model >= 0x10 && c->x86_model <= 0x6f) &&
713             !cpu_has(c, X86_FEATURE_TOPOEXT)) {
714
715                 if (msr_set_bit(0xc0011005, 54) > 0) {
716                         rdmsrl(0xc0011005, value);
717                         if (value & BIT_64(54)) {
718                                 set_cpu_cap(c, X86_FEATURE_TOPOEXT);
719                                 pr_info_once(FW_INFO "CPU: Re-enabling disabled Topology Extensions Support.\n");
720                         }
721                 }
722         }
723
724         amd_get_topology_early(c);
725 }
726
727 static void init_amd_k8(struct cpuinfo_x86 *c)
728 {
729         u32 level;
730         u64 value;
731
732         /* On C+ stepping K8 rep microcode works well for copy/memset */
733         level = cpuid_eax(1);
734         if ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58)
735                 set_cpu_cap(c, X86_FEATURE_REP_GOOD);
736
737         /*
738          * Some BIOSes incorrectly force this feature, but only K8 revision D
739          * (model = 0x14) and later actually support it.
740          * (AMD Erratum #110, docId: 25759).
741          */
742         if (c->x86_model < 0x14 && cpu_has(c, X86_FEATURE_LAHF_LM)) {
743                 clear_cpu_cap(c, X86_FEATURE_LAHF_LM);
744                 if (!rdmsrl_amd_safe(0xc001100d, &value)) {
745                         value &= ~BIT_64(32);
746                         wrmsrl_amd_safe(0xc001100d, value);
747                 }
748         }
749
750         if (!c->x86_model_id[0])
751                 strcpy(c->x86_model_id, "Hammer");
752
753 #ifdef CONFIG_SMP
754         /*
755          * Disable TLB flush filter by setting HWCR.FFDIS on K8
756          * bit 6 of msr C001_0015
757          *
758          * Errata 63 for SH-B3 steppings
759          * Errata 122 for all steppings (F+ have it disabled by default)
760          */
761         msr_set_bit(MSR_K7_HWCR, 6);
762 #endif
763         set_cpu_bug(c, X86_BUG_SWAPGS_FENCE);
764 }
765
766 static void init_amd_gh(struct cpuinfo_x86 *c)
767 {
768 #ifdef CONFIG_MMCONF_FAM10H
769         /* do this for boot cpu */
770         if (c == &boot_cpu_data)
771                 check_enable_amd_mmconf_dmi();
772
773         fam10h_check_enable_mmcfg();
774 #endif
775
776         /*
777          * Disable GART TLB Walk Errors on Fam10h. We do this here because this
778          * is always needed when GART is enabled, even in a kernel which has no
779          * MCE support built in. BIOS should disable GartTlbWlk Errors already.
780          * If it doesn't, we do it here as suggested by the BKDG.
781          *
782          * Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=33012
783          */
784         msr_set_bit(MSR_AMD64_MCx_MASK(4), 10);
785
786         /*
787          * On family 10h BIOS may not have properly enabled WC+ support, causing
788          * it to be converted to CD memtype. This may result in performance
789          * degradation for certain nested-paging guests. Prevent this conversion
790          * by clearing bit 24 in MSR_AMD64_BU_CFG2.
791          *
792          * NOTE: we want to use the _safe accessors so as not to #GP kvm
793          * guests on older kvm hosts.
794          */
795         msr_clear_bit(MSR_AMD64_BU_CFG2, 24);
796
797         if (cpu_has_amd_erratum(c, amd_erratum_383))
798                 set_cpu_bug(c, X86_BUG_AMD_TLB_MMATCH);
799 }
800
801 static void init_amd_ln(struct cpuinfo_x86 *c)
802 {
803         /*
804          * Apply erratum 665 fix unconditionally so machines without a BIOS
805          * fix work.
806          */
807         msr_set_bit(MSR_AMD64_DE_CFG, 31);
808 }
809
810 static bool rdrand_force;
811
812 static int __init rdrand_cmdline(char *str)
813 {
814         if (!str)
815                 return -EINVAL;
816
817         if (!strcmp(str, "force"))
818                 rdrand_force = true;
819         else
820                 return -EINVAL;
821
822         return 0;
823 }
824 early_param("rdrand", rdrand_cmdline);
825
826 static void clear_rdrand_cpuid_bit(struct cpuinfo_x86 *c)
827 {
828         /*
829          * Saving of the MSR used to hide the RDRAND support during
830          * suspend/resume is done by arch/x86/power/cpu.c, which is
831          * dependent on CONFIG_PM_SLEEP.
832          */
833         if (!IS_ENABLED(CONFIG_PM_SLEEP))
834                 return;
835
836         /*
837          * The nordrand option can clear X86_FEATURE_RDRAND, so check for
838          * RDRAND support using the CPUID function directly.
839          */
840         if (!(cpuid_ecx(1) & BIT(30)) || rdrand_force)
841                 return;
842
843         msr_clear_bit(MSR_AMD64_CPUID_FN_1, 62);
844
845         /*
846          * Verify that the CPUID change has occurred in case the kernel is
847          * running virtualized and the hypervisor doesn't support the MSR.
848          */
849         if (cpuid_ecx(1) & BIT(30)) {
850                 pr_info_once("BIOS may not properly restore RDRAND after suspend, but hypervisor does not support hiding RDRAND via CPUID.\n");
851                 return;
852         }
853
854         clear_cpu_cap(c, X86_FEATURE_RDRAND);
855         pr_info_once("BIOS may not properly restore RDRAND after suspend, hiding RDRAND via CPUID. Use rdrand=force to reenable.\n");
856 }
857
858 static void init_amd_jg(struct cpuinfo_x86 *c)
859 {
860         /*
861          * Some BIOS implementations do not restore proper RDRAND support
862          * across suspend and resume. Check on whether to hide the RDRAND
863          * instruction support via CPUID.
864          */
865         clear_rdrand_cpuid_bit(c);
866 }
867
868 static void init_amd_bd(struct cpuinfo_x86 *c)
869 {
870         u64 value;
871
872         /*
873          * The way access filter has a performance penalty on some workloads.
874          * Disable it on the affected CPUs.
875          */
876         if ((c->x86_model >= 0x02) && (c->x86_model < 0x20)) {
877                 if (!rdmsrl_safe(MSR_F15H_IC_CFG, &value) && !(value & 0x1E)) {
878                         value |= 0x1E;
879                         wrmsrl_safe(MSR_F15H_IC_CFG, value);
880                 }
881         }
882
883         /*
884          * Some BIOS implementations do not restore proper RDRAND support
885          * across suspend and resume. Check on whether to hide the RDRAND
886          * instruction support via CPUID.
887          */
888         clear_rdrand_cpuid_bit(c);
889 }
890
891 static void init_amd_zn(struct cpuinfo_x86 *c)
892 {
893         set_cpu_cap(c, X86_FEATURE_ZEN);
894
895         /* Fix up CPUID bits, but only if not virtualised. */
896         if (!cpu_has(c, X86_FEATURE_HYPERVISOR)) {
897
898                 /* Erratum 1076: CPB feature bit not being set in CPUID. */
899                 if (!cpu_has(c, X86_FEATURE_CPB))
900                         set_cpu_cap(c, X86_FEATURE_CPB);
901
902                 /*
903                  * Zen3 (Fam19 model < 0x10) parts are not susceptible to
904                  * Branch Type Confusion, but predate the allocation of the
905                  * BTC_NO bit.
906                  */
907                 if (c->x86 == 0x19 && !cpu_has(c, X86_FEATURE_BTC_NO))
908                         set_cpu_cap(c, X86_FEATURE_BTC_NO);
909         }
910 }
911
912 static void init_amd(struct cpuinfo_x86 *c)
913 {
914         early_init_amd(c);
915
916         /*
917          * Bit 31 in normal CPUID used for nonstandard 3DNow ID;
918          * 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway
919          */
920         clear_cpu_cap(c, 0*32+31);
921
922         if (c->x86 >= 0x10)
923                 set_cpu_cap(c, X86_FEATURE_REP_GOOD);
924
925         /* get apicid instead of initial apic id from cpuid */
926         c->apicid = hard_smp_processor_id();
927
928         /* K6s reports MCEs but don't actually have all the MSRs */
929         if (c->x86 < 6)
930                 clear_cpu_cap(c, X86_FEATURE_MCE);
931
932         switch (c->x86) {
933         case 4:    init_amd_k5(c); break;
934         case 5:    init_amd_k6(c); break;
935         case 6:    init_amd_k7(c); break;
936         case 0xf:  init_amd_k8(c); break;
937         case 0x10: init_amd_gh(c); break;
938         case 0x12: init_amd_ln(c); break;
939         case 0x15: init_amd_bd(c); break;
940         case 0x16: init_amd_jg(c); break;
941         case 0x17: init_amd_zn(c); break;
942         }
943
944         /*
945          * Enable workaround for FXSAVE leak on CPUs
946          * without a XSaveErPtr feature
947          */
948         if ((c->x86 >= 6) && (!cpu_has(c, X86_FEATURE_XSAVEERPTR)))
949                 set_cpu_bug(c, X86_BUG_FXSAVE_LEAK);
950
951         cpu_detect_cache_sizes(c);
952
953         amd_detect_cmp(c);
954         amd_get_topology(c);
955         srat_detect_node(c);
956
957         init_amd_cacheinfo(c);
958
959         if (cpu_has(c, X86_FEATURE_XMM2)) {
960                 unsigned long long val;
961                 int ret;
962
963                 /*
964                  * A serializing LFENCE has less overhead than MFENCE, so
965                  * use it for execution serialization.  On families which
966                  * don't have that MSR, LFENCE is already serializing.
967                  * msr_set_bit() uses the safe accessors, too, even if the MSR
968                  * is not present.
969                  */
970                 msr_set_bit(MSR_AMD64_DE_CFG,
971                             MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT);
972
973                 /*
974                  * Verify that the MSR write was successful (could be running
975                  * under a hypervisor) and only then assume that LFENCE is
976                  * serializing.
977                  */
978                 ret = rdmsrl_safe(MSR_AMD64_DE_CFG, &val);
979                 if (!ret && (val & MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT)) {
980                         /* A serializing LFENCE stops RDTSC speculation */
981                         set_cpu_cap(c, X86_FEATURE_LFENCE_RDTSC);
982                 } else {
983                         /* MFENCE stops RDTSC speculation */
984                         set_cpu_cap(c, X86_FEATURE_MFENCE_RDTSC);
985                 }
986         }
987
988         /*
989          * Family 0x12 and above processors have APIC timer
990          * running in deep C states.
991          */
992         if (c->x86 > 0x11)
993                 set_cpu_cap(c, X86_FEATURE_ARAT);
994
995         /* 3DNow or LM implies PREFETCHW */
996         if (!cpu_has(c, X86_FEATURE_3DNOWPREFETCH))
997                 if (cpu_has(c, X86_FEATURE_3DNOW) || cpu_has(c, X86_FEATURE_LM))
998                         set_cpu_cap(c, X86_FEATURE_3DNOWPREFETCH);
999
1000         /* AMD CPUs don't reset SS attributes on SYSRET, Xen does. */
1001         if (!cpu_has(c, X86_FEATURE_XENPV))
1002                 set_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS);
1003
1004         /*
1005          * Turn on the Instructions Retired free counter on machines not
1006          * susceptible to erratum #1054 "Instructions Retired Performance
1007          * Counter May Be Inaccurate".
1008          */
1009         if (cpu_has(c, X86_FEATURE_IRPERF) &&
1010             !cpu_has_amd_erratum(c, amd_erratum_1054))
1011                 msr_set_bit(MSR_K7_HWCR, MSR_K7_HWCR_IRPERF_EN_BIT);
1012
1013         check_null_seg_clears_base(c);
1014 }
1015
1016 #ifdef CONFIG_X86_32
1017 static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
1018 {
1019         /* AMD errata T13 (order #21922) */
1020         if (c->x86 == 6) {
1021                 /* Duron Rev A0 */
1022                 if (c->x86_model == 3 && c->x86_stepping == 0)
1023                         size = 64;
1024                 /* Tbird rev A1/A2 */
1025                 if (c->x86_model == 4 &&
1026                         (c->x86_stepping == 0 || c->x86_stepping == 1))
1027                         size = 256;
1028         }
1029         return size;
1030 }
1031 #endif
1032
1033 static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
1034 {
1035         u32 ebx, eax, ecx, edx;
1036         u16 mask = 0xfff;
1037
1038         if (c->x86 < 0xf)
1039                 return;
1040
1041         if (c->extended_cpuid_level < 0x80000006)
1042                 return;
1043
1044         cpuid(0x80000006, &eax, &ebx, &ecx, &edx);
1045
1046         tlb_lld_4k[ENTRIES] = (ebx >> 16) & mask;
1047         tlb_lli_4k[ENTRIES] = ebx & mask;
1048
1049         /*
1050          * K8 doesn't have 2M/4M entries in the L2 TLB so read out the L1 TLB
1051          * characteristics from the CPUID function 0x80000005 instead.
1052          */
1053         if (c->x86 == 0xf) {
1054                 cpuid(0x80000005, &eax, &ebx, &ecx, &edx);
1055                 mask = 0xff;
1056         }
1057
1058         /* Handle DTLB 2M and 4M sizes, fall back to L1 if L2 is disabled */
1059         if (!((eax >> 16) & mask))
1060                 tlb_lld_2m[ENTRIES] = (cpuid_eax(0x80000005) >> 16) & 0xff;
1061         else
1062                 tlb_lld_2m[ENTRIES] = (eax >> 16) & mask;
1063
1064         /* a 4M entry uses two 2M entries */
1065         tlb_lld_4m[ENTRIES] = tlb_lld_2m[ENTRIES] >> 1;
1066
1067         /* Handle ITLB 2M and 4M sizes, fall back to L1 if L2 is disabled */
1068         if (!(eax & mask)) {
1069                 /* Erratum 658 */
1070                 if (c->x86 == 0x15 && c->x86_model <= 0x1f) {
1071                         tlb_lli_2m[ENTRIES] = 1024;
1072                 } else {
1073                         cpuid(0x80000005, &eax, &ebx, &ecx, &edx);
1074                         tlb_lli_2m[ENTRIES] = eax & 0xff;
1075                 }
1076         } else
1077                 tlb_lli_2m[ENTRIES] = eax & mask;
1078
1079         tlb_lli_4m[ENTRIES] = tlb_lli_2m[ENTRIES] >> 1;
1080 }
1081
1082 static const struct cpu_dev amd_cpu_dev = {
1083         .c_vendor       = "AMD",
1084         .c_ident        = { "AuthenticAMD" },
1085 #ifdef CONFIG_X86_32
1086         .legacy_models = {
1087                 { .family = 4, .model_names =
1088                   {
1089                           [3] = "486 DX/2",
1090                           [7] = "486 DX/2-WB",
1091                           [8] = "486 DX/4",
1092                           [9] = "486 DX/4-WB",
1093                           [14] = "Am5x86-WT",
1094                           [15] = "Am5x86-WB"
1095                   }
1096                 },
1097         },
1098         .legacy_cache_size = amd_size_cache,
1099 #endif
1100         .c_early_init   = early_init_amd,
1101         .c_detect_tlb   = cpu_detect_tlb_amd,
1102         .c_bsp_init     = bsp_init_amd,
1103         .c_init         = init_amd,
1104         .c_x86_vendor   = X86_VENDOR_AMD,
1105 };
1106
1107 cpu_dev_register(amd_cpu_dev);
1108
1109 /*
1110  * AMD errata checking
1111  *
1112  * Errata are defined as arrays of ints using the AMD_LEGACY_ERRATUM() or
1113  * AMD_OSVW_ERRATUM() macros. The latter is intended for newer errata that
1114  * have an OSVW id assigned, which it takes as first argument. Both take a
1115  * variable number of family-specific model-stepping ranges created by
1116  * AMD_MODEL_RANGE().
1117  *
1118  * Example:
1119  *
1120  * const int amd_erratum_319[] =
1121  *      AMD_LEGACY_ERRATUM(AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0x4, 0x2),
1122  *                         AMD_MODEL_RANGE(0x10, 0x8, 0x0, 0x8, 0x0),
1123  *                         AMD_MODEL_RANGE(0x10, 0x9, 0x0, 0x9, 0x0));
1124  */
1125
1126 #define AMD_LEGACY_ERRATUM(...)         { -1, __VA_ARGS__, 0 }
1127 #define AMD_OSVW_ERRATUM(osvw_id, ...)  { osvw_id, __VA_ARGS__, 0 }
1128 #define AMD_MODEL_RANGE(f, m_start, s_start, m_end, s_end) \
1129         ((f << 24) | (m_start << 16) | (s_start << 12) | (m_end << 4) | (s_end))
1130 #define AMD_MODEL_RANGE_FAMILY(range)   (((range) >> 24) & 0xff)
1131 #define AMD_MODEL_RANGE_START(range)    (((range) >> 12) & 0xfff)
1132 #define AMD_MODEL_RANGE_END(range)      ((range) & 0xfff)
1133
1134 static const int amd_erratum_400[] =
1135         AMD_OSVW_ERRATUM(1, AMD_MODEL_RANGE(0xf, 0x41, 0x2, 0xff, 0xf),
1136                             AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0xff, 0xf));
1137
1138 static const int amd_erratum_383[] =
1139         AMD_OSVW_ERRATUM(3, AMD_MODEL_RANGE(0x10, 0, 0, 0xff, 0xf));
1140
1141 /* #1054: Instructions Retired Performance Counter May Be Inaccurate */
1142 static const int amd_erratum_1054[] =
1143         AMD_LEGACY_ERRATUM(AMD_MODEL_RANGE(0x17, 0, 0, 0x2f, 0xf));
1144
1145 static bool cpu_has_amd_erratum(struct cpuinfo_x86 *cpu, const int *erratum)
1146 {
1147         int osvw_id = *erratum++;
1148         u32 range;
1149         u32 ms;
1150
1151         if (osvw_id >= 0 && osvw_id < 65536 &&
1152             cpu_has(cpu, X86_FEATURE_OSVW)) {
1153                 u64 osvw_len;
1154
1155                 rdmsrl(MSR_AMD64_OSVW_ID_LENGTH, osvw_len);
1156                 if (osvw_id < osvw_len) {
1157                         u64 osvw_bits;
1158
1159                         rdmsrl(MSR_AMD64_OSVW_STATUS + (osvw_id >> 6),
1160                             osvw_bits);
1161                         return osvw_bits & (1ULL << (osvw_id & 0x3f));
1162                 }
1163         }
1164
1165         /* OSVW unavailable or ID unknown, match family-model-stepping range */
1166         ms = (cpu->x86_model << 4) | cpu->x86_stepping;
1167         while ((range = *erratum++))
1168                 if ((cpu->x86 == AMD_MODEL_RANGE_FAMILY(range)) &&
1169                     (ms >= AMD_MODEL_RANGE_START(range)) &&
1170                     (ms <= AMD_MODEL_RANGE_END(range)))
1171                         return true;
1172
1173         return false;
1174 }
1175
1176 void set_dr_addr_mask(unsigned long mask, int dr)
1177 {
1178         if (!boot_cpu_has(X86_FEATURE_BPEXT))
1179                 return;
1180
1181         switch (dr) {
1182         case 0:
1183                 wrmsr(MSR_F16H_DR0_ADDR_MASK, mask, 0);
1184                 break;
1185         case 1:
1186         case 2:
1187         case 3:
1188                 wrmsr(MSR_F16H_DR1_ADDR_MASK - 1 + dr, mask, 0);
1189                 break;
1190         default:
1191                 break;
1192         }
1193 }