X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=arch%2Fx86%2Fcpu%2Fintel_common%2Fmicrocode.c;h=4d8e1d210838718b493bab85481bc10f4c8bd326;hb=401d1c4f5d2d29c4bc4beaec95402ca23eb63295;hp=eac5b781e94cba1ad69275903554c7c723655e61;hpb=e6294e0579897a682a823aefc99fe416c78aaf6e;p=platform%2Fkernel%2Fu-boot.git diff --git a/arch/x86/cpu/intel_common/microcode.c b/arch/x86/cpu/intel_common/microcode.c index eac5b78..4d8e1d21 100644 --- a/arch/x86/cpu/intel_common/microcode.c +++ b/arch/x86/cpu/intel_common/microcode.c @@ -1,16 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014 Google, Inc * Copyright (C) 2000 Ronald G. Minnich * * Microcode update for Intel PIII and later CPUs - * - * SPDX-License-Identifier: GPL-2.0 */ #include #include #include -#include +#include +#include +#include #include #include #include @@ -44,8 +45,6 @@ static int microcode_decode_node(const void *blob, int node, update->data = fdt_getprop(blob, node, "data", &update->size); if (!update->data) return -ENOENT; - update->data += UCODE_HEADER_LEN; - update->size -= UCODE_HEADER_LEN; update->header_version = fdtdec_get_int(blob, node, "intel,header-version", 0); @@ -125,6 +124,7 @@ static void microcode_read_cpu(struct microcode_update *cpu) int microcode_update_intel(void) { struct microcode_update cpu, update; + ulong address; const void *blob = gd->fdt_blob; int skipped; int count; @@ -168,7 +168,8 @@ int microcode_update_intel(void) skipped++; continue; } - wrmsr(MSR_IA32_UCODE_WRITE, (ulong)update.data, 0); + address = (ulong)update.data + UCODE_HEADER_LEN; + wrmsr(MSR_IA32_UCODE_WRITE, address, 0); rev = microcode_read_rev(); debug("microcode: updated to revision 0x%x date=%04x-%02x-%02x\n", rev, update.date_code & 0xffff, @@ -179,5 +180,9 @@ int microcode_update_intel(void) return -EFAULT; } count++; + if (!ucode_base) { + ucode_base = (ulong)update.data; + ucode_size = update.size; + } } while (1); }