From 0f61de8d9dba4ebfc4ea4b2da7f91adc937b3875 Mon Sep 17 00:00:00 2001
From: Simon Glass <sjg@chromium.org>
Date: Wed, 17 Dec 2014 15:50:37 +0800
Subject: [PATCH] x86: Convert microcode format to device-tree-only

To avoid having two microcode formats, adjust the build system to support
obtaining the microcode from the device tree, even in the case where it
must be made available before the device tree can be accessed.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
---
 Makefile                         |  4 +++-
 arch/x86/cpu/queensbay/tnc_car.S | 11 ++++-------
 arch/x86/dts/crownbay.dts        |  7 +++++++
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/Makefile b/Makefile
index 1560bff2d8..bda8222af4 100644
--- a/Makefile
+++ b/Makefile
@@ -947,7 +947,9 @@ ifneq ($(CONFIG_X86_RESET_VECTOR),)
 rom: u-boot.rom FORCE
 
 IFDTOOL=$(objtree)/tools/ifdtool
-IFDTOOL_FLAGS  = -w $(CONFIG_SYS_TEXT_BASE):$(objtree)/u-boot-dtb.bin
+IFDTOOL_FLAGS  = -f 0:$(objtree)/u-boot.dtb
+IFDTOOL_FLAGS += -m 0x$(shell $(NM) u-boot |grep _dt_ucode_base_size |cut -d' ' -f1)
+IFDTOOL_FLAGS += -U $(CONFIG_SYS_TEXT_BASE):$(objtree)/u-boot.bin
 IFDTOOL_FLAGS += -w $(CONFIG_SYS_X86_START16):$(objtree)/u-boot-x86-16bit.bin
 
 ifneq ($(CONFIG_HAVE_INTEL_ME),)
diff --git a/arch/x86/cpu/queensbay/tnc_car.S b/arch/x86/cpu/queensbay/tnc_car.S
index 6834a6413d..2e9139eb8c 100644
--- a/arch/x86/cpu/queensbay/tnc_car.S
+++ b/arch/x86/cpu/queensbay/tnc_car.S
@@ -116,12 +116,9 @@ temp_ram_init_romstack:
 	.long	temp_ram_init_ret
 	.long	temp_ram_init_params
 temp_ram_init_params:
-	.long	ucode_start		/* microcode base */
-	.long	ucode_size		/* microcode size */
+_dt_ucode_base_size:
+	/* These next two fields are filled in by ifdtool */
+	.long	0			/* microcode base */
+	.long	0			/* microcode size */
 	.long	CONFIG_SYS_MONITOR_BASE	/* code region base */
 	.long	CONFIG_SYS_MONITOR_LEN	/* code region size */
-
-	.balign	4
-ucode_start:
-	.include "arch/x86/cpu/queensbay/M0220661105.inc"
-ucode_size = ( . - ucode_start)
diff --git a/arch/x86/dts/crownbay.dts b/arch/x86/dts/crownbay.dts
index 399dafb822..3f43f3ca37 100644
--- a/arch/x86/dts/crownbay.dts
+++ b/arch/x86/dts/crownbay.dts
@@ -50,4 +50,11 @@
 			memory-map = <0xffe00000 0x00200000>;
 		};
 	};
+
+	microcode {
+		update@0 {
+#include "microcode/m0220661105_cv.dtsi"
+		};
+	};
+
 };
-- 
2.39.5