Martin Roth (martinroth(a)google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15057
-gerrit
commit fbedd0fbac20e764be8f24c9f048447161201ae2
Author: Martin Roth <martinroth(a)google.com>
Date: Thu Jun 2 16:42:29 2016 -0600
payloads/external/tianocore: Update to build uefi corebootpayload
Update the existing tianocore payload (which didn't do any more than
adding an elf payload with a specific name) to fetch and build the
UEFI corebootPayloadPackage
Issues to debug:
- Currently using the host compiler instead of the coreboot cross-
compiler. If the cross-compiler is used, the resulting binary does
not run.
- The IA32 X64 package isn't working. The stable version picked here
builds and starts to boot but the shell fails to load. The
origin/master version in the Tianocore repo doesn't build.
- The debug build of the "stable version" fails at an assert in the
RTC code.
Change-Id: I9719ca5c39fccb856dfe096d449760a937d51fd1
Signed-off-by: Martin Roth <martinroth(a)google.com>
---
.gitignore | 1 +
payloads/Makefile.inc | 3 +-
payloads/external/Makefile.inc | 12 +++
payloads/external/tianocore/Kconfig | 49 +++++++++++-
payloads/external/tianocore/Kconfig.name | 4 +-
payloads/external/tianocore/Makefile | 128 +++++++++++++++++++++++++++++++
6 files changed, 192 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index 2061f00..31c0e26 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,7 @@ payloads/external/depthcharge/depthcharge/
payloads/external/FILO/filo/
payloads/external/GRUB2/grub2/
payloads/external/SeaBIOS/seabios/
+payloads/external/tianocore/tianocore/
payloads/external/U-Boot/u-boot/
payloads/external/Memtest86Plus/memtest86plus/
payloads/external/iPXE/ipxe/
diff --git a/payloads/Makefile.inc b/payloads/Makefile.inc
index 2d7edb6..63a2a45 100644
--- a/payloads/Makefile.inc
+++ b/payloads/Makefile.inc
@@ -30,7 +30,8 @@ payloads/external/SeaBIOS \
payloads/external/U-Boot \
payloads/external/Memtest86Plus \
payloads/external/iPXE \
-payloads/external/tint
+payloads/external/tint \
+payloads/external/tianocore
payloads/coreinfo/build/coreinfo.elf coreinfo:
$(MAKE) -C payloads/coreinfo defaultbuild
diff --git a/payloads/external/Makefile.inc b/payloads/external/Makefile.inc
index 02cb51d..c74798f 100644
--- a/payloads/external/Makefile.inc
+++ b/payloads/external/Makefile.inc
@@ -97,6 +97,18 @@ payloads/external/depthcharge/depthcharge/build/depthcharge.elf depthcharge: $(t
BOARD=$(call ws_to_under,$(call strip_quotes,$(call tolower,$(CONFIG_MAINBOARD_PART_NUMBER)))) \
MFLAGS= MAKEFLAGS=
+payloads/external/tianocore/tianocore/Build/UEFIPAYLOAD.fd tianocore: $(top)/$(DOTCONFIG)
+ +$(MAKE) -C payloads/external/tianocore all \
+ HOSTCC="$(HOSTCC)" \
+ CC="$(HOSTCC)" \
+ CONFIG_TIANOCORE_MASTER=$(CONFIG_TIANOCORE_MASTER) \
+ CONFIG_TIANOCORE_STABLE=$(CONFIG_TIANOCORE_STABLE) \
+ CONFIG_TIANOCORE_REVISION=$(CONFIG_TIANOCORE_REVISION) \
+ CONFIG_TIANOCORE_REVISION_ID=$(CONFIG_TIANOCORE_REVISION_ID) \
+ CONFIG_TIANOCORE_DEBUG=$(CONFIG_TIANOCORE_DEBUG) \
+ CONFIG_TIANOCORE_TARGET_IA32=$(CONFIG_TIANOCORE_TARGET_IA32) \
+ MFLAGS= MAKEFLAGS=
+
filo:
$(MAKE) -C payloads/external/FILO \
HOSTCC="$(HOSTCC)" \
diff --git a/payloads/external/tianocore/Kconfig b/payloads/external/tianocore/Kconfig
index 8a98bd3..ab53efd 100644
--- a/payloads/external/tianocore/Kconfig
+++ b/payloads/external/tianocore/Kconfig
@@ -1,9 +1,54 @@
if PAYLOAD_TIANOCORE
config PAYLOAD_FILE
- string "Tianocore firmware volume"
- default "COREBOOT.fd"
+ string "Tianocore binary"
+ default "payloads/external/tianocore/tianocore/Build/UEFIPAYLOAD.fd"
help
The result of a corebootPkg build
+choice
+ prompt "Tianocore version"
+ default TIANOCORE_STABLE
+
+config TIANOCORE_STABLE
+ bool "stable"
+ help
+ Stable TianoCore version
+
+config TIANOCORE_MASTER
+ bool "master"
+ help
+ Newest Tianocore version
+
+config TIANOCORE_REVISION
+ bool "git revision"
+ help
+ Select this option if you have a specific commit or branch
+ that you want to use as the revision from which to
+ build Tianocore.
+
+ You will be able to specify the name of a branch or a commit id
+ later.
+
+endchoice
+
+config TIANOCORE_REVISION_ID
+ string "Insert a commit's SHA-1 or a branch name"
+ depends on TIANOCORE_REVISION
+ default "origin/master"
+ help
+ The commit's SHA-1 or branch name of the revision to use.
+
+config TIANOCORE_TARGET_IA32
+ bool "Restrict Tianocore target architecture to IA32"
+ help
+ By default, the Tianocore coreboot Payload Package binary will be
+ built for both X64 and IA32 architectures. By selecting this option,
+ the target architecture can be restricted to only IA32.
+
+config TIANOCORE_DEBUG
+ bool "Generate Tianocore debug build"
+ help
+ Generate a debug build instead of a release build.
+
endif
diff --git a/payloads/external/tianocore/Kconfig.name b/payloads/external/tianocore/Kconfig.name
index d57f7e1..d394a9e 100644
--- a/payloads/external/tianocore/Kconfig.name
+++ b/payloads/external/tianocore/Kconfig.name
@@ -1,8 +1,8 @@
config PAYLOAD_TIANOCORE
- bool "Tiano Core"
+ bool "Tianocore coreboot payload package"
help
Select this option if you want to build a coreboot image
- with a Tiano Core payload. If you don't know what this is
+ with a Tianocore payload. If you don't know what this is
about, just leave it enabled.
See http://coreboot.org/Payloads for more information.
diff --git a/payloads/external/tianocore/Makefile b/payloads/external/tianocore/Makefile
new file mode 100644
index 0000000..6abaa75
--- /dev/null
+++ b/payloads/external/tianocore/Makefile
@@ -0,0 +1,128 @@
+##
+## 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.
+##
+
+# force the shell to bash - the edksetup.sh script doesn't work with dash
+export SHELL := env bash
+
+STABLE_COMMIT_ID=7e869eeb15b011f69cf87e0547cbcc70cc8b32eb
+
+TAG-$(CONFIG_TIANOCORE_MASTER)=origin/master
+TAG-$(CONFIG_TIANOCORE_STABLE)=$(STABLE_COMMIT_ID)
+
+project_name=Tianocore
+project_dir=$(CURDIR)/tianocore
+project_git_repo=https://github.com/tianocore/edk2
+
+export EDK_TOOLS_PATH=$(project_dir)/BaseTools
+
+ifeq ($(CONFIG_TIANOCORE_DEBUG),y)
+BUILD_TYPE=DEBUG
+else
+BUILD_TYPE=RELEASE
+endif
+
+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)
+
+checktools:
+ printf "Checking uuid-dev..."
+ echo "#include <uuid/uuid.h>" > libtest.c
+ echo "int main(int argc, char **argv) { (void) argc; (void) argv; return 0; }" >> libtest.c
+ $(HOSTCC) $(HOSTCCFLAGS) libtest.c -o libtest >/dev/null 2>&1 && printf " found uuid-dev.\n" || \
+ ( printf " Not found.\n"; echo "ERROR: please_install uuid-dev (uuid-devel)"; exit 1 )
+ rm -rf libtest.c libtest
+ printf "Checking nasm..."
+ type nasm > /dev/null 2>&1 && printf " found nasm.\n" || \
+ ( printf " Not found.\n"; echo "Error: Please install nasm."; exit 1 )
+
+#TODO: Update GCC versions when EDK-II (Conf/tools_def.txt) supports them.
+# Until then, pass in 4.9 for any newer version of GCC.
+config: checkout checktools
+ unset CC; $(MAKE) -C $(project_dir)/BaseTools
+ cd $(project_dir); \
+ export EDK_TOOLS_PATH=$(project_dir)/BaseTools; \
+ export WORKSPACE=$(project_dir); \
+ . ./edksetup.sh BaseTools
+ sed 's|^ACTIVE_PLATFORM.*|ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg\.dsc|' \
+ < $(project_dir)/Conf/target.txt \
+ > $(project_dir)/Conf/target.txt.new
+ mv $(project_dir)/Conf/target.txt.new $(project_dir)/Conf/target.txt
+ if [ "$$( $(CC) --version | grep "6\.1")" != "" ]; then \
+ GCC_VERSION=GCC49; \
+ elif [ "$$( $(CC) --version | grep "5\.3")" != "" ]; then \
+ GCC_VERSION=GCC49; \
+ elif [ "$$( $(CC) --version | grep "5\.2")" != "" ]; then \
+ GCC_VERSION=GCC49; \
+ elif [ "$$( $(CC) --version | grep "4\.9")" != "" ]; then \
+ GCC_VERSION=GCC49; \
+ elif [ "$$( $(CC) --version | grep "4\.8")" != "" ]; then \
+ GCC_VERSION=GCC48; \
+ elif [ "$$( $(CC) --version | grep "4\.7")" != "" ]; then \
+ GCC_VERSION=GCC47; \
+ else \
+ echo "Could not determine GCC version. Please update the tianocore makefile."; \
+ exit 1; \
+ fi; \
+ sed "s|^TOOL_CHAIN_TAG.*|TOOL_CHAIN_TAG = $${GCC_VERSION}|" \
+ < $(project_dir)/Conf/target.txt \
+ > $(project_dir)/Conf/target.txt.new
+ mv $(project_dir)/Conf/target.txt.new $(project_dir)/Conf/target.txt
+ sed 's/^TARGET_ARCH.*/TARGET_ARCH = IA32 X64/' \
+ < $(project_dir)/Conf/target.txt \
+ > $(project_dir)/Conf/target.txt.new
+ mv $(project_dir)/Conf/target.txt.new $(project_dir)/Conf/target.txt
+
+build: config
+ echo " build $(project_name) $(TAG-y)"
+ifeq ($(CONFIG_TIANOCORE_TARGET_IA32), y)
+ cd $(project_dir); \
+ export EDK_TOOLS_PATH=$(project_dir)/BaseTools; \
+ export WORKSPACE=$(project_dir); \
+ . ./edksetup.sh BaseTools; \
+ build -a IA32 -p CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -b $(BUILD_TYPE)
+else
+ cd $(project_dir); \
+ export EDK_TOOLS_PATH=$(project_dir)/BaseTools; \
+ export WORKSPACE=$(project_dir); \
+ . ./edksetup.sh BaseTools; \
+ build -a IA32 -a X64 -p CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -b $(BUILD_TYPE)
+endif
+ mv $(project_dir)/Build/CorebootPayloadPkg*/*/FV/UEFIPAYLOAD.fd $(project_dir)/Build/UEFIPAYLOAD.fd
+
+clean:
+ test -d $(project_dir) && (cd $(project_dir); rm -rf Build) || exit 0
+
+distclean:
+ rm -rf $(project_dir)
+
+.PHONY: all fetch checkout checktools config build clean distclean
Andrey Petrov (andrey.petrov(a)intel.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15494
-gerrit
commit 204eaca6c6f48a032d0d9f3bed5a60b683c56b98
Author: Andrey Petrov <andrey.petrov(a)intel.com>
Date: Tue Jun 28 17:37:09 2016 -0700
soc/intel/apollolake: Let CSE know Ring Buffer Protocol is not needed
On Apollolake CSE can be used to fetch firmware from boot media. However,
when this feature is not used, CSE needs to be explicitly notified of it
before memory training is complete. This way it can transition to next
state.
BUG=chrome-os-partner:53876
TEST=CSE can be power-gated during S0iX. Confirmed with LTB.
Change-Id: I5141bff350b6c0bb662424b7b709f0787ec5fd28
Signed-off-by: Andrey Petrov <andrey.petrov(a)intel.com>
---
src/soc/intel/apollolake/romstage.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/soc/intel/apollolake/romstage.c b/src/soc/intel/apollolake/romstage.c
index ce28326..0c093a4 100644
--- a/src/soc/intel/apollolake/romstage.c
+++ b/src/soc/intel/apollolake/romstage.c
@@ -241,6 +241,14 @@ void platform_fsp_memory_init_params_cb(struct FSPM_UPD *mupd)
} else
printk(BIOS_DEBUG, "MRC cache was not found\n");
}
+
+ /*
+ * Tell CSE we do not need to use Ring Buffer Protocol (RBP) to fetch
+ * firmware for us, because we will do it on our own (SPI currently).
+ * will let CSE state machine transition to next boot state, so that
+ * it can function as designed.
+ */
+ mupd->FspmConfig.SkipCseRbp = 1;
}
__attribute__ ((weak))