]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
irqchip/aslint-sswi: Resolve hart index
authorVladimir Kondratiev <vladimir.kondratiev@mobileye.com>
Thu, 12 Jun 2025 14:39:09 +0000 (17:39 +0300)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 26 Jun 2025 14:06:40 +0000 (16:06 +0200)
Resolve hart index according to assignment in the "riscv,hart-indexes"
property as defined in the specification [1]

Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250612143911.3224046-6-vladimir.kondratiev@mobileye.com
Link: https://github.com/riscvarchive/riscv-aclint
drivers/irqchip/irq-aclint-sswi.c

index 9d8b19be66b6110e01d98b900b4532d024e9d613..93e28e9f281f64da4568be37dc57b414354c3f56 100644 (file)
@@ -71,6 +71,7 @@ static int __init aclint_sswi_parse_irq(struct fwnode_handle *fwnode, void __iom
        for (u32 i = 0; i < contexts; i++) {
                struct of_phandle_args parent;
                unsigned long hartid;
+               u32 hart_index;
                int rc, cpu;
 
                rc = of_irq_parse_one(to_of_node(fwnode), i, &parent);
@@ -86,6 +87,11 @@ static int __init aclint_sswi_parse_irq(struct fwnode_handle *fwnode, void __iom
 
                cpu = riscv_hartid_to_cpuid(hartid);
 
+               rc = riscv_get_hart_index(fwnode, i, &hart_index);
+               if (rc) {
+                       pr_warn("%pfwP: hart index [%d] not found\n", fwnode, i);
+                       return -EINVAL;
+               }
                per_cpu(sswi_cpu_regs, cpu) = reg + hart_index * 4;
        }