diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index b32a9b5009..76b81bfb03 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -703,17 +703,32 @@ unsigned int gic_number_espis(void) return gic_hw_ops->info->nr_espi; } +static void __init gicv3_dist_espi_init_aff(uint64_t affinity) +{ + unsigned int i; + + for ( i = 0; i < gicv3_info.nr_espi; i++ ) + writeq_relaxed_non_atomic(affinity, GICD + GICD_IROUTERnE + i * 8); +} +#else + +static void __init gicv3_dist_espi_init_aff(uint64_t affinity) { } +#endif + static void __init gicv3_dist_espi_common_init(uint32_t type) { unsigned int espi_nr, i; espi_nr = min(1024U, GICD_TYPER_ESPIS_NUM(type)); +#ifdef CONFIG_GICV3_ESPI gicv3_info.nr_espi = espi_nr; +#endif /* The GIC HW doesn't support eSPI, so we can leave from here */ - if ( gicv3_info.nr_espi == 0 ) + if ( espi_nr == 0 ) return; - printk("GICv3: %u eSPI lines\n", gicv3_info.nr_espi); + if ( IS_ENABLED(CONFIG_GICV3_ESPI) ) + printk("GICv3: %u eSPI lines\n", espi_nr); /* The configuration for eSPIs is similar to that for regular SPIs */ for ( i = 0; i < espi_nr; i += 16 ) @@ -733,19 +748,6 @@ static void __init gicv3_dist_espi_common_init(uint32_t type) writel_relaxed(GENMASK(31, 0), GICD + GICD_IGROUPRnE + (i / 32) * 4); } -static void __init gicv3_dist_espi_init_aff(uint64_t affinity) -{ - unsigned int i; - - for ( i = 0; i < gicv3_info.nr_espi; i++ ) - writeq_relaxed_non_atomic(affinity, GICD + GICD_IROUTERnE + i * 8); -} -#else -static void __init gicv3_dist_espi_common_init(uint32_t type) { } - -static void __init gicv3_dist_espi_init_aff(uint64_t affinity) { } -#endif - static void __init gicv3_dist_init(void) { uint32_t type; diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/asm/gic_v3_defs.h index 3714cfeb7d..2081b2fe8f 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -63,7 +63,6 @@ #define GICD_IROUTERnE (0x8000) #define GICD_IROUTERnEN (0x9FFC) -#ifdef CONFIG_GICV3_ESPI #define GICD_TYPER_ESPI_SHIFT 8 #define GICD_TYPER_ESPI_RANGE_SHIFT 27 #define GICD_TYPER_ESPI_RANGE_MASK (0x1F) @@ -73,7 +72,6 @@ #define GICD_TYPER_ESPIS_NUM(typer) \ (((typer) & GICD_TYPER_ESPI) ? \ GICD_TYPER_ESPI_RANGE((typer) >> GICD_TYPER_ESPI_RANGE_SHIFT) : 0) -#endif /* Common between GICD_PIDR2 and GICR_PIDR2 */ #define GIC_PIDR2_ARCH_MASK (0xf0)