From 84d2aae63bde0041de968ab273e239adf28a26cb Mon Sep 17 00:00:00 2001 From: Bowen Wang Date: Wed, 6 Dec 2023 16:02:13 +0800 Subject: [PATCH] virtio-mmio: add secure virtio mmio device register api In secure state, call virtio_register_mmio_device_secure() to register the secure virtio mmio device; In non-secure state, call virtio_register_mmio_device() to register the non-secure virtio mmio device; Board should ensure not mixed use the secure and non-seucre mmio device. Signed-off-by: Bowen Wang --- drivers/virtio/virtio-mmio.c | 51 ++++++++++++++++++++++++++---- include/nuttx/virtio/virtio-mmio.h | 12 +++++++ 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/drivers/virtio/virtio-mmio.c b/drivers/virtio/virtio-mmio.c index 2d1d404c819..fde390595cb 100644 --- a/drivers/virtio/virtio-mmio.c +++ b/drivers/virtio/virtio-mmio.c @@ -806,18 +806,14 @@ static int virtio_mmio_init_device(FAR struct virtio_mmio_device_s *vmdev, } /**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: virtio_register_mmio_device + * Name: virtio_register_mmio_device_ * * Description: - * Register virtio mmio device to the virtio bus + * Register secure or non-secure virtio mmio device to the virtio bus * ****************************************************************************/ -int virtio_register_mmio_device(FAR void *regs, int irq) +static int virtio_register_mmio_device_(FAR void *regs, int irq, bool secure) { FAR struct virtio_mmio_device_s *vmdev; int ret; @@ -843,6 +839,15 @@ int virtio_register_mmio_device(FAR void *regs, int irq) goto err; } +#ifdef CONFIG_ARCH_TRUSTZONE_SECURE + if (secure) + { + up_secure_irq(irq, true); + } +#else + UNUSED(secure); +#endif + /* Attach the intterupt before register the device driver */ ret = irq_attach(irq, virtio_mmio_interrupt, vmdev); @@ -868,3 +873,35 @@ err: kmm_free(vmdev); return ret; } + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: virtio_register_mmio_device + * + * Description: + * Register virtio mmio device to the virtio bus + * + ****************************************************************************/ + +int virtio_register_mmio_device(FAR void *regs, int irq) +{ + return virtio_register_mmio_device_(regs, irq, false); +} + +/**************************************************************************** + * Name: virtio_register_mmio_device_secure + * + * Description: + * Register secure virtio mmio device to the virtio bus + * + ****************************************************************************/ + +#ifdef CONFIG_ARCH_TRUSTZONE_SECURE +int virtio_register_mmio_device_secure(FAR void *regs, int irq) +{ + return virtio_register_mmio_device_(regs, irq, true); +} +#endif diff --git a/include/nuttx/virtio/virtio-mmio.h b/include/nuttx/virtio/virtio-mmio.h index cecf4cc8171..ac6a07cc18a 100644 --- a/include/nuttx/virtio/virtio-mmio.h +++ b/include/nuttx/virtio/virtio-mmio.h @@ -61,6 +61,18 @@ extern "C" int virtio_register_mmio_device(FAR void *regs, int irq); +/**************************************************************************** + * Name: virtio_register_mmio_device_secure + * + * Description: + * Register secure virtio mmio device to the virtio bus + * + ****************************************************************************/ + +#ifdef CONFIG_ARCH_TRUSTZONE_SECURE +int virtio_register_mmio_device_secure(FAR void *regs, int irq); +#endif + #undef EXTERN #ifdef __cplusplus }