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: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
Родитель
38dd7c494c
Коммит
a4f9edb29d
|
@ -1616,7 +1616,7 @@ static int __init its_alloc_lpi_tables(void)
|
|||
{
|
||||
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);
|
||||
if (!gic_rdists->prop_page) {
|
||||
pr_err("Failed to allocate PROPBASE\n");
|
||||
|
|
|
@ -877,7 +877,7 @@ static struct irq_chip gic_eoimode1_chip = {
|
|||
.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,
|
||||
irq_hw_number_t hw)
|
||||
|
@ -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)
|
||||
*/
|
||||
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);
|
||||
if (gic_irqs > 1020)
|
||||
gic_irqs = 1020;
|
||||
|
|
|
@ -576,8 +576,8 @@ struct rdists {
|
|||
phys_addr_t phys_base;
|
||||
} __percpu *rdist;
|
||||
struct page *prop_page;
|
||||
int id_bits;
|
||||
u64 flags;
|
||||
u32 gicd_typer;
|
||||
bool has_vlpis;
|
||||
bool has_direct_lpi;
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче