Commit a4f9edb2 authored by Marc Zyngier's avatar Marc Zyngier

irqchip/gic-v3: Expose GICD_TYPER in the rdist structure

Instead of exposing the GIC distributor IntID field in the rdist
structure that is passed to the ITS, let's replace it with a
copy of the whole GICD_TYPER register. We are going to need
some of this information at a later time.

No functionnal change.
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 38dd7c49
...@@ -1616,7 +1616,7 @@ static int __init its_alloc_lpi_tables(void) ...@@ -1616,7 +1616,7 @@ static int __init its_alloc_lpi_tables(void)
{ {
phys_addr_t paddr; phys_addr_t paddr;
lpi_id_bits = gic_rdists->id_bits; lpi_id_bits = GICD_TYPER_ID_BITS(gic_rdists->gicd_typer);
gic_rdists->prop_page = its_allocate_prop_table(GFP_NOWAIT); gic_rdists->prop_page = its_allocate_prop_table(GFP_NOWAIT);
if (!gic_rdists->prop_page) { if (!gic_rdists->prop_page) {
pr_err("Failed to allocate PROPBASE\n"); pr_err("Failed to allocate PROPBASE\n");
......
...@@ -877,7 +877,7 @@ static struct irq_chip gic_eoimode1_chip = { ...@@ -877,7 +877,7 @@ static struct irq_chip gic_eoimode1_chip = {
.flags = IRQCHIP_SET_TYPE_MASKED, .flags = IRQCHIP_SET_TYPE_MASKED,
}; };
#define GIC_ID_NR (1U << gic_data.rdists.id_bits) #define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer))
static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq, static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq,
irq_hw_number_t hw) irq_hw_number_t hw)
...@@ -1091,7 +1091,7 @@ static int __init gic_init_bases(void __iomem *dist_base, ...@@ -1091,7 +1091,7 @@ static int __init gic_init_bases(void __iomem *dist_base,
* The GIC only supports up to 1020 interrupt sources (SGI+PPI+SPI) * The GIC only supports up to 1020 interrupt sources (SGI+PPI+SPI)
*/ */
typer = readl_relaxed(gic_data.dist_base + GICD_TYPER); typer = readl_relaxed(gic_data.dist_base + GICD_TYPER);
gic_data.rdists.id_bits = GICD_TYPER_ID_BITS(typer); gic_data.rdists.gicd_typer = typer;
gic_irqs = GICD_TYPER_IRQS(typer); gic_irqs = GICD_TYPER_IRQS(typer);
if (gic_irqs > 1020) if (gic_irqs > 1020)
gic_irqs = 1020; gic_irqs = 1020;
......
...@@ -576,8 +576,8 @@ struct rdists { ...@@ -576,8 +576,8 @@ struct rdists {
phys_addr_t phys_base; phys_addr_t phys_base;
} __percpu *rdist; } __percpu *rdist;
struct page *prop_page; struct page *prop_page;
int id_bits;
u64 flags; u64 flags;
u32 gicd_typer;
bool has_vlpis; bool has_vlpis;
bool has_direct_lpi; bool has_direct_lpi;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment