summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/shared
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-09-10 10:41:35 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-09-10 10:43:41 +0200
commit90f44cd2dd55a0a109d5a4423ba158e29b8f6fbf (patch)
tree55aa2b52e44b8dd608b00473f2c2eca3402c6d21 /c/src/lib/libbsp/arm/shared
parentarm/lpc176x: Adding "eth" linker script section. (diff)
downloadrtems-90f44cd2dd55a0a109d5a4423ba158e29b8f6fbf.tar.bz2
bsps/arm: Fix GIC tm27 support
Diffstat (limited to 'c/src/lib/libbsp/arm/shared')
-rw-r--r--c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h44
1 files changed, 29 insertions, 15 deletions
diff --git a/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h b/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h
index 0c61881fef..95f3077716 100644
--- a/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h
+++ b/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h
@@ -7,7 +7,7 @@
*/
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -34,17 +34,19 @@
#define MUST_WAIT_FOR_INTERRUPT 1
-#define ARM_GIC_TM27_IRQ ARM_GIC_IRQ_SGI_13
+#define ARM_GIC_TM27_IRQ_LOW ARM_GIC_IRQ_SGI_12
-#define ARM_GIC_TM27_PRIO_LOW 0xfe
+#define ARM_GIC_TM27_IRQ_HIGH ARM_GIC_IRQ_SGI_13
+
+#define ARM_GIC_TM27_PRIO_LOW 0x80
#define ARM_GIC_TM27_PRIO_HIGH 0x00
static inline void Install_tm27_vector(void (*handler)(rtems_vector_number))
{
rtems_status_code sc = rtems_interrupt_handler_install(
- ARM_GIC_TM27_IRQ,
- "TM27",
+ ARM_GIC_TM27_IRQ_LOW,
+ "tm27 low",
RTEMS_INTERRUPT_UNIQUE,
(rtems_interrupt_handler) handler,
NULL
@@ -52,16 +54,31 @@ static inline void Install_tm27_vector(void (*handler)(rtems_vector_number))
assert(sc == RTEMS_SUCCESSFUL);
sc = arm_gic_irq_set_priority(
- ARM_GIC_TM27_IRQ,
+ ARM_GIC_TM27_IRQ_LOW,
ARM_GIC_TM27_PRIO_LOW
);
assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_interrupt_handler_install(
+ ARM_GIC_TM27_IRQ_HIGH,
+ "tm27 high",
+ RTEMS_INTERRUPT_UNIQUE,
+ (rtems_interrupt_handler) handler,
+ NULL
+ );
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = arm_gic_irq_set_priority(
+ ARM_GIC_TM27_IRQ_HIGH,
+ ARM_GIC_TM27_PRIO_HIGH
+ );
+ assert(sc == RTEMS_SUCCESSFUL);
}
static inline void Cause_tm27_intr(void)
{
rtems_status_code sc = arm_gic_irq_generate_software_irq(
- ARM_GIC_TM27_IRQ,
+ ARM_GIC_TM27_IRQ_LOW,
ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF,
0
);
@@ -70,18 +87,15 @@ static inline void Cause_tm27_intr(void)
static inline void Clear_tm27_intr(void)
{
- rtems_status_code sc = arm_gic_irq_set_priority(
- ARM_GIC_TM27_IRQ,
- ARM_GIC_TM27_PRIO_LOW
- );
- assert(sc == RTEMS_SUCCESSFUL);
+ /* Nothing to do */
}
static inline void Lower_tm27_intr(void)
{
- rtems_status_code sc = arm_gic_irq_set_priority(
- ARM_GIC_TM27_IRQ,
- ARM_GIC_TM27_PRIO_HIGH
+ rtems_status_code sc = arm_gic_irq_generate_software_irq(
+ ARM_GIC_TM27_IRQ_HIGH,
+ ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF,
+ 0
);
assert(sc == RTEMS_SUCCESSFUL);
}