[rtems commit] bsps: Add gicv3_trigger_sgi()
Sebastian Huber
sebh at rtems.org
Wed Apr 6 13:49:06 UTC 2022
Module: rtems
Branch: master
Commit: 518330069df68878934e0407a1c9e01036681d68
Changeset: http://git.rtems.org/rtems/commit/?id=518330069df68878934e0407a1c9e01036681d68
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Mon Mar 14 15:41:42 2022 +0100
bsps: Add gicv3_trigger_sgi()
---
bsps/include/dev/irq/arm-gicv3.h | 21 +++++++++++++++++++++
bsps/shared/dev/irq/arm-gicv3.c | 15 +--------------
2 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/bsps/include/dev/irq/arm-gicv3.h b/bsps/include/dev/irq/arm-gicv3.h
index 0583fded0a..cfc8cd3499 100644
--- a/bsps/include/dev/irq/arm-gicv3.h
+++ b/bsps/include/dev/irq/arm-gicv3.h
@@ -166,6 +166,27 @@ static inline bool gicv3_sgi_ppi_is_pending(
return (sgi_ppi->icspispendr[0] & (1U << vector)) != 0;
}
+static inline void gicv3_trigger_sgi(
+ rtems_vector_number vector,
+ uint32_t targets
+)
+{
+#ifndef ARM_MULTILIB_ARCH_V4
+ uint64_t mpidr;
+#else
+ uint32_t mpidr;
+#endif
+ mpidr = READ_SR(MPIDR);
+ uint64_t value = ICC_SGIR_AFFINITY2(MPIDR_AFFINITY2_GET(mpidr))
+ | ICC_SGIR_INTID(vector)
+ | ICC_SGIR_AFFINITY1(MPIDR_AFFINITY1_GET(mpidr))
+ | ICC_SGIR_CPU_TARGET_LIST(targets);
+#ifndef ARM_MULTILIB_ARCH_V4
+ value |= ICC_SGIR_AFFINITY3(MPIDR_AFFINITY3_GET(mpidr));
+#endif
+ WRITE64_SR(ICC_SGI1, value);
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/bsps/shared/dev/irq/arm-gicv3.c b/bsps/shared/dev/irq/arm-gicv3.c
index 682af67b21..2f08d9bcb7 100644
--- a/bsps/shared/dev/irq/arm-gicv3.c
+++ b/bsps/shared/dev/irq/arm-gicv3.c
@@ -385,20 +385,7 @@ rtems_status_code bsp_interrupt_get_affinity(
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)
{
-#ifndef ARM_MULTILIB_ARCH_V4
- uint64_t mpidr;
-#else
- uint32_t mpidr;
-#endif
- mpidr = READ_SR(MPIDR);
- uint64_t value = ICC_SGIR_AFFINITY2(MPIDR_AFFINITY2_GET(mpidr))
- | ICC_SGIR_INTID(vector)
- | ICC_SGIR_AFFINITY1(MPIDR_AFFINITY1_GET(mpidr))
- | ICC_SGIR_CPU_TARGET_LIST(targets);
-#ifndef ARM_MULTILIB_ARCH_V4
- value |= ICC_SGIR_AFFINITY3(MPIDR_AFFINITY3_GET(mpidr));
-#endif
- WRITE64_SR(ICC_SGI1, value);
+ gicv3_trigger_sgi(vector, targets);
}
uint32_t arm_gic_irq_processor_count(void)
More information about the vc
mailing list