summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-07-11 11:54:30 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-07-12 08:00:13 +0200
commitaf207fa9f6ac891b9a61f36bd8382eb89358aeca (patch)
tree0f6604b9702087b467c48bd747b63f865b43c697 /c/src/lib/libbsp/powerpc
parentAdd interrupt server move (diff)
downloadrtems-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.c16
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/include/irq.h8
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/irq/irq.c24
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)