diff options
author | Andrei Homescu <ahomescu@google.com> | 2022-01-31 22:50:03 +0000 |
---|---|---|
committer | Andrei Homescu <ahomescu@google.com> | 2022-02-01 01:30:47 +0000 |
commit | 9e9f129d19de2940c6a6f95d3112ba0ca44489db (patch) | |
tree | ac8ff79281f40d16feff4abd889e0464c0bb989f /dev/interrupt | |
parent | 791c722eca5183f64cc8b1f607a4f302e9c930e5 (diff) | |
download | common-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.c | 27 | ||||
-rw-r--r-- | dev/interrupt/arm_gic/arm_gic_common.h | 1 |
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 */ |