diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-02-27 15:10:53 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-02-28 11:50:18 +0100 |
commit | e33be09cfbf549228fea16f4421b277bfb9ae7dc (patch) | |
tree | 95e0ce523a2aa7525b39274edcb76206089ec133 /bsps/arm/include/bsp/arm-gic.h | |
parent | Remove explicit file names from @file (diff) | |
download | rtems-e33be09cfbf549228fea16f4421b277bfb9ae7dc.tar.bz2 |
bsps/arm: Support GIC group 0/1
Diffstat (limited to '')
-rw-r--r-- | bsps/arm/include/bsp/arm-gic.h | 37 |
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, |