Patchwork Add easy SeaBIOS as payload option

login
register
about
Submitter Stefan Reinauer
Date 2010-12-26 21:11:24
Message ID <4D17AF7C.9010100@coresystems.de>
Download mbox | patch
Permalink /patch/2454/
State Accepted
Headers show

Comments

Stefan Reinauer - 2010-12-26 21:11:24
See patch
Today, if the user selects no payload at all, an image is created that 
will leave the system bricked when flashed. This patch adds an easy way of
selecting SeaBIOS as a payload and makes it the default (instead of "no
payload", which still exists as an option)

Signed-off-by: Stefan Reinauer <stepan@coreboot.org>
Idwer Vollering - 2010-12-27 00:06:37
2010/12/26 Stefan Reinauer <stefan.reinauer@coresystems.de>

> See patch
>

Nice. Can you extend it so the serial port number, "#define DEBUG_PORT
PORT_SERIAL1", in $seabios_dir/src/output.c is shared with
CONFIG_CONSOLE_SERIAL_COM1 in coreboot's .config, and so on for COM2..4 ?
Dito for "#define CONFIG_DEBUG_LEVEL 1" in $seabios_dir/src/config.h and
"CONFIG_DEFAULT_CONSOLE_LOGLEVEL=8" and/or CONFIG_MAXIMUM_CONSOLE_LOGLEVEL
in .config.

Using releases ( http://seabios.org/Releases ) instead of code from seabios'
git repo sounds like a better idea to me.

Idwer


>
>
> --
> coreboot mailing list: coreboot@coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot
>
Patrick Georgi - 2010-12-27 07:31:21
Am 27.12.2010 01:06, schrieb Idwer Vollering:
> Nice. Can you extend it so the serial port number, "#define DEBUG_PORT
> PORT_SERIAL1", in $seabios_dir/src/output.c is shared with
> CONFIG_CONSOLE_SERIAL_COM1 in coreboot's .config, and so on for COM2..4 ?
> Dito for "#define CONFIG_DEBUG_LEVEL 1" in $seabios_dir/src/config.h and
> "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=8" and/or
> CONFIG_MAXIMUM_CONSOLE_LOGLEVEL in .config.
Been thinking of extending that scheme so that we mirror seabios'
config.h in Kconfig and generate config.h from coreboot's configuration.
Something like CONFIG_SEABIOS_* (in coreboot's config) to CONFIG_* (for
seabios), and some of the values can default to match coreboot's values.


Patrick
Kevin O'Connor - 2010-12-28 00:00:23
On Sun, Dec 26, 2010 at 10:11:24PM +0100, Stefan Reinauer wrote:
[...]
> +patch: checkout
> +	test -r seabios/.patched || \
> +	perl -pi -e "s,#define CONFIG_COREBOOT 0,#define CONFIG_COREBOOT 1,;" \
> +		 -e "s,#define CONFIG_DEBUG_SERIAL 0,#define CONFIG_DEBUG_SERIAL 1,;" \
> +		 -e "s,#define CONFIG_VGAHOOKS 0,#define CONFIG_VGAHOOKS 1,;" \
> +		 -e "s,#define CONFIG_AHCI 0,#define CONFIG_AHCI 1," \
> +		 seabios/src/config.h

CONFIG_AHCI is a bit experimental.  Has there been success with it on
real hardware?

> +checkout:
> +	test -d seabios && ( cd seabios; git pull ) || \
> +	git clone git://git.linuxtogo.org/home/kevin/seabios.git seabios

I'd hate to have an accidental commit brick someones machine.  This
should probably pull out a tagged version.  Another option would be to
commit a compressed bios.bin.elf file to svn (the gzip'd elf file is
only 56K).

-Kevin
Kevin O'Connor - 2010-12-28 00:01:48
On Mon, Dec 27, 2010 at 08:31:21AM +0100, Patrick Georgi wrote:
> Am 27.12.2010 01:06, schrieb Idwer Vollering:
> > Nice. Can you extend it so the serial port number, "#define DEBUG_PORT
> > PORT_SERIAL1", in $seabios_dir/src/output.c is shared with
> > CONFIG_CONSOLE_SERIAL_COM1 in coreboot's .config, and so on for COM2..4 ?
> > Dito for "#define CONFIG_DEBUG_LEVEL 1" in $seabios_dir/src/config.h and
> > "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=8" and/or
> > CONFIG_MAXIMUM_CONSOLE_LOGLEVEL in .config.
> Been thinking of extending that scheme so that we mirror seabios'
> config.h in Kconfig and generate config.h from coreboot's configuration.
> Something like CONFIG_SEABIOS_* (in coreboot's config) to CONFIG_* (for
> seabios), and some of the values can default to match coreboot's values.

It would be nice to add Kconfig support to SeaBIOS.  It shouldn't be
too hard, but I haven't had time to see what it would take.

-Kevin
Stefan Reinauer - 2010-12-30 16:52:23
* Kevin O'Connor <kevin@koconnor.net> [101228 01:00]:
> CONFIG_AHCI is a bit experimental.  Has there been success with it on
> real hardware?
 
I have not tried it. It sounded like a great idea though. 

> > +checkout:
> > +	test -d seabios && ( cd seabios; git pull ) || \
> > +	git clone git://git.linuxtogo.org/home/kevin/seabios.git seabios
> 
> I'd hate to have an accidental commit brick someones machine.  This
> should probably pull out a tagged version.  Another option would be to
> commit a compressed bios.bin.elf file to svn (the gzip'd elf file is
> only 56K).

I agree. A tagged version seems a better default. Comitting binaries
sounds not so nice, if there's a chance to build from sources.

Stefan
Stefan Reinauer - 2010-12-30 17:41:50
* Idwer Vollering <vidwer@gmail.com> [101227 01:06]:
> Nice. Can you extend it so the serial port number, "#define DEBUG_PORT
> PORT_SERIAL1", in $seabios_dir/src/output.c is shared with
> CONFIG_CONSOLE_SERIAL_COM1 in coreboot's .config, and so on for COM2..4 ?

I think to keep patching files in SeaBIOS to a minimum that define
should be moved to SeaBIOS' config.h first.

> Dito for "#define CONFIG_DEBUG_LEVEL 1" in $seabios_dir/src/config.h and
> "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=8" and/or CONFIG_MAXIMUM_CONSOLE_LOGLEVEL in
> .config.

Do those log levels map 1:1 between coreboot and seabios?

> Using releases ( http://seabios.org/Releases ) instead of code from seabios'
> git repo sounds like a better idea to me.

Done.

Stefan

Patch

Index: src/Kconfig
===================================================================
--- src/Kconfig	(revision 6205)
+++ src/Kconfig	(working copy)
@@ -333,7 +333,8 @@ 
 
 choice
 	prompt "Add a payload"
-	default PAYLOAD_NONE
+	default PAYLOAD_NONE if !ARCH_X86
+	default PAYLOAD_SEABIOS if ARCH_X86
 
 config PAYLOAD_NONE
 	bool "None"
@@ -355,6 +356,16 @@ 
 	  You will be able to specify the location and file name of the
 	  payload image later.
 
+config PAYLOAD_SEABIOS
+	bool "SeaBIOS"
+	depends on ARCH_X86
+	help
+	  Select this option if you want to build a coreboot image
+	  with a SeaBIOS payload. If you don't know what this is
+	  about, just leave it enabled.
+
+	  See http://coreboot.org/Payloads for more information.
+
 endchoice
 
 config PAYLOAD_FILE
@@ -364,11 +375,15 @@ 
 	help
 	  The path and filename of the ELF executable file to use as payload.
 
+config PAYLOAD_FILE
+	depends on PAYLOAD_SEABIOS
+	default "payloads/external/SeaBIOS/seabios/out/bios.bin.elf"
+
 # TODO: Defined if no payload? Breaks build?
 config COMPRESSED_PAYLOAD_LZMA
 	bool "Use LZMA compression for payloads"
 	default y
-	depends on PAYLOAD_ELF
+	depends on PAYLOAD_ELF || PAYLOAD_SEABIOS
 	help
 	  In order to reduce the size payloads take up in the ROM chip
 	  coreboot can compress them using the LZMA algorithm.
Index: src/arch/x86/Makefile.inc
===================================================================
--- src/arch/x86/Makefile.inc	(revision 6205)
+++ src/arch/x86/Makefile.inc	(working copy)
@@ -34,9 +34,12 @@ 
 #######################################################################
 # Build the final rom image
 COREBOOT_ROM_DEPENDENCIES:=
-ifneq ($(CONFIG_PAYLOAD_NONE),y)
+ifeq ($(CONFIG_PAYLOAD_ELF),y)
 COREBOOT_ROM_DEPENDENCIES+=$(CONFIG_PAYLOAD_FILE)
 endif
+ifeq ($(CONFIG_PAYLOAD_SEABIOS),y)
+COREBOOT_ROM_DEPENDENCIES+=seabios
+endif
 ifeq ($(CONFIG_VGA_BIOS),y)
 COREBOOT_ROM_DEPENDENCIES+=$(CONFIG_VGA_BIOS_FILE)
 endif
@@ -80,10 +83,15 @@ 
 	$(CBFSTOOL) $@.tmp add-stage $(obj)/coreboot_ram $(CONFIG_CBFS_PREFIX)/coreboot_ram $(CBFS_COMPRESS_FLAG)
 ifeq ($(CONFIG_PAYLOAD_NONE),y)
 	@printf "    PAYLOAD    \e[1;31mnone (as specified by user)\e[0m\n"
-else
+endif
+ifeq ($(CONFIG_PAYLOAD_ELF),y)
 	@printf "    PAYLOAD    $(CONFIG_PAYLOAD_FILE) (compression: $(CBFS_PAYLOAD_COMPRESS_NAME))\n"
 	$(CBFSTOOL) $@.tmp add-payload $(CONFIG_PAYLOAD_FILE) $(CONFIG_CBFS_PREFIX)/payload $(CBFS_PAYLOAD_COMPRESS_FLAG)
 endif
+ifeq ($(CONFIG_PAYLOAD_SEABIOS),y)
+	@printf "    PAYLOAD    SeaBIOS (internal, compression: $(CBFS_PAYLOAD_COMPRESS_NAME))\n"
+	$(CBFSTOOL) $@.tmp add-payload $(CONFIG_PAYLOAD_FILE) $(CONFIG_CBFS_PREFIX)/payload $(CBFS_PAYLOAD_COMPRESS_FLAG)
+endif
 ifeq ($(CONFIG_VGA_BIOS),y)
 	@printf "    VGABIOS    $(CONFIG_VGA_BIOS_FILE) $(CONFIG_VGA_BIOS_ID)\n"
 	$(CBFSTOOL) $@.tmp add $(CONFIG_VGA_BIOS_FILE) "pci$(CONFIG_VGA_BIOS_ID).rom" optionrom
@@ -272,3 +280,7 @@ 
 else
 include $(src)/arch/x86/Makefile.bigbootblock.inc
 endif
+
+seabios:
+	$(MAKE) -C payloads/external/SeaBIOS CC="$(CC)" LD="$(LD)"
+
Index: payloads/external/SeaBIOS/Makefile
===================================================================
--- payloads/external/SeaBIOS/Makefile	(revision 0)
+++ payloads/external/SeaBIOS/Makefile	(revision 0)
@@ -0,0 +1,25 @@ 
+all: seabios
+
+seabios: patch
+	cd seabios; $(MAKE) CC="$(CC)" LD="$(LD)"
+
+patch: checkout
+	test -r seabios/.patched || \
+	perl -pi -e "s,#define CONFIG_COREBOOT 0,#define CONFIG_COREBOOT 1,;" \
+		 -e "s,#define CONFIG_DEBUG_SERIAL 0,#define CONFIG_DEBUG_SERIAL 1,;" \
+		 -e "s,#define CONFIG_VGAHOOKS 0,#define CONFIG_VGAHOOKS 1,;" \
+		 -e "s,#define CONFIG_AHCI 0,#define CONFIG_AHCI 1," \
+		 seabios/src/config.h
+	touch seabios/.patched
+
+checkout:
+	test -d seabios && ( cd seabios; git pull ) || \
+	git clone git://git.linuxtogo.org/home/kevin/seabios.git seabios
+
+clean:
+	test -d seabios && (cd seabios; $(MAKE) CC="$(CC)" LD="$(LD)" clean) || exit 0
+
+distclean:
+	rm -rf seabios
+
+.PHONY: seabios
Index: util/abuild/abuild
===================================================================
--- util/abuild/abuild	(revision 6205)
+++ util/abuild/abuild	(working copy)
@@ -175,6 +175,7 @@ 
 		echo "CONFIG_CBFS_PREFIX=\"$cbfs_prefix\"" >> ${build_dir}/config.build
 		if [ "$PAYLOAD" != "/dev/null" ]; then
 			echo "# CONFIG_PAYLOAD_NONE is not set" >> ${build_dir}/config.build
+			echo "# CONFIG_PAYLOAD_SEABIOS is not set" >> ${build_dir}/config.build
 			echo "CONFIG_PAYLOAD_ELF=y" >> ${build_dir}/config.build
 			echo "CONFIG_PAYLOAD_FILE=\"$PAYLOAD\"" >> ${build_dir}/config.build
 		fi
Index: Makefile
===================================================================
--- Makefile	(revision 6205)
+++ Makefile	(working copy)
@@ -363,6 +363,7 @@ 
 	rm -f $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.* $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.*
 	rm -f $(obj)/cpu/x86/smm/smm_bin.c $(obj)/cpu/x86/smm/smm.* $(obj)/cpu/x86/smm/smm
 	rmdir -p $(alldirs) 2>/dev/null >/dev/null || true
+	make -C payloads/external/SeaBIOS clean
 
 clean: clean-for-update
 	rm -f $(obj)/coreboot* .ccwrap