diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index 1a744c576f..e9fb8a01ab 100644 --- a/xen/arch/arm/gic-v2.c +++ b/xen/arch/arm/gic-v2.c @@ -353,6 +353,10 @@ static void __init gicv2_dist_init(void) type = readl_gicd(GICD_TYPER); nr_lines = 32 * ((type & GICD_TYPE_LINES) + 1); + /* Only 1020 interrupts are supported */ + nr_lines = min(1020U, nr_lines); + gicv2_info.nr_lines = nr_lines; + gic_cpus = 1 + ((type & GICD_TYPE_CPUS) >> 5); printk("GICv2: %d lines, %d cpu%s%s (IID %8.8x).\n", nr_lines, gic_cpus, (gic_cpus == 1) ? "" : "s", @@ -377,9 +381,6 @@ static void __init gicv2_dist_init(void) for ( i = 32; i < nr_lines; i += 32 ) writel_gicd(~0x0, GICD_ICENABLER + (i / 32) * 4); - /* Only 1020 interrupts are supported */ - gicv2_info.nr_lines = min(1020U, nr_lines); - /* Turn on the distributor */ writel_gicd(GICD_CTL_ENABLE, GICD_CTLR); } diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 6fbc106757..c9200d24e1 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -607,6 +607,10 @@ static void __init gicv3_dist_init(void) if ( type & GICD_TYPE_LPIS ) gicv3_lpi_init_host_lpis(GICD_TYPE_ID_BITS(type)); + /* Only 1020 interrupts are supported */ + nr_lines = min(1020U, nr_lines); + gicv3_info.nr_lines = nr_lines; + printk("GICv3: %d lines, (IID %8.8x).\n", nr_lines, readl_relaxed(GICD + GICD_IIDR)); @@ -646,9 +650,6 @@ static void __init gicv3_dist_init(void) for ( i = NR_GIC_LOCAL_IRQS; i < nr_lines; i++ ) writeq_relaxed(affinity, GICD + GICD_IROUTER + i * 8); - - /* Only 1020 interrupts are supported */ - gicv3_info.nr_lines = min(1020U, nr_lines); } static int gicv3_enable_redist(void)