From b80f920860dcb6566706054b07288a55964eac8f Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 15 Apr 2014 13:36:35 +0200 Subject: bsp/qoriq: SMP support for IRQ support --- c/src/lib/libbsp/powerpc/qoriq/irq/irq.c | 19 +++++++++++-------- 1 file 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 * @@ -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; -- cgit v1.2.3