]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT
authorHuacai Chen <chenhuacai@loongson.cn>
Tue, 13 Jan 2026 08:59:35 +0000 (16:59 +0800)
committerThomas Gleixner <tglx@kernel.org>
Sun, 18 Jan 2026 13:39:17 +0000 (14:39 +0100)
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passes acpi_liointc->address to it.

This can only work on 64BIT platforms because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platform.

[ tglx: Make the cast explicit and use the casted address as argument for
   liointc_init() which takes a phys_addr_t as well. Sigh... ]

Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-3-chenhuacai@loongson.cn
drivers/irqchip/irq-loongson-liointc.c

index 0033c2188abc144090200ce265226460e5d37b0d..551597e2c428519f865f072ea57e7b5c1b93a00e 100644 (file)
@@ -394,8 +394,9 @@ static int __init acpi_cascade_irqdomain_init(void)
 
 int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic *acpi_liointc)
 {
-       int ret;
+       phys_addr_t addr = (phys_addr_t)acpi_liointc->address;
        struct fwnode_handle *domain_handle;
+       int ret;
 
        parent_int_map[0] = acpi_liointc->cascade_map[0];
        parent_int_map[1] = acpi_liointc->cascade_map[1];
@@ -403,14 +404,13 @@ int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic
        parent_irq[0] = irq_create_mapping(parent, acpi_liointc->cascade[0]);
        parent_irq[1] = irq_create_mapping(parent, acpi_liointc->cascade[1]);
 
-       domain_handle = irq_domain_alloc_fwnode(&acpi_liointc->address);
+       domain_handle = irq_domain_alloc_fwnode(&addr);
        if (!domain_handle) {
                pr_err("Unable to allocate domain handle\n");
                return -ENOMEM;
        }
 
-       ret = liointc_init(acpi_liointc->address, acpi_liointc->size,
-                          1, domain_handle, NULL);
+       ret = liointc_init(addr, acpi_liointc->size, 1, domain_handle, NULL);
        if (ret == 0)
                ret = acpi_cascade_irqdomain_init();
        else