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>
This commit is contained in:
Simon Glass 2019-08-24 07:22:49 -06:00
parent 2250ee6ee6
commit 5e239183f6
8 changed files with 88 additions and 57 deletions

View File

@ -1458,14 +1458,18 @@ quiet_cmd_ldr = LD $@
cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \ cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
$(filter-out FORCE,$^) -o $@ $(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_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
$(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin) \ $(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin) \
$(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE $(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
$(call if_changed,binman) $(call if_changed,binman)
OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec OBJCOPYFLAGS_u-boot-x86-start16.bin := -O binary -j .start16
u-boot-x86-16bit.bin: u-boot FORCE 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) $(call if_changed,objcopy)
endif endif

View File

@ -120,14 +120,23 @@
x86-start16-tpl { x86-start16-tpl {
offset = <CONFIG_SYS_X86_START16>; offset = <CONFIG_SYS_X86_START16>;
}; };
x86-reset16-tpl {
offset = <CONFIG_RESET_VEC_LOC>;
};
#elif defined(CONFIG_SPL) #elif defined(CONFIG_SPL)
x86-start16-spl { x86-start16-spl {
offset = <CONFIG_SYS_X86_START16>; offset = <CONFIG_SYS_X86_START16>;
}; };
x86-reset16-spl {
offset = <CONFIG_RESET_VEC_LOC>;
};
#else #else
x86-start16 { x86-start16 {
offset = <CONFIG_SYS_X86_START16>; offset = <CONFIG_SYS_X86_START16>;
}; };
x86-reset16 {
offset = <CONFIG_RESET_VEC_LOC>;
};
#endif #endif
}; };
#endif #endif

View File

@ -229,9 +229,11 @@ ALL-y += $(obj)/boot.bin
endif endif
ifdef CONFIG_TPL_BUILD 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 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 endif
ALL-$(CONFIG_ARCH_ZYNQ) += $(obj)/boot.bin 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 $(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
OBJCOPYFLAGS_u-boot-x86-16bit-spl.bin := -O binary -j .start16 -j .resetvec OBJCOPYFLAGS_u-boot-x86-start16-spl.bin := -O binary -j .start16
$(obj)/u-boot-x86-16bit-spl.bin: $(obj)/u-boot-spl FORCE $(obj)/u-boot-x86-start16-spl.bin: $(obj)/u-boot-spl FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
OBJCOPYFLAGS_u-boot-x86-16bit-tpl.bin := -O binary -j .start16 -j .resetvec OBJCOPYFLAGS_u-boot-x86-start16-tpl.bin := -O binary -j .start16
$(obj)/u-boot-x86-16bit-tpl.bin: $(obj)/u-boot-tpl FORCE $(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) $(call if_changed,objcopy)
LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL) LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL)

View File

@ -989,14 +989,15 @@ Entry: x86-start16: x86 16-bit start-up code for U-Boot
------------------------------------------------------- -------------------------------------------------------
Properties / Entry arguments: Properties / Entry arguments:
- filename: Filename of u-boot-x86-16bit.bin (default - filename: Filename of u-boot-x86-start16.bin (default
'u-boot-x86-16bit.bin') 'u-boot-x86-start16.bin')
x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code 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 must be placed in the top 64KB of the ROM. The reset code jumps to it. This
typically placed at offset CONFIG_SYS_X86_START16. The code is responsible entry holds that code. It is typically placed at offset
for changing to 32-bit mode and jumping to U-Boot's entry point, which CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
requires 32-bit mode (for 32-bit U-Boot). 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. 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: Properties / Entry arguments:
- filename: Filename of spl/u-boot-x86-16bit-spl.bin (default - filename: Filename of spl/u-boot-x86-start16-spl.bin (default
'spl/u-boot-x86-16bit-spl.bin') 'spl/u-boot-x86-start16-spl.bin')
x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code 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 must be placed in the top 64KB of the ROM. The reset code jumps to it. This
typically placed at offset CONFIG_SYS_X86_START16. The code is responsible entry holds that code. It is typically placed at offset
for changing to 32-bit mode and starting SPL, which in turn changes to CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
64-bit mode and jumps to U-Boot (for 64-bit U-Boot). 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: Properties / Entry arguments:
- filename: Filename of tpl/u-boot-x86-16bit-tpl.bin (default - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default
'tpl/u-boot-x86-16bit-tpl.bin') 'tpl/u-boot-x86-start16-tpl.bin')
x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code 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 must be placed in the top 64KB of the ROM. The reset code jumps to it. This
typically placed at offset CONFIG_SYS_X86_START16. The code is responsible entry holds that code. It is typically placed at offset
for changing to 32-bit mode and starting TPL, which in turn jumps to SPL. 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. may be used instead.

