From: Ian Campbell <ijc@hellion.org.uk>
Date: Mon, 26 Nov 2012 09:41:02 +0000
Subject: microcode_xen: Add support for AMD family >= 15h
Origin: https://git.kernel.org/cgit/linux/kernel/git/konrad/xen.git/commit?id=db18162b238275f4ef532c6c1f662116a83b6496

Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
[bwh: Forward-port to 3.14: adjust filename]
---
 arch/x86/kernel/cpu/microcode/xen.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/cpu/microcode/xen.c b/arch/x86/kernel/cpu/microcode/xen.c
index 6a73957..9e50566 100644
--- a/arch/x86/kernel/cpu/microcode/xen.c
+++ b/arch/x86/kernel/cpu/microcode/xen.c
@@ -58,7 +58,7 @@ static int xen_microcode_update(int cpu)
 
 static enum ucode_state xen_request_microcode_fw(int cpu, struct device *device)
 {
-	char name[30];
+	char name[36];
 	struct cpuinfo_x86 *c = &cpu_data(cpu);
 	const struct firmware *firmware;
 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
@@ -74,7 +74,11 @@ static enum ucode_state xen_request_microcode_fw(int cpu, struct device *device)
 		break;
 
 	case X86_VENDOR_AMD:
-		snprintf(name, sizeof(name), "amd-ucode/microcode_amd.bin");
+		/* Beginning with family 15h AMD uses family-specific firmware files. */
+		if (c->x86 >= 0x15)
+			snprintf(name, sizeof(name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
+		else
+			snprintf(name, sizeof(name), "amd-ucode/microcode_amd.bin");
 		break;
 
 	default:
