From 46a9bc01759b36d94b4e980f995bae75f48f67ea Mon Sep 17 00:00:00 2001 From: Leif Lindholm Date: Thu, 18 Feb 2016 10:10:18 +0000 Subject: [PATCH] ArmPlatformPkg: remove obsolete/outdated AArch64 bootstrap Harking back to the earliest days of software development for AArch64, this piece of code abstracted away "early setup stuff" when the software model came out of reset. However, it is unmaintained and has been superseded by ARM Trusted Firmware. So drop it. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Leif Lindholm Reviewed-by: Ard Biesheuvel Reviewed-by: Ryan Harkin --- .../uefi-aarch64-bootstrap/LICENSE.TXT | 28 --- .../Scripts/uefi-aarch64-bootstrap/Makefile | 96 --------- .../Scripts/uefi-aarch64-bootstrap/boot.S | 183 ------------------ .../uefi-aarch64-bootstrap/model.lds.S | 77 -------- .../uefi-aarch64-bootstrap/readme.html | 88 --------- .../Scripts/uefi-aarch64-bootstrap/readme.txt | 92 --------- 6 files changed, 564 deletions(-) delete mode 100644 ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/LICENSE.TXT delete mode 100644 ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/Makefile delete mode 100644 ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/boot.S delete mode 100644 ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/model.lds.S delete mode 100644 ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.html delete mode 100644 ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.txt diff --git a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/LICENSE.TXT b/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/LICENSE.TXT deleted file mode 100644 index e33cd4cdcf..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/LICENSE.TXT +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2011-2013 ARM Limited -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of ARM nor the names of its contributors may be - used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/Makefile b/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/Makefile deleted file mode 100644 index 2ac8368b12..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/Makefile +++ /dev/null @@ -1,96 +0,0 @@ -# -# Makefile - build a UEFI boot image for booting from different exception levels. -# -# Copyright (C) 2011-2013 ARM Limited. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of ARM nor the names of its contributors may be -# used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# This license can also be found in the LICENSE.TXT file. - - -# VE -PHYS_OFFSET := 0x80000000 -UART_BASE := 0x1c090000 -GIC_DIST_BASE := 0x2c001000 -GIC_CPU_BASE := 0x2c002000 -CNTFRQ := 0x01800000 # 24Mhz - -BOOTLOADER := boot.S -LD_SCRIPT := model.lds.S -IMAGE_1 := uefi-bootstrap-el1.axf -IMAGE_2 := uefi-bootstrap-el2.axf -IMAGE_3 := uefi-bootstrap-el3.axf -IMAGE_3F := uefi-bootstrap-el3-foundation.axf - - -CROSS_COMPILE ?= aarch64-none-elf- -CC := $(CROSS_COMPILE)gcc -LD := $(CROSS_COMPILE)ld - -all: $(IMAGE_1) $(IMAGE_2) $(IMAGE_3) $(IMAGE_3F) - -clean: - rm -f *.axf *.o *.lds - -$(IMAGE_1): boot1.o model1.lds - $(LD) -o $@ --script=model1.lds - -$(IMAGE_2): boot2.o model2.lds - $(LD) -o $@ --script=model2.lds - -$(IMAGE_3): boot3.o model3.lds - $(LD) -o $@ --script=model3.lds - -$(IMAGE_3F): boot3f.o model3f.lds - $(LD) -o $@ --script=model3f.lds - -boot1.o: $(BOOTLOADER) Makefile - $(CC) $(CPPFLAGS) -DUART_BASE=$(UART_BASE) -DCNTFRQ=$(CNTFRQ) -DGIC_DIST_BASE=$(GIC_DIST_BASE) -DGIC_CPU_BASE=$(GIC_CPU_BASE) -DSTART_EL2=1 -DSTART_EL1=1 -c -o $@ $(BOOTLOADER) - -boot2.o: $(BOOTLOADER) Makefile - $(CC) $(CPPFLAGS) -DUART_BASE=$(UART_BASE) -DCNTFRQ=$(CNTFRQ) -DGIC_DIST_BASE=$(GIC_DIST_BASE) -DGIC_CPU_BASE=$(GIC_CPU_BASE) -DSTART_EL2=1 -c -o $@ $(BOOTLOADER) - -boot3.o: $(BOOTLOADER) Makefile - $(CC) $(CPPFLAGS) -DUART_BASE=$(UART_BASE) -DCNTFRQ=$(CNTFRQ) -DGIC_DIST_BASE=$(GIC_DIST_BASE) -DGIC_CPU_BASE=$(GIC_CPU_BASE) -c -o $@ $(BOOTLOADER) - -boot3f.o: $(BOOTLOADER) Makefile - $(CC) $(CPPFLAGS) -DUART_BASE=$(UART_BASE) -DCNTFRQ=$(CNTFRQ) -DGIC_DIST_BASE=$(GIC_DIST_BASE) -DGIC_CPU_BASE=$(GIC_CPU_BASE) -DFOUNDATION_MODEL=1 -c -o $@ $(BOOTLOADER) - -model1.lds: $(LD_SCRIPT) Makefile boot1.o - $(CC) $(CPPFLAGS) -DPHYS_OFFSET=$(PHYS_OFFSET) -DBOOT1 -E -P -C -o $@ $< - -model2.lds: $(LD_SCRIPT) Makefile boot2.o - $(CC) $(CPPFLAGS) -DPHYS_OFFSET=$(PHYS_OFFSET) -DBOOT2 -E -P -C -o $@ $< - -model3.lds: $(LD_SCRIPT) Makefile boot3.o - $(CC) $(CPPFLAGS) -DPHYS_OFFSET=$(PHYS_OFFSET) -DBOOT3 -E -P -C -o $@ $< - -model3f.lds: $(LD_SCRIPT) Makefile boot3f.o - $(CC) $(CPPFLAGS) -DPHYS_OFFSET=$(PHYS_OFFSET) -DBOOT3F -E -P -C -o $@ $< - -.PHONY: all clean diff --git a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/boot.S b/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/boot.S deleted file mode 100644 index a4b0055c78..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/boot.S +++ /dev/null @@ -1,183 +0,0 @@ -/* - * boot.S - simple register setup code for junping to a second stage bootloader - * - * Copyright (C) 2011-2013 ARM Limited. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of ARM nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This license can also be found in the LICENSE.TXT file. - */ - - .text - - .globl _start - -.set LED_ADDR, 0x1c010008 - -_start: - /* - * EL3 initialisation - */ - - // Set LED to show progress. - ldr x1, =LED_ADDR - mov w0, #0x1 - str w0, [x1] - dsb sy - -#if defined START_EL2 - - mrs x0, CurrentEL - cmp x0, #0xc // EL3? - b.ne start_ns // skip EL3 initialisation - - mov x0, #0x30 // RES1 - orr x0, x0, #(1 << 0) // Non-secure bit - orr x0, x0, #(1 << 8) // HVC enable - orr x0, x0, #(1 << 10) // 64-bit EL2 - msr scr_el3, x0 - - msr cptr_el3, xzr // Disable copro. traps to EL3 - - ldr x0, =CNTFRQ - msr cntfrq_el0, x0 - - /* - * Check for the primary CPU to avoid a race on the distributor - * registers. - */ - mrs x0, mpidr_el1 - tst x0, #15 - b.ne 1f // secondary CPU - - ldr x1, =GIC_DIST_BASE // GICD_CTLR - mov w0, #3 // EnableGrp0 | EnableGrp1 - str w0, [x1] - -1: ldr x1, =GIC_DIST_BASE + 0x80 // GICD_IGROUPR - mov w0, #~0 // Grp1 interrupts - str w0, [x1], #4 - b.ne 2f // Only local interrupts for secondary CPUs - str w0, [x1], #4 - str w0, [x1], #4 - -2: ldr x1, =GIC_CPU_BASE // GICC_CTLR - ldr w0, [x1] - orr w0, w0, #3 // EnableGrp0 | EnableGrp1 - str w0, [x1] - - mov w0, #1 << 7 // allow NS access to GICC_PMR - str w0, [x1, #4] // GICC_PMR - - msr sctlr_el2, xzr - -#if defined START_EL1 - - /* Now setup our EL1. Controlled by EL2 config on Model */ - mrs x0, hcr_el2 // Read EL2 Hypervisor configuration Register - orr x0, x0, #(1 << 31) // Set EL1 to be 64bit - - // Send all interrupts to their respective Exception levels for EL2 - bic x0, x0, #(1 << 3) // Disable virtual FIQ - bic x0, x0, #(1 << 4) // Disable virtual IRQ - bic x0, x0, #(1 << 5) // Disable virtual SError and Abort - msr hcr_el2, x0 // Write back our settings - - /* - * Enable architected timer access - */ - mrs x0, cnthctl_el2 - orr x0, x0, #3 // Enable EL1 access to timers - msr cnthctl_el2, x0 - - mrs x0, cntkctl_el1 - orr x0, x0, #3 // EL0 access to counters - msr cntkctl_el1, x0 - - /* Set ID regs */ - mrs x0, midr_el1 - mrs x1, mpidr_el1 - msr vpidr_el2, x0 - msr vmpidr_el2, x1 - - /* Coprocessor traps. */ - mov x0, #0x33ff - msr cptr_el2, x0 // Disable copro. traps to EL2 - - msr hstr_el2, xzr // Disable CP15 traps to EL2 - -#endif // START_EL1 - - /* Configure UART. Primary CPU only */ - mrs x4, mpidr_el1 - tst x4, #15 - b.ne 1f - - /* - * UART initialisation (38400 8N1) - */ - ldr x4, =UART_BASE // UART base - mov w5, #0x10 // ibrd - str w5, [x4, #0x24] - mov w5, #0xc300 - orr w5, w5, #0x0001 // cr - str w5, [x4, #0x30] - - /* - * Prepare the switch to the EL2_SP2 mode from EL3 - */ -1: ldr x0, =start_ns // Return after mode switch -#if defined START_EL1 - mov x1, #0x3c5 // EL1_SP1 | D | A | I | F -#else - mov x1, #0x3c9 // EL2_SP2 | D | A | I | F -#endif - - msr elr_el3, x0 - msr spsr_el3, x1 - eret - -#endif // START_EL2 - - -start_ns: - -/* - * We do not have NOR flash on the Foundation model. So run UEFI from RAM. - * On the full model we use the NOR FLASH to store UEFI, so start there. - */ -#if defined FOUNDATION_MODEL - mov x0, #0xa0000000 -#else - mov x0, #0x0 -#endif - br x0 - - .ltorg - - .org 0x200 diff --git a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/model.lds.S b/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/model.lds.S deleted file mode 100644 index d963aec550..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/model.lds.S +++ /dev/null @@ -1,77 +0,0 @@ -/* - * model.lds.S - simple linker script for stand-alone Linux booting - * - * Copyright (C) 2011, 2012 ARM Limited. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of ARM nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This license can also be found in the LICENSE.TXT file. - */ - -OUTPUT_FORMAT("elf64-littleaarch64") -OUTPUT_ARCH(aarch64) -TARGET(binary) - -#ifdef BOOT1 -INPUT(./boot1.o) -#endif - -#ifdef BOOT2 -INPUT(./boot2.o) -#endif - -#ifdef BOOT3 -INPUT(./boot3.o) -#endif - -#ifdef BOOT3F -INPUT(./boot3f.o) -#endif - -SECTIONS -{ - . = PHYS_OFFSET; -#ifdef BOOT1 - .text : { boot1.o } -#endif - -#ifdef BOOT2 - .text : { boot2.o } -#endif - -#ifdef BOOT3 - .text : { boot3.o } -#endif - -#ifdef BOOT3F - .text : { boot3f.o } -#endif - - .data : { *(.data) } - .bss : { *(.bss) } -} diff --git a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.html b/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.html deleted file mode 100644 index 5627285265..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.html +++ /dev/null @@ -1,88 +0,0 @@ -