View File

@ -12,14 +12,15 @@ class Entry_x86_start16(Entry_blob):
"""x86 16-bit start-up code for U-Boot """x86 16-bit start-up code for U-Boot
Properties / Entry arguments: Properties / Entry arguments:
- filename: Filename of u-boot-x86-16bit.bin (default - filename: Filename of u-boot-x86-start16.bin (default
'u-boot-x86-16bit.bin') 'u-boot-x86-start16.bin')
x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code 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 must be placed in the top 64KB of the ROM. The reset code jumps to it. This
typically placed at offset CONFIG_SYS_X86_START16. The code is responsible entry holds that code. It is typically placed at offset
for changing to 32-bit mode and jumping to U-Boot's entry point, which CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
requires 32-bit mode (for 32-bit U-Boot). 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. 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) Entry_blob.__init__(self, section, etype, node)
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'u-boot-x86-16bit.bin' return 'u-boot-x86-start16.bin'

View File

@ -12,19 +12,20 @@ class Entry_x86_start16_spl(Entry_blob):
"""x86 16-bit start-up code for SPL """x86 16-bit start-up code for SPL
Properties / Entry arguments: Properties / Entry arguments:
- filename: Filename of spl/u-boot-x86-16bit-spl.bin (default - filename: Filename of spl/u-boot-x86-start16-spl.bin (default
'spl/u-boot-x86-16bit-spl.bin') 'spl/u-boot-x86-start16-spl.bin')
x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code 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 must be placed in the top 64KB of the ROM. The reset code jumps to it. This
typically placed at offset CONFIG_SYS_X86_START16. The code is responsible entry holds that code. It is typically placed at offset
for changing to 32-bit mode and starting SPL, which in turn changes to CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
64-bit mode and jumps to U-Boot (for 64-bit U-Boot). 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): def __init__(self, section, etype, node):
Entry_blob.__init__(self, section, etype, node) Entry_blob.__init__(self, section, etype, node)
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'spl/u-boot-x86-16bit-spl.bin' return 'spl/u-boot-x86-start16-spl.bin'

View File

@ -12,19 +12,21 @@ class Entry_x86_start16_tpl(Entry_blob):
"""x86 16-bit start-up code for TPL """x86 16-bit start-up code for TPL
Properties / Entry arguments: Properties / Entry arguments:
- filename: Filename of tpl/u-boot-x86-16bit-tpl.bin (default - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default
'tpl/u-boot-x86-16bit-tpl.bin') 'tpl/u-boot-x86-start16-tpl.bin')
x86 CPUs start up in 16-bit mode, even if they are 64-bit CPUs. This code 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 must be placed in the top 64KB of the ROM. The reset code jumps to it. This
typically placed at offset CONFIG_SYS_X86_START16. The code is responsible entry holds that code. It is typically placed at offset
for changing to 32-bit mode and starting TPL, which in turn jumps to SPL. 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. may be used instead.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
Entry_blob.__init__(self, section, etype, node) Entry_blob.__init__(self, section, etype, node)
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'tpl/u-boot-x86-16bit-tpl.bin' return 'tpl/u-boot-x86-start16-tpl.bin'

View File

@ -120,10 +120,10 @@ class TestFunctional(unittest.TestCase):
TestFunctional._MakeInputFile('u-boot-br.bin', PPC_MPC85XX_BR_DATA) TestFunctional._MakeInputFile('u-boot-br.bin', PPC_MPC85XX_BR_DATA)
TestFunctional._MakeInputFile('u-boot-x86-16bit.bin', X86_START16_DATA) TestFunctional._MakeInputFile('u-boot-x86-start16.bin', X86_START16_DATA)
TestFunctional._MakeInputFile('spl/u-boot-x86-16bit-spl.bin', TestFunctional._MakeInputFile('spl/u-boot-x86-start16-spl.bin',
X86_START16_SPL_DATA) 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) X86_START16_TPL_DATA)
TestFunctional._MakeInputFile('u-boot-x86-reset16.bin', TestFunctional._MakeInputFile('u-boot-x86-reset16.bin',