• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Intel CPU Microcode Update Driver for Linux
4  *
5  * Copyright (C) 2000-2006 Tigran Aivazian <aivazian.tigran@gmail.com>
6  *		 2006 Shaohua Li <shaohua.li@intel.com>
7  *
8  * Intel CPU microcode early update for Linux
9  *
10  * Copyright (C) 2012 Fenghua Yu <fenghua.yu@intel.com>
11  *		      H Peter Anvin" <hpa@zytor.com>
12  */
13 
14 /*
15  * This needs to be before all headers so that pr_debug in printk.h doesn't turn
16  * printk calls into no_printk().
17  *
18  *#define DEBUG
19  */
20 #define pr_fmt(fmt) "microcode: " fmt
21 
22 #include <linux/earlycpio.h>
23 #include <linux/firmware.h>
24 #include <linux/uaccess.h>
25 #include <linux/vmalloc.h>
26 #include <linux/initrd.h>
27 #include <linux/kernel.h>
28 #include <linux/slab.h>
29 #include <linux/cpu.h>
30 #include <linux/uio.h>
31 #include <linux/mm.h>
32 
33 #include <asm/microcode_intel.h>
34 #include <asm/intel-family.h>
35 #include <asm/processor.h>
36 #include <asm/tlbflush.h>
37 #include <asm/setup.h>
38 #include <asm/msr.h>
39 
40 static const char ucode_path[] = "kernel/x86/microcode/GenuineIntel.bin";
41 
42 /* Current microcode patch used in early patching on the APs. */
43 static struct microcode_intel *intel_ucode_patch;
44 
45 /* last level cache size per core */
46 static int llc_size_per_core;
47 
cpu_signatures_match(unsigned int s1,unsigned int p1,unsigned int s2,unsigned int p2)48 static inline bool cpu_signatures_match(unsigned int s1, unsigned int p1,
49 					unsigned int s2, unsigned int p2)
50 {
51 	if (s1 != s2)
52 		return false;
53 
54 	/* Processor flags are either both 0 ... */
55 	if (!p1 && !p2)
56 		return true;
57 
58 	/* ... or they intersect. */
59 	return p1 & p2;
60 }
61 
62 /*
63  * Returns 1 if update has been found, 0 otherwise.
64  */
find_matching_signature(void * mc,unsigned int csig,int cpf)65 static int find_matching_signature(void *mc, unsigned int csig, int cpf)
66 {
67 	struct microcode_header_intel *mc_hdr = mc;
68 	struct extended_sigtable *ext_hdr;
69 	struct extended_signature *ext_sig;
70 	int i;
71 
72 	if (cpu_signatures_match(csig, cpf, mc_hdr->sig, mc_hdr->pf))
73 		return 1;
74 
75 	/* Look for ext. headers: */
76 	if (get_totalsize(mc_hdr) <= get_datasize(mc_hdr) + MC_HEADER_SIZE)
77 		return 0;
78 
79 	ext_hdr = mc + get_datasize(mc_hdr) + MC_HEADER_SIZE;
80 	ext_sig = (void *)ext_hdr + EXT_HEADER_SIZE;
81 
82 	for (i = 0; i < ext_hdr->count; i++) {
83 		if (cpu_signatures_match(csig, cpf, ext_sig->sig, ext_sig->pf))
84 			return 1;
85 		ext_sig++;
86 	}
87 	return 0;
88 }
89 
90 /*
91  * Returns 1 if update has been found, 0 otherwise.
92  */
has_newer_microcode(void * mc,unsigned int csig,int cpf,int new_rev)93 static int has_newer_microcode(void *mc, unsigned int csig, int cpf, int new_rev)
94 {
95 	struct microcode_header_intel *mc_hdr = mc;
96 
97 	if (mc_hdr->rev <= new_rev)
98 		return 0;
99 
100 	return find_matching_signature(mc, csig, cpf);
101 }
102 
memdup_patch(void * data,unsigned int size)103 static struct ucode_patch *memdup_patch(void *data, unsigned int size)
104 {
105 	struct ucode_patch *p;
106 
107 	p = kzalloc(sizeof(struct ucode_patch), GFP_KERNEL);
108 	if (!p)
109 		return NULL;
110 
111 	p->data = kmemdup(data, size, GFP_KERNEL);
112 	if (!p->data) {
113 		kfree(p);
114 		return NULL;
115 	}
116 
117 	return p;
118 }
119 
save_microcode_patch(struct ucode_cpu_info * uci,void * data,unsigned int size)120 static void save_microcode_patch(struct ucode_cpu_info *uci, void *data, unsigned int size)
121 {
122 	struct microcode_header_intel *mc_hdr, *mc_saved_hdr;
123 	struct ucode_patch *iter, *tmp, *p = NULL;
124 	bool prev_found = false;
125 	unsigned int sig, pf;
126 
127 	mc_hdr = (struct microcode_header_intel *)data;
128 
129 	list_for_each_entry_safe(iter, tmp, &microcode_cache, plist) {
130 		mc_saved_hdr = (struct microcode_header_intel *)iter->data;
131 		sig	     = mc_saved_hdr->sig;
132 		pf	     = mc_saved_hdr->pf;
133 
134 		if (find_matching_signature(data, sig, pf)) {
135 			prev_found = true;
136 
137 			if (mc_hdr->rev <= mc_saved_hdr->rev)
138 				continue;
139 
140 			p = memdup_patch(data, size);
141 			if (!p)
142 				pr_err("Error allocating buffer %p\n", data);
143 			else {
144 				list_replace(&iter->plist, &p->plist);
145 				kfree(iter->data);
146 				kfree(iter);
147 			}
148 		}
149 	}
150 
151 	/*
152 	 * There weren't any previous patches found in the list cache; save the
153 	 * newly found.
154 	 */
155 	if (!prev_found) {
156 		p = memdup_patch(data, size);
157 		if (!p)
158 			pr_err("Error allocating buffer for %p\n", data);
159 		else
160 			list_add_tail(&p->plist, &microcode_cache);
161 	}
162 
163 	if (!p)
164 		return;
165 
166 	if (!find_matching_signature(p->data, uci->cpu_sig.sig, uci->cpu_sig.pf))
167 		return;
168 
169 	/*
170 	 * Save for early loading. On 32-bit, that needs to be a physical
171 	 * address as the APs are running from physical addresses, before
172 	 * paging has been enabled.
173 	 */
174 	if (IS_ENABLED(CONFIG_X86_32))
175 		intel_ucode_patch = (struct microcode_intel *)__pa_nodebug(p->data);
176 	else
177 		intel_ucode_patch = p->data;
178 }
179 
microcode_sanity_check(void * mc,int print_err)180 static int microcode_sanity_check(void *mc, int print_err)
181 {
182 	unsigned long total_size, data_size, ext_table_size;
183 	struct microcode_header_intel *mc_header = mc;
184 	struct extended_sigtable *ext_header = NULL;
185 	u32 sum, orig_sum, ext_sigcount = 0, i;
186 	struct extended_signature *ext_sig;
187 
188 	total_size = get_totalsize(mc_header);
189 	data_size = get_datasize(mc_header);
190 
191 	if (data_size + MC_HEADER_SIZE > total_size) {
192 		if (print_err)
193 			pr_err("Error: bad microcode data file size.\n");
194 		return -EINVAL;
195 	}
196 
197 	if (mc_header->ldrver != 1 || mc_header->hdrver != 1) {
198 		if (print_err)
199 			pr_err("Error: invalid/unknown microcode update format.\n");
200 		return -EINVAL;
201 	}
202 
203 	ext_table_size = total_size - (MC_HEADER_SIZE + data_size);
204 	if (ext_table_size) {
205 		u32 ext_table_sum = 0;
206 		u32 *ext_tablep;
207 
208 		if ((ext_table_size < EXT_HEADER_SIZE)
209 		 || ((ext_table_size - EXT_HEADER_SIZE) % EXT_SIGNATURE_SIZE)) {
210 			if (print_err)
211 				pr_err("Error: truncated extended signature table.\n");
212 			return -EINVAL;
213 		}
214 
215 		ext_header = mc + MC_HEADER_SIZE + data_size;
216 		if (ext_table_size != exttable_size(ext_header)) {
217 			if (print_err)
218 				pr_err("Error: extended signature table size mismatch.\n");
219 			return -EFAULT;
220 		}
221 
222 		ext_sigcount = ext_header->count;
223 
224 		/*
225 		 * Check extended table checksum: the sum of all dwords that
226 		 * comprise a valid table must be 0.
227 		 */
228 		ext_tablep = (u32 *)ext_header;
229 
230 		i = ext_table_size / sizeof(u32);
231 		while (i--)
232 			ext_table_sum += ext_tablep[i];
233 
234 		if (ext_table_sum) {
235 			if (print_err)
236 				pr_warn("Bad extended signature table checksum, aborting.\n");
237 			return -EINVAL;
238 		}
239 	}
240 
241 	/*
242 	 * Calculate the checksum of update data and header. The checksum of
243 	 * valid update data and header including the extended signature table
244 	 * must be 0.
245 	 */
246 	orig_sum = 0;
247 	i = (MC_HEADER_SIZE + data_size) / sizeof(u32);
248 	while (i--)
249 		orig_sum += ((u32 *)mc)[i];
250 
251 	if (orig_sum) {
252 		if (print_err)
253 			pr_err("Bad microcode data checksum, aborting.\n");
254 		return -EINVAL;
255 	}
256 
257 	if (!ext_table_size)
258 		return 0;
259 
260 	/*
261 	 * Check extended signature checksum: 0 => valid.
262 	 */
263 	for (i = 0; i < ext_sigcount; i++) {
264 		ext_sig = (void *)ext_header + EXT_HEADER_SIZE +
265 			  EXT_SIGNATURE_SIZE * i;
266 
267 		sum = (mc_header->sig + mc_header->pf + mc_header->cksum) -
268 		      (ext_sig->sig + ext_sig->pf + ext_sig->cksum);
269 		if (sum) {
270 			if (print_err)
271 				pr_err("Bad extended signature checksum, aborting.\n");
272 			return -EINVAL;
273 		}
274 	}
275 	return 0;
276 }
277 
278 /*
279  * Get microcode matching with BSP's model. Only CPUs with the same model as
280  * BSP can stay in the platform.
281  */
282 static struct microcode_intel *
scan_microcode(void * data,size_t size,struct ucode_cpu_info * uci,bool save)283 scan_microcode(void *data, size_t size, struct ucode_cpu_info *uci, bool save)
284 {
285 	struct microcode_header_intel *mc_header;
286 	struct microcode_intel *patch = NULL;
287 	unsigned int mc_size;
288 
289 	while (size) {
290 		if (size < sizeof(struct microcode_header_intel))
291 			break;
292 
293 		mc_header = (struct microcode_header_intel *)data;
294 
295 		mc_size = get_totalsize(mc_header);
296 		if (!mc_size ||
297 		    mc_size > size ||
298 		    microcode_sanity_check(data, 0) < 0)
299 			break;
300 
301 		size -= mc_size;
302 
303 		if (!find_matching_signature(data, uci->cpu_sig.sig,
304 					     uci->cpu_sig.pf)) {
305 			data += mc_size;
306 			continue;
307 		}
308 
309 		if (save) {
310 			save_microcode_patch(uci, data, mc_size);
311 			goto next;
312 		}
313 
314 
315 		if (!patch) {
316 			if (!has_newer_microcode(data,
317 						 uci->cpu_sig.sig,
318 						 uci->cpu_sig.pf,
319 						 uci->cpu_sig.rev))
320 				goto next;
321 
322 		} else {
323 			struct microcode_header_intel *phdr = &patch->hdr;
324 
325 			if (!has_newer_microcode(data,
326 						 phdr->sig,
327 						 phdr->pf,
328 						 phdr->rev))
329 				goto next;
330 		}
331 
332 		/* We have a newer patch, save it. */
333 		patch = data;
334 
335 next:
336 		data += mc_size;
337 	}
338 
339 	if (size)
340 		return NULL;
341 
342 	return patch;
343 }
344 
collect_cpu_info_early(struct ucode_cpu_info * uci)345 static int collect_cpu_info_early(struct ucode_cpu_info *uci)
346 {
347 	unsigned int val[2];
348 	unsigned int family, model;
349 	struct cpu_signature csig = { 0 };
350 	unsigned int eax, ebx, ecx, edx;
351 
352 	memset(uci, 0, sizeof(*uci));
353 
354 	eax = 0x00000001;
355 	ecx = 0;
356 	native_cpuid(&eax, &ebx, &ecx, &edx);
357 	csig.sig = eax;
358 
359 	family = x86_family(eax);
360 	model  = x86_model(eax);
361 
362 	if ((model >= 5) || (family > 6)) {
363 		/* get processor flags from MSR 0x17 */
364 		native_rdmsr(MSR_IA32_PLATFORM_ID, val[0], val[1]);
365 		csig.pf = 1 << ((val[1] >> 18) & 7);
366 	}
367 
368 	csig.rev = intel_get_microcode_revision();
369 
370 	uci->cpu_sig = csig;
371 	uci->valid = 1;
372 
373 	return 0;
374 }
375 
show_saved_mc(void)376 static void show_saved_mc(void)
377 {
378 #ifdef DEBUG
379 	int i = 0, j;
380 	unsigned int sig, pf, rev, total_size, data_size, date;
381 	struct ucode_cpu_info uci;
382 	struct ucode_patch *p;
383 
384 	if (list_empty(&microcode_cache)) {
385 		pr_debug("no microcode data saved.\n");
386 		return;
387 	}
388 
389 	collect_cpu_info_early(&uci);
390 
391 	sig	= uci.cpu_sig.sig;
392 	pf	= uci.cpu_sig.pf;
393 	rev	= uci.cpu_sig.rev;
394 	pr_debug("CPU: sig=0x%x, pf=0x%x, rev=0x%x\n", sig, pf, rev);
395 
396 	list_for_each_entry(p, &microcode_cache, plist) {
397 		struct microcode_header_intel *mc_saved_header;
398 		struct extended_sigtable *ext_header;
399 		struct extended_signature *ext_sig;
400 		int ext_sigcount;
401 
402 		mc_saved_header = (struct microcode_header_intel *)p->data;
403 
404 		sig	= mc_saved_header->sig;
405 		pf	= mc_saved_header->pf;
406 		rev	= mc_saved_header->rev;
407 		date	= mc_saved_header->date;
408 
409 		total_size	= get_totalsize(mc_saved_header);
410 		data_size	= get_datasize(mc_saved_header);
411 
412 		pr_debug("mc_saved[%d]: sig=0x%x, pf=0x%x, rev=0x%x, total size=0x%x, date = %04x-%02x-%02x\n",
413 			 i++, sig, pf, rev, total_size,
414 			 date & 0xffff,
415 			 date >> 24,
416 			 (date >> 16) & 0xff);
417 
418 		/* Look for ext. headers: */
419 		if (total_size <= data_size + MC_HEADER_SIZE)
420 			continue;
421 
422 		ext_header = (void *)mc_saved_header + data_size + MC_HEADER_SIZE;
423 		ext_sigcount = ext_header->count;
424 		ext_sig = (void *)ext_header + EXT_HEADER_SIZE;
425 
426 		for (j = 0; j < ext_sigcount; j++) {
427 			sig = ext_sig->sig;
428 			pf = ext_sig->pf;
429 
430 			pr_debug("\tExtended[%d]: sig=0x%x, pf=0x%x\n",
431 				 j, sig, pf);
432 
433 			ext_sig++;
434 		}
435 	}
436 #endif
437 }
438 
439 /*
440  * Save this microcode patch. It will be loaded early when a CPU is
441  * hot-added or resumes.
442  */
save_mc_for_early(struct ucode_cpu_info * uci,u8 * mc,unsigned int size)443 static void save_mc_for_early(struct ucode_cpu_info *uci, u8 *mc, unsigned int size)
444 {
445 	/* Synchronization during CPU hotplug. */
446 	static DEFINE_MUTEX(x86_cpu_microcode_mutex);
447 
448 	mutex_lock(&x86_cpu_microcode_mutex);
449 
450 	save_microcode_patch(uci, mc, size);
451 	show_saved_mc();
452 
453 	mutex_unlock(&x86_cpu_microcode_mutex);
454 }
455 
load_builtin_intel_microcode(struct cpio_data * cp)456 static bool load_builtin_intel_microcode(struct cpio_data *cp)
457 {
458 	unsigned int eax = 1, ebx, ecx = 0, edx;
459 	char name[30];
460 
461 	if (IS_ENABLED(CONFIG_X86_32))
462 		return false;
463 
464 	native_cpuid(&eax, &ebx, &ecx, &edx);
465 
466 	sprintf(name, "intel-ucode/%02x-%02x-%02x",
467 		      x86_family(eax), x86_model(eax), x86_stepping(eax));
468 
469 	return get_builtin_firmware(cp, name);
470 }
471 
472 /*
473  * Print ucode update info.
474  */
475 static void
print_ucode_info(struct ucode_cpu_info * uci,unsigned int date)476 print_ucode_info(struct ucode_cpu_info *uci, unsigned int date)
477 {
478 	pr_info_once("microcode updated early to revision 0x%x, date = %04x-%02x-%02x\n",
479 		     uci->cpu_sig.rev,
480 		     date & 0xffff,
481 		     date >> 24,
482 		     (date >> 16) & 0xff);
483 }
484 
485 #ifdef CONFIG_X86_32
486 
487 static int delay_ucode_info;
488 static int current_mc_date;
489 
490 /*
491  * Print early updated ucode info after printk works. This is delayed info dump.
492  */
show_ucode_info_early(void)493 void show_ucode_info_early(void)
494 {
495 	struct ucode_cpu_info uci;
496 
497 	if (delay_ucode_info) {
498 		collect_cpu_info_early(&uci);
499 		print_ucode_info(&uci, current_mc_date);
500 		delay_ucode_info = 0;
501 	}
502 }
503 
504 /*
505  * At this point, we can not call printk() yet. Delay printing microcode info in
506  * show_ucode_info_early() until printk() works.
507  */
print_ucode(struct ucode_cpu_info * uci)508 static void print_ucode(struct ucode_cpu_info *uci)
509 {
510 	struct microcode_intel *mc;
511 	int *delay_ucode_info_p;
512 	int *current_mc_date_p;
513 
514 	mc = uci->mc;
515 	if (!mc)
516 		return;
517 
518 	delay_ucode_info_p = (int *)__pa_nodebug(&delay_ucode_info);
519 	current_mc_date_p = (int *)__pa_nodebug(&current_mc_date);
520 
521 	*delay_ucode_info_p = 1;
522 	*current_mc_date_p = mc->hdr.date;
523 }
524 #else
525 
print_ucode(struct ucode_cpu_info * uci)526 static inline void print_ucode(struct ucode_cpu_info *uci)
527 {
528 	struct microcode_intel *mc;
529 
530 	mc = uci->mc;
531 	if (!mc)
532 		return;
533 
534 	print_ucode_info(uci, mc->hdr.date);
535 }
536 #endif
537 
apply_microcode_early(struct ucode_cpu_info * uci,bool early)538 static int apply_microcode_early(struct ucode_cpu_info *uci, bool early)
539 {
540 	struct microcode_intel *mc;
541 	u32 rev;
542 
543 	mc = uci->mc;
544 	if (!mc)
545 		return 0;
546 
547 	/*
548 	 * Save us the MSR write below - which is a particular expensive
549 	 * operation - when the other hyperthread has updated the microcode
550 	 * already.
551 	 */
552 	rev = intel_get_microcode_revision();
553 	if (rev >= mc->hdr.rev) {
554 		uci->cpu_sig.rev = rev;
555 		return UCODE_OK;
556 	}
557 
558 	/*
559 	 * Writeback and invalidate caches before updating microcode to avoid
560 	 * internal issues depending on what the microcode is updating.
561 	 */
562 	native_wbinvd();
563 
564 	/* write microcode via MSR 0x79 */
565 	native_wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
566 
567 	rev = intel_get_microcode_revision();
568 	if (rev != mc->hdr.rev)
569 		return -1;
570 
571 	uci->cpu_sig.rev = rev;
572 
573 	if (early)
574 		print_ucode(uci);
575 	else
576 		print_ucode_info(uci, mc->hdr.date);
577 
578 	return 0;
579 }
580 
save_microcode_in_initrd_intel(void)581 int __init save_microcode_in_initrd_intel(void)
582 {
583 	struct ucode_cpu_info uci;
584 	struct cpio_data cp;
585 
586 	/*
587 	 * initrd is going away, clear patch ptr. We will scan the microcode one
588 	 * last time before jettisoning and save a patch, if found. Then we will
589 	 * update that pointer too, with a stable patch address to use when
590 	 * resuming the cores.
591 	 */
592 	intel_ucode_patch = NULL;
593 
594 	if (!load_builtin_intel_microcode(&cp))
595 		cp = find_microcode_in_initrd(ucode_path, false);
596 
597 	if (!(cp.data && cp.size))
598 		return 0;
599 
600 	collect_cpu_info_early(&uci);
601 
602 	scan_microcode(cp.data, cp.size, &uci, true);
603 
604 	show_saved_mc();
605 
606 	return 0;
607 }
608 
609 /*
610  * @res_patch, output: a pointer to the patch we found.
611  */
__load_ucode_intel(struct ucode_cpu_info * uci)612 static struct microcode_intel *__load_ucode_intel(struct ucode_cpu_info *uci)
613 {
614 	static const char *path;
615 	struct cpio_data cp;
616 	bool use_pa;
617 
618 	if (IS_ENABLED(CONFIG_X86_32)) {
619 		path	  = (const char *)__pa_nodebug(ucode_path);
620 		use_pa	  = true;
621 	} else {
622 		path	  = ucode_path;
623 		use_pa	  = false;
624 	}
625 
626 	/* try built-in microcode first */
627 	if (!load_builtin_intel_microcode(&cp))
628 		cp = find_microcode_in_initrd(path, use_pa);
629 
630 	if (!(cp.data && cp.size))
631 		return NULL;
632 
633 	collect_cpu_info_early(uci);
634 
635 	return scan_microcode(cp.data, cp.size, uci, false);
636 }
637 
load_ucode_intel_bsp(void)638 void __init load_ucode_intel_bsp(void)
639 {
640 	struct microcode_intel *patch;
641 	struct ucode_cpu_info uci;
642 
643 	patch = __load_ucode_intel(&uci);
644 	if (!patch)
645 		return;
646 
647 	uci.mc = patch;
648 
649 	apply_microcode_early(&uci, true);
650 }
651 
load_ucode_intel_ap(void)652 void load_ucode_intel_ap(void)
653 {
654 	struct microcode_intel *patch, **iup;
655 	struct ucode_cpu_info uci;
656 
657 	if (IS_ENABLED(CONFIG_X86_32))
658 		iup = (struct microcode_intel **) __pa_nodebug(&intel_ucode_patch);
659 	else
660 		iup = &intel_ucode_patch;
661 
662 	if (!*iup) {
663 		patch = __load_ucode_intel(&uci);
664 		if (!patch)
665 			return;
666 
667 		*iup = patch;
668 	}
669 
670 	uci.mc = *iup;
671 
672 	apply_microcode_early(&uci, true);
673 }
674 
find_patch(struct ucode_cpu_info * uci)675 static struct microcode_intel *find_patch(struct ucode_cpu_info *uci)
676 {
677 	struct microcode_header_intel *phdr;
678 	struct ucode_patch *iter, *tmp;
679 
680 	list_for_each_entry_safe(iter, tmp, &microcode_cache, plist) {
681 
682 		phdr = (struct microcode_header_intel *)iter->data;
683 
684 		if (phdr->rev <= uci->cpu_sig.rev)
685 			continue;
686 
687 		if (!find_matching_signature(phdr,
688 					     uci->cpu_sig.sig,
689 					     uci->cpu_sig.pf))
690 			continue;
691 
692 		return iter->data;
693 	}
694 	return NULL;
695 }
696 
reload_ucode_intel(void)697 void reload_ucode_intel(void)
698 {
699 	struct microcode_intel *p;
700 	struct ucode_cpu_info uci;
701 
702 	collect_cpu_info_early(&uci);
703 
704 	p = find_patch(&uci);
705 	if (!p)
706 		return;
707 
708 	uci.mc = p;
709 
710 	apply_microcode_early(&uci, false);
711 }
712 
collect_cpu_info(int cpu_num,struct cpu_signature * csig)713 static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
714 {
715 	static struct cpu_signature prev;
716 	struct cpuinfo_x86 *c = &cpu_data(cpu_num);
717 	unsigned int val[2];
718 
719 	memset(csig, 0, sizeof(*csig));
720 
721 	csig->sig = cpuid_eax(0x00000001);
722 
723 	if ((c->x86_model >= 5) || (c->x86 > 6)) {
724 		/* get processor flags from MSR 0x17 */
725 		rdmsr(MSR_IA32_PLATFORM_ID, val[0], val[1]);
726 		csig->pf = 1 << ((val[1] >> 18) & 7);
727 	}
728 
729 	csig->rev = c->microcode;
730 
731 	/* No extra locking on prev, races are harmless. */
732 	if (csig->sig != prev.sig || csig->pf != prev.pf || csig->rev != prev.rev) {
733 		pr_info("sig=0x%x, pf=0x%x, revision=0x%x\n",
734 			csig->sig, csig->pf, csig->rev);
735 		prev = *csig;
736 	}
737 
738 	return 0;
739 }
740 
apply_microcode_intel(int cpu)741 static enum ucode_state apply_microcode_intel(int cpu)
742 {
743 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
744 	struct cpuinfo_x86 *c = &cpu_data(cpu);
745 	bool bsp = c->cpu_index == boot_cpu_data.cpu_index;
746 	struct microcode_intel *mc;
747 	enum ucode_state ret;
748 	static int prev_rev;
749 	u32 rev;
750 
751 	/* We should bind the task to the CPU */
752 	if (WARN_ON(raw_smp_processor_id() != cpu))
753 		return UCODE_ERROR;
754 
755 	/* Look for a newer patch in our cache: */
756 	mc = find_patch(uci);
757 	if (!mc) {
758 		mc = uci->mc;
759 		if (!mc)
760 			return UCODE_NFOUND;
761 	}
762 
763 	/*
764 	 * Save us the MSR write below - which is a particular expensive
765 	 * operation - when the other hyperthread has updated the microcode
766 	 * already.
767 	 */
768 	rev = intel_get_microcode_revision();
769 	if (rev >= mc->hdr.rev) {
770 		ret = UCODE_OK;
771 		goto out;
772 	}
773 
774 	/*
775 	 * Writeback and invalidate caches before updating microcode to avoid
776 	 * internal issues depending on what the microcode is updating.
777 	 */
778 	native_wbinvd();
779 
780 	/* write microcode via MSR 0x79 */
781 	wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
782 
783 	rev = intel_get_microcode_revision();
784 
785 	if (rev != mc->hdr.rev) {
786 		pr_err("CPU%d update to revision 0x%x failed\n",
787 		       cpu, mc->hdr.rev);
788 		return UCODE_ERROR;
789 	}
790 
791 	if (bsp && rev != prev_rev) {
792 		pr_info("updated to revision 0x%x, date = %04x-%02x-%02x\n",
793 			rev,
794 			mc->hdr.date & 0xffff,
795 			mc->hdr.date >> 24,
796 			(mc->hdr.date >> 16) & 0xff);
797 		prev_rev = rev;
798 	}
799 
800 	ret = UCODE_UPDATED;
801 
802 out:
803 	uci->cpu_sig.rev = rev;
804 	c->microcode	 = rev;
805 
806 	/* Update boot_cpu_data's revision too, if we're on the BSP: */
807 	if (bsp)
808 		boot_cpu_data.microcode = rev;
809 
810 	return ret;
811 }
812 
generic_load_microcode(int cpu,struct iov_iter * iter)813 static enum ucode_state generic_load_microcode(int cpu, struct iov_iter *iter)
814 {
815 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
816 	unsigned int curr_mc_size = 0, new_mc_size = 0;
817 	enum ucode_state ret = UCODE_OK;
818 	int new_rev = uci->cpu_sig.rev;
819 	u8 *new_mc = NULL, *mc = NULL;
820 	unsigned int csig, cpf;
821 
822 	while (iov_iter_count(iter)) {
823 		struct microcode_header_intel mc_header;
824 		unsigned int mc_size, data_size;
825 		u8 *data;
826 
827 		if (!copy_from_iter_full(&mc_header, sizeof(mc_header), iter)) {
828 			pr_err("error! Truncated or inaccessible header in microcode data file\n");
829 			break;
830 		}
831 
832 		mc_size = get_totalsize(&mc_header);
833 		if (mc_size < sizeof(mc_header)) {
834 			pr_err("error! Bad data in microcode data file (totalsize too small)\n");
835 			break;
836 		}
837 		data_size = mc_size - sizeof(mc_header);
838 		if (data_size > iov_iter_count(iter)) {
839 			pr_err("error! Bad data in microcode data file (truncated file?)\n");
840 			break;
841 		}
842 
843 		/* For performance reasons, reuse mc area when possible */
844 		if (!mc || mc_size > curr_mc_size) {
845 			vfree(mc);
846 			mc = vmalloc(mc_size);
847 			if (!mc)
848 				break;
849 			curr_mc_size = mc_size;
850 		}
851 
852 		memcpy(mc, &mc_header, sizeof(mc_header));
853 		data = mc + sizeof(mc_header);
854 		if (!copy_from_iter_full(data, data_size, iter) ||
855 		    microcode_sanity_check(mc, 1) < 0) {
856 			break;
857 		}
858 
859 		csig = uci->cpu_sig.sig;
860 		cpf = uci->cpu_sig.pf;
861 		if (has_newer_microcode(mc, csig, cpf, new_rev)) {
862 			vfree(new_mc);
863 			new_rev = mc_header.rev;
864 			new_mc  = mc;
865 			new_mc_size = mc_size;
866 			mc = NULL;	/* trigger new vmalloc */
867 			ret = UCODE_NEW;
868 		}
869 	}
870 
871 	vfree(mc);
872 
873 	if (iov_iter_count(iter)) {
874 		vfree(new_mc);
875 		return UCODE_ERROR;
876 	}
877 
878 	if (!new_mc)
879 		return UCODE_NFOUND;
880 
881 	vfree(uci->mc);
882 	uci->mc = (struct microcode_intel *)new_mc;
883 
884 	/*
885 	 * If early loading microcode is supported, save this mc into
886 	 * permanent memory. So it will be loaded early when a CPU is hot added
887 	 * or resumes.
888 	 */
889 	save_mc_for_early(uci, new_mc, new_mc_size);
890 
891 	pr_debug("CPU%d found a matching microcode update with version 0x%x (current=0x%x)\n",
892 		 cpu, new_rev, uci->cpu_sig.rev);
893 
894 	return ret;
895 }
896 
is_blacklisted(unsigned int cpu)897 static bool is_blacklisted(unsigned int cpu)
898 {
899 	struct cpuinfo_x86 *c = &cpu_data(cpu);
900 
901 	/*
902 	 * Late loading on model 79 with microcode revision less than 0x0b000021
903 	 * and LLC size per core bigger than 2.5MB may result in a system hang.
904 	 * This behavior is documented in item BDF90, #334165 (Intel Xeon
905 	 * Processor E7-8800/4800 v4 Product Family).
906 	 */
907 	if (c->x86 == 6 &&
908 	    c->x86_model == INTEL_FAM6_BROADWELL_X &&
909 	    c->x86_stepping == 0x01 &&
910 	    llc_size_per_core > 2621440 &&
911 	    c->microcode < 0x0b000021) {
912 		pr_err_once("Erratum BDF90: late loading with revision < 0x0b000021 (0x%x) disabled.\n", c->microcode);
913 		pr_err_once("Please consider either early loading through initrd/built-in or a potential BIOS update.\n");
914 		return true;
915 	}
916 
917 	return false;
918 }
919 
request_microcode_fw(int cpu,struct device * device,bool refresh_fw)920 static enum ucode_state request_microcode_fw(int cpu, struct device *device,
921 					     bool refresh_fw)
922 {
923 	struct cpuinfo_x86 *c = &cpu_data(cpu);
924 	const struct firmware *firmware;
925 	struct iov_iter iter;
926 	enum ucode_state ret;
927 	struct kvec kvec;
928 	char name[30];
929 
930 	if (is_blacklisted(cpu))
931 		return UCODE_NFOUND;
932 
933 	sprintf(name, "intel-ucode/%02x-%02x-%02x",
934 		c->x86, c->x86_model, c->x86_stepping);
935 
936 	if (request_firmware_direct(&firmware, name, device)) {
937 		pr_debug("data file %s load failed\n", name);
938 		return UCODE_NFOUND;
939 	}
940 
941 	kvec.iov_base = (void *)firmware->data;
942 	kvec.iov_len = firmware->size;
943 	iov_iter_kvec(&iter, WRITE, &kvec, 1, firmware->size);
944 	ret = generic_load_microcode(cpu, &iter);
945 
946 	release_firmware(firmware);
947 
948 	return ret;
949 }
950 
951 static enum ucode_state
request_microcode_user(int cpu,const void __user * buf,size_t size)952 request_microcode_user(int cpu, const void __user *buf, size_t size)
953 {
954 	struct iov_iter iter;
955 	struct iovec iov;
956 
957 	if (is_blacklisted(cpu))
958 		return UCODE_NFOUND;
959 
960 	iov.iov_base = (void __user *)buf;
961 	iov.iov_len = size;
962 	iov_iter_init(&iter, WRITE, &iov, 1, size);
963 
964 	return generic_load_microcode(cpu, &iter);
965 }
966 
967 static struct microcode_ops microcode_intel_ops = {
968 	.request_microcode_user		  = request_microcode_user,
969 	.request_microcode_fw             = request_microcode_fw,
970 	.collect_cpu_info                 = collect_cpu_info,
971 	.apply_microcode                  = apply_microcode_intel,
972 };
973 
calc_llc_size_per_core(struct cpuinfo_x86 * c)974 static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
975 {
976 	u64 llc_size = c->x86_cache_size * 1024ULL;
977 
978 	do_div(llc_size, c->x86_max_cores);
979 
980 	return (int)llc_size;
981 }
982 
init_intel_microcode(void)983 struct microcode_ops * __init init_intel_microcode(void)
984 {
985 	struct cpuinfo_x86 *c = &boot_cpu_data;
986 
987 	if (c->x86_vendor != X86_VENDOR_INTEL || c->x86 < 6 ||
988 	    cpu_has(c, X86_FEATURE_IA64)) {
989 		pr_err("Intel CPU family 0x%x not supported\n", c->x86);
990 		return NULL;
991 	}
992 
993 	llc_size_per_core = calc_llc_size_per_core(c);
994 
995 	return &microcode_intel_ops;
996 }
997