summaryrefslogtreecommitdiffstats
path: root/bsps/arm/include/bsp/arm-gic.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-02-27 15:10:53 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-02-28 11:50:18 +0100
commite33be09cfbf549228fea16f4421b277bfb9ae7dc (patch)
tree95e0ce523a2aa7525b39274edcb76206089ec133 /bsps/arm/include/bsp/arm-gic.h
parentRemove explicit file names from @file (diff)
downloadrtems-e33be09cfbf549228fea16f4421b277bfb9ae7dc.tar.bz2
bsps/arm: Support GIC group 0/1
Diffstat (limited to '')
-rw-r--r--bsps/arm/include/bsp/arm-gic.h37
1 files changed, 36 insertions, 1 deletions
diff --git a/bsps/arm/include/bsp/arm-gic.h b/bsps/arm/include/bsp/arm-gic.h
index ab5840919a..2abbea52cb 100644
--- a/bsps/arm/include/bsp/arm-gic.h
+++ b/bsps/arm/include/bsp/arm-gic.h
@@ -7,7 +7,7 @@
*/
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013, 2019 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -101,6 +101,41 @@ static inline bool gic_id_is_active(volatile gic_dist *dist, uint32_t id)
return (dist->icdabr[i] & bit) != 0;
}
+typedef enum {
+ GIC_GROUP_0,
+ GIC_GROUP_1
+} gic_group;
+
+static inline gic_group gic_id_get_group(
+ volatile gic_dist *dist,
+ uint32_t id
+)
+{
+ uint32_t i = GIC_ID_TO_ONE_BIT_REG_INDEX(id);
+ uint32_t bit = GIC_ID_TO_ONE_BIT_REG_BIT(id);
+
+ return (dist->icdigr[i] & bit) != 0 ? GIC_GROUP_1 : GIC_GROUP_0;
+}
+
+static inline void gic_id_set_group(
+ volatile gic_dist *dist,
+ uint32_t id,
+ gic_group group
+)
+{
+ uint32_t i = GIC_ID_TO_ONE_BIT_REG_INDEX(id);
+ uint32_t bit = GIC_ID_TO_ONE_BIT_REG_BIT(id);
+ uint32_t icdigr = dist->icdigr[i];
+
+ icdigr &= ~bit;
+
+ if (group == GIC_GROUP_1) {
+ icdigr |= bit;
+ }
+
+ dist->icdigr[i] = icdigr;
+}
+
static inline void gic_id_set_priority(
volatile gic_dist *dist,
uint32_t id,