]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
riscv: aclint_ipi: Support T-Head C900 CLINT
authorYao Zi <ziyao@disroot.org>
Fri, 6 Jun 2025 04:28:00 +0000 (04:28 +0000)
committerLeo Yu-Chi Liang <ycliang@andestech.com>
Thu, 3 Jul 2025 08:14:13 +0000 (16:14 +0800)
Although timer component of the CLINT isn't fully compatible with the
generic RISC-V ACLINT, the IPI component behaves the same.

As the CLINT doesn't have corresponding riscv_aclint_timer driver
available, let's try looking for a compatible SYSCON device directly
when no riscv_aclint_timer device could be found on IPI initialization.

Signed-off-by: Yao Zi <ziyao@disroot.org>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
arch/riscv/lib/aclint_ipi.c

index dcd7e5e6b3449ab22b0881f49fd0f14e0f1651c1..1c9a2d7030178ca7504c73f7ce9f2fe1d88aabe5 100644 (file)
@@ -29,6 +29,10 @@ int riscv_init_ipi(void)
 
        ret = uclass_get_device_by_driver(UCLASS_TIMER,
                                          DM_DRIVER_GET(riscv_aclint_timer), &dev);
+       if (ret == -ENODEV)
+               ret = uclass_get_device_by_driver(UCLASS_SYSCON,
+                                                 DM_DRIVER_GET(riscv_aclint_swi), &dev);
+
        if (ret)
                return ret;
 
@@ -66,6 +70,7 @@ int riscv_get_ipi(int hart, int *pending)
 
 static const struct udevice_id riscv_aclint_swi_ids[] = {
        { .compatible = "riscv,aclint-mswi", .data = RISCV_SYSCON_ACLINT },
+       { .compatible = "thead,c900-clint", .data = RISCV_SYSCON_ACLINT },
        { }
 };