irqchip/sifive-plic: Use riscv_get_intc_hwnode() to get parent fwnode
authorAnup Patel <apatel@ventanamicro.com>
Thu, 22 Feb 2024 09:39:52 +0000 (15:09 +0530)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 23 Feb 2024 09:18:44 +0000 (10:18 +0100)
The RISC-V INTC irqdomain is always the parent irqdomain of SiFive PLIC
so use riscv_get_intc_hwnode() to get the parent fwnode similar to other
RISC-V drivers which use local interrupts.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240222094006.1030709-5-apatel@ventanamicro.com
drivers/irqchip/irq-sifive-plic.c

index 299feefa4207e0defb32a5b670023627c491b6fd..208fad76f560ee2d9251b4eabefddc2d27c27859 100644 (file)
@@ -423,6 +423,7 @@ static int plic_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        unsigned long plic_quirks = 0;
        struct plic_handler *handler;
+       struct irq_domain *domain;
        struct plic_priv *priv;
        bool cpuhp_setup;
        unsigned int cpu;
@@ -502,11 +503,11 @@ static int plic_probe(struct platform_device *pdev)
                }
 
                /* Find parent domain and register chained handler */
-               if (!plic_parent_irq && irq_find_host(parent.np)) {
-                       plic_parent_irq = irq_of_parse_and_map(to_of_node(dev->fwnode), i);
+               domain = irq_find_matching_fwnode(riscv_get_intc_hwnode(), DOMAIN_BUS_ANY);
+               if (!plic_parent_irq && domain) {
+                       plic_parent_irq = irq_create_mapping(domain, RV_IRQ_EXT);
                        if (plic_parent_irq)
-                               irq_set_chained_handler(plic_parent_irq,
-                                                       plic_handle_irq);
+                               irq_set_chained_handler(plic_parent_irq, plic_handle_irq);
                }
 
                /*