diff --git a/arch/arm/src/armv7-a/arm_gicv2.c b/arch/arm/src/armv7-a/arm_gicv2.c index 2f2e44359d..3f7fc667ed 100644 --- a/arch/arm/src/armv7-a/arm_gicv2.c +++ b/arch/arm/src/armv7-a/arm_gicv2.c @@ -523,7 +523,21 @@ int up_prioritize_irq(int irq, int priority) void up_trigger_irq(int irq, cpu_set_t cpuset) { - arm_cpu_sgi(irq, cpuset); + if (irq >= 0 && irq <= GIC_IRQ_SGI15) + { + arm_cpu_sgi(irq, cpuset); + } + else if (irq >= 0 && irq < NR_IRQS) + { + uintptr_t regaddr; + + /* Write '1' to the corresponding bit in the distributor Interrupt + * Set-Pending (ICDISPR) + */ + + regaddr = GIC_ICDISPR(irq); + putreg32(GIC_ICDISPR_INT(irq), regaddr); + } } /**************************************************************************** diff --git a/arch/arm/src/armv7-r/arm_gicv2.c b/arch/arm/src/armv7-r/arm_gicv2.c index 9de974bea5..bd5f0cf79f 100644 --- a/arch/arm/src/armv7-r/arm_gicv2.c +++ b/arch/arm/src/armv7-r/arm_gicv2.c @@ -522,7 +522,21 @@ int up_prioritize_irq(int irq, int priority) void up_trigger_irq(int irq, cpu_set_t cpuset) { - arm_cpu_sgi(irq, cpuset); + if (irq >= 0 && irq <= GIC_IRQ_SGI15) + { + arm_cpu_sgi(irq, cpuset); + } + else if (irq >= 0 && irq < NR_IRQS) + { + uintptr_t regaddr; + + /* Write '1' to the corresponding bit in the distributor Interrupt + * Set-Pending (ICDISPR) + */ + + regaddr = GIC_ICDISPR(irq); + putreg32(GIC_ICDISPR_INT(irq), regaddr); + } } #endif /* CONFIG_ARMV7R_HAVE_GICv2 */