summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-04-15 13:36:35 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-04-16 09:07:33 +0200
commitb80f920860dcb6566706054b07288a55964eac8f (patch)
treec6a52809c03fcce0fc0836536ebb9fba85c8a80a
parentbsps/powerpc: SMP support for SPR functions (diff)
downloadrtems-b80f920860dcb6566706054b07288a55964eac8f.tar.bz2
bsp/qoriq: SMP support for IRQ support
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/irq/irq.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c
index 25fb5f3c1b..8978b46aa7 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c
@@ -7,10 +7,10 @@
*/
/*
- * Copyright (c) 2010, 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2010-2014 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
- * Obere Lagerstr. 30
+ * Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
@@ -47,6 +47,9 @@
#define SPURIOUS 0xffff
+static rtems_interrupt_lock lock =
+ RTEMS_INTERRUPT_LOCK_INITIALIZER("QorIQ IRQ");
+
static const uint16_t vpr_and_dr_offsets [] = {
[0] = 0x10200 >> 4,
[1] = 0x10220 >> 4,
@@ -168,12 +171,12 @@ rtems_status_code qoriq_pic_set_priority(
volatile uint32_t *vpr = (volatile uint32_t *) &qoriq.pic + offs;
if (QORIQ_PIC_PRIORITY_IS_VALID(new_priority)) {
- rtems_interrupt_level level;
+ rtems_interrupt_lock_context lock_context;
- rtems_interrupt_disable(level);
+ rtems_interrupt_lock_acquire(&lock, &lock_context);
old_vpr = *vpr;
*vpr = VPR_PRIORITY_SET(old_vpr, (uint32_t) new_priority);
- rtems_interrupt_enable(level);
+ rtems_interrupt_lock_release(&lock, &lock_context);
} else if (new_priority < 0) {
old_vpr = *vpr;
} else {
@@ -220,11 +223,11 @@ static rtems_status_code pic_vector_enable(rtems_vector_number vector, uint32_t
if (bsp_interrupt_is_valid_vector(vector)) {
int offs = vpr_and_dr_offsets [vector] << 2;
volatile uint32_t *vpr = (volatile uint32_t *) &qoriq.pic + offs;
- rtems_interrupt_level level;
+ rtems_interrupt_lock_context lock_context;
- rtems_interrupt_disable(level);
+ rtems_interrupt_lock_acquire(&lock, &lock_context);
*vpr = (*vpr & ~VPR_MSK) | msk;
- rtems_interrupt_enable(level);
+ rtems_interrupt_lock_release(&lock, &lock_context);
}
return sc;