diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-11 11:54:30 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-12 08:00:13 +0200 |
commit | af207fa9f6ac891b9a61f36bd8382eb89358aeca (patch) | |
tree | 0f6604b9702087b467c48bd747b63f865b43c697 /c/src/lib/libbsp/powerpc | |
parent | Add interrupt server move (diff) | |
download | rtems-af207fa9f6ac891b9a61f36bd8382eb89358aeca.tar.bz2 |
Add interrupt vector set/get affinity
Close #3071.
Diffstat (limited to 'c/src/lib/libbsp/powerpc')
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/clock/clock-config.c | 16 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/include/irq.h | 8 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/irq/irq.c | 24 |
3 files changed, 19 insertions, 29 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/clock/clock-config.c b/c/src/lib/libbsp/powerpc/qoriq/clock/clock-config.c index 42fdfda77c..99e9f973e9 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/clock/clock-config.c +++ b/c/src/lib/libbsp/powerpc/qoriq/clock/clock-config.c @@ -56,12 +56,11 @@ static void qoriq_clock_handler_install(rtems_isr_entry *old_isr) *old_isr = NULL; #if defined(RTEMS_MULTIPROCESSING) && !defined(RTEMS_SMP) - sc = qoriq_pic_set_affinity( - CLOCK_INTERRUPT, - ppc_processor_id() - ); - if (sc != RTEMS_SUCCESSFUL) { - rtems_fatal_error_occurred(0xdeadbeef); + { + Processor_mask affinity; + + _Processor_mask_From_index(&affinity, ppc_processor_id()); + bsp_interrupt_set_affinity(CLOCK_INTERRUPT, &affinity); } #endif @@ -133,10 +132,7 @@ static void qoriq_clock_cleanup(void) qoriq_clock_handler_install(&old_isr) #define Clock_driver_support_set_interrupt_affinity(online_processors) \ - qoriq_pic_set_affinities( \ - CLOCK_INTERRUPT, \ - _Processor_mask_To_uint32_t(online_processors, 0) \ - ) + bsp_interrupt_set_affinity(CLOCK_INTERRUPT, online_processors) #define Clock_driver_support_shutdown_hardware() \ qoriq_clock_cleanup() diff --git a/c/src/lib/libbsp/powerpc/qoriq/include/irq.h b/c/src/lib/libbsp/powerpc/qoriq/include/irq.h index edda658ba9..feee951794 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/include/irq.h +++ b/c/src/lib/libbsp/powerpc/qoriq/include/irq.h @@ -372,14 +372,14 @@ rtems_status_code qoriq_pic_set_priority( int *old_priority ); -rtems_status_code qoriq_pic_set_affinity( +void bsp_interrupt_set_affinity( rtems_vector_number vector, - uint32_t processor_index + const Processor_mask *affinity ); -rtems_status_code qoriq_pic_set_affinities( +void bsp_interrupt_get_affinity( rtems_vector_number vector, - uint32_t processor_affinities + Processor_mask *affinity ); /** @} */ diff --git a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c index ea086215fc..facb53b347 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c @@ -147,30 +147,24 @@ rtems_status_code qoriq_pic_set_priority( return sc; } -rtems_status_code qoriq_pic_set_affinities( +void bsp_interrupt_set_affinity( rtems_vector_number vector, - uint32_t processor_affinities + const Processor_mask *affinity ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - - if (bsp_interrupt_is_valid_vector(vector)) { - volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); - - src_cfg->dr = processor_affinities; - } else { - sc = RTEMS_INVALID_ID; - } + volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); - return sc; + src_cfg->dr = _Processor_mask_To_uint32_t(affinity, 0); } -rtems_status_code qoriq_pic_set_affinity( +void bsp_interrupt_get_affinity( rtems_vector_number vector, - uint32_t processor_index + Processor_mask *affinity ) { - return qoriq_pic_set_affinities(vector, BSP_BIT32(processor_index)); + volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); + + _Processor_mask_From_uint32_t(affinity, src_cfg->dr, 0); } static rtems_status_code pic_vector_enable(rtems_vector_number vector, uint32_t msk) |