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 }