mbox series

[v2,0/6] Exception handling in HYP mode on ARMv7-A

Message ID 20211124194001.443232-1-jim.posen@gmail.com
Headers show
Series Exception handling in HYP mode on ARMv7-A | expand

Message

Jim Posen Nov. 24, 2021, 7:39 p.m. UTC
Currently, when U-Boot is running in hypervisor mode on ARMv7-A CPUs
with virtualization extensions, the exception handling does not work.
A couple things need to change which are detailed in my earlier
message to the u-boot mailing list with the subject "Exception
handling in HYP mode on ARMv7-A".

I have verified that this patch series works on the ODroid XU4 and
the Raspberry Pi 3B in Aarch32 mode when running in hypervisor mode.
One simple way to verify is by running the miscellaneous "exception"
command (CMD_EXCEPTION).

This can be tested with QEMU now. Configure with qemu_arm_defconfig
and add CMD_EXCEPTION and QEMU_ARM_32BIT_HAS_VIRT. Then run

qemu-system-arm \
    -machine virt,virtualization \
                -nographic -serial mon:stdio \
                -bios u-boot.bin

U-Boot 2021.10-...
...
=> exception undefined

Changes in v2:
- Fix CP15 register written to in start.S
- Check processor mode as HVBAR register is only accessible in HYP
        mode
- Add QEMU config option for ARM32 with virtualization extensions

Jim Posen (6):
  Compile for ARMv7-A with virtualization extensions
  Hypervisor mode interrupt vector table
  Set HVBAR register correctly
  Remove dead code
  Fix PC adjustment logic in exception handlers
  Config to target QEMU virt machine with virtualization

 arch/arm/Makefile                 |   4 +
 arch/arm/cpu/armv7/start.S        |   8 ++
 arch/arm/include/asm/u-boot-arm.h |  14 ++--
 arch/arm/lib/interrupts.c         |  26 +++---
 arch/arm/lib/relocate.S           |  13 +++
 arch/arm/lib/vectors.S            | 129 +++++++++++++++++++++++-------
 arch/arm/mach-bcm283x/Kconfig     |   3 +
 arch/arm/mach-exynos/Kconfig      |   1 +
 arch/arm/mach-qemu/Kconfig        |   6 ++
 9 files changed, 153 insertions(+), 51 deletions(-)

Comments

Tom Rini March 2, 2022, 3:39 p.m. UTC | #1
On Wed, Nov 24, 2021 at 02:39:55PM -0500, Jim Posen wrote:

> Currently, when U-Boot is running in hypervisor mode on ARMv7-A CPUs
> with virtualization extensions, the exception handling does not work.
> A couple things need to change which are detailed in my earlier
> message to the u-boot mailing list with the subject "Exception
> handling in HYP mode on ARMv7-A".
> 
> I have verified that this patch series works on the ODroid XU4 and
> the Raspberry Pi 3B in Aarch32 mode when running in hypervisor mode.
> One simple way to verify is by running the miscellaneous "exception"
> command (CMD_EXCEPTION).
> 
> This can be tested with QEMU now. Configure with qemu_arm_defconfig
> and add CMD_EXCEPTION and QEMU_ARM_32BIT_HAS_VIRT. Then run
> 
> qemu-system-arm \
>     -machine virt,virtualization \
>                 -nographic -serial mon:stdio \
>                 -bios u-boot.bin
> 
> U-Boot 2021.10-...
> ...
> => exception undefined
> 
> Changes in v2:
> - Fix CP15 register written to in start.S
> - Check processor mode as HVBAR register is only accessible in HYP
>         mode
> - Add QEMU config option for ARM32 with virtualization extensions
> 
> Jim Posen (6):
>   Compile for ARMv7-A with virtualization extensions
>   Hypervisor mode interrupt vector table
>   Set HVBAR register correctly
>   Remove dead code
>   Fix PC adjustment logic in exception handlers
>   Config to target QEMU virt machine with virtualization

Hey, sorry for the delay.  Can you please rebase this to current master?
It no longer builds on say am335x_evm, thanks!