AArch64 UEFI bootstraps

- -

Copyright (c) 2011-2013 ARM Limited. All rights reserved. -See the LICENSE.TXT file for more information.

- -

Contents:

- -
    -
  • Introduction
  • -
  • Build
  • -
  • Use on ARMv8 RTSM and FVP models
  • -
  • Use on ARMv8 Foundation model
  • -
- -

Introduction

- -

A bootstrap can be used to change the model state, like the Exception -Level (EL), before executing the UEFI binary.

- -

For the ARMv8 RTSM and FVP models this can be used to show/test the UEFI binary -starting at different exception levels. The ARMv8 models start at EL3 by -default.

- -

In the case of the Foundation model a bootstrap is required to jump to the -UEFI binary as loaded in RAM. This is required as the Foundation model cannot -load and execute UEFI binaries directly. The Foundation model can only load and -execute ELF binaries.

- -

Build

- -

Build the bootstraps using a AArch64 GCC cross-compiler. By default the -Makefile is configured to assume a GCC bare-metal toolchain:

- -
PATH=$PATH:<path/to/baremetal-tools/bin/> make clean
-PATH=$PATH:<path/to/baremetal-tools/bin/> make
-
- -

To build the bootstraps with a Linux GCC toolchain use the following -commands:

- -
PATH=$PATH:<path/to/aarch64-linux-gnu-tools/bin/> make clean
-PATH=$PATH:<path/to/aarch64-linux-gnu-tools/bin/> CROSS_COMPILE=<gcc-prefix> make
-
- -

