binman: x86: Separate out 16-bit reset and init code
authorSimon Glass <sjg@chromium.org>
Sat, 24 Aug 2019 13:22:49 +0000 (07:22 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 15 Oct 2019 14:40:02 +0000 (08:40 -0600)
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>
Makefile
arch/x86/dts/u-boot.dtsi
scripts/Makefile.spl
tools/binman/README.entries
tools/binman/etype/x86_start16.py
tools/binman/etype/x86_start16_spl.py
tools/binman/etype/x86_start16_tpl.py
tools/binman/ftest.py

index 6fda3268e766cccfcee646d8a0aa01ebda331563..66ba43601f663ab46fa1911a68eb686d5497d33a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1458,14 +1458,18 @@ quiet_cmd_ldr = LD      $@
 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
 
index daeb168b65fe1508721c631bdc74bf0f9a262683..0e87b88e105ea96b302b414428141a3c76f4b31f 100644 (file)
        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
index 7af6b120b6c10db9f2f7c8b4518e8ce9b142fa5a..0f3d89b215215619cfa000644e20fa83538d97b5 100644 (file)
@@ -229,9 +229,11 @@ ALL-y      += $(obj)/boot.bin
 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 @@ OBJCOPYFLAGS_$(SPL_BIN)-nodtb.bin = $(SPL_OBJCFLAGS) -O binary \
 $(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)
index 55e3fa0dcc0657e996fcd96689949a0336cf0d6b..d17b3cb078fc6c7b1c827449dd42257bef386c01 100644 (file)
@@ -989,14 +989,15 @@ Entry: x86-start16: 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.
 
@@ -1006,16 +1007,17 @@ Entry: x86-start16-spl: 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.
 
 
 
@@ -1023,15 +1025,17 @@ Entry: x86-start16-tpl: 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.
 
 
index 7d32ecd321b0935d13f6cc38af376f09bebc7d06..6736b692d5102730b0e772e5ad02b1e7147ecb6b 100644 (file)
@@ -12,14 +12,15 @@ class Entry_x86_start16(Entry_blob):
     """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 @@ class Entry_x86_start16(Entry_blob):
         Entry_blob.__init__(self, section, etype, node)
 
     def GetDefaultFilename(self):
-        return 'u-boot-x86-16bit.bin'
+        return 'u-boot-x86-start16.bin'
index d85909e7ae8e7ac765352971e2cb52837cf08262..c8c70639de01ec93d838b3abac5f47fd782357a8 100644 (file)
@@ -12,19 +12,20 @@ class Entry_x86_start16_spl(Entry_blob):
     """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'
index 46ce169ae0a6b9d4f04fdfccbee1df89c4c14ad9..5261a8adf04972ff8722574ed5ca9128601421bc 100644 (file)
@@ -12,19 +12,21 @@ class Entry_x86_start16_tpl(Entry_blob):
     """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'
index 77445814a7846d113cf992123b0c20496d06a989..04127faa6ffe087bbd710657dda2c1d22c0b58b6 100644 (file)
@@ -120,10 +120,10 @@ class TestFunctional(unittest.TestCase):
 
         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',