summaryrefslogtreecommitdiffstats
path: root/bsps/arm/include/bsp/arm-gic-irq.h
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2019-08-16 19:14:33 +0000
committerJoel Sherrill <joel@rtems.org>2020-01-17 16:17:42 -0600
commitebf0f8f13fb2fd7a2f40bf8428f423f6ebbe0860 (patch)
tree69eebebde279a6e7595f4c04f8e2f29259e42ed0 /bsps/arm/include/bsp/arm-gic-irq.h
parentposix_devctl - Add support for SOCKCLOSE (diff)
downloadrtems-ebf0f8f13fb2fd7a2f40bf8428f423f6ebbe0860.tar.bz2
bsps/arm/shared: Add GICv3 implementation
This adds support for the GICv3 interrupt controller along with the redistributor to control SGIs and PPIs which wasn't present in GICv2 implementations. GICv3 implementations only optionally support memory-mapped GICC interface interaction and require system register access be implemented, so the GICC interface is accessed only through system registers.
Diffstat (limited to 'bsps/arm/include/bsp/arm-gic-irq.h')
-rw-r--r--bsps/arm/include/bsp/arm-gic-irq.h15
1 files changed, 7 insertions, 8 deletions
diff --git a/bsps/arm/include/bsp/arm-gic-irq.h b/bsps/arm/include/bsp/arm-gic-irq.h
index b3e893de72..219c3c7189 100644
--- a/bsps/arm/include/bsp/arm-gic-irq.h
+++ b/bsps/arm/include/bsp/arm-gic-irq.h
@@ -85,6 +85,12 @@ typedef enum {
ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF
} arm_gic_irq_software_irq_target_filter;
+void arm_gic_trigger_sgi(
+ rtems_vector_number vector,
+ arm_gic_irq_software_irq_target_filter filter,
+ uint8_t targets
+);
+
static inline rtems_status_code arm_gic_irq_generate_software_irq(
rtems_vector_number vector,
arm_gic_irq_software_irq_target_filter filter,
@@ -94,14 +100,7 @@ static inline rtems_status_code arm_gic_irq_generate_software_irq(
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (vector <= ARM_GIC_IRQ_SGI_15) {
- volatile gic_dist *dist = ARM_GIC_DIST;
-
- dist->icdsgir = GIC_DIST_ICDSGIR_TARGET_LIST_FILTER(filter)
- | GIC_DIST_ICDSGIR_CPU_TARGET_LIST(targets)
-#ifdef BSP_ARM_GIC_ENABLE_FIQ_FOR_GROUP_0
- | GIC_DIST_ICDSGIR_NSATT
-#endif
- | GIC_DIST_ICDSGIR_SGIINTID(vector);
+ arm_gic_trigger_sgi(vector, filter, targets);
} else {
sc = RTEMS_INVALID_ID;
}