diff --git a/Rules.make b/Rules.make index 79744cb4b9..3398e2af9d 100644 --- a/Rules.make +++ b/Rules.make @@ -78,3 +78,13 @@ $(obj)/southbridge/%.o: $(src)/southbridge/%.c $(obj)/statictree.h $(Q)printf " CC $(subst $(shell pwd)/,,$(@))\n" $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ +# +# RAM initialization code can not be linked at a specific address, +# hence it has to be executed in place position independently. +# + +$(obj)/%_xip.o: $(src)/%.c + $(Q)mkdir -p $(dir $@) + $(Q)printf " CC $(subst $(shell pwd)/,,$(@)) (XIP)\n" + $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ + diff --git a/mainboard/adl/msm800sev/Makefile b/mainboard/adl/msm800sev/Makefile index b98d6d7374..243ae141d9 100644 --- a/mainboard/adl/msm800sev/Makefile +++ b/mainboard/adl/msm800sev/Makefile @@ -32,24 +32,11 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \ $(obj)/southbridge/amd/cs5536/smbus_initram.o \ $(obj)/arch/x86/geodelx/geodelx.o -# Next Quest: Make a single rule out of those: -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -fPIE -c $< -o $@ -$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/southbridge/amd/cs5536/smbus_initram.o: $(src)/southbridge/amd/cs5536/smbus_initram.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/arch/x86/geodelx/geodelx.o: $(src)/arch/x86/geodelx/geodelx.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ - -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram diff --git a/mainboard/adl/msm800sev/initram.c b/mainboard/adl/msm800sev/initram.c index ade50cfec4..f1764b6ac1 100644 --- a/mainboard/adl/msm800sev/initram.c +++ b/mainboard/adl/msm800sev/initram.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT #include #include #include diff --git a/mainboard/amd/norwich/Makefile b/mainboard/amd/norwich/Makefile index d0edc300f6..d48d616848 100644 --- a/mainboard/amd/norwich/Makefile +++ b/mainboard/amd/norwich/Makefile @@ -26,30 +26,17 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \ $(obj)/southbridge/amd/cs5536/smbus_initram.o \ $(obj)/arch/x86/geodelx/geodelx.o -# Next Quest: Make a single rule out of those: -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -fPIE -c $< -o $@ -$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/southbridge/amd/cs5536/smbus_initram.o: $(src)/southbridge/amd/cs5536/smbus_initram.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/arch/x86/geodelx/geodelx.o: $(src)/arch/x86/geodelx/geodelx.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ - STAGE2_MAINBOARD_OBJ = $(obj)/linuxbios.vpd: $(Q)printf " BUILD DUMMY VPD\n" $(Q)dd if=/dev/zero of=$(obj)/linuxbios.vpd bs=256 count=1 $(SILENT) -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram diff --git a/mainboard/amd/norwich/initram.c b/mainboard/amd/norwich/initram.c index a0c00b064e..9832ccad26 100644 --- a/mainboard/amd/norwich/initram.c +++ b/mainboard/amd/norwich/initram.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT + #include #include #include diff --git a/mainboard/artecgroup/dbe61/Makefile b/mainboard/artecgroup/dbe61/Makefile index 6b2fdd771f..395c06f8a8 100644 --- a/mainboard/artecgroup/dbe61/Makefile +++ b/mainboard/artecgroup/dbe61/Makefile @@ -30,24 +30,11 @@ $(obj)/linuxbios.vpd: INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \ $(obj)/arch/x86/geodelx/geodelx.o -# Next Quest: Make a single rule out of those: -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -fPIE -c $< -o $@ -$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/southbridge/amd/cs5536/smbus_initram.o: $(src)/southbridge/amd/cs5536/smbus_initram.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/arch/x86/geodelx/geodelx.o: $(src)/arch/x86/geodelx/geodelx.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ - -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram diff --git a/mainboard/artecgroup/dbe61/initram.c b/mainboard/artecgroup/dbe61/initram.c index 75c82c035a..2d9551cab6 100644 --- a/mainboard/artecgroup/dbe61/initram.c +++ b/mainboard/artecgroup/dbe61/initram.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT #include #include #include diff --git a/mainboard/emulation/qemu-x86/Makefile b/mainboard/emulation/qemu-x86/Makefile index 51b061f98a..d99ccc6e4c 100644 --- a/mainboard/emulation/qemu-x86/Makefile +++ b/mainboard/emulation/qemu-x86/Makefile @@ -42,14 +42,11 @@ $(obj)/linuxbios.vpd: INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -fPIE -c $< -o $@ - -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram diff --git a/mainboard/emulation/qemu-x86/initram.c b/mainboard/emulation/qemu-x86/initram.c index de6059b00a..078a2405e7 100644 --- a/mainboard/emulation/qemu-x86/initram.c +++ b/mainboard/emulation/qemu-x86/initram.c @@ -17,6 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT #include int main(void)