Skip to contentSkip to conversation

riscv: interrupt-controller: Add T-HEAD C900 ACLINT SSWI

PATCH Superseded Inochi Amaoto 3 participants 7 messages Oct 22, 2024 – Oct 31, 2024

Subsystems (4)

v4 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v4 cover riscv: interrupt-controller: Add T-HEAD C900 ACLINT SSWI

New version of T-HEAD C920 implement a fully featured ACLINT[1] device (This core is used by Sophgo SG2044). This ACLINT device provides a SSWI field to support fast S-mode IPI. This SSWI device is like the MSWI device in CLINT/ACLINT, but for S-mode. The only thing is different from the draft is that the T-HEAD version SSWI needs to write 0 on the SSWI address to clear the IPI.

Add full support for T-HEAD C900 SSWI device.

[1] https://github.com/riscv/riscv-aclint

Changed from v1:
1. patch 2: use computed reg offset to avoid uncessary reg additions when setting/clearing irq.
2. patch 2: fix mulitple format issues and improve some comments.
3. patch 2: disable cpu irq when CPU is stopped.

Changed from v2:
1. patch 2: add SXSTATUS.CLINTEE check for T-HEAD cores.
2. patch 2: add select GENERIC_IRQ_IPI_MUX in Kconfig

Changed from v3:
2. patch 2: add SMP depends in Kconfig

Inochi Amaoto (3):
dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI
irqchip: add T-HEAD C900 ACLINT SSWI driver
riscv: defconfig: Enable T-HEAD C900 ACLINT SSWI drivers

 .../thead,c900-aclint-sswi.yaml               |  58 ++++++
 arch/riscv/configs/defconfig                  |   1 +
 drivers/irqchip/Kconfig                       |  12 ++
 drivers/irqchip/Makefile                      |   1 +
 drivers/irqchip/irq-thead-c900-aclint-sswi.c  | 176 ++++++++++++++++++
 include/linux/cpuhotplug.h                    |   1 +
 6 files changed, 249 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/interrupt-controller/thead,c900-aclint-sswi.yaml
 create mode 100644 drivers/irqchip/irq-thead-c900-aclint-sswi.c

--
2.47.0

#1 lore raw

PATCH v4 1/3 dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI

Sophgo SG2044 has a new version of T-HEAD C920, which implement a fully featured ACLINT device. This ACLINT has an extra SSWI field to support fast S-mode IPI.

Add necessary compatible string for the T-HEAD ACLINT sswi device.

---
 .../thead,c900-aclint-sswi.yaml               | 58 +++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/interrupt-controller/thead,c900-aclint-sswi.yaml
Documentation/devicetree/bindings/interrupt-controller/thead,c900-aclint-sswi.yaml new file +58 -0
new file mode 100644
index 000000000000..0106fbf3ea1f
@@ -0,0 +1,58 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/interrupt-controller/thead,c900-aclint-sswi.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Sophgo sg2044 ACLINT Supervisor-level Software Interrupt Device
+
+maintainers:
+  - Inochi Amaoto <[email protected]>
+
+description:
+  The SSWI device is a part of the riscv ACLINT device. It provides
+  supervisor-level IPI functionality for a set of HARTs on a RISC-V
+  platform. It provides a register to set an IPI (SETSSIP) for each
+  HART connected to the SSWI device.
+
+properties:
+  compatible:
+    items:
+      - enum:
+          - sophgo,sg2044-aclint-sswi
+      - const: thead,c900-aclint-sswi
+
+  reg:
+    maxItems: 1
+
+  "#interrupt-cells":
+    const: 0
+
+  interrupt-controller: true
+
+  interrupts-extended:
+    minItems: 1
+    maxItems: 4095
+
+additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - "#interrupt-cells"
+  - interrupt-controller
+  - interrupts-extended
+
+examples:
+  - |
+    interrupt-controller@94000000 {
+      compatible = "sophgo,sg2044-aclint-sswi", "thead,c900-aclint-sswi";
+      reg = <0x94000000 0x00004000>;
+      #interrupt-cells = <0>;
+      interrupt-controller;
+      interrupts-extended = <&cpu1intc 1>,
+                            <&cpu2intc 1>,
+                            <&cpu3intc 1>,
+                            <&cpu4intc 1>;
+    };
+...
Signature · 1 line
2.47.0
#2 lore raw

