diff options
author | Jeenu Viswambharan <jeenu.viswambharan@arm.com> | 2017-09-22 08:32:09 +0100 |
---|---|---|
committer | Jeenu Viswambharan <jeenu.viswambharan@arm.com> | 2017-10-16 16:50:02 +0100 |
commit | 22966106967b01768db5140ce20f62dd7f20358f (patch) | |
tree | 12fb94ce26956473305108a7dd45ca8062b2fcc0 /drivers/arm/gic/common/gic_common.c | |
parent | d55a445069736e2652b44ddfeb9ea4d306796a0a (diff) |
GIC: Add helpers to set interrupt configuration
The helpers perform read-modify-write on GIC*_ICFGR registers, but don't
serialise callers. Any serialisation must be taken care of by the
callers.
Change-Id: I71995f82ff2c7f70d37af0ede30d6ee18682fd3f
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
Diffstat (limited to 'drivers/arm/gic/common/gic_common.c')
-rw-r--r-- | drivers/arm/gic/common/gic_common.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/arm/gic/common/gic_common.c b/drivers/arm/gic/common/gic_common.c index 71155a97..d523772b 100644 --- a/drivers/arm/gic/common/gic_common.c +++ b/drivers/arm/gic/common/gic_common.c @@ -299,3 +299,15 @@ void gicd_set_ipriorityr(uintptr_t base, unsigned int id, unsigned int pri) { mmio_write_8(base + GICD_IPRIORITYR + id, pri & GIC_PRI_MASK); } + +void gicd_set_icfgr(uintptr_t base, unsigned int id, unsigned int cfg) +{ + unsigned bit_num = id & ((1 << ICFGR_SHIFT) - 1); + uint32_t reg_val = gicd_read_icfgr(base, id); + + /* Clear the field, and insert required configuration */ + reg_val &= ~(GIC_CFG_MASK << bit_num); + reg_val |= ((cfg & GIC_CFG_MASK) << bit_num); + + gicd_write_icfgr(base, id, reg_val); +} |