xref: /openbmc/linux/arch/x86/kernel/cpu/microcode/intel.c (revision 09717af7)
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 
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  */
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  */
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 
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 
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 
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 *
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 
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 
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  */
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 
456 static bool load_builtin_intel_microcode(struct cpio_data *cp)
457 {
458 	unsigned int eax = 1, ebx, ecx = 0, edx;
459 	struct firmware fw;
460 	char name[30];
461 
462 	if (IS_ENABLED(CONFIG_X86_32))
463 		return false;
464 
465 	native_cpuid(&eax, &ebx, &ecx, &edx);
466 
467 	sprintf(name, "intel-ucode/%02x-%02x-%02x",
468 		      x86_family(eax), x86_model(eax), x86_stepping(eax));
469 
470 	if (firmware_request_builtin(&fw, name)) {
471 		cp->size = fw.size;
472 		cp->data = (void *)fw.data;
473 		return true;
474 	}
475 
476 	return false;
477 }
478 
479 /*
480  * Print ucode update info.
481  */
482 static void
483 print_ucode_info(struct ucode_cpu_info *uci, unsigned int date)
484 {
485 	pr_info_once("microcode updated early to revision 0x%x, date = %04x-%02x-%02x\n",
486 		     uci->cpu_sig.rev,
487 		     date & 0xffff,
488 		     date >> 24,
489 		     (date >> 16) & 0xff);
490 }
491 
492 #ifdef CONFIG_X86_32
493 
494 static int delay_ucode_info;
495 static int current_mc_date;
496 
497 /*
498  * Print early updated ucode info after printk works. This is delayed info dump.
499  */
500 void show_ucode_info_early(void)
501 {
502 	struct ucode_cpu_info uci;
503 
504 	if (delay_ucode_info) {
505 		collect_cpu_info_early(&uci);
506 		print_ucode_info(&uci, current_mc_date);
507 		delay_ucode_info = 0;
508 	}
509 }
510 
511 /*
512  * At this point, we can not call printk() yet. Delay printing microcode info in
513  * show_ucode_info_early() until printk() works.
514  */
515 static void print_ucode(struct ucode_cpu_info *uci)
516 {
517 	struct microcode_intel *mc;
518 	int *delay_ucode_info_p;
519 	int *current_mc_date_p;
520 
521 	mc = uci->mc;
522 	if (!mc)
523 		return;
524 
525 	delay_ucode_info_p = (int *)__pa_nodebug(&delay_ucode_info);
526 	current_mc_date_p = (int *)__pa_nodebug(&current_mc_date);
527 
528 	*delay_ucode_info_p = 1;
529 	*current_mc_date_p = mc->hdr.date;
530 }
531 #else
532 
533 static inline void print_ucode(struct ucode_cpu_info *uci)
534 {
535 	struct microcode_intel *mc;
536 
537 	mc = uci->mc;
538 	if (!mc)
539 		return;
540 
541 	print_ucode_info(uci, mc->hdr.date);
542 }
543 #endif
544 
545 static int apply_microcode_early(struct ucode_cpu_info *uci, bool early)
546 {
547 	struct microcode_intel *mc;
548 	u32 rev;
549 
550 	mc = uci->mc;
551 	if (!mc)
552 		return 0;
553 
554 	/*
555 	 * Save us the MSR write below - which is a particular expensive
556 	 * operation - when the other hyperthread has updated the microcode
557 	 * already.
558 	 */
559 	rev = intel_get_microcode_revision();
560 	if (rev >= mc->hdr.rev) {
561 		uci->cpu_sig.rev = rev;
562 		return UCODE_OK;
563 	}
564 
565 	/*
566 	 * Writeback and invalidate caches before updating microcode to avoid
567 	 * internal issues depending on what the microcode is updating.
568 	 */
569 	native_wbinvd();
570 
571 	/* write microcode via MSR 0x79 */
572 	native_wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
573 
574 	rev = intel_get_microcode_revision();
575 	if (rev != mc->hdr.rev)
576 		return -1;
577 
578 	uci->cpu_sig.rev = rev;
579 
580 	if (early)
581 		print_ucode(uci);
582 	else
583 		print_ucode_info(uci, mc->hdr.date);
584 
585 	return 0;
586 }
587 
588 int __init save_microcode_in_initrd_intel(void)
589 {
590 	struct ucode_cpu_info uci;
591 	struct cpio_data cp;
592 
593 	/*
594 	 * initrd is going away, clear patch ptr. We will scan the microcode one
595 	 * last time before jettisoning and save a patch, if found. Then we will
596 	 * update that pointer too, with a stable patch address to use when
597 	 * resuming the cores.
598 	 */
599 	intel_ucode_patch = NULL;
600 
601 	if (!load_builtin_intel_microcode(&cp))
602 		cp = find_microcode_in_initrd(ucode_path, false);
603 
604 	if (!(cp.data && cp.size))
605 		return 0;
606 
607 	collect_cpu_info_early(&uci);
608 
609 	scan_microcode(cp.data, cp.size, &uci, true);
610 
611 	show_saved_mc();
612 
613 	return 0;
614 }
615 
616 /*
617  * @res_patch, output: a pointer to the patch we found.
618  */
619 static struct microcode_intel *__load_ucode_intel(struct ucode_cpu_info *uci)
620 {
621 	static const char *path;
622 	struct cpio_data cp;
623 	bool use_pa;
624 
625 	if (IS_ENABLED(CONFIG_X86_32)) {
626 		path	  = (const char *)__pa_nodebug(ucode_path);
627 		use_pa	  = true;
628 	} else {
629 		path	  = ucode_path;
630 		use_pa	  = false;
631 	}
632 
633 	/* try built-in microcode first */
634 	if (!load_builtin_intel_microcode(&cp))
635 		cp = find_microcode_in_initrd(path, use_pa);
636 
637 	if (!(cp.data && cp.size))
638 		return NULL;
639 
640 	collect_cpu_info_early(uci);
641 
642 	return scan_microcode(cp.data, cp.size, uci, false);
643 }
644 
645 void __init load_ucode_intel_bsp(void)
646 {
647 	struct microcode_intel *patch;
648 	struct ucode_cpu_info uci;
649 
650 	patch = __load_ucode_intel(&uci);
651 	if (!patch)
652 		return;
653 
654 	uci.mc = patch;
655 
656 	apply_microcode_early(&uci, true);
657 }
658 
659 void load_ucode_intel_ap(void)
660 {
661 	struct microcode_intel *patch, **iup;
662 	struct ucode_cpu_info uci;
663 
664 	if (IS_ENABLED(CONFIG_X86_32))
665 		iup = (struct microcode_intel **) __pa_nodebug(&intel_ucode_patch);
666 	else
667 		iup = &intel_ucode_patch;
668 
669 reget:
670 	if (!*iup) {
671 		patch = __load_ucode_intel(&uci);
672 		if (!patch)
673 			return;
674 
675 		*iup = patch;
676 	}
677 
678 	uci.mc = *iup;
679 
680 	if (apply_microcode_early(&uci, true)) {
681 		/* Mixed-silicon system? Try to refetch the proper patch: */
682 		*iup = NULL;
683 
684 		goto reget;
685 	}
686 }
687 
688 static struct microcode_intel *find_patch(struct ucode_cpu_info *uci)
689 {
690 	struct microcode_header_intel *phdr;
691 	struct ucode_patch *iter, *tmp;
692 
693 	list_for_each_entry_safe(iter, tmp, &microcode_cache, plist) {
694 
695 		phdr = (struct microcode_header_intel *)iter->data;
696 
697 		if (phdr->rev <= uci->cpu_sig.rev)
698 			continue;
699 
700 		if (!find_matching_signature(phdr,
701 					     uci->cpu_sig.sig,
702 					     uci->cpu_sig.pf))
703 			continue;
704 
705 		return iter->data;
706 	}
707 	return NULL;
708 }
709 
710 void reload_ucode_intel(void)
711 {
712 	struct microcode_intel *p;
713 	struct ucode_cpu_info uci;
714 
715 	collect_cpu_info_early(&uci);
716 
717 	p = find_patch(&uci);
718 	if (!p)
719 		return;
720 
721 	uci.mc = p;
722 
723 	apply_microcode_early(&uci, false);
724 }
725 
726 static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
727 {
728 	static struct cpu_signature prev;
729 	struct cpuinfo_x86 *c = &cpu_data(cpu_num);
730 	unsigned int val[2];
731 
732 	memset(csig, 0, sizeof(*csig));
733 
734 	csig->sig = cpuid_eax(0x00000001);
735 
736 	if ((c->x86_model >= 5) || (c->x86 > 6)) {
737 		/* get processor flags from MSR 0x17 */
738 		rdmsr(MSR_IA32_PLATFORM_ID, val[0], val[1]);
739 		csig->pf = 1 << ((val[1] >> 18) & 7);
740 	}
741 
742 	csig->rev = c->microcode;
743 
744 	/* No extra locking on prev, races are harmless. */
745 	if (csig->sig != prev.sig || csig->pf != prev.pf || csig->rev != prev.rev) {
746 		pr_info("sig=0x%x, pf=0x%x, revision=0x%x\n",
747 			csig->sig, csig->pf, csig->rev);
748 		prev = *csig;
749 	}
750 
751 	return 0;
752 }
753 
754 static enum ucode_state apply_microcode_intel(int cpu)
755 {
756 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
757 	struct cpuinfo_x86 *c = &cpu_data(cpu);
758 	bool bsp = c->cpu_index == boot_cpu_data.cpu_index;
759 	struct microcode_intel *mc;
760 	enum ucode_state ret;
761 	static int prev_rev;
762 	u32 rev;
763 
764 	/* We should bind the task to the CPU */
765 	if (WARN_ON(raw_smp_processor_id() != cpu))
766 		return UCODE_ERROR;
767 
768 	/* Look for a newer patch in our cache: */
769 	mc = find_patch(uci);
770 	if (!mc) {
771 		mc = uci->mc;
772 		if (!mc)
773 			return UCODE_NFOUND;
774 	}
775 
776 	/*
777 	 * Save us the MSR write below - which is a particular expensive
778 	 * operation - when the other hyperthread has updated the microcode
779 	 * already.
780 	 */
781 	rev = intel_get_microcode_revision();
782 	if (rev >= mc->hdr.rev) {
783 		ret = UCODE_OK;
784 		goto out;
785 	}
786 
787 	/*
788 	 * Writeback and invalidate caches before updating microcode to avoid
789 	 * internal issues depending on what the microcode is updating.
790 	 */
791 	native_wbinvd();
792 
793 	/* write microcode via MSR 0x79 */
794 	wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
795 
796 	rev = intel_get_microcode_revision();
797 
798 	if (rev != mc->hdr.rev) {
799 		pr_err("CPU%d update to revision 0x%x failed\n",
800 		       cpu, mc->hdr.rev);
801 		return UCODE_ERROR;
802 	}
803 
804 	if (bsp && rev != prev_rev) {
805 		pr_info("updated to revision 0x%x, date = %04x-%02x-%02x\n",
806 			rev,
807 			mc->hdr.date & 0xffff,
808 			mc->hdr.date >> 24,
809 			(mc->hdr.date >> 16) & 0xff);
810 		prev_rev = rev;
811 	}
812 
813 	ret = UCODE_UPDATED;
814 
815 out:
816 	uci->cpu_sig.rev = rev;
817 	c->microcode	 = rev;
818 
819 	/* Update boot_cpu_data's revision too, if we're on the BSP: */
820 	if (bsp)
821 		boot_cpu_data.microcode = rev;
822 
823 	return ret;
824 }
825 
826 static enum ucode_state generic_load_microcode(int cpu, struct iov_iter *iter)
827 {
828 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
829 	unsigned int curr_mc_size = 0, new_mc_size = 0;
830 	enum ucode_state ret = UCODE_OK;
831 	int new_rev = uci->cpu_sig.rev;
832 	u8 *new_mc = NULL, *mc = NULL;
833 	unsigned int csig, cpf;
834 
835 	while (iov_iter_count(iter)) {
836 		struct microcode_header_intel mc_header;
837 		unsigned int mc_size, data_size;
838 		u8 *data;
839 
840 		if (!copy_from_iter_full(&mc_header, sizeof(mc_header), iter)) {
841 			pr_err("error! Truncated or inaccessible header in microcode data file\n");
842 			break;
843 		}
844 
845 		mc_size = get_totalsize(&mc_header);
846 		if (mc_size < sizeof(mc_header)) {
847 			pr_err("error! Bad data in microcode data file (totalsize too small)\n");
848 			break;
849 		}
850 		data_size = mc_size - sizeof(mc_header);
851 		if (data_size > iov_iter_count(iter)) {
852 			pr_err("error! Bad data in microcode data file (truncated file?)\n");
853 			break;
854 		}
855 
856 		/* For performance reasons, reuse mc area when possible */
857 		if (!mc || mc_size > curr_mc_size) {
858 			vfree(mc);
859 			mc = vmalloc(mc_size);
860 			if (!mc)
861 				break;
862 			curr_mc_size = mc_size;
863 		}
864 
865 		memcpy(mc, &mc_header, sizeof(mc_header));
866 		data = mc + sizeof(mc_header);
867 		if (!copy_from_iter_full(data, data_size, iter) ||
868 		    microcode_sanity_check(mc, 1) < 0) {
869 			break;
870 		}
871 
872 		csig = uci->cpu_sig.sig;
873 		cpf = uci->cpu_sig.pf;
874 		if (has_newer_microcode(mc, csig, cpf, new_rev)) {
875 			vfree(new_mc);
876 			new_rev = mc_header.rev;
877 			new_mc  = mc;
878 			new_mc_size = mc_size;
879 			mc = NULL;	/* trigger new vmalloc */
880 			ret = UCODE_NEW;
881 		}
882 	}
883 
884 	vfree(mc);
885 
886 	if (iov_iter_count(iter)) {
887 		vfree(new_mc);
888 		return UCODE_ERROR;
889 	}
890 
891 	if (!new_mc)
892 		return UCODE_NFOUND;
893 
894 	vfree(uci->mc);
895 	uci->mc = (struct microcode_intel *)new_mc;
896 
897 	/*
898 	 * If early loading microcode is supported, save this mc into
899 	 * permanent memory. So it will be loaded early when a CPU is hot added
900 	 * or resumes.
901 	 */
902 	save_mc_for_early(uci, new_mc, new_mc_size);
903 
904 	pr_debug("CPU%d found a matching microcode update with version 0x%x (current=0x%x)\n",
905 		 cpu, new_rev, uci->cpu_sig.rev);
906 
907 	return ret;
908 }
909 
910 static bool is_blacklisted(unsigned int cpu)
911 {
912 	struct cpuinfo_x86 *c = &cpu_data(cpu);
913 
914 	/*
915 	 * Late loading on model 79 with microcode revision less than 0x0b000021
916 	 * and LLC size per core bigger than 2.5MB may result in a system hang.
917 	 * This behavior is documented in item BDF90, #334165 (Intel Xeon
918 	 * Processor E7-8800/4800 v4 Product Family).
919 	 */
920 	if (c->x86 == 6 &&
921 	    c->x86_model == INTEL_FAM6_BROADWELL_X &&
922 	    c->x86_stepping == 0x01 &&
923 	    llc_size_per_core > 2621440 &&
924 	    c->microcode < 0x0b000021) {
925 		pr_err_once("Erratum BDF90: late loading with revision < 0x0b000021 (0x%x) disabled.\n", c->microcode);
926 		pr_err_once("Please consider either early loading through initrd/built-in or a potential BIOS update.\n");
927 		return true;
928 	}
929 
930 	return false;
931 }
932 
933 static enum ucode_state request_microcode_fw(int cpu, struct device *device,
934 					     bool refresh_fw)
935 {
936 	struct cpuinfo_x86 *c = &cpu_data(cpu);
937 	const struct firmware *firmware;
938 	struct iov_iter iter;
939 	enum ucode_state ret;
940 	struct kvec kvec;
941 	char name[30];
942 
943 	if (is_blacklisted(cpu))
944 		return UCODE_NFOUND;
945 
946 	sprintf(name, "intel-ucode/%02x-%02x-%02x",
947 		c->x86, c->x86_model, c->x86_stepping);
948 
949 	if (request_firmware_direct(&firmware, name, device)) {
950 		pr_debug("data file %s load failed\n", name);
951 		return UCODE_NFOUND;
952 	}
953 
954 	kvec.iov_base = (void *)firmware->data;
955 	kvec.iov_len = firmware->size;
956 	iov_iter_kvec(&iter, WRITE, &kvec, 1, firmware->size);
957 	ret = generic_load_microcode(cpu, &iter);
958 
959 	release_firmware(firmware);
960 
961 	return ret;
962 }
963 
964 static enum ucode_state
965 request_microcode_user(int cpu, const void __user *buf, size_t size)
966 {
967 	struct iov_iter iter;
968 	struct iovec iov;
969 
970 	if (is_blacklisted(cpu))
971 		return UCODE_NFOUND;
972 
973 	iov.iov_base = (void __user *)buf;
974 	iov.iov_len = size;
975 	iov_iter_init(&iter, WRITE, &iov, 1, size);
976 
977 	return generic_load_microcode(cpu, &iter);
978 }
979 
980 static struct microcode_ops microcode_intel_ops = {
981 	.request_microcode_user		  = request_microcode_user,
982 	.request_microcode_fw             = request_microcode_fw,
983 	.collect_cpu_info                 = collect_cpu_info,
984 	.apply_microcode                  = apply_microcode_intel,
985 };
986 
987 static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
988 {
989 	u64 llc_size = c->x86_cache_size * 1024ULL;
990 
991 	do_div(llc_size, c->x86_max_cores);
992 
993 	return (int)llc_size;
994 }
995 
996 struct microcode_ops * __init init_intel_microcode(void)
997 {
998 	struct cpuinfo_x86 *c = &boot_cpu_data;
999 
1000 	if (c->x86_vendor != X86_VENDOR_INTEL || c->x86 < 6 ||
1001 	    cpu_has(c, X86_FEATURE_IA64)) {
1002 		pr_err("Intel CPU family 0x%x not supported\n", c->x86);
1003 		return NULL;
1004 	}
1005 
1006 	llc_size_per_core = calc_llc_size_per_core(c);
1007 
1008 	return &microcode_intel_ops;
1009 }
1010