PATCH v4 2/3 irqchip: add T-HEAD C900 ACLINT SSWI driver

In reply to Inochi Amaoto

Add a driver for the T-HEAD C900 ACLINT SSWI device, which is an enhanced implementation of the RISC-V ACLINT SSWI specification. This device allows the system to send ipi via fast device interface.

---
 drivers/irqchip/Kconfig                      |  12 ++
 drivers/irqchip/Makefile                     |   1 +
 drivers/irqchip/irq-thead-c900-aclint-sswi.c | 176 +++++++++++++++++++
 include/linux/cpuhotplug.h                   |   1 +
 4 files changed, 190 insertions(+)
 create mode 100644 drivers/irqchip/irq-thead-c900-aclint-sswi.c
drivers/irqchip/Kconfig +12 -0
index 341cd9ca5a05..b6e8411f28d3 100644
@@ -611,6 +611,18 @@ config STARFIVE_JH8100_INTC
 
 	  If you don't know what to do here, say Y.
 
+config THEAD_C900_ACLINT_SSWI
+	bool "THEAD C9XX ACLINT S-mode IPI Interrupt Controller"
+	depends on RISCV
+	depends on SMP
+	select IRQ_DOMAIN_HIERARCHY
+	select GENERIC_IRQ_IPI_MUX
+	help
+	  This enables support for T-HEAD specific ACLINT SSWI device
+	  support.
+
+	  If you don't know what to do here, say Y.
+
 config EXYNOS_IRQ_COMBINER
 	bool "Samsung Exynos IRQ combiner support" if COMPILE_TEST
 	depends on (ARCH_EXYNOS && ARM) || COMPILE_TEST
drivers/irqchip/Makefile +1 -0
index e3679ec2b9f7..583418261253 100644
@@ -101,6 +101,7 @@ obj-$(CONFIG_RISCV_APLIC_MSI)		+= irq-riscv-aplic-msi.o
 obj-$(CONFIG_RISCV_IMSIC)		+= irq-riscv-imsic-state.o irq-riscv-imsic-early.o irq-riscv-imsic-platform.o
 obj-$(CONFIG_SIFIVE_PLIC)		+= irq-sifive-plic.o
 obj-$(CONFIG_STARFIVE_JH8100_INTC)	+= irq-starfive-jh8100-intc.o
+obj-$(CONFIG_THEAD_C900_ACLINT_SSWI)	+= irq-thead-c900-aclint-sswi.o
 obj-$(CONFIG_IMX_IRQSTEER)		+= irq-imx-irqsteer.o
 obj-$(CONFIG_IMX_INTMUX)		+= irq-imx-intmux.o
 obj-$(CONFIG_IMX_MU_MSI)		+= irq-imx-mu-msi.o
drivers/irqchip/irq-thead-c900-aclint-sswi.c new file +176 -0

176 lines not on this page · raw message

