[PATCH] bsps/arm: Improve GICv3 support

Kinsey Moore kinsey.moore at oarcorp.com
Tue Apr 16 14:51:49 UTC 2024


This adds warnings for arm_interrupt_enable_interrupts and
arm_interrupt_restore_interrupts. I suspect a missing header. They also
generate a link error on the a53_lp64_qemu bsp. I also dislike the
while(true), but I don't think we officially have anything against it and
there are existing examples in the codebase.

Kinsey

On Tue, Apr 16, 2024 at 3:24 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> In addtion to 1023, the GICC_IAR register may return 1022 as a special
> value.
> Simply check for a valid interrupt vector for the dispatching.
>
> Check the GICC_IAR again after the dispatch to quickly process a next
> interrupt
> without having to go through the interrupt prologue and epiloge.
> ---
>  bsps/shared/dev/irq/arm-gicv3.c | 16 +++++++++++-----
>  1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/bsps/shared/dev/irq/arm-gicv3.c
> b/bsps/shared/dev/irq/arm-gicv3.c
> index 88ac3c8293..dcfada6cd0 100644
> --- a/bsps/shared/dev/irq/arm-gicv3.c
> +++ b/bsps/shared/dev/irq/arm-gicv3.c
> @@ -42,12 +42,18 @@
>
>  void bsp_interrupt_dispatch(void)
>  {
> -  uint32_t icciar = READ_SR(ICC_IAR1);
> -  rtems_vector_number vector = GIC_CPUIF_ICCIAR_ACKINTID_GET(icciar);
> -  rtems_vector_number spurious = 1023;
> +  while (true) {
> +    uint32_t icciar = READ_SR(ICC_IAR1);
> +    rtems_vector_number vector = GIC_CPUIF_ICCIAR_ACKINTID_GET(icciar);
> +    uint32_t status;
>
> -  if (vector != spurious) {
> -    arm_interrupt_handler_dispatch(vector);
> +    if (!bsp_interrupt_is_valid_vector(vector)) {
> +      break;
> +    }
> +
> +    status = arm_interrupt_enable_interrupts();
> +    bsp_interrupt_handler_dispatch_unchecked(vector);
> +    arm_interrupt_restore_interrupts(status);
>
>      WRITE_SR(ICC_EOIR1, icciar);
>    }
> --
> 2.35.3
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20240416/3316a4aa/attachment.htm>


More information about the devel mailing list