Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
On Thu, Sep 24, 2020 at 01:17:10AM +0100, Andre Przywara wrote: > U-Boot on QEMU-arm64 can be used in two configurations: Loaded directly > via QEMU's -bios option, or as a non-secure payload (BL33) via > ARM Trusted Firmware-A (TF-A). > In the latter case we need to define CONFIG_TFABOOT, to accommodate > the first flash bank being secure only, and manually set SYS_TEXT_BASE > to the address configured in TF-A (currently 0x6000). > > To avoid this poorly documented adventure, we enable a position > independent build, and also let the flash regions be always detected > through the DTB. This results in a single build to work under both > scenarios, and also allows to move the BL33 load address in TF-A to > something lower in the future. > > For this to work, we have to first make PIE work when booted from ROM. > While writing to ROM should not hurt, it might trigger CFI flash > sequences, and indeed crashes for me in the middle of the fixup routine. > This is covered by patch 1/5, which skips the whole fixup routine if the > offset is actually 0 (as it is in our case). > Also we have to decouple the relative initial stack pointer from the > PIE option, as we always need to use the fixed version, pointing to > RAM (patch 2/5). > Patch 3/5 drops the hard-coded flash address, instead U-Boot can already > read all required information from QEMU's DTB. > Patch 4/5 is a cleanup, while the last patch enables the PIE build. > > With this series the very same u-boot.bin file works when directly loaded > from the QEMU command line (-bios), but also when embedded into TF-A's > fip.bin, removing the need for case-specific build options. > > Please have a look! This sounds very useful. Would it be possible to extend CI to create the files for the TF-A case and also run that through test.py? -- Tom signature.asc Description: PGP signature
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
> > > > > I tried testing this series but don't see any output while loading > > U-Boot from ROM: > > > > # ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios > > u-boot.bin > > TF-A runs at EL3 so you should test with > -machine virt,secure=true,virtualization=true > > The bios parameter has to point to the TF-A bl1.bin binary. see TF-A's > docs/plat/qemu.rst: BL1 is used as the BootROM, supplied with the -bios > argument. > > But, wanted to test it without loading U-boot from TF-A , for instance if > I just disable the > CONFIG_POSITION_INDEPENDENT, it works: ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios u-boot.bin U-Boot 2020.10-rc5-00020-gca11959a34f4 (Sep 24 2020 - 14:34:25 +0530) DRAM: 128 MiB Flash: 128 MiB *** Warning - bad CRC, using default environment PCI: Failed autoconfig bar 14 In:pl011@900 Out: pl011@900 Err: pl011@900 Net: No ethernet found. Thanks -Amit
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
> > Did you regenerate the .config? Otherwise, CONFIG_INIT_SP_RELATIVE may > still be enabled. > I cloned a fresh U-boot source (with top commit 55004fa43364e) , and the top of it applied these patches. After generating the .config using "qemu_arm64_defconfig" where CONFIG_INIT_SP_RELATIVE is disabled. # # ARM architecture # CONFIG_ARM64=y CONFIG_POSITION_INDEPENDENT=y # CONFIG_INIT_SP_RELATIVE is not set # CONFIG_GIC_V3_ITS is not set Using ./qemu-system-aarch64 --version QEMU emulator version 5.0.50 (v5.0.0-2210-g45db94cc90c2-dirty) U-boot is crossed compile using "gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu" Thanks -Amit
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
Hi, Andre Przywara (5): > arm64: PIE: Skip fixups if distance is zero > arm64: PIE: Allow fixed stack pointer > qemu-arm: Remove need to specify flash banks > qemu: Drop ARCH_SUPPORT_TFABOOT > qemu/arm64: Enable POSITION_INDEPENDENT > > arch/arm/Kconfig | 4 ++-- > arch/arm/cpu/armv8/start.S | 3 ++- > configs/qemu_arm64_defconfig | 1 + > include/configs/qemu-arm.h | 8 +--- > 4 files changed, 6 insertions(+), 10 deletions(-) > > -- > 2.17.5 > > I tried testing this series but don't see any output while loading U-Boot from ROM: # ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios u-boot.bin strangely enough SP is having a value of 0 after execution: (qemu) info registers PC=1a00 X00=54a0f100303f X01=0007c000 X02= X03=401fe000 X04= X05= X06=0030 X07=401fe008 X08= X09=1408d51e115f X10= X11= X12= X13= X14= X15= X16= X17= X18= X19= X20= X21= X22= X23= X24= X25= X26= X27= X28= X29=00c8 X30=1408d51e39cb SP= PSTATE=03c5 EL1h FPCR= FPSR= Wondering , if I have missed something ? Thanks -Amit
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
On 24/09/2020 09:44, Heinrich Schuchardt wrote: > On 24.09.20 09:57, Amit Tomar wrote: >> Hi, >> >> Andre Przywara (5): >> >> arm64: PIE: Skip fixups if distance is zero >> arm64: PIE: Allow fixed stack pointer >> qemu-arm: Remove need to specify flash banks >> qemu: Drop ARCH_SUPPORT_TFABOOT >> qemu/arm64: Enable POSITION_INDEPENDENT >> >> arch/arm/Kconfig | 4 ++-- >> arch/arm/cpu/armv8/start.S | 3 ++- >> configs/qemu_arm64_defconfig | 1 + >> include/configs/qemu-arm.h | 8 +--- >> 4 files changed, 6 insertions(+), 10 deletions(-) >> >> -- >> 2.17.5 >> >> >> I tried testing this series but don't see any output while loading >> U-Boot from ROM: >> >> # ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios >> u-boot.bin > > TF-A runs at EL3 so you should test with > -machine virt,secure=true,virtualization=true This is true, but the point of this series is to work both within TF-A and without it. So it should work (and does for me!) with Amit's line above. > The bios parameter has to point to the TF-A bl1.bin binary. see TF-A's > docs/plat/qemu.rst: BL1 is used as the BootROM, supplied with the -bios > argument. Yeah, and it seems to be even more complicated, since you have to glue fip.bin within a certain offset to bl1.bin, into one file to give to -bios. I use: $ cp build/qemu/debug/bl1.bin flash.bin $ dd if=build/qemu/debug/fip.bin of=flash.bin bs=4k seek=64 ... and make sure to give QEMU more than 512MB of RAM, since the default load address for U-Boot is there. Actually fixing this annoyance was the main motivation for this series. Once people agreed that this series is making some sense, I plan to move the load address in TF-A and improve the documentation in both TF-A and QEMU on this. Thanks! Andre > > U-Boot is BL33. > > Best regards > > Heinrich > >> >> strangely enough SP is having a value of 0 after execution: >> >> (qemu) info registers >> PC=1a00 X00=54a0f100303f X01=0007c000 >> X02= X03=401fe000 X04= >> X05= X06=0030 X07=401fe008 >> X08= X09=1408d51e115f X10= >> X11= X12= X13= >> X14= X15= X16= >> X17= X18= X19= >> X20= X21= X22= >> X23= X24= X25= >> X26= X27= X28= >> X29=00c8 X30=1408d51e39cb SP= >> PSTATE=03c5 EL1h FPCR= FPSR= >> >> Wondering , if I have missed something ? >> >> Thanks >> -Amit >
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
On Thu, 24 Sep 2020 at 09:58, Amit Tomar wrote: > > Hi, > > Andre Przywara (5): >> >> arm64: PIE: Skip fixups if distance is zero >> arm64: PIE: Allow fixed stack pointer >> qemu-arm: Remove need to specify flash banks >> qemu: Drop ARCH_SUPPORT_TFABOOT >> qemu/arm64: Enable POSITION_INDEPENDENT >> >> arch/arm/Kconfig | 4 ++-- >> arch/arm/cpu/armv8/start.S | 3 ++- >> configs/qemu_arm64_defconfig | 1 + >> include/configs/qemu-arm.h | 8 +--- >> 4 files changed, 6 insertions(+), 10 deletions(-) >> >> -- >> 2.17.5 >> > > I tried testing this series but don't see any output while loading U-Boot > from ROM: > > # ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios > u-boot.bin > > strangely enough SP is having a value of 0 after execution: > > (qemu) info registers > PC=1a00 X00=54a0f100303f X01=0007c000 > X02= X03=401fe000 X04= > X05= X06=0030 X07=401fe008 > X08= X09=1408d51e115f X10= > X11= X12= X13= > X14= X15= X16= > X17= X18= X19= > X20= X21= X22= > X23= X24= X25= > X26= X27= X28= > X29=00c8 X30=1408d51e39cb SP= > PSTATE=03c5 EL1h FPCR= FPSR= > > Wondering , if I have missed something ? > Did you regenerate the .config? Otherwise, CONFIG_INIT_SP_RELATIVE may still be enabled.
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
On 24.09.20 09:57, Amit Tomar wrote: > Hi, > > Andre Przywara (5): > > arm64: PIE: Skip fixups if distance is zero > arm64: PIE: Allow fixed stack pointer > qemu-arm: Remove need to specify flash banks > qemu: Drop ARCH_SUPPORT_TFABOOT > qemu/arm64: Enable POSITION_INDEPENDENT > > arch/arm/Kconfig | 4 ++-- > arch/arm/cpu/armv8/start.S | 3 ++- > configs/qemu_arm64_defconfig | 1 + > include/configs/qemu-arm.h | 8 +--- > 4 files changed, 6 insertions(+), 10 deletions(-) > > -- > 2.17.5 > > > I tried testing this series but don't see any output while loading > U-Boot from ROM: > > # ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios > u-boot.bin TF-A runs at EL3 so you should test with -machine virt,secure=true,virtualization=true The bios parameter has to point to the TF-A bl1.bin binary. see TF-A's docs/plat/qemu.rst: BL1 is used as the BootROM, supplied with the -bios argument. U-Boot is BL33. Best regards Heinrich > > strangely enough SP is having a value of 0 after execution: > > (qemu) info registers > PC=1a00 X00=54a0f100303f X01=0007c000 > X02= X03=401fe000 X04= > X05= X06=0030 X07=401fe008 > X08= X09=1408d51e115f X10= > X11= X12= X13= > X14= X15= X16= > X17= X18= X19= > X20= X21= X22= > X23= X24= X25= > X26= X27= X28= > X29=00c8 X30=1408d51e39cb SP= > PSTATE=03c5 EL1h FPCR= FPSR= > > Wondering , if I have missed something ? > > Thanks > -Amit
Re: [PATCH 0/5] qemu-arm64: Allow booting via Trusted Firmware
On 24/09/2020 08:57, Amit Tomar wrote: > Hi, > > Andre Przywara (5): > > arm64: PIE: Skip fixups if distance is zero > arm64: PIE: Allow fixed stack pointer > qemu-arm: Remove need to specify flash banks > qemu: Drop ARCH_SUPPORT_TFABOOT > qemu/arm64: Enable POSITION_INDEPENDENT > > arch/arm/Kconfig | 4 ++-- > arch/arm/cpu/armv8/start.S | 3 ++- > configs/qemu_arm64_defconfig | 1 + > include/configs/qemu-arm.h | 8 +--- > 4 files changed, 6 insertions(+), 10 deletions(-) > > -- > 2.17.5 > > > I tried testing this series but don't see any output while loading > U-Boot from ROM: > > # ./qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -bios > u-boot.bin I can't reproduce this (read: works for me). I tried with cross-gcc 9.2 & QEMU 5.0.0, and with Ubuntu-arm64 (GCC 7.5 & QEMU 2.11.1). Did you apply against master, used qemu_arm64_defconfig, cleaned the build directory? Is your (self-built?) QEMU working? Are you using the actual generated binary? I pushed the branch to https://github.com/Andre-ARM/u-boot/commits/qemu-tfa, please try this. Cheers, Andre > > strangely enough SP is having a value of 0 after execution: > > (qemu) info registers > PC=1a00 X00=54a0f100303f X01=0007c000 > X02= X03=401fe000 X04= > X05= X06=0030 X07=401fe008 > X08= X09=1408d51e115f X10= > X11= X12= X13= > X14= X15= X16= > X17= X18= X19= > X20= X21= X22= > X23= X24= X25= > X26= X27= X28= > X29=00c8 X30=1408d51e39cb SP= > PSTATE=03c5 EL1h FPCR= FPSR= > > Wondering , if I have missed something ? > > Thanks > -Amit