mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
Convert stage2 handling from binary blob to multi-segment LAR which is
created by parsing the ELF file linuxbios.stage2.o. That way, we avoid manual specification of the entry point for stage2 code. A few LAR functions are now unused and can be removed in a following cleanup session. Another suggested cleanup would be factoring out a load_all_segments function, resulting in less code duplication. Ron says: > This is great. We killed the blob. In the movie, it was impossible. > FYI, the new approach works on real hardware, I am getting nice printk > messages from stage1! Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Ronald G. Minnich <rminnich@gmail.com> git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@524 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
parent
7eb899b0bb
commit
09b3820e93
2 changed files with 10 additions and 7 deletions
|
@ -36,7 +36,7 @@ SILENT := >/dev/null 2>&1
|
||||||
|
|
||||||
ROM_SIZE := $(shell expr $(CONFIG_LINUXBIOS_ROMSIZE_KB) \* 1024)
|
ROM_SIZE := $(shell expr $(CONFIG_LINUXBIOS_ROMSIZE_KB) \* 1024)
|
||||||
|
|
||||||
LARFILES := nocompress:normal/initram.o normal/stage2 nocompress:normal/option_table
|
LARFILES := nocompress:normal/initram.o normal/stage2.o nocompress:normal/option_table
|
||||||
ifneq ($(CONFIG_PAYLOAD_NONE),y)
|
ifneq ($(CONFIG_PAYLOAD_NONE),y)
|
||||||
LARFILES += normal/payload
|
LARFILES += normal/payload
|
||||||
endif
|
endif
|
||||||
|
@ -57,12 +57,12 @@ ifeq ($(CONFIG_DEFAULT_COMPRESSION_NRV2B),y)
|
||||||
COMPRESSFLAG := -C nrv2b
|
COMPRESSFLAG := -C nrv2b
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(obj)/linuxbios.rom $(obj)/linuxbios.map: $(obj)/linuxbios.bootblock $(obj)/util/lar/lar lzma nrv2b $(obj)/linuxbios.initram.o $(obj)/linuxbios.stage2 $(obj)/option_table
|
$(obj)/linuxbios.rom $(obj)/linuxbios.map: $(obj)/linuxbios.bootblock $(obj)/util/lar/lar lzma nrv2b $(obj)/linuxbios.initram.o $(obj)/linuxbios.stage2.o $(obj)/option_table
|
||||||
$(Q)rm -rf $(obj)/lar.tmp
|
$(Q)rm -rf $(obj)/lar.tmp
|
||||||
$(Q)mkdir $(obj)/lar.tmp
|
$(Q)mkdir $(obj)/lar.tmp
|
||||||
$(Q)mkdir $(obj)/lar.tmp/normal
|
$(Q)mkdir $(obj)/lar.tmp/normal
|
||||||
$(Q)cp $(obj)/linuxbios.initram.o $(obj)/lar.tmp/normal/initram.o
|
$(Q)cp $(obj)/linuxbios.initram.o $(obj)/lar.tmp/normal/initram.o
|
||||||
$(Q)cp $(obj)/linuxbios.stage2 $(obj)/lar.tmp/normal/stage2
|
$(Q)cp $(obj)/linuxbios.stage2.o $(obj)/lar.tmp/normal/stage2.o
|
||||||
$(Q)cp $(obj)/option_table $(obj)/lar.tmp/normal/option_table
|
$(Q)cp $(obj)/option_table $(obj)/lar.tmp/normal/option_table
|
||||||
ifeq ($(CONFIG_PAYLOAD_NONE),y)
|
ifeq ($(CONFIG_PAYLOAD_NONE),y)
|
||||||
$(Q)printf " PAYLOAD none (as specified by user)\n"
|
$(Q)printf " PAYLOAD none (as specified by user)\n"
|
||||||
|
@ -198,13 +198,11 @@ endif
|
||||||
STAGE2_OBJ += $(obj)/util/x86emu/libx86emu.a $(LIBGCC_FILE_NAME)
|
STAGE2_OBJ += $(obj)/util/x86emu/libx86emu.a $(LIBGCC_FILE_NAME)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(obj)/linuxbios.stage2 $(obj)/linuxbios.stage2.map: $(obj)/stage0.init $(STAGE2_OBJ)
|
$(obj)/linuxbios.stage2.o $(obj)/linuxbios.stage2.map: $(obj)/stage0.init $(STAGE2_OBJ)
|
||||||
$(Q)# leave a .o with full symbols in it for debugging.
|
$(Q)# leave a .o with full symbols in it for debugging.
|
||||||
$(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n"
|
$(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n"
|
||||||
$(Q)$(LD) -R $(obj)/stage0.o -Ttext 0x1000 --entry=stage2 \
|
$(Q)$(LD) -R $(obj)/stage0.o -Ttext 0x1000 --entry=stage2 \
|
||||||
-o $(obj)/linuxbios.stage2.o $(STAGE2_OBJ)
|
-o $(obj)/linuxbios.stage2.o $(STAGE2_OBJ)
|
||||||
$(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n"
|
|
||||||
$(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.stage2.o $(obj)/linuxbios.stage2
|
|
||||||
$(Q)$(NM) $(obj)/linuxbios.stage2.o | sort -u > $(obj)/linuxbios.stage2.map
|
$(Q)$(NM) $(obj)/linuxbios.stage2.o | sort -u > $(obj)/linuxbios.stage2.map
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -161,7 +161,12 @@ void __attribute__((stdcall)) stage1_main(u32 bist)
|
||||||
/* Turn off Cache-As-Ram */
|
/* Turn off Cache-As-Ram */
|
||||||
disable_car();
|
disable_car();
|
||||||
|
|
||||||
ret = run_file(&archive, "normal/stage2", (void *)0x1000);
|
entry = load_file(&archive, "normal/stage2.o/segment0");
|
||||||
|
if (entry == (void *)-1)
|
||||||
|
die("FATAL: Failed loading stage2 segment0.");
|
||||||
|
if (load_file(&archive, "normal/stage2.o/segment1") == (void *)-1)
|
||||||
|
die("FATAL: Failed loading stage2 segment1.");
|
||||||
|
ret = run_address(entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
die("FATAL: Failed in stage2 code.");
|
die("FATAL: Failed in stage2 code.");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue