* [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform
@ 2026-06-04 14:39 Joel Stanley
2026-06-04 14:39 ` [PATCH v2 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
` (6 more replies)
0 siblings, 7 replies; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
Add initial support for the Tenstorrent Atlantis platform, based on the
Atlantis SoC featuring 8x RVA23-compliant Tenstorrent Ascalon-XG cores.
The series adds a bare bones device tree with the CPU, interrupt
controllers and a UART. This will be replaced in time with a full
featured machine once details are available.
Patches 1, 2, 3, 5, and 6 add compatibles or extensions to existing
bindings.
Patch 4 adds a new binding document for the aclint timer device.
The series has been boot tested on QEMU[1] and internal development
platforms.
[1] https://lore.kernel.org/qemu-riscv/20260603065859.592063-1-joel@jms.id.au/
Thanks to Anup and Connor for the reviews on v1.
v1:
https://lore.kernel.org/linux-riscv/20260603074222.593243-1-joel@jms.id.au/
Changes since v1:
- Rework mtimer bindings, fix reg property, update compatible and use
priv spec as reference
- Drop Drew's sob from bindings patches I wrote
- Add Drew's co-developed-by to dts patch
- Correct aplic num-sources
Drew Fustini (1):
dt-bindings: riscv: add Smrnmi extension description
Joel Stanley (6):
dt-bindings: aplic: Add Tenstorrent Atlantis compatible
dt-bindings: imsics: Add Tenstorrent Atlantis compatible
dt-bindings: riscv: cpus: Add Tenstorrent Ascalon
dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
dt-bindings: riscv: Add Tenstorrent Atlantis platform
riscv: dts: tenstorrent: Add Atlantis platform
MAINTAINERS | 1 +
.../interrupt-controller/riscv,aplic.yaml | 1 +
.../interrupt-controller/riscv,imsics.yaml | 1 +
.../devicetree/bindings/riscv/cpus.yaml | 5 +
.../devicetree/bindings/riscv/extensions.yaml | 6 +
.../bindings/riscv/tenstorrent.yaml | 4 +
.../bindings/timer/riscv,aclint-mtimer.yaml | 56 +++
arch/riscv/boot/dts/tenstorrent/Makefile | 1 +
.../boot/dts/tenstorrent/atlantis-evb.dts | 33 ++
.../boot/dts/tenstorrent/atlantis-soc.dtsi | 471 ++++++++++++++++++
10 files changed, 579 insertions(+)
create mode 100644 Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
create mode 100644 arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
create mode 100644 arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
--
2.47.3
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 14:39 ` [PATCH v2 2/7] dt-bindings: imsics: " Joel Stanley
` (5 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
Add compatible for APLIC in Tenstorrent Atlantis SoC.
Reviewed-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
.../devicetree/bindings/interrupt-controller/riscv,aplic.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/interrupt-controller/riscv,aplic.yaml b/Documentation/devicetree/bindings/interrupt-controller/riscv,aplic.yaml
index 0718071444d2..d4e17861eda4 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/riscv,aplic.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/riscv,aplic.yaml
@@ -29,6 +29,7 @@ properties:
- enum:
- qemu,aplic
- spacemit,k3-aplic
+ - tenstorrent,atlantis-aplic
- const: riscv,aplic
reg:
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/7] dt-bindings: imsics: Add Tenstorrent Atlantis compatible
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
2026-06-04 14:39 ` [PATCH v2 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 16:44 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
` (4 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
Add compatible for IMSICS in Tenstorrent Atlantis SoC.
Reviewed-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
.../devicetree/bindings/interrupt-controller/riscv,imsics.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/interrupt-controller/riscv,imsics.yaml b/Documentation/devicetree/bindings/interrupt-controller/riscv,imsics.yaml
index feec122bddde..442b8870f9c5 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/riscv,imsics.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/riscv,imsics.yaml
@@ -49,6 +49,7 @@ properties:
- enum:
- qemu,imsics
- spacemit,k3-imsics
+ - tenstorrent,atlantis-imsics
- const: riscv,imsics
reg:
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
2026-06-04 14:39 ` [PATCH v2 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
2026-06-04 14:39 ` [PATCH v2 2/7] dt-bindings: imsics: " Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 16:44 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
` (3 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
Add Tenstorrent Ascalon microarchitecture and the Tenstorrent Ascalon-XG
core.
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
Documentation/devicetree/bindings/riscv/cpus.yaml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
index 5feeb2203050..2a57bd14569e 100644
--- a/Documentation/devicetree/bindings/riscv/cpus.yaml
+++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
@@ -75,6 +75,11 @@ properties:
- sifive,x280
- const: sifive,rocket0
- const: riscv
+ - items:
+ - enum:
+ - tenstorrent,ascalon-xg
+ - const: tenstorrent,ascalon
+ - const: riscv
- const: riscv # Simulator only
description:
Identifies that the hart uses the RISC-V instruction set
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
` (2 preceding siblings ...)
2026-06-04 14:39 ` [PATCH v2 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 14:51 ` sashiko-bot
2026-06-04 16:43 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 5/7] dt-bindings: riscv: add Smrnmi extension description Joel Stanley
` (2 subsequent siblings)
6 siblings, 2 replies; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
The mtimer hardware is described in The RISC-V Instruction Set Manual,
Volume II Privileged Architecture, 3.2.1. Machine Timer (mtime and
mtimecmp) Registers.
The ACLINT was a standalone spec that made it to v1.0-rc4, but was never
ratified. As explained by Anup:
> Only the timer defined by ACLINT specification is relevant but the
> RISC-V privileged specification already provides a high-level
> definition of mtime and mtimecmp MMIO registers (see section "Machine
> Timer (mtime and mtimecmp) Registers").
>
> Due to the above reasons, we dropped our plans to ratify ACLINT
> specification in-favor of AIA IMSIC and RISC-V Privileged
> specification.
Link: https://lists.riscv.org/g/tech-aia/topic/connections_between_aia_and/107177435
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v2:
- Use priv spec as reference
- Add soc name to tenstorrent compatible
- Fix reg property description
---
MAINTAINERS | 1 +
.../bindings/timer/riscv,aclint-mtimer.yaml | 56 +++++++++++++++++++
2 files changed, 57 insertions(+)
create mode 100644 Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
diff --git a/MAINTAINERS b/MAINTAINERS
index 2fb1c75afd16..43dd9873bbc5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -23005,6 +23005,7 @@ M: Joel Stanley <jms@oss.tenstorrent.com>
L: linux-riscv@lists.infradead.org
S: Maintained
T: git https://github.com/tenstorrent/linux.git
+F: Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
F: Documentation/devicetree/bindings/clock/tenstorrent,atlantis-prcm-rcpu.yaml
F: Documentation/devicetree/bindings/riscv/tenstorrent.yaml
F: arch/riscv/boot/dts/tenstorrent/
diff --git a/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
new file mode 100644
index 000000000000..1d645570b191
--- /dev/null
+++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/timer/riscv,aclint-mtimer.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: RISC-V Advanced Core Local Interruptor (ACLINT) Machine-level Timer
+
+maintainers:
+ - Joel Stanley <jms@oss.tenstorrent.com>
+
+description:
+ The RISC-V machine-level timer exposes the memory-mapped mtime and per-hart
+ mtimecmp registers defined in The RISC-V Instruction Set Manual, Volume II
+ Privileged Architecture, 3.2.1. Machine Timer (mtime and mtimecmp) Registers.
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - tenstorrent,atlantis-aclint-mtimer
+ - qemu,aclint-mtimer
+ - const: riscv,aclint-mtimer
+
+ reg:
+ items:
+ - description: MTIMECMP registers, one per hart
+ - description: MTIME register
+
+ reg-names:
+ items:
+ - const: mtimecmp
+ - const: mtime
+
+ interrupts-extended:
+ minItems: 1
+ maxItems: 4095
+
+required:
+ - compatible
+ - reg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ timer@ac000000 {
+ compatible = "tenstorrent,atlantis-aclint-mtimer", "riscv,aclint-mtimer";
+ reg = <0xac000000 0x8000>, <0xac008000 0x8000>;
+ reg-names = "mtimecmp", "mtime";
+ interrupts-extended = <&cpu1intc 7>,
+ <&cpu2intc 7>,
+ <&cpu3intc 7>,
+ <&cpu4intc 7>;
+ };
+...
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 5/7] dt-bindings: riscv: add Smrnmi extension description
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
` (3 preceding siblings ...)
2026-06-04 14:39 ` [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 14:39 ` [PATCH v2 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
2026-06-04 14:39 ` [PATCH v2 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
6 siblings, 0 replies; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Drew Fustini, Anup Patel, Albert Ou,
Alexandre Ghiti, Nicholas Piggin, Michael Ellerman, linux-riscv,
devicetree, Conor Dooley
From: Drew Fustini <fustini@kernel.org>
Add description for the Smrnmi extension (Resumable Non-Maskable
Interrupts) as ratified in 35eb3948bf0b ("Merge pull request #1492 from
riscv/smrnmi-ratified") of the riscv-isa-manual.
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index 2b0a8a93bb21..3e3b4481724f 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -193,6 +193,12 @@ properties:
ratified at commit d70011dde6c2 ("Update to ratified state")
of riscv-j-extension.
+ - const: smrnmi
+ description: |
+ The standard Smrnmi extension for Resumable Non-Maskable Interrupts
+ as ratified in commit 35eb3948bf0b ("Merge pull request #1492 from
+ riscv/smrnmi-ratified") of the riscv-isa-manual.
+
- const: smstateen
description: |
The standard Smstateen extension for controlling access to CSRs
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
` (4 preceding siblings ...)
2026-06-04 14:39 ` [PATCH v2 5/7] dt-bindings: riscv: add Smrnmi extension description Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 16:43 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
6 siblings, 1 reply; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
Add compatible for the Tenstorrent Atlantis platform.
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
Documentation/devicetree/bindings/riscv/tenstorrent.yaml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/tenstorrent.yaml b/Documentation/devicetree/bindings/riscv/tenstorrent.yaml
index e15359b2aab6..7fb640e38455 100644
--- a/Documentation/devicetree/bindings/riscv/tenstorrent.yaml
+++ b/Documentation/devicetree/bindings/riscv/tenstorrent.yaml
@@ -22,6 +22,10 @@ properties:
items:
- const: tenstorrent,blackhole-card
- const: tenstorrent,blackhole
+ - description: Tenstorrent Atlantis
+ items:
+ - const: tenstorrent,atlantis-evb
+ - const: tenstorrent,atlantis
additionalProperties: true
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 7/7] riscv: dts: tenstorrent: Add Atlantis platform
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
` (5 preceding siblings ...)
2026-06-04 14:39 ` [PATCH v2 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
@ 2026-06-04 14:39 ` Joel Stanley
2026-06-04 14:50 ` sashiko-bot
2026-06-04 16:47 ` Conor Dooley
6 siblings, 2 replies; 15+ messages in thread
From: Joel Stanley @ 2026-06-04 14:39 UTC (permalink / raw)
To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
Cc: Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
Add initial support for the Tenstorrent Atlantis platform, based on the
Atlantis SoC featuring 8x RVA23-compliant Tenstorrent Ascalon-XG cores.
The evb machine represents an internal bringup vehicle with just the
interrupt controllers and a UART. This will be replaced in time with a
full featured machine once details are available.
Co-developed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v2:
- Update mtimer compatible
- Add Drew's co-developed-by
- Correct aplic num-sources count
---
arch/riscv/boot/dts/tenstorrent/Makefile | 1 +
.../boot/dts/tenstorrent/atlantis-evb.dts | 33 ++
.../boot/dts/tenstorrent/atlantis-soc.dtsi | 471 ++++++++++++++++++
3 files changed, 505 insertions(+)
create mode 100644 arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
create mode 100644 arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
diff --git a/arch/riscv/boot/dts/tenstorrent/Makefile b/arch/riscv/boot/dts/tenstorrent/Makefile
index 2c81faaba462..92d8bb1a683f 100644
--- a/arch/riscv/boot/dts/tenstorrent/Makefile
+++ b/arch/riscv/boot/dts/tenstorrent/Makefile
@@ -1,2 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_TENSTORRENT) += blackhole-card.dtb
+dtb-$(CONFIG_ARCH_TENSTORRENT) += atlantis-evb.dtb
diff --git a/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts b/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
new file mode 100644
index 000000000000..06259cca8357
--- /dev/null
+++ b/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/dts-v1/;
+
+#include "atlantis-soc.dtsi"
+
+/ {
+ model = "Tenstorrent Atlantis development platform";
+ compatible = "tenstorrent,atlantis-evb", "tenstorrent,atlantis";
+
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x00000000 0x0 0x80000000>,
+ <0x1 0x80000000 0x0 0x80000000>;
+ };
+
+ aliases {
+ serial0 = &uart1;
+ };
+
+ chosen {
+ bootargs = "earlycon console=ttyS0";
+ stdout-path = "serial0";
+ };
+};
+
+&uart1 {
+ /delete-property/ clocks;
+ clock-frequency = <5000000>;
+ status = "okay";
+};
diff --git a/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi b/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
new file mode 100644
index 000000000000..2513f0dcc62e
--- /dev/null
+++ b/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
@@ -0,0 +1,471 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/dts-v1/;
+
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/clock/tenstorrent,atlantis-prcm-rcpu.h>
+
+/ {
+ model = "Tenstorrent Atlantis";
+ compatible = "tenstorrent,atlantis";
+
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ timebase-frequency = <1000000000>;
+
+ cpu0: cpu@0 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <0>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu0_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu1: cpu@1 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <1>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu1_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu2: cpu@2 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <2>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu2_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu3: cpu@3 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <3>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu3_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu4: cpu@4 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <4>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu4_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu5: cpu@5 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <5>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu5_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu6: cpu@6 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <6>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu6_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ cpu7: cpu@7 {
+ compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
+ device_type = "cpu";
+ reg = <7>;
+ riscv,isa-base = "rv64i";
+ riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "h",
+ "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif",
+ "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr",
+ "zifencei", "zihintntl", "zihintpause", "zihpm",
+ "zimop", "za64rs", "zawrs", "zfa", "zfbfmin", "zfh",
+ "zfhmin", "zca", "zcb", "zcmop", "zba", "zbb",
+ "zbs", "zkr", "zkt", "zvbb", "zvbc", "zvfbfmin",
+ "zvfbfwma", "zvfh", "zvfhmin", "zvkt", "sha",
+ "shcounterenw", "shgatpa", "shtvala", "shvsatpa",
+ "shvstvala", "shvstvecd", "smaia", "smmpm", "smnpm",
+ "smrnmi", "smstateen", "ssaia", "ssccptr",
+ "sscofpmf", "sscounterenw", "ssnpm", "ssstateen",
+ "sstc", "sstvala", "sstvecd", "ssu64xl", "svade",
+ "svinval", "svnapot", "svpbmt";
+ riscv,cbom-block-size = <64>;
+ riscv,cbop-block-size = <64>;
+ riscv,cboz-block-size = <64>;
+ i-cache-block-size = <64>;
+ i-cache-size = <0x10000>;
+ i-cache-sets = <128>;
+ d-cache-block-size = <64>;
+ d-cache-size = <0x40000>;
+ d-cache-sets = <128>;
+ next-level-cache = <&l2_cache>;
+ mmu-type = "riscv,sv57";
+
+ cpu7_intc: interrupt-controller {
+ compatible = "riscv,cpu-intc";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ };
+ };
+
+ l2_cache: l2-cache {
+ compatible = "cache";
+ cache-block-size = <64>;
+ cache-level = <2>;
+ cache-size = <0xc00000>;
+ cache-sets = <512>;
+ cache-unified;
+ };
+ };
+
+ clocks {
+ osc_24m: clock-24m {
+ compatible = "fixed-clock";
+ clock-frequency = <24000000>;
+ clock-output-names = "osc_24m";
+ #clock-cells = <0>;
+ };
+ };
+
+ soc {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ compatible = "simple-bus";
+ interrupt-parent = <&aplic_s>;
+ ranges;
+
+ imsic_m: interrupt-controller@a0000000 {
+ compatible = "tenstorrent,atlantis-imsics", "riscv,imsics";
+ riscv,num-ids = <255>;
+ riscv,guest-index-bits = <6>;
+ reg = <0x0 0xa0000000 0x0 0x200000>;
+ interrupts-extended = <&cpu0_intc 11>, <&cpu1_intc 11>,
+ <&cpu2_intc 11>, <&cpu3_intc 11>,
+ <&cpu4_intc 11>, <&cpu5_intc 11>,
+ <&cpu6_intc 11>, <&cpu7_intc 11>;
+ msi-controller;
+ #msi-cells = <0>;
+ interrupt-controller;
+ #interrupt-cells = <0>;
+ };
+
+ mtimer: timer@a2180000 {
+ compatible = "tenstorrent,atlantis-aclint-mtimer", "riscv,aclint-mtimer";
+ interrupts-extended = <&cpu0_intc 7>, <&cpu1_intc 7>,
+ <&cpu2_intc 7>, <&cpu3_intc 7>,
+ <&cpu4_intc 7>, <&cpu5_intc 7>,
+ <&cpu6_intc 7>, <&cpu7_intc 7>;
+ reg = <0x0 0xa2180000 0x0 0x8000 0x0 0xa2188000 0x0 0x8000>;
+ };
+
+ imsic_s: interrupt-controller@a4000000 {
+ compatible = "tenstorrent,atlantis-imsics", "riscv,imsics";
+ riscv,num-ids = <255>;
+ riscv,guest-index-bits = <6>;
+ reg = <0x0 0xa4000000 0x0 0x200000>;
+ interrupts-extended = <&cpu0_intc 9>, <&cpu1_intc 9>,
+ <&cpu2_intc 9>, <&cpu3_intc 9>,
+ <&cpu4_intc 9>, <&cpu5_intc 9>,
+ <&cpu6_intc 9>, <&cpu7_intc 9>;
+ msi-controller;
+ #msi-cells = <0>;
+ interrupt-controller;
+ #interrupt-cells = <0>;
+ };
+
+ aplic_m: interrupt-controller@cc000000 {
+ compatible = "tenstorrent,atlantis-aplic", "riscv,aplic";
+ msi-parent = <&imsic_m>;
+ riscv,delegation = <&aplic_s 1 96>;
+ riscv,children = <&aplic_s>;
+ reg = <0x0 0xcc000000 0x0 0x4000000>;
+ riscv,num-sources = <128>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ #address-cells = <0>;
+ };
+
+ prcm_rcpu: clock-controller@d0000000 {
+ compatible = "tenstorrent,atlantis-prcm-rcpu";
+ reg = <0x00 0xd0000000 0x00 0x10000>;
+ clocks = <&osc_24m>;
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ assigned-clocks = <&prcm_rcpu CLK_RCPU_ROOT>, <&prcm_rcpu CLK_NOCC_CLK>;
+ assigned-clock-parents = <&prcm_rcpu CLK_RCPU_ROOT>,
+ <&prcm_rcpu CLK_NOC_PLL>;
+ };
+
+ uart0: serial@d4100000 {
+ compatible = "snps,dw-apb-uart";
+ interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&prcm_rcpu CLK_UART0_PCLK>;
+ reg = <0x0 0xd4100000 0x0 0x10000>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart1: serial@d4110000 {
+ compatible = "snps,dw-apb-uart";
+ interrupts = <39 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&prcm_rcpu CLK_UART1_PCLK>;
+ reg = <0x0 0xd4110000 0x0 0x10000>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart2: serial@d4120000 {
+ compatible = "snps,dw-apb-uart";
+ interrupts = <40 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&prcm_rcpu CLK_UART2_PCLK>;
+ reg = <0x0 0xd4120000 0x0 0x10000>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart3: serial@d4130000 {
+ compatible = "snps,dw-apb-uart";
+ interrupts = <41 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&prcm_rcpu CLK_UART3_PCLK>;
+ reg = <0x0 0xd4130000 0x0 0x10000>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ uart4: serial@d4140000 {
+ compatible = "snps,dw-apb-uart";
+ interrupts = <42 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&prcm_rcpu CLK_UART4_PCLK>;
+ reg = <0x0 0xd4140000 0x0 0x10000>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ status = "disabled";
+ };
+
+ aplic_s: interrupt-controller@e8000000 {
+ compatible = "tenstorrent,atlantis-aplic", "riscv,aplic";
+ msi-parent = <&imsic_s>;
+ riscv,num-sources = <128>;
+ reg = <0x0 0xe8000000 0x0 0x4000000>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ #address-cells = <0>;
+ };
+ };
+};
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 7/7] riscv: dts: tenstorrent: Add Atlantis platform
2026-06-04 14:39 ` [PATCH v2 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
@ 2026-06-04 14:50 ` sashiko-bot
2026-06-04 16:47 ` Conor Dooley
1 sibling, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-06-04 14:50 UTC (permalink / raw)
To: Joel Stanley; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The device tree assigns `CLK_RCPU_ROOT` as its own parent, creating an invalid cyclic clock dependency.
--
commit edef4717eb8086a5ba285a43a4a322f90272540a
Author: Joel Stanley <joel@jms.id.au>
riscv: dts: tenstorrent: Add Atlantis platform
Add initial support for the Tenstorrent Atlantis platform, based on the
Atlantis SoC featuring 8x RVA23-compliant Tenstorrent Ascalon-XG cores.
[ ... ]
> diff --git a/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi b/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
> new file mode 100644
> index 0000000000000..2513f0dcc62e5
> --- /dev/null
> +++ b/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
[ ... ]
> + prcm_rcpu: clock-controller@d0000000 {
> + compatible = "tenstorrent,atlantis-prcm-rcpu";
> + reg = <0x00 0xd0000000 0x00 0x10000>;
> + clocks = <&osc_24m>;
> + #clock-cells = <1>;
> + #reset-cells = <1>;
> + assigned-clocks = <&prcm_rcpu CLK_RCPU_ROOT>, <&prcm_rcpu CLK_NOCC_CLK>;
> + assigned-clock-parents = <&prcm_rcpu CLK_RCPU_ROOT>,
> + <&prcm_rcpu CLK_NOC_PLL>;
[Severity: Medium]
Does this configuration intentionally set CLK_RCPU_ROOT as its own parent?
The assigned-clocks property specifies <&prcm_rcpu CLK_RCPU_ROOT> as its
first entry, and the corresponding mapped entry in assigned-clock-parents
is also <&prcm_rcpu CLK_RCPU_ROOT>.
This instructs the Common Clock Framework to set the clock's parent to itself.
The CCF does not support self-parenting and will return an error or trigger
cycle detection warnings, preventing proper clock initialization. Is it possible
an external oscillator or upstream PLL was intended as the parent here?
> + };
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260604143957.668047-1-joel@jms.id.au?part=7
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
2026-06-04 14:39 ` [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
@ 2026-06-04 14:51 ` sashiko-bot
2026-06-04 16:43 ` Conor Dooley
1 sibling, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-06-04 14:51 UTC (permalink / raw)
To: Joel Stanley; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The `reg` and `reg-names` properties implicitly require exactly two items, preventing configurations with a shared or external `mtime` register.
- [Low] The `interrupts-extended` and `reg-names` properties are missing from the `required` list in the RISC-V ACLINT MTIMER devicetree binding.
--
commit 1c0856d0470ac7f69215cb07bf901304f4595567
Author: Joel Stanley <joel@jms.id.au>
dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
This commit introduces the device tree binding for the RISC-V machine-level
timer (MTIMER). It supports configuring the memory-mapped mtime and per-hart
mtimecmp registers.
Link: https://lists.riscv.org/g/tech-aia/topic/connections_between_aia_and/107177435
> diff --git a/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
> new file mode 100644
> index 0000000000000..1d645570b1914
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
[ ... ]
> +properties:
> + compatible:
> + items:
> + - enum:
> + - tenstorrent,atlantis-aclint-mtimer
> + - qemu,aclint-mtimer
> + - const: riscv,aclint-mtimer
> +
> + reg:
> + items:
> + - description: MTIMECMP registers, one per hart
> + - description: MTIME register
[Severity: Medium]
The RISC-V ACLINT specification allows the mtime register to be shared across
multiple MTIMER devices. By defining the reg array with two items, does this
schema implicitly enforce exactly two items, preventing configurations where
mtime is shared or external?
Should this include a minItems constraint to support secondary MTIMER devices
that only implement the mtimecmp region?
> +
> + reg-names:
> + items:
> + - const: mtimecmp
> + - const: mtime
[Severity: Medium]
Similarly, does this implicitly require exactly two names, which would
incorrectly reject device trees that lack a dedicated mtime region?
> +
> + interrupts-extended:
> + minItems: 1
> + maxItems: 4095
> +
> +required:
> + - compatible
> + - reg
[Severity: Low]
Should interrupts-extended and reg-names be included in this required list?
Because the MTIMER hardware relies on timer interrupts to signal events to
the harts, omitting interrupts-extended allows device tree nodes to pass
schema validation without specifying how timer events are routed. Would this
result in a non-functional device passing validation?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260604143957.668047-1-joel@jms.id.au?part=4
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
2026-06-04 14:39 ` [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
2026-06-04 14:51 ` sashiko-bot
@ 2026-06-04 16:43 ` Conor Dooley
1 sibling, 0 replies; 15+ messages in thread
From: Conor Dooley @ 2026-06-04 16:43 UTC (permalink / raw)
To: Joel Stanley
Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
[-- Attachment #1: Type: text/plain, Size: 4235 bytes --]
On Fri, Jun 05, 2026 at 12:09:50AM +0930, Joel Stanley wrote:
> The mtimer hardware is described in The RISC-V Instruction Set Manual,
> Volume II Privileged Architecture, 3.2.1. Machine Timer (mtime and
> mtimecmp) Registers.
>
> The ACLINT was a standalone spec that made it to v1.0-rc4, but was never
> ratified. As explained by Anup:
>
> > Only the timer defined by ACLINT specification is relevant but the
> > RISC-V privileged specification already provides a high-level
> > definition of mtime and mtimecmp MMIO registers (see section "Machine
> > Timer (mtime and mtimecmp) Registers").
> >
> > Due to the above reasons, we dropped our plans to ratify ACLINT
> > specification in-favor of AIA IMSIC and RISC-V Privileged
> > specification.
>
> Link: https://lists.riscv.org/g/tech-aia/topic/connections_between_aia_and/107177435
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
> v2:
> - Use priv spec as reference
> - Add soc name to tenstorrent compatible
> - Fix reg property description
> ---
> MAINTAINERS | 1 +
> .../bindings/timer/riscv,aclint-mtimer.yaml | 56 +++++++++++++++++++
> 2 files changed, 57 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 2fb1c75afd16..43dd9873bbc5 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -23005,6 +23005,7 @@ M: Joel Stanley <jms@oss.tenstorrent.com>
> L: linux-riscv@lists.infradead.org
> S: Maintained
> T: git https://github.com/tenstorrent/linux.git
> +F: Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
> F: Documentation/devicetree/bindings/clock/tenstorrent,atlantis-prcm-rcpu.yaml
> F: Documentation/devicetree/bindings/riscv/tenstorrent.yaml
> F: arch/riscv/boot/dts/tenstorrent/
> diff --git a/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
> new file mode 100644
> index 000000000000..1d645570b191
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
> @@ -0,0 +1,56 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/timer/riscv,aclint-mtimer.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: RISC-V Advanced Core Local Interruptor (ACLINT) Machine-level Timer
> +
> +maintainers:
> + - Joel Stanley <jms@oss.tenstorrent.com>
> +
> +description:
> + The RISC-V machine-level timer exposes the memory-mapped mtime and per-hart
> + mtimecmp registers defined in The RISC-V Instruction Set Manual, Volume II
> + Privileged Architecture, 3.2.1. Machine Timer (mtime and mtimecmp) Registers.
> +
> +properties:
> + compatible:
> + items:
> + - enum:
> + - tenstorrent,atlantis-aclint-mtimer
> + - qemu,aclint-mtimer
> + - const: riscv,aclint-mtimer
Guess your v3 beat my reply to v2, but what I didn't want was the
riscv,aclint-mtimer compatible not the reference to the spec that you
actually implemented.
pw-bot: changes-requested
And that reminded me, there's a thead,c900-aclint-mtimer binding already
in the kernel, can't you piggy-back off that file instead of making a
new one?
Cheers,
Conor.
> +
> + reg:
> + items:
> + - description: MTIMECMP registers, one per hart
> + - description: MTIME register
> +
> + reg-names:
> + items:
> + - const: mtimecmp
> + - const: mtime
> +
> + interrupts-extended:
> + minItems: 1
> + maxItems: 4095
> +
> +required:
> + - compatible
> + - reg
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + timer@ac000000 {
> + compatible = "tenstorrent,atlantis-aclint-mtimer", "riscv,aclint-mtimer";
> + reg = <0xac000000 0x8000>, <0xac008000 0x8000>;
> + reg-names = "mtimecmp", "mtime";
> + interrupts-extended = <&cpu1intc 7>,
> + <&cpu2intc 7>,
> + <&cpu3intc 7>,
> + <&cpu4intc 7>;
> + };
> +...
> --
> 2.47.3
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform
2026-06-04 14:39 ` [PATCH v2 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
@ 2026-06-04 16:43 ` Conor Dooley
0 siblings, 0 replies; 15+ messages in thread
From: Conor Dooley @ 2026-06-04 16:43 UTC (permalink / raw)
To: Joel Stanley
Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon
2026-06-04 14:39 ` [PATCH v2 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
@ 2026-06-04 16:44 ` Conor Dooley
0 siblings, 0 replies; 15+ messages in thread
From: Conor Dooley @ 2026-06-04 16:44 UTC (permalink / raw)
To: Joel Stanley
Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/7] dt-bindings: imsics: Add Tenstorrent Atlantis compatible
2026-06-04 14:39 ` [PATCH v2 2/7] dt-bindings: imsics: " Joel Stanley
@ 2026-06-04 16:44 ` Conor Dooley
0 siblings, 0 replies; 15+ messages in thread
From: Conor Dooley @ 2026-06-04 16:44 UTC (permalink / raw)
To: Joel Stanley
Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 7/7] riscv: dts: tenstorrent: Add Atlantis platform
2026-06-04 14:39 ` [PATCH v2 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
2026-06-04 14:50 ` sashiko-bot
@ 2026-06-04 16:47 ` Conor Dooley
1 sibling, 0 replies; 15+ messages in thread
From: Conor Dooley @ 2026-06-04 16:47 UTC (permalink / raw)
To: Joel Stanley
Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
Anirudh Srinivasan, Anup Patel, Albert Ou, Alexandre Ghiti,
Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
devicetree
[-- Attachment #1: Type: text/plain, Size: 2568 bytes --]
On Fri, Jun 05, 2026 at 12:09:53AM +0930, Joel Stanley wrote:
> Add initial support for the Tenstorrent Atlantis platform, based on the
> Atlantis SoC featuring 8x RVA23-compliant Tenstorrent Ascalon-XG cores.
>
> The evb machine represents an internal bringup vehicle with just the
> interrupt controllers and a UART. This will be replaced in time with a
> full featured machine once details are available.
>
> Co-developed-by: Drew Fustini <fustini@kernel.org>
> Signed-off-by: Drew Fustini <fustini@kernel.org>
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
> v2:
> - Update mtimer compatible
> - Add Drew's co-developed-by
> - Correct aplic num-sources count
> ---
> arch/riscv/boot/dts/tenstorrent/Makefile | 1 +
> .../boot/dts/tenstorrent/atlantis-evb.dts | 33 ++
> .../boot/dts/tenstorrent/atlantis-soc.dtsi | 471 ++++++++++++++++++
> 3 files changed, 505 insertions(+)
> create mode 100644 arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
> create mode 100644 arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
>
> diff --git a/arch/riscv/boot/dts/tenstorrent/Makefile b/arch/riscv/boot/dts/tenstorrent/Makefile
> index 2c81faaba462..92d8bb1a683f 100644
> --- a/arch/riscv/boot/dts/tenstorrent/Makefile
> +++ b/arch/riscv/boot/dts/tenstorrent/Makefile
> @@ -1,2 +1,3 @@
> # SPDX-License-Identifier: GPL-2.0
> dtb-$(CONFIG_ARCH_TENSTORRENT) += blackhole-card.dtb
> +dtb-$(CONFIG_ARCH_TENSTORRENT) += atlantis-evb.dtb
> diff --git a/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts b/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
> new file mode 100644
> index 000000000000..06259cca8357
> --- /dev/null
> +++ b/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
> @@ -0,0 +1,33 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/dts-v1/;
> +
> +#include "atlantis-soc.dtsi"
> +
> +/ {
> + model = "Tenstorrent Atlantis development platform";
> + compatible = "tenstorrent,atlantis-evb", "tenstorrent,atlantis";
> +
> + #address-cells = <2>;
> + #size-cells = <2>;
> +
> + memory@0 {
> + device_type = "memory";
> + reg = <0x0 0x00000000 0x0 0x80000000>,
> + <0x1 0x80000000 0x0 0x80000000>;
> + };
> +
> + aliases {
> + serial0 = &uart1;
> + };
> +
> + chosen {
> + bootargs = "earlycon console=ttyS0";
FYI, this should not be in here.
> + stdout-path = "serial0";
> + };
> +};
> +
> +&uart1 {
> + /delete-property/ clocks;
Why are you doing this? Looks kinda suspect!
> + clock-frequency = <5000000>;
> + status = "okay";
> +};
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-06-04 16:47 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-04 14:39 [PATCH v2 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
2026-06-04 14:39 ` [PATCH v2 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
2026-06-04 14:39 ` [PATCH v2 2/7] dt-bindings: imsics: " Joel Stanley
2026-06-04 16:44 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
2026-06-04 16:44 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
2026-06-04 14:51 ` sashiko-bot
2026-06-04 16:43 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 5/7] dt-bindings: riscv: add Smrnmi extension description Joel Stanley
2026-06-04 14:39 ` [PATCH v2 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
2026-06-04 16:43 ` Conor Dooley
2026-06-04 14:39 ` [PATCH v2 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
2026-06-04 14:50 ` sashiko-bot
2026-06-04 16:47 ` Conor Dooley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox