summaryrefslogtreecommitdiff
path: root/payloads
diff options
context:
space:
mode:
authorMartin Roth <martinroth@google.com>2016-03-13 13:00:43 -0600
committerMartin Roth <martinroth@google.com>2016-04-13 17:45:37 +0200
commit888a98b872ed88f70b76103a95ef5d4140cfe2d7 (patch)
tree71d617760eee3d8b02a9694d9166be4768a1a228 /payloads
parent84129b8c6858c6d27e4e42f2b06a3b30e907e668 (diff)
downloadcoreboot-888a98b872ed88f70b76103a95ef5d4140cfe2d7.tar.xz
payloads: add iPXE 'payload' build
We already have the ability to add a pxe rom to cbfs, but it needs to be configured and built separately. This moves the existing Kconfig options for PXE from device/Kconfig and the top level Makefile.inc to payloads, and adds the option to download and build iPXE as part of the coreboot build process. This configures the serial output of iPXE to match coreboot's serial port configuration by editing the .h files. iPXE doesn't give any real build-time method of setting these configuration options. Change-Id: I3d77b2c6845b7f5f644440f6910c3b4533a0d415 Signed-off-by: Martin Roth <martinroth@google.com> Reviewed-on: https://review.coreboot.org/14085 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'payloads')
-rw-r--r--payloads/Makefile.inc3
-rw-r--r--payloads/external/Makefile.inc28
-rw-r--r--payloads/external/iPXE/Kconfig74
-rw-r--r--payloads/external/iPXE/Makefile74
4 files changed, 178 insertions, 1 deletions
diff --git a/payloads/Makefile.inc b/payloads/Makefile.inc
index c969c9e2d3..83609c80c7 100644
--- a/payloads/Makefile.inc
+++ b/payloads/Makefile.inc
@@ -23,7 +23,8 @@ payloads/libpayload \
payloads/external/depthcharge \
payloads/external/SeaBIOS \
payloads/external/U-Boot \
-payloads/external/Memtest86Plus
+payloads/external/Memtest86Plus \
+payloads/external/iPXE
payloads/coreinfo/build/coreinfo.elf coreinfo:
$(MAKE) -C payloads/coreinfo defaultbuild
diff --git a/payloads/external/Makefile.inc b/payloads/external/Makefile.inc
index 5335db9c91..8825129b55 100644
--- a/payloads/external/Makefile.inc
+++ b/payloads/external/Makefile.inc
@@ -112,3 +112,31 @@ payloads/external/Memtest86Plus/memtest86plus/memtest: $(top)/$(DOTCONFIG)
AS="$(AS_x86_32)" \
$(MEMTEST_SERIAL_OPTIONS) \
MFLAGS= MAKEFLAGS=
+
+PXE_ROM_PCI_ID:=$(subst $(comma),,$(CONFIG_PXE_ROM_ID))
+
+ifeq ($(CONFIG_PXE_ROM),y)
+PXE_ROM_FILE:=$(CONFIG_PXE_ROM_FILE)
+endif
+ifeq ($(CONFIG_BUILD_IPXE),y)
+PXE_ROM_FILE:=payloads/external/iPXE/ipxe/ipxe.rom
+endif
+
+ifeq ($(CONFIG_CONSOLE_SERIAL)$(CONFIG_DRIVERS_UART_8250IO),yy)
+IPXE_UART=COM$(call int-add,$(CONFIG_UART_FOR_CONSOLE) 1)
+endif
+
+cbfs-files-$(CONFIG_PXE_ROM)$(CONFIG_BUILD_IPXE) += pci$(CONFIG_PXE_ROM_ID).rom
+pci$(CONFIG_PXE_ROM_ID).rom-file := $(PXE_ROM_FILE)
+pci$(CONFIG_PXE_ROM_ID).rom-type := raw
+
+payloads/external/iPXE/ipxe/ipxe.rom ipxe: $(top)/$(DOTCONFIG)
+ $(MAKE) -C payloads/external/iPXE all \
+ CROSS_COMPILE="$(CROSS_COMPILE_$(ARCH-ramstage-y))" \
+ PXE_ROM_PCI_ID=$(PXE_ROM_PCI_ID) \
+ CONFIG_IPXE_MASTER=$(CONFIG_IPXE_MASTER) \
+ CONFIG_IPXE_STABLE=$(CONFIG_IPXE_STABLE) \
+ CONSOLE_SERIAL=$(CONFIG_CONSOLE_SERIAL)$(CONFIG_DRIVERS_UART_8250IO) \
+ IPXE_UART=$(IPXE_UART) \
+ CONFIG_TTYS0_BAUD=$(CONFIG_TTYS0_BAUD) \
+ MFLAGS= MAKEFLAGS=
diff --git a/payloads/external/iPXE/Kconfig b/payloads/external/iPXE/Kconfig
new file mode 100644
index 0000000000..d425d51ca5
--- /dev/null
+++ b/payloads/external/iPXE/Kconfig
@@ -0,0 +1,74 @@
+##
+## This file is part of the coreboot project.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; version 2 of the License.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+
+choice
+ prompt "Add a PXE ROM"
+ default PXE_ROM
+ depends on ARCH_X86
+ optional
+
+config PXE_ROM
+ bool "Add an existing PXE ROM image"
+ help
+ Select this option if you have a PXE ROM image that you would
+ like to add to your ROM.
+
+config BUILD_IPXE
+ bool "Build and add an iPXE ROM"
+ help
+ Select this option to fetch and build a ROM from the iPXE project.
+
+endchoice
+
+choice
+ prompt "iPXE version"
+ default IPXE_STABLE
+ depends on BUILD_IPXE
+
+config IPXE_STABLE
+ bool "2016.2"
+ help
+ iPXE uses a rolling release with no stable version, for
+ reproducibility, use the last commit of a given month as the
+ 'stable' version.
+ This is iPXE from the end of February, 2016.
+
+config IPXE_MASTER
+ bool "master"
+ help
+ Newest iPXE version.
+
+endchoice
+
+config PXE_ROM_FILE
+ string "PXE ROM filename"
+ depends on PXE_ROM
+ default "pxe.rom"
+ help
+ The path and filename of the file to use as PXE ROM.
+
+config PXE_ROM_ID
+ string "network card PCI IDs"
+ depends on PXE_ROM || BUILD_IPXE
+ default "10ec,8168"
+ help
+ The comma-separated PCI vendor and device ID that would associate
+ your PXE ROM to your network card.
+
+ Example: 10ec,8168
+
+ In the above example 10ec is the PCI vendor ID (in hex, but without
+ the "0x" prefix) and 8168 specifies the PCI device ID of the
+ network card (also in hex, without "0x" prefix).
+
+ Under GNU/Linux you can run `lspci -nn` to list the IDs of your PCI devices.
diff --git a/payloads/external/iPXE/Makefile b/payloads/external/iPXE/Makefile
new file mode 100644
index 0000000000..7e43bf82ed
--- /dev/null
+++ b/payloads/external/iPXE/Makefile
@@ -0,0 +1,74 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2016 Google Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; version 2 of the License.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+
+# 2016.2 - Last commit of February 2016
+# When updating, change the name both here and in payloads/external/iPXE/Kconfig
+STABLE_COMMIT_ID=99b5216b1c71dba22dab734e0945887525493cde
+
+TAG-$(CONFIG_IPXE_MASTER)=origin/master
+TAG-$(CONFIG_IPXE_STABLE)=$(STABLE_COMMIT_ID)
+
+project_name=iPXE
+project_dir=ipxe
+project_git_repo=git://git.ipxe.org/ipxe.git
+
+all: build
+
+$(project_dir):
+ echo " Cloning $(project_name) from Git"
+ git clone $(project_git_repo) $(project_dir)
+
+fetch: $(project_dir)
+ cd $(project_dir); \
+ git show $(TAG-y) >/dev/null 2>&1 ; \
+ if [ $$? -ne 0 ] || [ "$(TAG-y)" = "origin/master" ]; then \
+ echo " Fetching new commits from the $(project_name) repo"; \
+ git fetch; \
+ fi
+
+checkout: fetch
+ echo " Checking out $(project_name) revision $(TAG-y)"
+ cd $(project_dir); \
+ git checkout master; \
+ git branch -D coreboot 2>/dev/null; \
+ git checkout -b coreboot $(TAG-y)
+
+config: checkout
+ifeq ($(CONSOLE_SERIAL),yy)
+ cp "$(project_dir)/src/config/console.h" "$(project_dir)/src/config/console.h.cb"
+ cp "$(project_dir)/src/config/serial.h" "$(project_dir)/src/config/serial.h.cb"
+ sed 's|//#define\s*CONSOLE_SERIAL.*|#define CONSOLE_SERIAL|' "$(project_dir)/src/config/console.h" > "$(project_dir)/src/config/console.h.tmp"
+ mv "$(project_dir)/src/config/console.h.tmp" "$(project_dir)/src/config/console.h"
+ sed 's|#define\s*COMCONSOLE.*|#define COMCONSOLE $(IPXE_UART)|' "$(project_dir)/src/config/serial.h" > "$(project_dir)/src/config/serial.h.tmp"
+ sed 's|#define\s*COMSPEED.*|#define COMSPEED $(CONFIG_TTYS0_BAUD)|' "$(project_dir)/src/config/serial.h.tmp" > "$(project_dir)/src/config/serial.h"
+endif
+
+build: config
+ echo " MAKE $(project_name) $(TAG-y)"
+ $(MAKE) -C $(project_dir)/src bin/$(PXE_ROM_PCI_ID).rom
+ cp $(project_dir)/src/bin/$(PXE_ROM_PCI_ID).rom $(project_dir)/ipxe.rom
+ifeq ($(CONSOLE_SERIAL),yy)
+ cp "$(project_dir)/src/config/console.h.cb" "$(project_dir)/src/config/console.h"
+ cp "$(project_dir)/src/config/serial.h.cb" "$(project_dir)/src/config/serial.h"
+endif
+
+clean:
+ test -d $(project_dir) && $(MAKE) -C $(project_dir)/src veryclean || exit 0
+ rm -f $(project_dir)/ipxe.rom
+
+distclean:
+ rm -rf $(project_dir)
+
+.PHONY: all fetch config build clean distclean