include/linux/cpuhotplug.h +1 -0
index 2361ed4d2b15..799052249c7b 100644
@@ -147,6 +147,7 @@ enum cpuhp_state {
 	CPUHP_AP_IRQ_EIOINTC_STARTING,
 	CPUHP_AP_IRQ_AVECINTC_STARTING,
 	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING,
+	CPUHP_AP_IRQ_THEAD_ACLINT_SSWI_STARTING,
 	CPUHP_AP_IRQ_RISCV_IMSIC_STARTING,
 	CPUHP_AP_IRQ_RISCV_SBI_IPI_STARTING,
 	CPUHP_AP_ARM_MVEBU_COHERENCY,
Signature · 1 line
2.47.0
#3 lore raw

Re: [PATCH v4 2/3] irqchip: add T-HEAD C900 ACLINT SSWI driver

Quoted 5 lines · Inochi Amaoto

Add a driver for the T-HEAD C900 ACLINT SSWI device, which is an enhanced implementation of the RISC-V ACLINT SSWI specification. This device allows the system to send ipi via fast device interface.

Can someone from the RISCV folks please confirm that thtis is good to go?

Thanks,

tglx

#4 lore raw

Re: [PATCH v4 2/3] irqchip: add T-HEAD C900 ACLINT SSWI driver

Hi Thomas,

Quoted 10 lines · Thomas Gleixner
Quoted 5 lines · Inochi Amaoto

Add a driver for the T-HEAD C900 ACLINT SSWI device, which is an enhanced implementation of the RISC-V ACLINT SSWI specification. This device allows the system to send ipi via fast device interface.

Can someone from the RISCV folks please confirm that thtis is good to go?

The T-HEAD C900 ACLINT SSWI is not compliant to any RISC-V specification so at this point it is a T-HEAD specific device. The RISC-V ACLINT SSWI specification cited by this driver was never ratified by RISC-V international in-favor of the ratified RISC-V AIA specification which has a much cleaner way of doing IPI (as software injected MSIs) implemented by the IMSIC driver and this also supports IPI virtualization.

Since this is a T-HEAD specific implementation, the description in all patches of this series should be updated to replace references of the RISC-V ACLINT SSWI specification with publicly available T-HEAD documentation. Once, this is done, I think this series can go ahead.

Regards,
Anup

#5 lore raw

Re: [PATCH v4 2/3] irqchip: add T-HEAD C900 ACLINT SSWI driver

Quoted 21 lines · Anup Patel

Hi Thomas,

Quoted 10 lines · Thomas Gleixner
Quoted 5 lines · Inochi Amaoto

Add a driver for the T-HEAD C900 ACLINT SSWI device, which is an enhanced implementation of the RISC-V ACLINT SSWI specification. This device allows the system to send ipi via fast device interface.

Can someone from the RISCV folks please confirm that thtis is good to go?

The T-HEAD C900 ACLINT SSWI is not compliant to any RISC-V specification so at this point it is a T-HEAD specific device. The RISC-V ACLINT SSWI specification cited by this driver was never ratified by RISC-V international in-favor of the ratified RISC-V AIA specification which has a much cleaner way of doing IPI (as software injected MSIs) implemented by the IMSIC driver and this also supports IPI virtualization.

Quoted 7 lines

Since this is a T-HEAD specific implementation, the description in all patches of this series should be updated to replace references of the RISC-V ACLINT SSWI specification with publicly available T-HEAD documentation. Once, this is done, I think this series can go ahead.

Regards,
Anup

Thanks for your kindly explanation. I will update all the description about these patch.

Regards,
Inochi

#6 lore raw

PATCH v4 3/3 riscv: defconfig: Enable T-HEAD C900 ACLINT SSWI drivers

In reply to Inochi Amaoto

Add support for T-HEAD C900 ACLINT SSWI irqchip.

---
 arch/riscv/configs/defconfig | 1 +
 1 file changed, 1 insertion(+)
arch/riscv/configs/defconfig +1 -0
index 2341393cfac1..5b1d6325df85 100644
@@ -256,6 +256,7 @@ CONFIG_RPMSG_CTRL=y
 CONFIG_RPMSG_VIRTIO=y
 CONFIG_PM_DEVFREQ=y
 CONFIG_IIO=y
+CONFIG_THEAD_C900_ACLINT_SSWI=y
 CONFIG_PHY_SUN4I_USB=m
 CONFIG_PHY_STARFIVE_JH7110_DPHY_RX=m
 CONFIG_PHY_STARFIVE_JH7110_PCIE=m
Signature · 1 line
2.47.0