The gcc-prefix depends on the specific toolchain distribution used. It can be -"aarch64-linux-gnu-" for example.

- -

This will result in four axf files:

- -
    -
  • uefi-bootstrap-el3 : The bootstrap jumps to the UEFI code in FLASH without - changing anything.

  • -
  • uefi-bootstrap-el2 : Setup EL3 and switch the model to EL2 before jumping to the - UEFI code in FLASH.

  • -
  • uefi-bootstrap-el1 : Setup EL3 and prepare to run at non-secure EL1. Switch to - non-secure EL1 and run the UEFI code in FLASH.

  • -
  • uefi-bootstrap-el3-foundation : The bootstrap jumps to the UEFI code in RAM - without changing anything. Only to be used with the - Foundation model. The Foundation model does not have - non-secure memory at address 0x0 and thus the UEFI image - should be pre-loaded into non-secure RAM at address - 0xA0000000.

  • -
- -

Use on ARMv8 RTSM and FVP models

- -

Add the '-a' option to the model start script and point to the required -bootstrap:

- -
< ... model start script as described in top-level readme file ... >
- -a <path/to/bootstrap-binary-file>
-
- -

NOTE: The Foundation model bootstrap should not be used with these models.

- -

Use on ARMv8 Foundation model

- -

The Foundation model takes an option for an ELF file to be loaded as well as an -option to load a binary data blob into RAM. This can be used to run UEFI in the -following manner:

