binman: x86: Separate out 16-bit reset and init code
At present these two sections of code are linked together into a single
2KB chunk in a single file. Some Intel SoCs like to have a FIT (Firmware
Interface Table) in the ROM and the pointer for this needs to go at
0xffffffc0 which is in the middle of these two sections.
Make use of the new 'reset' entry and change the existing 16-bit entry to
include just the 16-bit data.
Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/Makefile b/Makefile
index 6fda326..66ba436 100644
--- a/Makefile
+++ b/Makefile
@@ -1458,14 +1458,18 @@
cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
$(filter-out FORCE,$^) -o $@
-u-boot.rom: u-boot-x86-16bit.bin u-boot.bin \
+u-boot.rom: u-boot-x86-start16.bin u-boot-x86-reset16.bin u-boot.bin \
$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
$(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin) \
$(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
$(call if_changed,binman)
-OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
-u-boot-x86-16bit.bin: u-boot FORCE
+OBJCOPYFLAGS_u-boot-x86-start16.bin := -O binary -j .start16
+u-boot-x86-start16.bin: u-boot FORCE
+ $(call if_changed,objcopy)
+
+OBJCOPYFLAGS_u-boot-x86-reset16.bin := -O binary -j .resetvec
+u-boot-x86-reset16.bin: u-boot FORCE
$(call if_changed,objcopy)
endif
diff --git a/arch/x86/dts/u-boot.dtsi b/arch/x86/dts/u-boot.dtsi
index daeb168..0e87b88 100644
--- a/arch/x86/dts/u-boot.dtsi
+++ b/arch/x86/dts/u-boot.dtsi
@@ -120,14 +120,23 @@
x86-start16-tpl {
offset = <CONFIG_SYS_X86_START16>;
};
+ x86-reset16-tpl {
+ offset = <CONFIG_RESET_VEC_LOC>;
+ };
#elif defined(CONFIG_SPL)
x86-start16-spl {
offset = <CONFIG_SYS_X86_START16>;
};
+ x86-reset16-spl {
+ offset = <CONFIG_RESET_VEC_LOC>;
+ };
#else
x86-start16 {
offset = <CONFIG_SYS_X86_START16>;
};
+ x86-reset16 {
+ offset = <CONFIG_RESET_VEC_LOC>;
+ };
#endif
};
#endif
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index 7af6b12..0f3d89b 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -229,9 +229,11 @@
endif
ifdef CONFIG_TPL_BUILD
-ALL-$(CONFIG_TPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-16bit-tpl.bin
+ALL-$(CONFIG_TPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-start16-tpl.bin \
+ $(obj)/u-boot-x86-reset16-tpl.bin
else
-ALL-$(CONFIG_SPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-16bit-spl.bin
+ALL-$(CONFIG_SPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-start16-spl.bin \
+ $(obj)/u-boot-x86-reset16-spl.bin
endif
ALL-$(CONFIG_ARCH_ZYNQ) += $(obj)/boot.bin
@@ -337,12 +339,20 @@
$(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE
$(call if_changed,objcopy)
-OBJCOPYFLAGS_u-boot-x86-16bit-spl.bin := -O binary -j .start16 -j .resetvec
-$(obj)/u-boot-x86-16bit-spl.bin: $(obj)/u-boot-spl FORCE
+OBJCOPYFLAGS_u-boot-x86-start16-spl.bin := -O binary -j .start16
+$(obj)/u-boot-x86-start16-spl.bin: $(obj)/u-boot-spl FORCE
$(call if_changed,objcopy)
-OBJCOPYFLAGS_u-boot-x86-16bit-tpl.bin := -O binary -j .start16 -j .resetvec
-$(obj)/u-boot-x86-16bit-tpl.bin: $(obj)/u-boot-tpl FORCE
+OBJCOPYFLAGS_u-boot-x86-start16-tpl.bin := -O binary -j .start16
+$(obj)/u-boot-x86-start16-tpl.bin: $(obj)/u-boot-tpl FORCE
+ $(call if_changed,objcopy)
+
+OBJCOPYFLAGS_u-boot-x86-reset16-spl.bin := -O binary -j .resetvec
+$(obj)/u-boot-x86-reset16-spl.bin: $(obj)/u-boot-spl FORCE
+ $(call if_changed,objcopy)
+
+OBJCOPYFLAGS_u-boot-x86-reset16-tpl.bin := -O binary -j .resetvec
+$(obj)/u-boot-x86-reset16-tpl.bin: $(obj)/u-boot-tpl FORCE
$(call if_changed,objcopy)
LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL)
diff --git a/tools/binman/README.entries b/tools/binman/README.entries
index 55e3fa0..d17b3cb 100644
--- a/tools/binman/README.entries
+++ b/tools/binman/README.entries
@@ -989,14 +989,15 @@
-------------------------------------------------------
Properties / Entry arguments:
- - filename: Filename of u-boot-x86-16bit.bin (default
- 'u-boot-x86-16bit.bin')
+ - filename: Filename of u-boot-x86-start16.bin (default
+ 'u-boot-x86-start16.bin')
x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
-must be placed at a particular address. This entry holds that code. It is
-typically placed at offset CONFIG_SYS_X86_START16. The code is responsible
-for changing to 32-bit mode and jumping to U-Boot's entry point, which
-requires 32-bit mode (for 32-bit U-Boot).
+must be placed in the top 64KB of the ROM. The reset code jumps to it. This
+entry holds that code. It is typically placed at offset
+CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
+and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
+U-Boot).
For 64-bit U-Boot, the 'x86_start16_spl' entry type is used instead.
@@ -1006,16 +1007,17 @@
--------------------------------------------------------
Properties / Entry arguments:
- - filename: Filename of spl/u-boot-x86-16bit-spl.bin (default
- 'spl/u-boot-x86-16bit-spl.bin')
+ - filename: Filename of spl/u-boot-x86-start16-spl.bin (default
+ 'spl/u-boot-x86-start16-spl.bin')
-x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code
-must be placed at a particular address. This entry holds that code. It is
-typically placed at offset CONFIG_SYS_X86_START16. The code is responsible
-for changing to 32-bit mode and starting SPL, which in turn changes to
-64-bit mode and jumps to U-Boot (for 64-bit U-Boot).
+x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
+must be placed in the top 64KB of the ROM. The reset code jumps to it. This
+entry holds that code. It is typically placed at offset
+CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
+and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
+U-Boot).
-For 32-bit U-Boot, the 'x86_start16' entry type is used instead.
+For 32-bit U-Boot, the 'x86-start16' entry type is used instead.
@@ -1023,15 +1025,17 @@
--------------------------------------------------------
Properties / Entry arguments:
- - filename: Filename of tpl/u-boot-x86-16bit-tpl.bin (default
- 'tpl/u-boot-x86-16bit-tpl.bin')
+ - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default
+ 'tpl/u-boot-x86-start16-tpl.bin')
-x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code
-must be placed at a particular address. This entry holds that code. It is
-typically placed at offset CONFIG_SYS_X86_START16. The code is responsible
-for changing to 32-bit mode and starting TPL, which in turn jumps to SPL.
+x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
+must be placed in the top 64KB of the ROM. The reset code jumps to it. This
+entry holds that code. It is typically placed at offset
+CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
+and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
+U-Boot).
-If TPL is not being used, the 'x86_start16_spl or 'x86_start16' entry types
+If TPL is not being used, the 'x86-start16-spl or 'x86-start16' entry types
may be used instead.
diff --git a/tools/binman/etype/x86_start16.py b/tools/binman/etype/x86_start16.py
index 7d32ecd..6736b69 100644
--- a/tools/binman/etype/x86_start16.py
+++ b/tools/binman/etype/x86_start16.py
@@ -12,14 +12,15 @@
"""x86 16-bit start-up code for U-Boot
Properties / Entry arguments:
- - filename: Filename of u-boot-x86-16bit.bin (default
- 'u-boot-x86-16bit.bin')
+ - filename: Filename of u-boot-x86-start16.bin (default
+ 'u-boot-x86-start16.bin')
x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
- must be placed at a particular address. This entry holds that code. It is
- typically placed at offset CONFIG_SYS_X86_START16. The code is responsible
- for changing to 32-bit mode and jumping to U-Boot's entry point, which
- requires 32-bit mode (for 32-bit U-Boot).
+ must be placed in the top 64KB of the ROM. The reset code jumps to it. This
+ entry holds that code. It is typically placed at offset
+ CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
+ and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
+ U-Boot).
For 64-bit U-Boot, the 'x86_start16_spl' entry type is used instead.
"""
@@ -27,4 +28,4 @@
Entry_blob.__init__(self, section, etype, node)
def GetDefaultFilename(self):
- return 'u-boot-x86-16bit.bin'
+ return 'u-boot-x86-start16.bin'
diff --git a/tools/binman/etype/x86_start16_spl.py b/tools/binman/etype/x86_start16_spl.py
index d85909e..c8c7063 100644
--- a/tools/binman/etype/x86_start16_spl.py
+++ b/tools/binman/etype/x86_start16_spl.py
@@ -12,19 +12,20 @@
"""x86 16-bit start-up code for SPL
Properties / Entry arguments:
- - filename: Filename of spl/u-boot-x86-16bit-spl.bin (default
- 'spl/u-boot-x86-16bit-spl.bin')
+ - filename: Filename of spl/u-boot-x86-start16-spl.bin (default
+ 'spl/u-boot-x86-start16-spl.bin')
- x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code
- must be placed at a particular address. This entry holds that code. It is
- typically placed at offset CONFIG_SYS_X86_START16. The code is responsible
- for changing to 32-bit mode and starting SPL, which in turn changes to
- 64-bit mode and jumps to U-Boot (for 64-bit U-Boot).
+ x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
+ must be placed in the top 64KB of the ROM. The reset code jumps to it. This
+ entry holds that code. It is typically placed at offset
+ CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
+ and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
+ U-Boot).
- For 32-bit U-Boot, the 'x86_start16' entry type is used instead.
+ For 32-bit U-Boot, the 'x86-start16' entry type is used instead.
"""
def __init__(self, section, etype, node):
Entry_blob.__init__(self, section, etype, node)
def GetDefaultFilename(self):
- return 'spl/u-boot-x86-16bit-spl.bin'
+ return 'spl/u-boot-x86-start16-spl.bin'
diff --git a/tools/binman/etype/x86_start16_tpl.py b/tools/binman/etype/x86_start16_tpl.py
index 46ce169..5261a8a 100644
--- a/tools/binman/etype/x86_start16_tpl.py
+++ b/tools/binman/etype/x86_start16_tpl.py
@@ -12,19 +12,21 @@
"""x86 16-bit start-up code for TPL
Properties / Entry arguments:
- - filename: Filename of tpl/u-boot-x86-16bit-tpl.bin (default
- 'tpl/u-boot-x86-16bit-tpl.bin')
+ - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default
+ 'tpl/u-boot-x86-start16-tpl.bin')
- x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code
- must be placed at a particular address. This entry holds that code. It is
- typically placed at offset CONFIG_SYS_X86_START16. The code is responsible
- for changing to 32-bit mode and starting TPL, which in turn jumps to SPL.
+ x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
+ must be placed in the top 64KB of the ROM. The reset code jumps to it. This
+ entry holds that code. It is typically placed at offset
+ CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
+ and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
+ U-Boot).
- If TPL is not being used, the 'x86_start16_spl or 'x86_start16' entry types
+ If TPL is not being used, the 'x86-start16-spl or 'x86-start16' entry types
may be used instead.
"""
def __init__(self, section, etype, node):
Entry_blob.__init__(self, section, etype, node)
def GetDefaultFilename(self):
- return 'tpl/u-boot-x86-16bit-tpl.bin'
+ return 'tpl/u-boot-x86-start16-tpl.bin'
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 7744581..04127fa 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -120,10 +120,10 @@
TestFunctional._MakeInputFile('u-boot-br.bin', PPC_MPC85XX_BR_DATA)
- TestFunctional._MakeInputFile('u-boot-x86-16bit.bin', X86_START16_DATA)
- TestFunctional._MakeInputFile('spl/u-boot-x86-16bit-spl.bin',
+ TestFunctional._MakeInputFile('u-boot-x86-start16.bin', X86_START16_DATA)
+ TestFunctional._MakeInputFile('spl/u-boot-x86-start16-spl.bin',
X86_START16_SPL_DATA)
- TestFunctional._MakeInputFile('tpl/u-boot-x86-16bit-tpl.bin',
+ TestFunctional._MakeInputFile('tpl/u-boot-x86-start16-tpl.bin',
X86_START16_TPL_DATA)
TestFunctional._MakeInputFile('u-boot-x86-reset16.bin',