浏览代码

x86: Allow excluding reset vector code from u-boot

When running from coreboot we don't want this code.

This version works by ifdef-ing out all of the code that would go
into those sections and all the code that refers to it. The sections are
then empty, and the linker will either leave them empty for the loader
to ignore or remove them entirely.

Signed-off-by: Gabe Black <gabeblack@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
Gabe Black 12 年之前
父节点
当前提交
b16f521a5e
共有 4 个文件被更改,包括 13 次插入5 次删除
  1. 3 3
      Makefile
  2. 4 0
      README
  3. 3 2
      arch/x86/cpu/Makefile
  4. 3 0
      arch/x86/cpu/u-boot.lds

+ 3 - 3
Makefile

@@ -231,8 +231,8 @@ endif
 
 
 OBJS  = $(CPUDIR)/start.o
 OBJS  = $(CPUDIR)/start.o
 ifeq ($(CPU),x86)
 ifeq ($(CPU),x86)
-OBJS += $(CPUDIR)/start16.o
-OBJS += $(CPUDIR)/resetvec.o
+RESET_OBJS-$(CONFIG_X86_NO_RESET_VECTOR) += $(CPUDIR)/start16.o
+RESET_OBJS-$(CONFIG_X86_NO_RESET_VECTOR) += $(CPUDIR)/resetvec.o
 endif
 endif
 ifeq ($(CPU),ppc4xx)
 ifeq ($(CPU),ppc4xx)
 OBJS += $(CPUDIR)/resetvec.o
 OBJS += $(CPUDIR)/resetvec.o
@@ -241,7 +241,7 @@ ifeq ($(CPU),mpc85xx)
 OBJS += $(CPUDIR)/resetvec.o
 OBJS += $(CPUDIR)/resetvec.o
 endif
 endif
 
 
-OBJS := $(addprefix $(obj),$(OBJS))
+OBJS := $(addprefix $(obj),$(OBJS) $(RESET_OBJS-))
 
 
 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
 
 

+ 4 - 0
README

@@ -3664,6 +3664,10 @@ Low Level (hardware related) configuration options:
 		be used if available. These functions may be faster under some
 		be used if available. These functions may be faster under some
 		conditions but may increase the binary size.
 		conditions but may increase the binary size.
 
 
+- CONFIG_X86_NO_RESET_VECTOR
+		If defined, the x86 reset vector code is excluded. You will need
+		to do this when U-Boot is running from Coreboot.
+
 Freescale QE/FMAN Firmware Support:
 Freescale QE/FMAN Firmware Support:
 -----------------------------------
 -----------------------------------
 
 

+ 3 - 2
arch/x86/cpu/Makefile

@@ -28,12 +28,13 @@ include $(TOPDIR)/config.mk
 
 
 LIB	= $(obj)lib$(CPU).o
 LIB	= $(obj)lib$(CPU).o
 
 
-START	= start.o start16.o resetvec.o
+START-y	= start.o
+RESET_OBJS-$(CONFIG_X86_NO_RESET_VECTOR) += resetvec.o start16.o
 COBJS	= interrupts.o cpu.o
 COBJS	= interrupts.o cpu.o
 
 
 SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
 OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
-START	:= $(addprefix $(obj),$(START))
+START	:= $(addprefix $(obj),$(START-y) $(RESET_OBJS-))
 
 
 all:	$(obj).depend $(START) $(LIB)
 all:	$(obj).depend $(START) $(LIB)
 
 

+ 3 - 0
arch/x86/cpu/u-boot.lds

@@ -86,6 +86,8 @@ SECTIONS
 	__bios_start = LOADADDR(.bios);
 	__bios_start = LOADADDR(.bios);
 	__bios_size = SIZEOF(.bios);
 	__bios_size = SIZEOF(.bios);
 
 
+#ifndef CONFIG_X86_NO_RESET_VECTOR
+
 	/*
 	/*
 	 * The following expressions place the 16-bit Real-Mode code and
 	 * The following expressions place the 16-bit Real-Mode code and
 	 * Reset Vector at the end of the Flash ROM
 	 * Reset Vector at the end of the Flash ROM
@@ -95,4 +97,5 @@ SECTIONS
 
 
 	. = RESET_VEC_LOC;
 	. = RESET_VEC_LOC;
 	.resetvec : AT (CONFIG_SYS_TEXT_BASE + (CONFIG_SYS_MONITOR_LEN - RESET_SEG_SIZE + RESET_VEC_LOC)) { KEEP(*(.resetvec)); }
 	.resetvec : AT (CONFIG_SYS_TEXT_BASE + (CONFIG_SYS_MONITOR_LEN - RESET_SEG_SIZE + RESET_VEC_LOC)) { KEEP(*(.resetvec)); }
+#endif
 }
 }