mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-26 16:58:55 +08:00
bsps: Add gicv3_trigger_sgi()
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user