Skip to contentSkip to conversation

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

PATCH Applied Inochi Amaoto 5 participants 12 messages Oct 31, 2024 – Dec 11, 2024

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

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

New version of T-HEAD C920[1] implement a fully featured ACLINT 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.

Add full support for T-HEAD C900 SSWI device.

[1] https://www.xrvm.com/product/xuantie/C920

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:
1. patch 2: add SMP depends in Kconfig

Changed from v4:
1. patch 1/2: update the description to mark the device is T-HEAD specific

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 v5 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 T-HEAD ACLINT device. This ACLINT device contains a SSWI device 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..64559ddc931a
@@ -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 THEAD ACLINT device. It provides
+  supervisor-level IPI functionality for a set of HARTs on a THEAD
+  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

Re: [PATCH v5 1/3] dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI

Quoted 8 lines · Inochi Amaoto

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

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

Hi, Conor,

Could you review it again? I have updated the description of the binding and mark the device is T-HEAD specific.

Regards,
Inochi

Reviewed-by
#3 lore raw

Re: [PATCH v5 1/3] dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI

Quoted 7 lines · Inochi Amaoto
Quoted 6 lines · Inochi Amaoto

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

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

Quoted 7 lines
Quoted 2 lines

Hi, Conor,

Could you review it again? I have updated the description of the binding and mark the device is T-HEAD specific.

Only thing I would say is that
title: Sophgo sg2044 ACLINT Supervisor-level Software Interrupt Device should probably be
title: T-Head c900 ACLINT Supervisor-level Software Interrupt Device or similar, since this isn't Sophgo's IP.

w/ that,

(dunno if Thomas is willing to change that on application)

#4 lore raw

Re: [PATCH v5 1/3] dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI

Quoted 22 lines · Conor Dooley
Quoted 7 lines · Inochi Amaoto
Quoted 6 lines · Inochi Amaoto

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

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

Quoted 7 lines
Quoted 2 lines

Hi, Conor,

Could you review it again? I have updated the description of the binding and mark the device is T-HEAD specific.

Only thing I would say is that
title: Sophgo sg2044 ACLINT Supervisor-level Software Interrupt Device should probably be
title: T-Head c900 ACLINT Supervisor-level Software Interrupt Device or similar, since this isn't Sophgo's IP.

Quoted 3 lines

w/ that,

(dunno if Thomas is willing to change that on application)

Yes

#5 lore raw

Re: [PATCH v5 1/3] dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI

Quoted 23 lines · Thomas Gleixner
Quoted 22 lines · Conor Dooley
Quoted 7 lines · Inochi Amaoto
Quoted 6 lines · Inochi Amaoto

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

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

Quoted 7 lines
Quoted 2 lines

Hi, Conor,

Could you review it again? I have updated the description of the binding and mark the device is T-HEAD specific.

Only thing I would say is that
title: Sophgo sg2044 ACLINT Supervisor-level Software Interrupt Device should probably be
title: T-Head c900 ACLINT Supervisor-level Software Interrupt Device or similar, since this isn't Sophgo's IP.

Quoted 5 lines
Quoted 3 lines

w/ that,

(dunno if Thomas is willing to change that on application)

Yes

Thanks.

merge bot Applied
#6 lore raw

[tip: irq/core] dt-bindings: interrupt-controller: Add T-HEAD C900 ACLINT SSWI device

In reply to Inochi Amaoto
The following commit has been merged into the irq/core branch of tip:

The following commit has been merged into the irq/core branch of tip:

Commit-ID:     2631c2b8e5c3406af62b60413ea04e155be9ebcc
Gitweb:        https://git.kernel.org/tip/2631c2b8e5c3406af62b60413ea04e155be9ebcc
Author:        Inochi Amaoto <[email protected]>
AuthorDate:    Thu, 31 Oct 2024 14:08:57 +08:00
Committer:     Thomas Gleixner <[email protected]>
CommitterDate: Thu, 07 Nov 2024 00:28:27 +01:00

dt-bindings: interrupt-controller: Add T-HEAD C900 ACLINT SSWI device

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

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

---
 Documentation/devicetree/bindings/interrupt-controller/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 0000000..8d33090
@@ -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: T-HEAD C900 ACLINT Supervisor-level Software Interrupt Device
+
+maintainers:
+  - Inochi Amaoto <[email protected]>
+
+description:
+  The SSWI device is a part of the THEAD ACLINT device. It provides
+  supervisor-level IPI functionality for a set of HARTs on a THEAD
+  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>;
+    };
+...
#7 lore raw

PATCH v5 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. This device allows the system with T-HEAD cpus 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 d82bcab233a1..62939fa630c2 100644
@@ -604,6 +604,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
merge bot Applied
#8 lore raw

[tip: irq/core] irqchip: Add T-HEAD C900 ACLINT SSWI driver

The following commit has been merged into the irq/core branch of tip:

The following commit has been merged into the irq/core branch of tip:

Commit-ID:     25caea955cc950507d179f3ef456404b475e8c23
Gitweb:        https://git.kernel.org/tip/25caea955cc950507d179f3ef456404b475e8c23
Author:        Inochi Amaoto <[email protected]>
AuthorDate:    Thu, 31 Oct 2024 14:08:58 +08:00
Committer:     Thomas Gleixner <[email protected]>
CommitterDate: Thu, 07 Nov 2024 00:28:27 +01:00

irqchip: Add T-HEAD C900 ACLINT SSWI driver

Add a driver for the T-HEAD C900 ACLINT SSWI device. This device allows the system with T-HEAD cpus 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 ef0fa69..9cac136 100644
@@ -619,6 +619,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 15ed6e9..25e9ad2 100644
@@ -103,6 +103,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 2361ed4..7990522 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,
#9 lore raw

PATCH v5 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
merge bot Applied
#10 lore raw

[tip: irq/core] riscv: defconfig: Enable T-HEAD C900 ACLINT SSWI drivers

The following commit has been merged into the irq/core branch of tip:

The following commit has been merged into the irq/core branch of tip:

Commit-ID:     6da33567c0bf24b642f69b029a2e9ea51fa75472
Gitweb:        https://git.kernel.org/tip/6da33567c0bf24b642f69b029a2e9ea51fa75472
Author:        Inochi Amaoto <[email protected]>
AuthorDate:    Thu, 31 Oct 2024 14:08:59 +08:00
Committer:     Thomas Gleixner <[email protected]>
CommitterDate: Thu, 07 Nov 2024 00:28:27 +01:00

riscv: defconfig: Enable T-HEAD C900 ACLINT SSWI drivers

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 2341393..5b1d632 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
#11 lore raw
In reply to Inochi Amaoto
This series was applied to riscv/linux.git (fixes) by Thomas Gleixner <[email protected]>:

Hello:

This series was applied to riscv/linux.git (fixes) by Thomas Gleixner <[email protected]>:

Quoted 8 lines · On Thu, 31 Oct 2024 14:08:56 +0800 you wrote:

New version of T-HEAD C920[1] implement a fully featured ACLINT 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.

Add full support for T-HEAD C900 SSWI device.

[...]

Here is the summary with links:
- [v5,1/3] dt-bindings: interrupt-controller: Add Sophgo SG2044 ACLINT SSWI (no matching commit)
- [v5,2/3] irqchip: add T-HEAD C900 ACLINT SSWI driver
(no matching commit)
- [v5,3/3] riscv: defconfig: Enable T-HEAD C900 ACLINT SSWI drivers

    https://git.kernel.org/riscv/c/6da33567c0bf

You are awesome, thank you!

Signature · 2 lines
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html