<p>Patrick Rudolph has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25751">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">[HACK]cavium/arm-trusted-firmware: Use 9elements ATF<br><br>Build 9elements' ATF for Cavium.<br>TODO: Push Cavium code upstream.<br><br>Change-Id: I7e9eb429d11150d43aa070d1bd6a11ea71951ce3<br>Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com><br>---<br>M src/arch/arm64/Makefile.inc<br>M src/arch/arm64/boot.c<br>M src/soc/cavium/cn81xx/bl31_plat_params.c<br>M src/soc/cavium/cn81xx/include/soc/bl31_plat_params.h<br>M src/soc/cavium/cn81xx/include/soc/memlayout.ld<br>M src/soc/cavium/common/Kconfig<br>A src/soc/cavium/common/Makefile<br>M src/soc/cavium/common/Makefile.inc<br>M src/soc/cavium/common/cbmem.c<br>9 files changed, 115 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/51/25751/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/arch/arm64/Makefile.inc b/src/arch/arm64/Makefile.inc</span><br><span>index d9a73bd..344cdcd 100644</span><br><span>--- a/src/arch/arm64/Makefile.inc</span><br><span>+++ b/src/arch/arm64/Makefile.inc</span><br><span>@@ -119,6 +119,7 @@</span><br><span> ramstage-y += memcpy.S</span><br><span> ramstage-y += memmove.S</span><br><span> ramstage-$(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE) += arm_tf.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-$(CONFIG_CAVIUM_ARM_TRUSTED_FIRMWARE) += arm_tf.c</span><br><span> ramstage-y += transition.c transition_asm.S</span><br><span> </span><br><span> rmodules_arm64-y += memset.S</span><br><span>diff --git a/src/arch/arm64/boot.c b/src/arch/arm64/boot.c</span><br><span>index d498cd9..fb6b5ee 100644</span><br><span>--- a/src/arch/arm64/boot.c</span><br><span>+++ b/src/arch/arm64/boot.c</span><br><span>@@ -33,7 +33,8 @@</span><br><span>       arg = prog_entry_arg(prog);</span><br><span>  u64 payload_spsr = get_eret_el(EL2, SPSR_USE_L);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (IS_ENABLED(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE))</span><br><span style="color: hsl(120, 100%, 40%);">+        if (IS_ENABLED(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE) ||</span><br><span style="color: hsl(120, 100%, 40%);">+              IS_ENABLED(CONFIG_CAVIUM_ARM_TRUSTED_FIRMWARE))</span><br><span>              arm_tf_run_bl31((u64)doit, (u64)arg, payload_spsr);</span><br><span>  else {</span><br><span>               uint8_t current_el = get_current_el();</span><br><span>diff --git a/src/soc/cavium/cn81xx/bl31_plat_params.c b/src/soc/cavium/cn81xx/bl31_plat_params.c</span><br><span>index 583eac8..c4e4c90 100644</span><br><span>--- a/src/soc/cavium/cn81xx/bl31_plat_params.c</span><br><span>+++ b/src/soc/cavium/cn81xx/bl31_plat_params.c</span><br><span>@@ -17,8 +17,11 @@</span><br><span> #include <arm_tf.h></span><br><span> #include <assert.h></span><br><span> #include <soc/bl31_plat_params.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <cbfs.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span> </span><br><span> static struct bl31_plat_param *plat_params;</span><br><span style="color: hsl(120, 100%, 40%);">+static struct bl31_fdt_param fdt_param;</span><br><span> </span><br><span> void register_bl31_param(struct bl31_plat_param *param)</span><br><span> {</span><br><span>@@ -26,7 +29,19 @@</span><br><span>       plat_params = param;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+extern u8 _sff8104[];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void *soc_get_bl31_plat_params(bl31_params_t *bl31_params)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+     size_t size = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    void *ptr = cbfs_boot_map_with_leak("sff8104-linux.dtb", CBFS_TYPE_RAW, &size);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       memcpy(_sff8104, ptr, size);</span><br><span style="color: hsl(120, 100%, 40%);">+  fdt_param.fdt_ptr = (uintptr_t)_sff8104;</span><br><span style="color: hsl(120, 100%, 40%);">+      fdt_param.h.type = PARAM_FDT;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       register_bl31_param(&fdt_param.h);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     return plat_params;</span><br><span> }</span><br><span>diff --git a/src/soc/cavium/cn81xx/include/soc/bl31_plat_params.h b/src/soc/cavium/cn81xx/include/soc/bl31_plat_params.h</span><br><span>index c73d687..b80edd5 100644</span><br><span>--- a/src/soc/cavium/cn81xx/include/soc/bl31_plat_params.h</span><br><span>+++ b/src/soc/cavium/cn81xx/include/soc/bl31_plat_params.h</span><br><span>@@ -17,7 +17,7 @@</span><br><span> #ifndef __BL31_PLAT_PARAMS_H__</span><br><span> #define __BL31_PLAT_PARAMS_H__</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <arm-trusted-firmware/plat/rockchip/common/include/plat_params.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/cavium/common/arm-trusted-firmware/plat/cavium/common/include/plat_params.h></span><br><span> </span><br><span> void register_bl31_param(struct bl31_plat_param *param);</span><br><span> </span><br><span>diff --git a/src/soc/cavium/cn81xx/include/soc/memlayout.ld b/src/soc/cavium/cn81xx/include/soc/memlayout.ld</span><br><span>index f0ac2c9..e4a71eb 100644</span><br><span>--- a/src/soc/cavium/cn81xx/include/soc/memlayout.ld</span><br><span>+++ b/src/soc/cavium/cn81xx/include/soc/memlayout.ld</span><br><span>@@ -21,8 +21,11 @@</span><br><span> SECTIONS</span><br><span> {</span><br><span>   DRAM_START(0x00000000)</span><br><span style="color: hsl(0, 100%, 40%);">-  /* FIXME: Place BL31 in first 1MiB */</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Secure region 0 - 1MiB */</span><br><span style="color: hsl(120, 100%, 40%);">+  REGION(bl31, 0, 0xe0000, 0x1000)</span><br><span style="color: hsl(120, 100%, 40%);">+      REGION(sff8104, 0xe0000, 0x20000, 0x1000)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Insecure region 1MiB - TOP OF DRAM */        </span><br><span>     /* bootblock-custom.S does setup CAR from SRAM_START to SRAM_END */</span><br><span>  SRAM_START(BOOTROM_OFFSET)</span><br><span>   STACK(BOOTROM_OFFSET, 16K)</span><br><span>diff --git a/src/soc/cavium/common/Kconfig b/src/soc/cavium/common/Kconfig</span><br><span>index 1f68b99..b410d10 100644</span><br><span>--- a/src/soc/cavium/common/Kconfig</span><br><span>+++ b/src/soc/cavium/common/Kconfig</span><br><span>@@ -10,4 +10,6 @@</span><br><span> config MMCONF_SUPPORT</span><br><span>     def_bool n</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+config CAVIUM_ARM_TRUSTED_FIRMWARE</span><br><span style="color: hsl(120, 100%, 40%);">+    def_bool y</span><br><span> endif</span><br><span>diff --git a/src/soc/cavium/common/Makefile b/src/soc/cavium/common/Makefile</span><br><span>new file mode 100644</span><br><span>index 0000000..e9ef614</span><br><span>--- /dev/null</span><br><span>+++ b/src/soc/cavium/common/Makefile</span><br><span>@@ -0,0 +1,16 @@</span><br><span style="color: hsl(120, 100%, 40%);">+project_tag=origin/cavium_bl31_rebase</span><br><span style="color: hsl(120, 100%, 40%);">+project_git_repo=https://github.com/9elements/arm-trusted-firmware.git</span><br><span style="color: hsl(120, 100%, 40%);">+project_dir=arm-trusted-firmware</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+arm-trusted-firmware:</span><br><span style="color: hsl(120, 100%, 40%);">+        echo "    Cloning arm-trusted-firmware from Git"</span><br><span style="color: hsl(120, 100%, 40%);">+    git clone $(project_git_repo) $(project_dir)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+fetch: arm-trusted-firmware</span><br><span style="color: hsl(120, 100%, 40%);">+   cd arm-trusted-firmware; git show $(project_tag) >/dev/null 2>&1; git fetch</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+checkout: fetch</span><br><span style="color: hsl(120, 100%, 40%);">+      echo "    Checking out arm-trusted-firmware revision $(project_tag)"</span><br><span style="color: hsl(120, 100%, 40%);">+        cd arm-trusted-firmware; git checkout master; git branch -D coreboot 2>/dev/null; git checkout -b coreboot $(project_tag)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>diff --git a/src/soc/cavium/common/Makefile.inc b/src/soc/cavium/common/Makefile.inc</span><br><span>index dbf23cf..1c959e3 100644</span><br><span>--- a/src/soc/cavium/common/Makefile.inc</span><br><span>+++ b/src/soc/cavium/common/Makefile.inc</span><br><span>@@ -55,4 +55,69 @@</span><br><span>   # Insert bootblock at 0x10000</span><br><span>        dd if=$(objcbfs)/bootblock.raw.bin of=$@ bs=1 seek=$$((0x10000)) conv=notrunc status=none</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# Build ARM Trusted Firmware (BL31)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(CONFIG_CAVIUM_ARM_TRUSTED_FIRMWARE),y)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_SOURCE := $(top)/src/soc/cavium/common/arm-trusted-firmware</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_BUILD := $(abspath $(obj)/src/soc/cavium/common/arm-trusted-firmware)</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_TARGET := $(BL31_BUILD)/bl31/bl31.elf</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+$(BL31_SOURCE):</span><br><span style="color: hsl(120, 100%, 40%);">+   $(MAKE) -C $(abspath $(BL31_SOURCE)/..) checkout</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(V),1)</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += V=1</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Build ARM TF in debug mode (with assertions) if coreboot has hard assertions</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(CONFIG_FATAL_ASSERTS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += DEBUG=1</span><br><span style="color: hsl(120, 100%, 40%);">+endif # CONFIG_CONSOLE_SERIAL</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ARM TF's VERBOSE (50) is *very* spammy, so default to INFO (40)</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += LOG_LEVEL=40</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Always enable crash reporting, even on a release build</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += CRASH_REPORTING=1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Enable coreboot-specific features like CBMEM console support</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += COREBOOT=1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Avoid build/release|build/debug distinction by overriding BUILD_PLAT directly</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += BUILD_PLAT="$(BL31_BUILD)"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Force making .d files and output directories even though target is not 'bl31'</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += IS_ANYTHING_TO_BUILD=1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Set a consistent build timestamp: the same coreboot has</span><br><span style="color: hsl(120, 100%, 40%);">+# The \# \" complications exist to satisfy both gnu make's parser and editors</span><br><span style="color: hsl(120, 100%, 40%);">+# with non-semantic quote-handling (that would assume that this line starts a</span><br><span style="color: hsl(120, 100%, 40%);">+# multi line string.</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_MAKEARGS += BUILD_MESSAGE_TIMESTAMP='"$(shell grep "\#define COREBOOT_BUILD\>" $(obj)/build.h |cut -d\" -f2 \# \")"'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_CFLAGS := -fno-pic -fno-stack-protector -Wno-deprecated-declarations -Wno-unused-function</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_LDFLAGS := --emit-relocs</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BL31 := $(obj)/bl31.elf</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+$(BL31): $(obj)/build.h $(BL31_SOURCE)</span><br><span style="color: hsl(120, 100%, 40%);">+  printf "    MAKE       $(subst $(obj)/,,$(@))\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    +CROSS_COMPILE="$(CROSS_COMPILE_arm64)" \</span><br><span style="color: hsl(120, 100%, 40%);">+   CFLAGS="$(BL31_CFLAGS)" \</span><br><span style="color: hsl(120, 100%, 40%);">+   LDFLAGS="$(BL31_LDFLAGS)" \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(MAKE) -C $(BL31_SOURCE) $(BL31_MAKEARGS) $(BL31_TARGET) DISABLE_PEDANTIC=1</span><br><span style="color: hsl(120, 100%, 40%);">+  mv $(BL31_TARGET) $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.PHONY: $(BL31)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BL31_CBFS := $(CONFIG_CBFS_PREFIX)/bl31</span><br><span style="color: hsl(120, 100%, 40%);">+$(BL31_CBFS)-file := $(BL31)</span><br><span style="color: hsl(120, 100%, 40%);">+$(BL31_CBFS)-type := payload</span><br><span style="color: hsl(120, 100%, 40%);">+$(BL31_CBFS)-compression := $(CBFS_COMPRESS_FLAG)</span><br><span style="color: hsl(120, 100%, 40%);">+cbfs-files-y += $(BL31_CBFS)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+check-ramstage-overlap-files += $(BL31_CBFS)</span><br><span style="color: hsl(120, 100%, 40%);">+endif #CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> endif</span><br><span>diff --git a/src/soc/cavium/common/cbmem.c b/src/soc/cavium/common/cbmem.c</span><br><span>index 401f8b2..866f56e 100644</span><br><span>--- a/src/soc/cavium/common/cbmem.c</span><br><span>+++ b/src/soc/cavium/common/cbmem.c</span><br><span>@@ -18,9 +18,18 @@</span><br><span> #include <soc/sdram.h></span><br><span> #include <stdlib.h></span><br><span> #include <symbols.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <bootmem.h></span><br><span> </span><br><span> void *cbmem_top(void)</span><br><span> {</span><br><span>      return (void *)min((uintptr_t)_dram + sdram_size_mb() * MiB,</span><br><span>                            MAX_DRAM_ADDRESS);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#if ENV_RAMSTAGE</span><br><span style="color: hsl(120, 100%, 40%);">+void bootmem_platform_add_ranges(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     /* ATF reserved */</span><br><span style="color: hsl(120, 100%, 40%);">+    bootmem_add_range(0, 1 * MiB, BM_MEM_RESERVED);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25751">change 25751</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/25751"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I7e9eb429d11150d43aa070d1bd6a11ea71951ce3 </div>
<div style="display:none"> Gerrit-Change-Number: 25751 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com> </div>