在 2020/9/9 12:09, Huacai Chen 写道:
Reserve legacy LPC irqs (0~15) to avoid spurious interrupts.
It doesn't make sense at all.
How can you allocate IRQ without irqchip backing it?
- Jiaxun
Cc: stable@vger.kernel.org Signed-off-by: Huacai Chen chenhc@lemote.com
drivers/irqchip/irq-loongson-pch-pic.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c index 9bf6b9a..9f6719c 100644 --- a/drivers/irqchip/irq-loongson-pch-pic.c +++ b/drivers/irqchip/irq-loongson-pch-pic.c @@ -35,6 +35,7 @@ struct pch_pic { void __iomem *base;
- struct irq_domain *lpc_domain; struct irq_domain *pic_domain; u32 ht_vec_base; raw_spinlock_t pic_lock;
@@ -184,9 +185,9 @@ static void pch_pic_reset(struct pch_pic *priv) static int pch_pic_of_init(struct device_node *node, struct device_node *parent) {
- int i, base, err; struct pch_pic *priv; struct irq_domain *parent_domain;
- int err;
priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) @@ -213,6 +214,22 @@ static int pch_pic_of_init(struct device_node *node, goto iounmap_base; }
- base = irq_alloc_descs(-1, 0, NR_IRQS_LEGACY, 0);
- if (base < 0) {
pr_err("Failed to allocate LPC IRQ numbers\n");
goto iounmap_base;
- }
- priv->lpc_domain = irq_domain_add_legacy(node, NR_IRQS_LEGACY, 0, 0,
&irq_domain_simple_ops, NULL);
- if (!priv->lpc_domain) {
pr_err("Failed to add irqdomain for LPC controller");
goto iounmap_base;
- }
- for (i = 0; i < NR_IRQS_LEGACY; i++)
irq_set_chip_and_handler(i, &dummy_irq_chip, handle_simple_irq);
- priv->pic_domain = irq_domain_create_hierarchy(parent_domain, 0, PIC_COUNT, of_node_to_fwnode(node),