aboutsummaryrefslogtreecommitdiff
path: root/dev/interrupt
diff options
context:
space:
mode:
authorAndrei Homescu <ahomescu@google.com>2022-01-31 22:50:03 +0000
committerAndrei Homescu <ahomescu@google.com>2022-02-01 01:30:47 +0000
commit9e9f129d19de2940c6a6f95d3112ba0ca44489db (patch)
treeac8ff79281f40d16feff4abd889e0464c0bb989f /dev/interrupt
parent791c722eca5183f64cc8b1f607a4f302e9c930e5 (diff)
downloadcommon-9e9f129d19de2940c6a6f95d3112ba0ca44489db.tar.gz
[dev][interrupt][arm_gic] Fix arm_gic_init for GICv3
This fixes the build for platforms that use GICv3 but do not define GICC_OFFSET. Bug: 80147716 Change-Id: Ie7f6d0c4d61b6f3fd8007d80bd7b757f0446695c
Diffstat (limited to 'dev/interrupt')
-rw-r--r--dev/interrupt/arm_gic/arm_gic.c27
-rw-r--r--dev/interrupt/arm_gic/arm_gic_common.h1
2 files changed, 14 insertions, 14 deletions
diff --git a/dev/interrupt/arm_gic/arm_gic.c b/dev/interrupt/arm_gic/arm_gic.c
index 3ccb1335..c237cecd 100644
--- a/dev/interrupt/arm_gic/arm_gic.c
+++ b/dev/interrupt/arm_gic/arm_gic.c
@@ -314,18 +314,19 @@ static void arm_gic_init_hw(void)
void arm_gic_init(void) {
#ifdef GICBASE
- arm_gics[0].gicc_vaddr = GICBASE(0) + GICC_OFFSET;
- arm_gics[0].gicc_size = GICC_MIN_SIZE;
arm_gics[0].gicd_vaddr = GICBASE(0) + GICD_OFFSET;
arm_gics[0].gicd_size = GICD_MIN_SIZE;
#if GIC_VERSION > 2
arm_gics[0].gicr_vaddr = GICBASE(0) + GICR_OFFSET;
arm_gics[0].gicr_size = GICR_CPU_OFFSET(SMP_MAX_CPUS - 1) + GICR_MIN_SIZE;
-#endif // GIC_VERSION
+#else /* GIC_VERSION > 2 */
+ arm_gics[0].gicc_vaddr = GICBASE(0) + GICC_OFFSET;
+ arm_gics[0].gicc_size = GICC_MIN_SIZE;
+#endif /* GIC_VERSION > 2 */
#else
/* Platforms should define GICBASE if they want to call this */
panic("%s: GICBASE not defined\n", __func__);
-#endif // GICBASE
+#endif /* GICBASE */
arm_gic_init_hw();
}
@@ -352,14 +353,6 @@ static void arm_map_regs(const char* name,
void arm_gic_init_map(struct arm_gic_init_info* init_info)
{
- if (init_info->gicc_size < GICC_MIN_SIZE) {
- panic("%s: gicc mapping too small %zu\n", __func__,
- init_info->gicc_size);
- }
- arm_map_regs("gicc", &arm_gics[0].gicc_vaddr, init_info->gicc_paddr,
- init_info->gicc_size);
- arm_gics[0].gicc_size = init_info->gicc_size;
-
if (init_info->gicd_size < GICD_MIN_SIZE) {
panic("%s: gicd mapping too small %zu\n", __func__,
init_info->gicd_size);
@@ -376,7 +369,15 @@ void arm_gic_init_map(struct arm_gic_init_info* init_info)
arm_map_regs("gicr", &arm_gics[0].gicr_vaddr, init_info->gicr_paddr,
init_info->gicr_size);
arm_gics[0].gicr_size = init_info->gicr_size;
-#endif
+#else /* GIC_VERSION > 2 */
+ if (init_info->gicc_size < GICC_MIN_SIZE) {
+ panic("%s: gicc mapping too small %zu\n", __func__,
+ init_info->gicc_size);
+ }
+ arm_map_regs("gicc", &arm_gics[0].gicc_vaddr, init_info->gicc_paddr,
+ init_info->gicc_size);
+ arm_gics[0].gicc_size = init_info->gicc_size;
+#endif /* GIC_VERSION > 2 */
arm_gic_init_hw();
}
diff --git a/dev/interrupt/arm_gic/arm_gic_common.h b/dev/interrupt/arm_gic/arm_gic_common.h
index 24832a61..9505aab1 100644
--- a/dev/interrupt/arm_gic/arm_gic_common.h
+++ b/dev/interrupt/arm_gic/arm_gic_common.h
@@ -124,7 +124,6 @@ GEN_CP15_REG64_FUNCS(icc_sgi0r_el1, 2, c12);
#endif
#define GICC_LIMIT (0x0000)
-#define GICC_MIN_SIZE (0x0000)
#else /* GIC_VERSION > 2 */