- -
<PATH_TO_INSTALLED_FOUNDATION_MODEL>/Foundation_v8 --cores=2 --visualization
-  --image=uefi-bootstrap-el3-foundation.axf --nsdata=RTSM_VE_FOUNDATIONV8_EFI.fd@0xA0000000
-
- -

NOTE: The RTSM version of the bootstraps and UEFI image will not work as - expected on the Foundation model. Foundation model specific versions - should be used.

diff --git a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.txt b/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.txt deleted file mode 100644 index 24a1bbee3d..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/readme.txt +++ /dev/null @@ -1,92 +0,0 @@ -AArch64 UEFI bootstraps -======================= - -Copyright (c) 2011-2013 ARM Limited. All rights reserved. -See the `LICENSE.TXT` file for more information. - -Contents: - -* Introduction -* Build -* Use on ARMv8 RTSM and FVP models -* Use on ARMv8 Foundation model - - -Introduction ------------- - -A bootstrap can be used to change the model state, like the Exception -Level (EL), before executing the UEFI binary. - -For the ARMv8 RTSM and FVP models this can be used to show/test the UEFI binary -starting at different exception levels. The ARMv8 models start at EL3 by -default. - -In the case of the Foundation model a bootstrap is required to jump to the -UEFI binary as loaded in RAM. This is required as the Foundation model cannot -load and execute UEFI binaries directly. The Foundation model can only load and -execute ELF binaries. - - -Build ------ - -Build the bootstraps using a AArch64 GCC cross-compiler. By default the -`Makefile` is configured to assume a GCC bare-metal toolchain: - - PATH=$PATH: make clean - PATH=$PATH: make - -To build the bootstraps with a Linux GCC toolchain use the following -commands: - - PATH=$PATH: make clean - PATH=$PATH: CROSS_COMPILE= make - -The `gcc-prefix` depends on the specific toolchain distribution used. It can be -"aarch64-linux-gnu-" for example. - -This will result in four `axf` files: - -* uefi-bootstrap-el3 : The bootstrap jumps to the UEFI code in FLASH without - changing anything. - -* uefi-bootstrap-el2 : Setup EL3 and switch the model to EL2 before jumping to the - UEFI code in FLASH. - -* uefi-bootstrap-el1 : Setup EL3 and prepare to run at non-secure EL1. Switch to - non-secure EL1 and run the UEFI code in FLASH. - -* uefi-bootstrap-el3-foundation : The bootstrap jumps to the UEFI code in RAM - without changing anything. Only to be used with the - Foundation model. The Foundation model does not have - non-secure memory at address `0x0` and thus the UEFI image - should be pre-loaded into non-secure RAM at address - `0xA0000000`. - - -Use on ARMv8 RTSM and FVP models --------------------------------- - -Add the '-a' option to the model start script and point to the required -bootstrap: - - < ... model start script as described in top-level readme file ... > - -a - -NOTE: The Foundation model bootstrap should not be used with these models. - - -Use on ARMv8 Foundation model ------------------------------ - -The Foundation model takes an option for an ELF file to be loaded as well as an -option to load a binary data blob into RAM. This can be used to run UEFI in the -following manner: - - /Foundation_v8 --cores=2 --visualization - --image=uefi-bootstrap-el3-foundation.axf --nsdata=RTSM_VE_FOUNDATIONV8_EFI.fd@0xA0000000 - -NOTE: The RTSM version of the bootstraps and UEFI image will not work as - expected on the Foundation model. Foundation model specific versions - should be used.