diff options
Diffstat (limited to 'ldcg-sbsa-firmware/build-sbsa-acs.sh')
-rw-r--r-- | ldcg-sbsa-firmware/build-sbsa-acs.sh | 133 |
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 |