aboutsummaryrefslogtreecommitdiff
path: root/ldcg-sbsa-firmware/build-sbsa-acs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ldcg-sbsa-firmware/build-sbsa-acs.sh')
-rw-r--r--ldcg-sbsa-firmware/build-sbsa-acs.sh133
1 files changed, 93 insertions, 40 deletions
diff --git a/ldcg-sbsa-firmware/build-sbsa-acs.sh b/ldcg-sbsa-firmware/build-sbsa-acs.sh
index 029023eb9d..1a43e14a36 100644
--- a/ldcg-sbsa-firmware/build-sbsa-acs.sh
+++ b/ldcg-sbsa-firmware/build-sbsa-acs.sh
@@ -2,12 +2,39 @@
set -ex
+rm -rf ${WORKSPACE}/*
+mkdir -p ${WORKSPACE}/logs/
+
+if [ -z $QEMU_TIMEOUT ]; then
+ QEMU_TIMEOUT=30s
+fi
+
+QEMU_COMMAND="./qemu/build/qemu-system-aarch64 \
+ -machine sbsa-ref \
+ -cpu max \
+ -drive if=pflash,file=SBSA_FLASH0.fd,format=raw \
+ -drive if=pflash,file=SBSA_FLASH1.fd,format=raw \
+ -drive file=fat:rw:$PWD/virtual-disk/,format=raw \
+ -serial mon:stdio \
+ -device virtio-rng-pci \
+ -device qemu-xhci \
+ -no-reboot \
+ -nographic
+"
+# more complex PCI Express structure once we get ITS support in QEMU
+# -device pcie-root-port,id=root_port1,chassis=1,slot=1 \
+# -device nvme,serial=deadbeef,drive=nvme,bus=root_port1 \
+# -device pcie-root-port,id=root_port2,chassis=1,slot=2 \
+# -device qemu-xhci,id=usb,bus=root_port2 \
+# -device pcie-root-port,id=root_port3,chassis=1,slot=3 \
+# -device e1000e,bus=root_port3 \
+
build_qemu()
{
# Build QEMU - only AArch64 target
cd qemu
- ./configure --target-list=aarch64-softmmu
+ ./configure --target-list=aarch64-softmmu --disable-werror
make -j$(nproc)
cd -
}
@@ -16,6 +43,7 @@ build_edk2()
{
# Build EDK2 and truncate results to expected 256M
+ export PYTHON_COMMAND=/usr/bin/python3
export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms:$WORKSPACE/edk2-non-osi:$WORKSPACE/edk2-libc
make -C edk2/BaseTools
@@ -54,56 +82,81 @@ build_sbsa_acs()
source edk2/ShellPkg/Application/sbsa-acs/tools/scripts/avsbuild.sh
}
-rm -rf ${WORKSPACE}/*
+build_bsa_acs()
+{
-# install build dependencies for QEMU and EDK2
-sudo apt update
-sudo apt -y --no-install-recommends install build-essential pkg-config python3 \
- libpixman-1-dev libglib2.0-dev \
- dosfstools ninja-build python
+ cd edk2
+ patch -p0 < ../configs/ldcg-sbsa-firmware/enable-bsa-acs.patch
-fetch_code
+ cd ShellPkg/Application
+ git clone --depth 1 https://github.com/ARM-software/bsa-acs.git
-build_qemu
-build_edk2
-build_sbsa_acs
+ cd $WORKSPACE
+ export GCC49_AARCH64_PREFIX=$GCC5_AARCH64_PREFIX
+ source edk2/ShellPkg/Application/bsa-acs/tools/scripts/acsbuild.sh
+}
-mkdir -p ${WORKSPACE}/logs/
+install_deps()
+{
+ # install build dependencies for QEMU and EDK2
+ sudo apt update
+ sudo apt -y --no-install-recommends install build-essential pkg-config python3 \
+ libpixman-1-dev libglib2.0-dev wget \
+ ninja-build iasl gcc-aarch64-linux-gnu
+}
-# Create 16MB hdd with one ESP partition
+prepare_virtual_disk()
+{
+ mkdir -p virtual-disk/efi/boot
+ cp Build/SbsaQemu/RELEASE_GCC5/AARCH64/Shell.efi virtual-disk/efi/boot/bootaa64.efi
+ cp Build/Shell/DEBUG_GCC49/AARCH64/Sbsa.efi virtual-disk/
+ cp Build/Shell/DEBUG_GCC49/AARCH64/Bsa.efi virtual-disk/
+}
-truncate -s 16M sda.raw
-echo 'label:gpt' | /sbin/sfdisk sda.raw
-echo ',,U;' |/sbin/sfdisk sda.raw
+run_sbsa_acs()
+{
+ for sbsa_level in 3 4 5 6 7
+ do
+ echo "fs0:\Sbsa.efi -p 1 -l ${sbsa_level}" > virtual-disk/startup.nsh
+
+ # we start qemu in 'exit on reboot' mode so we quit on shutdown
+ echo "reset -c" >>virtual-disk/startup.nsh
+
+ timeout --foreground ${QEMU_TIMEOUT} ${QEMU_COMMAND} | tee logs/sbsa-acs-level${sbsa_level}.log
+ done
+}
-# Create disk and populate it with needed software
+run_bsa_acs()
+{
+ echo "fs0:\bsa.efi -sbsa" > virtual-disk/startup.nsh
-mkdir -p efi/boot
-cp Build/SbsaQemu/RELEASE_GCC5/AARCH64/Shell.efi efi/boot/bootaa64.efi
+ # we start qemu in 'exit on reboot' mode so we quit on shutdown
+ echo "reset -c" >>virtual-disk/startup.nsh
-echo "drive c:" >~/.mtoolsrc
-echo " file=\"${WORKSPACE}/sda.raw\" offset=1048576" >>~/.mtoolsrc
+ timeout --foreground ${QEMU_TIMEOUT} ${QEMU_COMMAND} | tee logs/bsa-acs.log
+}
-mformat c:
-mcopy -s efi ./Build/Shell/DEBUG_GCC49/AARCH64/Sbsa.efi c:
+run_acpiview()
+{
+ echo "acpiview" > virtual-disk/startup.nsh
-for sbsa_level in 3 4 5 6
-do
- echo "fs0:\Sbsa.efi -l ${sbsa_level}" > startup.nsh
+ # we start qemu in 'exit on reboot' mode so we quit on shutdown
+ echo "reset -c" >>virtual-disk/startup.nsh
- if [ "$sbsa_level" != "3" ]; then
- mdel c:startup.nsh
- fi
- mcopy startup.nsh c:
+ timeout --foreground ${QEMU_TIMEOUT} ${QEMU_COMMAND} | tee logs/acpiview.log
+}
-# run SBSA ACS in QEMU
- timeout --foreground ${QEMU_TIMEOUT} ./qemu/build/qemu-system-aarch64 \
- -machine sbsa-ref \
- -cpu cortex-a72 \
- -drive if=pflash,file=SBSA_FLASH0.fd,format=raw \
- -drive if=pflash,file=SBSA_FLASH1.fd,format=raw \
- -drive if=ide,file=sda.raw,format=raw \
- -serial mon:stdio \
- -nographic | tee logs/sbsa-acs-level${sbsa_level}.log
-done
+install_deps
+fetch_code
+
+build_qemu
+build_edk2
+build_sbsa_acs
+build_bsa_acs
+
+prepare_virtual_disk
+
+run_sbsa_acs
+run_bsa_acs
+run_acpiview