Linux-RISC-V Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform
@ 2026-11-09  5:10 Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
                   ` (6 more replies)
  0 siblings, 7 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, 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.

Patches 1, 2, 3, 5, and 6 add compatibles or extensions to existing
bindings.

Patch 4 adds a binding for the aclint timer device, with a new rationale
for including it following discussion with Conor at Plumbers.

The series has been boot tested on QEMU and internal development
platforms.

v2:
https://lore.kernel.org/linux-riscv/20260604143957.668047-1-joel@jms.id.au/

Changes since v2:
 - Fixes to prcm_rcpu and aplic dt nodes
 - Drop uart1 clock override. UART now depends on a working PRCM driver
 - Drop bootargs console=ttyS0 in favour of stdout-path
 - Justify aclint mtimer bindings

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     |  29 ++
 .../boot/dts/tenstorrent/atlantis-soc.dtsi    | 473 ++++++++++++++++++
 10 files changed, 577 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


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09 19:30   ` Conor Dooley
  2026-11-09  5:10 ` [PATCH v3 2/7] dt-bindings: imsics: " Joel Stanley
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

Add compatible for APLIC in Tenstorrent Atlantis SoC.

Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v3: No changes, pick up review tag
---
 .../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


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v3 2/7] dt-bindings: imsics: Add Tenstorrent Atlantis compatible
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree, Conor Dooley

Add compatible for IMSICS in Tenstorrent Atlantis SoC.

Reviewed-by: Anup Patel <anup@brainfault.org>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v3: No changes, pick up review tags
---
 .../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


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v3 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 2/7] dt-bindings: imsics: " Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree, Conor Dooley

Add Tenstorrent Ascalon microarchitecture and the Tenstorrent Ascalon-XG
core.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v3: No changes, pick up review tags
---
 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 0da219ae6769..2d2e4606a53e 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


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
                   ` (2 preceding siblings ...)
  2026-11-09  5:10 ` [PATCH v3 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09 12:37   ` Krzysztof Kozlowski
  2026-11-09 19:29   ` Conor Dooley
  2026-11-09  5:10 ` [PATCH v3 5/7] dt-bindings: riscv: add Smrnmi extension description Joel Stanley
                   ` (2 subsequent siblings)
  6 siblings, 2 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

Document the RISC-V ACLINT mtimer and mtimecmp hardware, as described
by the riscv-aclint specification, commit 4e570bfd3201f2 [2].

Multiple vendors are shipping silicon with the hardware as described
by the specification, which was abandoned[1] as a standalone spec at
v1.0-rc4.  As we have multiple instances of hardware that implement
the spec, the widespread implementation of the spec is de facto
ratification, providing a stationary target for the bindings to document
and an exception to the policy of not accepting things that are
pre-ratification.

[1] https://lists.riscv.org/g/tech-aia/topic/connections_between_aia_and/107177435
[2] https://github.com/riscvarchive/riscv-aclint/blob/4e570bfd3201f2c09e5afd290b5091526b0f099a/riscv-aclint.adoc

Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v3:
  - Rework commit message following discussion at LPC
  - Add reg-names, rework description, fix example
---
 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 93abbb315065..403875d5932e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -24185,6 +24185,7 @@ S:	Maintained
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tenstorrent/linux.git
 F:	Documentation/devicetree/bindings/clock/tenstorrent,atlantis-prcm-rcpu.yaml
 F:	Documentation/devicetree/bindings/riscv/tenstorrent.yaml
+F:	Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
 F:	arch/riscv/boot/dts/tenstorrent/
 F:	drivers/clk/tenstorrent/
 F:	drivers/reset/reset-tenstorrent-atlantis.c
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..e6f3d08d4f93
--- /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) timer
+
+maintainers:
+  - Joel Stanley <jms@oss.tenstorrent.com>
+
+description:
+  The RISC-V ACLINT specification defines a set of memory mapped devices which
+  provide timer functionality for each hart on a multi-hart RISC-V platform.
+  The mtimer device has a single mtime register and one mtimecmp register per
+  hart. The specification is at https://github.com/riscvarchive/riscv-aclint/
+
+properties:
+  compatible:
+    items:
+      - enum:
+          - tenstorrent,atlantis-aclint-mtimer
+      - const: riscv,aclint-mtimer
+
+  reg:
+    items:
+      - description: mtime register
+      - description: mtimecmp registers
+
+  reg-names:
+    items:
+      - const: mtime
+      - const: mtimecmp
+
+  interrupts-extended:
+    minItems: 1
+    maxItems: 4095
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    timer@a2180000 {
+      compatible = "tenstorrent,atlantis-aclint-mtimer", "riscv,aclint-mtimer";
+      reg = <0xa2180000 0x8000>, <0xa2188000 0x8000>;
+      reg-names = "mtime", "mtimecmp";
+      interrupts-extended = <&cpu1intc 7>,
+                            <&cpu2intc 7>,
+                            <&cpu3intc 7>,
+                            <&cpu4intc 7>;
+    };
+...
-- 
2.47.3


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v3 5/7] dt-bindings: riscv: add Smrnmi extension description
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
                   ` (3 preceding siblings ...)
  2026-11-09  5:10 ` [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
  6 siblings, 0 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Drew Fustini, Anup Patel, Alexandre Ghiti, Thomas Gleixner,
	Krzysztof Kozlowski, Nicholas Piggin, Michael Ellerman,
	Anirudh Srinivasan, 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>
---
v3: No changes
---
 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 79491ef8f86a..7f5d85c64f83 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -214,6 +214,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


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v3 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
                   ` (4 preceding siblings ...)
  2026-11-09  5:10 ` [PATCH v3 5/7] dt-bindings: riscv: add Smrnmi extension description Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09  5:10 ` [PATCH v3 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
  6 siblings, 0 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree, Conor Dooley

Add compatible for the Tenstorrent Atlantis platform.

Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Drew Fustini <fustini@kernel.org>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
v3: No changes, pick up review tags
---
 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


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v3 7/7] riscv: dts: tenstorrent: Add Atlantis platform
  2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
                   ` (5 preceding siblings ...)
  2026-11-09  5:10 ` [PATCH v3 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
@ 2026-11-09  5:10 ` Joel Stanley
  2026-11-09 14:25   ` Anirudh Srinivasan
  2026-11-10 19:31   ` Emil Renner Berthing
  6 siblings, 2 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-09  5:10 UTC (permalink / raw)
  To: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, 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 updated in time with a
full featured machine once details are available.

The chosen node sets bootargs to earlycon=sbi to aid debugging early
boot, as the platform may not have a bootloader to fill out the chosen
node.

The m-mode IMSIC setting riscv,guest-index-bits looks strange, as m-mode
devices don't have guest interrupt files. The spacing (stride) between
m-mode files is the same 256KB as s-mode on Atlantis, so we set the
property so software (eg OpenSBI) can derive the layout.

The SoC has a 8-way 64KB L1I, 4-way 256KB L1D, and a 24-way 12MB last
level cache shared across all cores.

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>
---
v3:
 - Fix prcm_rcpu parent
 - Delegate all aplic irqs
 - Drop uart1 clock override
 - Use earlycon=sbi, document rationale
 - Fix mistakes in cache info

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     |  29 ++
 .../boot/dts/tenstorrent/atlantis-soc.dtsi    | 473 ++++++++++++++++++
 3 files changed, 503 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..839a63dc9507
--- /dev/null
+++ b/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+// Copyright 2026 Tenstorrent
+/dts-v1/;
+
+#include "atlantis-soc.dtsi"
+
+/ {
+	model = "Tenstorrent Atlantis development platform";
+	compatible = "tenstorrent,atlantis-evb", "tenstorrent,atlantis";
+
+	memory@0 {
+		device_type = "memory";
+		reg = <0x0 0x00000000 0x0 0x80000000>,
+		      <0x1 0x80000000 0x0 0x80000000>;
+	};
+
+	aliases {
+		serial0 = &uart1;
+	};
+
+	chosen {
+		bootargs = "earlycon=sbi";
+		stdout-path = "serial0:115200";
+	};
+};
+
+&uart1 {
+	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..085b0ab90bbe
--- /dev/null
+++ b/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
@@ -0,0 +1,473 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+// Copyright 2026 Tenstorrent
+/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";
+			reg = <0>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <1>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <2>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <3>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <4>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <5>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <6>;
+			device_type = "cpu";
+			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 = <1024>;
+			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";
+			reg = <7>;
+			device_type = "cpu";
+			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 = <1024>;
+			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 = <8192>;
+			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";
+			reg = <0x0 0xa0000000 0x0 0x200000>;
+			riscv,num-ids = <255>;
+			riscv,guest-index-bits = <6>;
+			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";
+			reg = <0x0 0xa2180000 0x0 0x8000>, <0x0 0xa2188000 0x0 0x8000>;
+			reg-names = "mtime", "mtimecmp";
+			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>;
+		};
+
+		imsic_s: interrupt-controller@a4000000 {
+			compatible = "tenstorrent,atlantis-imsics", "riscv,imsics";
+			reg = <0x0 0xa4000000 0x0 0x200000>;
+			riscv,num-ids = <255>;
+			riscv,guest-index-bits = <6>;
+			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";
+			reg = <0x0 0xcc000000 0x0 0x4000000>;
+			msi-parent = <&imsic_m>;
+			riscv,delegation = <&aplic_s 1 128>;
+			riscv,children = <&aplic_s>;
+			riscv,num-sources = <128>;
+			interrupt-controller;
+			#interrupt-cells = <2>;
+			#address-cells = <0>;
+		};
+
+		prcm_rcpu: clock-controller@d0000000 {
+			compatible = "tenstorrent,atlantis-prcm-rcpu";
+			reg = <0x0 0xd0000000 0x0 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_PLL>,
+						 <&prcm_rcpu CLK_NOC_PLL>;
+		};
+
+		uart0: serial@d4100000 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x0 0xd4100000 0x0 0x10000>;
+			interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&prcm_rcpu CLK_UART0_PCLK>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			status = "disabled";
+		};
+
+		uart1: serial@d4110000 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x0 0xd4110000 0x0 0x10000>;
+			interrupts = <39 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&prcm_rcpu CLK_UART1_PCLK>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			status = "disabled";
+		};
+
+		uart2: serial@d4120000 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x0 0xd4120000 0x0 0x10000>;
+			interrupts = <40 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&prcm_rcpu CLK_UART2_PCLK>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			status = "disabled";
+		};
+
+		uart3: serial@d4130000 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x0 0xd4130000 0x0 0x10000>;
+			interrupts = <41 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&prcm_rcpu CLK_UART3_PCLK>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			status = "disabled";
+		};
+
+		uart4: serial@d4140000 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x0 0xd4140000 0x0 0x10000>;
+			interrupts = <42 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&prcm_rcpu CLK_UART4_PCLK>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			status = "disabled";
+		};
+
+		aplic_s: interrupt-controller@e8000000 {
+			compatible = "tenstorrent,atlantis-aplic", "riscv,aplic";
+			reg = <0x0 0xe8000000 0x0 0x4000000>;
+			msi-parent = <&imsic_s>;
+			riscv,num-sources = <128>;
+			interrupt-controller;
+			#interrupt-cells = <2>;
+			#address-cells = <0>;
+		};
+	};
+};
-- 
2.47.3


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-09  5:10 ` [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
@ 2026-11-09 12:37   ` Krzysztof Kozlowski
  2026-11-09 19:29   ` Conor Dooley
  1 sibling, 0 replies; 19+ messages in thread
From: Krzysztof Kozlowski @ 2026-11-09 12:37 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

On Mon, Nov 09, 2026 at 03:40:44PM +1030, Joel Stanley wrote:
> Document the RISC-V ACLINT mtimer and mtimecmp hardware, as described
> by the riscv-aclint specification, commit 4e570bfd3201f2 [2].
> 
> Multiple vendors are shipping silicon with the hardware as described
> by the specification, which was abandoned[1] as a standalone spec at
> v1.0-rc4.  As we have multiple instances of hardware that implement
> the spec, the widespread implementation of the spec is de facto
> ratification, providing a stationary target for the bindings to document
> and an exception to the policy of not accepting things that are
> pre-ratification.
> 
> [1] https://lists.riscv.org/g/tech-aia/topic/connections_between_aia_and/107177435
> [2] https://github.com/riscvarchive/riscv-aclint/blob/4e570bfd3201f2c09e5afd290b5091526b0f099a/riscv-aclint.adoc
> 
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
> v3:
>   - Rework commit message following discussion at LPC
>   - Add reg-names, rework description, fix example
> ---
>  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 93abbb315065..403875d5932e 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -24185,6 +24185,7 @@ S:	Maintained
>  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tenstorrent/linux.git
>  F:	Documentation/devicetree/bindings/clock/tenstorrent,atlantis-prcm-rcpu.yaml
>  F:	Documentation/devicetree/bindings/riscv/tenstorrent.yaml
> +F:	Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
>  F:	arch/riscv/boot/dts/tenstorrent/
>  F:	drivers/clk/tenstorrent/
>  F:	drivers/reset/reset-tenstorrent-atlantis.c
> 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..e6f3d08d4f93
> --- /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) timer
> +
> +maintainers:
> +  - Joel Stanley <jms@oss.tenstorrent.com>
> +
> +description:
> +  The RISC-V ACLINT specification defines a set of memory mapped devices which
> +  provide timer functionality for each hart on a multi-hart RISC-V platform.
> +  The mtimer device has a single mtime register and one mtimecmp register per
> +  hart. The specification is at https://github.com/riscvarchive/riscv-aclint/
> +
> +properties:
> +  compatible:
> +    items:
> +      - enum:
> +          - tenstorrent,atlantis-aclint-mtimer
> +      - const: riscv,aclint-mtimer
> +
> +  reg:
> +    items:
> +      - description: mtime register
> +      - description: mtimecmp registers
> +
> +  reg-names:
> +    items:
> +      - const: mtime
> +      - const: mtimecmp
> +
> +  interrupts-extended:

Use interrupts. git grep gives basically zero results for such syntax in
the binding.

> +    minItems: 1
> +    maxItems: 4095

Best regards,
Krzysztof


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 7/7] riscv: dts: tenstorrent: Add Atlantis platform
  2026-11-09  5:10 ` [PATCH v3 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
@ 2026-11-09 14:25   ` Anirudh Srinivasan
  2026-11-10 19:31   ` Emil Renner Berthing
  1 sibling, 0 replies; 19+ messages in thread
From: Anirudh Srinivasan @ 2026-11-09 14:25 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini, linux-riscv,
	devicetree

On Sun, Nov 8, 2026 at 11:11 PM Joel Stanley <joel@jms.id.au> 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 updated in time with a
> full featured machine once details are available.
>
> The chosen node sets bootargs to earlycon=sbi to aid debugging early
> boot, as the platform may not have a bootloader to fill out the chosen
> node.
>
> The m-mode IMSIC setting riscv,guest-index-bits looks strange, as m-mode
> devices don't have guest interrupt files. The spacing (stride) between
> m-mode files is the same 256KB as s-mode on Atlantis, so we set the
> property so software (eg OpenSBI) can derive the layout.
>
> The SoC has a 8-way 64KB L1I, 4-way 256KB L1D, and a 24-way 12MB last
> level cache shared across all cores.
>
> 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>
> ---
> v3:
>  - Fix prcm_rcpu parent
>  - Delegate all aplic irqs
>  - Drop uart1 clock override
>  - Use earlycon=sbi, document rationale
>  - Fix mistakes in cache info
>
> 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     |  29 ++
>  .../boot/dts/tenstorrent/atlantis-soc.dtsi    | 473 ++++++++++++++++++
>  3 files changed, 503 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..839a63dc9507
> --- /dev/null
> +++ b/arch/riscv/boot/dts/tenstorrent/atlantis-evb.dts
> @@ -0,0 +1,29 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +// Copyright 2026 Tenstorrent
> +/dts-v1/;
> +
> +#include "atlantis-soc.dtsi"
> +
> +/ {
> +       model = "Tenstorrent Atlantis development platform";
> +       compatible = "tenstorrent,atlantis-evb", "tenstorrent,atlantis";
> +
> +       memory@0 {
> +               device_type = "memory";
> +               reg = <0x0 0x00000000 0x0 0x80000000>,
> +                     <0x1 0x80000000 0x0 0x80000000>;
> +       };
> +
> +       aliases {
> +               serial0 = &uart1;
> +       };
> +
> +       chosen {
> +               bootargs = "earlycon=sbi";
> +               stdout-path = "serial0:115200";
> +       };
> +};
> +
> +&uart1 {
> +       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..085b0ab90bbe
> --- /dev/null
> +++ b/arch/riscv/boot/dts/tenstorrent/atlantis-soc.dtsi
> @@ -0,0 +1,473 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +// Copyright 2026 Tenstorrent
> +/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 {

Please add a cpus: label here (like below). It'll be useful if we need
to refer to this node in the u-boot DT.

            cpus: cpus {

            };

> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +               timebase-frequency = <1000000000>;
> +
> +               cpu0: cpu@0 {
> +                       compatible = "tenstorrent,ascalon-xg", "tenstorrent,ascalon", "riscv";
> +                       reg = <0>;

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-09  5:10 ` [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
  2026-11-09 12:37   ` Krzysztof Kozlowski
@ 2026-11-09 19:29   ` Conor Dooley
  2026-11-11  5:04     ` Joel Stanley
  1 sibling, 1 reply; 19+ messages in thread
From: Conor Dooley @ 2026-11-09 19:29 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree


[-- Attachment #1.1: Type: text/plain, Size: 4775 bytes --]

On Mon, Nov 09, 2026 at 03:40:44PM +1030, Joel Stanley wrote:
> Document the RISC-V ACLINT mtimer and mtimecmp hardware, as described
> by the riscv-aclint specification, commit 4e570bfd3201f2 [2].
> 
> Multiple vendors are shipping silicon with the hardware as described
> by the specification, which was abandoned[1] as a standalone spec at
> v1.0-rc4.  As we have multiple instances of hardware that implement
> the spec, the widespread implementation of the spec is de facto
> ratification, providing a stationary target for the bindings to document
> and an exception to the policy of not accepting things that are
> pre-ratification.
> 
> [1] https://lists.riscv.org/g/tech-aia/topic/connections_between_aia_and/107177435
> [2] https://github.com/riscvarchive/riscv-aclint/blob/4e570bfd3201f2c09e5afd290b5091526b0f099a/riscv-aclint.adoc
> 
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
> v3:
>   - Rework commit message following discussion at LPC

Since I was one of the folks involved in that chat, I am okay with this
obviously. I was convinced to change my mind about the use of the riscv
vendor prefix because of the widespread adoption.

>   - Add reg-names, rework description, fix example
> ---
>  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 93abbb315065..403875d5932e 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -24185,6 +24185,7 @@ S:	Maintained
>  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tenstorrent/linux.git
>  F:	Documentation/devicetree/bindings/clock/tenstorrent,atlantis-prcm-rcpu.yaml
>  F:	Documentation/devicetree/bindings/riscv/tenstorrent.yaml

> +F:	Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml


>  F:	arch/riscv/boot/dts/tenstorrent/
>  F:	drivers/clk/tenstorrent/
>  F:	drivers/reset/reset-tenstorrent-atlantis.c
> 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..e6f3d08d4f93
> --- /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) timer
> +
> +maintainers:
> +  - Joel Stanley <jms@oss.tenstorrent.com>
> +
> +description:
> +  The RISC-V ACLINT specification defines a set of memory mapped devices which
> +  provide timer functionality for each hart on a multi-hart RISC-V platform.
> +  The mtimer device has a single mtime register and one mtimecmp register per
> +  hart. The specification is at https://github.com/riscvarchive/riscv-aclint/
> +
> +properties:
> +  compatible:
> +    items:
> +      - enum:
> +          - tenstorrent,atlantis-aclint-mtimer
> +      - const: riscv,aclint-mtimer

So, what are we doing about thead,c900-aclint-mtimer.yaml?

> +
> +  reg:
> +    items:
> +      - description: mtime register
> +      - description: mtimecmp registers

For example, I note that you have mtime and mtimecmp in the opposite
order to how the mips folks have had to add the mtime region to that
file:
https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/

> +
> +  reg-names:
> +    items:
> +      - const: mtime
> +      - const: mtimecmp
> +
> +  interrupts-extended:
> +    minItems: 1
> +    maxItems: 4095
> +
> +required:
> +  - compatible
> +  - reg

You've also not made reg-names or interrupts-extended required.

I think we should swap the regs around and make these two required at a
minimum, but also "initialise" this file by renaming the existing file.

My ~assumption~hope is that all of the devices in that file have
implemented the aclint spec at the -rc1 revision that we're citing here.

> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    timer@a2180000 {
> +      compatible = "tenstorrent,atlantis-aclint-mtimer", "riscv,aclint-mtimer";
> +      reg = <0xa2180000 0x8000>, <0xa2188000 0x8000>;
> +      reg-names = "mtime", "mtimecmp";
> +      interrupts-extended = <&cpu1intc 7>,
> +                            <&cpu2intc 7>,
> +                            <&cpu3intc 7>,
> +                            <&cpu4intc 7>;
> +    };
> +...
> -- 
> 2.47.3
> 
> 

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 161 bytes --]

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible
  2026-11-09  5:10 ` [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
@ 2026-11-09 19:30   ` Conor Dooley
  0 siblings, 0 replies; 19+ messages in thread
From: Conor Dooley @ 2026-11-09 19:30 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree


[-- Attachment #1.1: Type: text/plain, Size: 75 bytes --]

Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 161 bytes --]

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 7/7] riscv: dts: tenstorrent: Add Atlantis platform
  2026-11-09  5:10 ` [PATCH v3 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
  2026-11-09 14:25   ` Anirudh Srinivasan
@ 2026-11-10 19:31   ` Emil Renner Berthing
  1 sibling, 0 replies; 19+ messages in thread
From: Emil Renner Berthing @ 2026-11-10 19:31 UTC (permalink / raw)
  To: Conor Dooley, Joel Stanley, Palmer Dabbelt, Paul Walmsley,
	Rob Herring
  Cc: Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

Quoting Joel Stanley (2026-11-09 06:10:47)
> 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 updated in time with a
> full featured machine once details are available.
>
> The chosen node sets bootargs to earlycon=sbi to aid debugging early
> boot, as the platform may not have a bootloader to fill out the chosen
> node.

Does this mean OpenSBI uses a different uart from uart1?

If not that means both Linux in S-mode and OpenSBI in M-mode will
both try to use uart1 at the same time. It might work by chance,
but a much better solution would be to just use "earlycon".
You already define chosen/stdout-path to point at uart1 and the
driver for 'snps,dw-apb-uart' implements earlycon so it should
work much the same.

/Emil

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-09 19:29   ` Conor Dooley
@ 2026-11-11  5:04     ` Joel Stanley
  2026-11-11  6:21       ` Inochi Amaoto
  2026-11-12 16:50       ` Junhui Liu
  0 siblings, 2 replies; 19+ messages in thread
From: Joel Stanley @ 2026-11-11  5:04 UTC (permalink / raw)
  To: Conor Dooley, inochiama, junhui.liu, aleksa.paunovic, chen.wang,
	dlan, guoren
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

+cc people who might know more about the various hardware this binding supports.

On Tue, 10 Nov 2026 at 05:59, Conor Dooley <conor@kernel.org> wrote:
> > +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml

> > +properties:
> > +  compatible:
> > +    items:
> > +      - enum:
> > +          - tenstorrent,atlantis-aclint-mtimer
> > +      - const: riscv,aclint-mtimer
>
> So, what are we doing about thead,c900-aclint-mtimer.yaml?

Once we agree on this binding, I planned to submit a change to bring
over the devices that implement the common binding. I can do that up
front instead.

>
> > +
> > +  reg:
> > +    items:
> > +      - description: mtime register
> > +      - description: mtimecmp registers
>
> For example, I note that you have mtime and mtimecmp in the opposite
> order to how the mips folks have had to add the mtime region to that
> file:
> https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/

This is the order OpenSBI has used since v1.0, when support was added
about five years ago. It reads mtime followed by mtimecmp when there
are no reg-names:

 https://github.com/riscv-software-src/opensbi/blob/v1.9/lib/utils/timer/fdt_timer_mtimer.c#L79

QEMU also generates a dt with mtime followed by mtimecmp, and without reg-names.

The MIPS ordering works because it specifies reg-names. OpenSBI uses
reg-names to parse the reg property so it would continue working, but
u-boot takes index 0 as mtime and ignores reg-names.

> > +
> > +  reg-names:
> > +    items:
> > +      - const: mtime
> > +      - const: mtimecmp
> > +
> > +  interrupts-extended:
> > +    minItems: 1
> > +    maxItems: 4095
> > +
> > +required:
> > +  - compatible
> > +  - reg
>
> You've also not made reg-names or interrupts-extended required.

That was intentional. A mtimer device without harts attached won't
have interrupts (opensbi supports this), but I haven't come across a
system that uses it this way. I have no preference here, what do you
think?

> I think we should swap the regs around and make these two required at a
> minimum, but also "initialise" this file by renaming the existing file.

Bringing over the other devices sounds like a good idea to me. And I
appreciate the spelling.

The nuclei/anlogic boards document mtime[1] support:

 - nuclei,ux900-aclint-mtimer
 - anlogic,dr1v90-aclint-mtimer

K3 has a mtime register (at 0xf181bff8, by experimentation on hardware):

 - spacemit,k3-aclint-mtimer

MIPS has it, as per their patch[2]:

 - gf,mips-p8700-aclint-mtimer

Note that MIPS have mips,p8700-aclint-mtimer in opensbi.

T-Head has no mtime[3], just a set of mtimecmp registers. Sophgo are
unknown, can we assume it is the same design as T-Head?

 - thead,c900-aclint-mtimer
 - sophgo,sg2042-aclint-mtimer
 - sophgo,sg2044-aclint-mtimer

There are two options for T-Head:

1) Leave it in its own binding, because it doesn't have mtime registers.

2) Use this binding with an optional reg property for the mtime
region, which means putting the optional part last.

If we go with 1 we can preserve the mtime, mtimecmp ordering, matching
u-boot, opensbi, qemu. If we go with 2 we put mtime last and make
reg-names required.

The current K3 and Anlogic current device trees would need an update
to their reg property to describe mtime when adding the riscv
compatible.

I lean towards 1 because it reduces churn in firmware.

> My ~assumption~hope is that all of the devices in that file have
> implemented the aclint spec at the -rc1 revision that we're citing here.

(-rc4). Yep, we can move the majority of the compatibles into this
binding. The T-Head family might be the exception.

Cheers,

Joel

[1] https://doc.nucleisys.com/nuclei_spec/isa/timer.html
[2] https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
[3] https://lore.kernel.org/all/IA1PR20MB4953D36ABE26822B62415500BBBBA@IA1PR20MB4953.namprd20.prod.outlook.com/

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-11  5:04     ` Joel Stanley
@ 2026-11-11  6:21       ` Inochi Amaoto
  2026-11-11 10:17         ` Conor Dooley
  2026-11-12 16:50       ` Junhui Liu
  1 sibling, 1 reply; 19+ messages in thread
From: Inochi Amaoto @ 2026-11-11  6:21 UTC (permalink / raw)
  To: Joel Stanley, Conor Dooley, inochiama, junhui.liu,
	aleksa.paunovic, chen.wang, dlan, guoren
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

On Wed, Nov 11, 2026 at 03:34:26PM +1030, Joel Stanley wrote:
> +cc people who might know more about the various hardware this binding supports.
> 
> On Tue, 10 Nov 2026 at 05:59, Conor Dooley <conor@kernel.org> wrote:
> > > +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
> 
> > > +properties:
> > > +  compatible:
> > > +    items:
> > > +      - enum:
> > > +          - tenstorrent,atlantis-aclint-mtimer
> > > +      - const: riscv,aclint-mtimer
> >
> > So, what are we doing about thead,c900-aclint-mtimer.yaml?
> 
> Once we agree on this binding, I planned to submit a change to bring
> over the devices that implement the common binding. I can do that up
> front instead.
> 
> >
> > > +
> > > +  reg:
> > > +    items:
> > > +      - description: mtime register
> > > +      - description: mtimecmp registers
> >
> > For example, I note that you have mtime and mtimecmp in the opposite
> > order to how the mips folks have had to add the mtime region to that
> > file:
> > https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
> 
> This is the order OpenSBI has used since v1.0, when support was added
> about five years ago. It reads mtime followed by mtimecmp when there
> are no reg-names:
> 
>  https://github.com/riscv-software-src/opensbi/blob/v1.9/lib/utils/timer/fdt_timer_mtimer.c#L79
> 
> QEMU also generates a dt with mtime followed by mtimecmp, and without reg-names.
> 
> The MIPS ordering works because it specifies reg-names. OpenSBI uses
> reg-names to parse the reg property so it would continue working, but
> u-boot takes index 0 as mtime and ignores reg-names.
> 
> > > +
> > > +  reg-names:
> > > +    items:
> > > +      - const: mtime
> > > +      - const: mtimecmp
> > > +
> > > +  interrupts-extended:
> > > +    minItems: 1
> > > +    maxItems: 4095
> > > +
> > > +required:
> > > +  - compatible
> > > +  - reg
> >
> > You've also not made reg-names or interrupts-extended required.
> 
> That was intentional. A mtimer device without harts attached won't
> have interrupts (opensbi supports this), but I haven't come across a
> system that uses it this way. I have no preference here, what do you
> think?
> 

I think reg-names is required. The spec archive does not requrire the core
implement both MTIME and MTIMECMP. So using reg-name will let the DT parser
does not reply on the order and leave the room for MTIMECMP only devices.

interrupts-extended should also be required, it is kind of weird for 
a zero-interrupt timer.

> > I think we should swap the regs around and make these two required at a
> > minimum, but also "initialise" this file by renaming the existing file.
> 
> Bringing over the other devices sounds like a good idea to me. And I
> appreciate the spelling.
> 
> The nuclei/anlogic boards document mtime[1] support:
> 
>  - nuclei,ux900-aclint-mtimer
>  - anlogic,dr1v90-aclint-mtimer
> 
> K3 has a mtime register (at 0xf181bff8, by experimentation on hardware):
> 
>  - spacemit,k3-aclint-mtimer
> 
> MIPS has it, as per their patch[2]:
> 
>  - gf,mips-p8700-aclint-mtimer
> 
> Note that MIPS have mips,p8700-aclint-mtimer in opensbi.
> 
> T-Head has no mtime[3], just a set of mtimecmp registers. Sophgo are
> unknown, can we assume it is the same design as T-Head?
> 
>  - thead,c900-aclint-mtimer
>  - sophgo,sg2042-aclint-mtimer
>  - sophgo,sg2044-aclint-mtimer
> 

For T-HEAD, IIRC all the design share the same layout. C9XX use the same
layout for both C906/C910/C920. Sophgo is just a SoC vendor, not the
core vendor.

> There are two options for T-Head:
> 
> 1) Leave it in its own binding, because it doesn't have mtime registers.
> 
> 2) Use this binding with an optional reg property for the mtime
> region, which means putting the optional part last.
> 
> If we go with 1 we can preserve the mtime, mtimecmp ordering, matching
> u-boot, opensbi, qemu. If we go with 2 we put mtime last and make
> reg-names required.
> 
> The current K3 and Anlogic current device trees would need an update
> to their reg property to describe mtime when adding the riscv
> compatible.
> 
> I lean towards 1 because it reduces churn in firmware.
> 

I prefer 2. as the ACLINT is designed for modularity, it should 
tolerate one that does not have MTIME.

> > My ~assumption~hope is that all of the devices in that file have
> > implemented the aclint spec at the -rc1 revision that we're citing here.
> 
> (-rc4). Yep, we can move the majority of the compatibles into this
> binding. The T-Head family might be the exception.
> 
> Cheers,
> 
> Joel
> 
> [1] https://doc.nucleisys.com/nuclei_spec/isa/timer.html
> [2] https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
> [3] https://lore.kernel.org/all/IA1PR20MB4953D36ABE26822B62415500BBBBA@IA1PR20MB4953.namprd20.prod.outlook.com/

Regards,
Inochi

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-11  6:21       ` Inochi Amaoto
@ 2026-11-11 10:17         ` Conor Dooley
  2026-11-12 15:44           ` Aleksa Paunovic
  0 siblings, 1 reply; 19+ messages in thread
From: Conor Dooley @ 2026-11-11 10:17 UTC (permalink / raw)
  To: Inochi Amaoto
  Cc: Joel Stanley, junhui.liu, aleksa.paunovic, chen.wang, dlan,
	guoren, Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree


[-- Attachment #1.1: Type: text/plain, Size: 6358 bytes --]

+CC Aleska,

On Wed, Nov 11, 2026 at 02:21:44PM +0800, Inochi Amaoto wrote:
> On Wed, Nov 11, 2026 at 03:34:26PM +1030, Joel Stanley wrote:
> > +cc people who might know more about the various hardware this binding supports.
> > 
> > On Tue, 10 Nov 2026 at 05:59, Conor Dooley <conor@kernel.org> wrote:
> > > > +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
> > 
> > > > +properties:
> > > > +  compatible:
> > > > +    items:
> > > > +      - enum:
> > > > +          - tenstorrent,atlantis-aclint-mtimer
> > > > +      - const: riscv,aclint-mtimer
> > >
> > > So, what are we doing about thead,c900-aclint-mtimer.yaml?
> > 
> > Once we agree on this binding, I planned to submit a change to bring
> > over the devices that implement the common binding. I can do that up
> > front instead.
> > 
> > >
> > > > +
> > > > +  reg:
> > > > +    items:
> > > > +      - description: mtime register
> > > > +      - description: mtimecmp registers
> > >
> > > For example, I note that you have mtime and mtimecmp in the opposite
> > > order to how the mips folks have had to add the mtime region to that
> > > file:
> > > https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
> > 
> > This is the order OpenSBI has used since v1.0, when support was added
> > about five years ago. It reads mtime followed by mtimecmp when there
> > are no reg-names:
> > 
> >  https://github.com/riscv-software-src/opensbi/blob/v1.9/lib/utils/timer/fdt_timer_mtimer.c#L79
> > 
> > QEMU also generates a dt with mtime followed by mtimecmp, and without reg-names.
> > 
> > The MIPS ordering works because it specifies reg-names. OpenSBI uses
> > reg-names to parse the reg property so it would continue working, but
> > u-boot takes index 0 as mtime and ignores reg-names.
> > 
> > > > +
> > > > +  reg-names:
> > > > +    items:
> > > > +      - const: mtime
> > > > +      - const: mtimecmp
> > > > +
> > > > +  interrupts-extended:
> > > > +    minItems: 1
> > > > +    maxItems: 4095
> > > > +
> > > > +required:
> > > > +  - compatible
> > > > +  - reg
> > >
> > > You've also not made reg-names or interrupts-extended required.
> > 
> > That was intentional. A mtimer device without harts attached won't
> > have interrupts (opensbi supports this), but I haven't come across a
> > system that uses it this way. I have no preference here, what do you
> > think?
> > 
> 
> I think reg-names is required. The spec archive does not requrire the core
> implement both MTIME and MTIMECMP. So using reg-name will let the DT parser
> does not reply on the order and leave the room for MTIMECMP only devices.
> 
> interrupts-extended should also be required, it is kind of weird for 
> a zero-interrupt timer.
> 
> > > I think we should swap the regs around and make these two required at a
> > > minimum, but also "initialise" this file by renaming the existing file.
> > 
> > Bringing over the other devices sounds like a good idea to me. And I
> > appreciate the spelling.
> > 
> > The nuclei/anlogic boards document mtime[1] support:
> > 
> >  - nuclei,ux900-aclint-mtimer
> >  - anlogic,dr1v90-aclint-mtimer
> > 
> > K3 has a mtime register (at 0xf181bff8, by experimentation on hardware):
> > 
> >  - spacemit,k3-aclint-mtimer
> > 
> > MIPS has it, as per their patch[2]:
> > 
> >  - gf,mips-p8700-aclint-mtimer
> > 
> > Note that MIPS have mips,p8700-aclint-mtimer in opensbi.

/sigh. Aleksa, can we sort this out please as part of whatever revision
is made to the mtimer patch in your series?

> > 
> > T-Head has no mtime[3], just a set of mtimecmp registers. Sophgo are
> > unknown, can we assume it is the same design as T-Head?
> > 
> >  - thead,c900-aclint-mtimer
> >  - sophgo,sg2042-aclint-mtimer
> >  - sophgo,sg2044-aclint-mtimer
> > 
> 
> For T-HEAD, IIRC all the design share the same layout. C9XX use the same
> layout for both C906/C910/C920. Sophgo is just a SoC vendor, not the
> core vendor.
> 
> > There are two options for T-Head:
> > 
> > 1) Leave it in its own binding, because it doesn't have mtime registers.
> > 
> > 2) Use this binding with an optional reg property for the mtime
> > region, which means putting the optional part last.
> > 
> > If we go with 1 we can preserve the mtime, mtimecmp ordering, matching
> > u-boot, opensbi, qemu. If we go with 2 we put mtime last and make
> > reg-names required.
> > 
> > The current K3 and Anlogic current device trees would need an update
> > to their reg property to describe mtime when adding the riscv
> > compatible.
> > 
> > I lean towards 1 because it reduces churn in firmware.
> > 
> 
> I prefer 2. as the ACLINT is designed for modularity, it should 
> tolerate one that does not have MTIME.

I think we need to make reg-names mandatory and permit free ordering of
the reg entries and make reg-names mandatory.
QEMU will need to be changed to add reg-names and U-Boot changed to use
reg-names - I think neither should be controversial, since no hardware
actually implementing this device follows the qemu/opensbi ordering.

Maybe the right thing to do is:
| items:
|  - enum [mtime, mtimecmp]
|  - const: mtimecmp
which forces mtime to be first when there are two items, not really
problematic given there's currently no devices with two with a binding
that need modification given the mips thing is not yet merged so we can
update it to be like this.

Maybe for safety we abstain from retrofitting riscv,aclint-mtimer to the
existing devices (although I still think they should be merged into one
file) so that they don't run into U-Boot failures.

Cheers,
Conor.

> 
> > > My ~assumption~hope is that all of the devices in that file have
> > > implemented the aclint spec at the -rc1 revision that we're citing here.
> > 
> > (-rc4). Yep, we can move the majority of the compatibles into this
> > binding. The T-Head family might be the exception.
> > 
> > Cheers,
> > 
> > Joel
> > 
> > [1] https://doc.nucleisys.com/nuclei_spec/isa/timer.html
> > [2] https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
> > [3] https://lore.kernel.org/all/IA1PR20MB4953D36ABE26822B62415500BBBBA@IA1PR20MB4953.namprd20.prod.outlook.com/
> 
> Regards,
> Inochi

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 161 bytes --]

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-11 10:17         ` Conor Dooley
@ 2026-11-12 15:44           ` Aleksa Paunovic
  2026-11-12 17:48             ` Conor Dooley
  0 siblings, 1 reply; 19+ messages in thread
From: Aleksa Paunovic @ 2026-11-12 15:44 UTC (permalink / raw)
  To: conor@kernel.org
  Cc: Aleksa Paunovic, alex@ghiti.fr, anup@brainfault.org,
	asrinivasan@oss.tenstorrent.com, chen.wang@linux.dev,
	conor+dt@kernel.org, devicetree@vger.kernel.org, dlan@kernel.org,
	fustini@kernel.org, guoren@kernel.org, inochiama@gmail.com,
	joel@jms.id.au, junhui.liu@pigmoral.tech, krzk+dt@kernel.org,
	linux-riscv@lists.infradead.org, mpe@kernel.org,
	npiggin@gmail.com, palmer@dabbelt.com, pjw@kernel.org,
	robh@kernel.org, tglx@kernel.org

Hi Conor,
On 11/11/26 11:17, Conor Dooley wrote:
> On Wed, Nov 11, 2026 at 02:21:44PM +0800, Inochi Amaoto wrote:
>> On Wed, Nov 11, 2026 at 03:34:26PM +1030, Joel Stanley wrote:
>>> +cc people who might know more about the various hardware this binding supports.
>>>
>>> On Tue, 10 Nov 2026 at 05:59, Conor Dooley <conor@kernel.org> wrote:
>>>>> +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
>>>>> +properties:
>>>>> +  compatible:
>>>>> +    items:
>>>>> +      - enum:
>>>>> +          - tenstorrent,atlantis-aclint-mtimer
>>>>> +      - const: riscv,aclint-mtimer
>>>> So, what are we doing about thead,c900-aclint-mtimer.yaml?
>>> Once we agree on this binding, I planned to submit a change to bring
>>> over the devices that implement the common binding. I can do that up
>>> front instead.
>>>
>>>>> +
>>>>> +  reg:
>>>>> +    items:
>>>>> +      - description: mtime register
>>>>> +      - description: mtimecmp registers
>>>> For example, I note that you have mtime and mtimecmp in the opposite
>>>> order to how the mips folks have had to add the mtime region to that
>>>> file:
>>>> https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
>>> This is the order OpenSBI has used since v1.0, when support was added
>>> about five years ago. It reads mtime followed by mtimecmp when there
>>> are no reg-names:
>>>
>>>  https://github.com/riscv-software-src/opensbi/blob/v1.9/lib/utils/timer/fdt_timer_mtimer.c#L79
>>>
>>> QEMU also generates a dt with mtime followed by mtimecmp, and without reg-names.
>>>
>>> The MIPS ordering works because it specifies reg-names. OpenSBI uses
>>> reg-names to parse the reg property so it would continue working, but
>>> u-boot takes index 0 as mtime and ignores reg-names.
>>>
>>>>> +
>>>>> +  reg-names:
>>>>> +    items:
>>>>> +      - const: mtime
>>>>> +      - const: mtimecmp
>>>>> +
>>>>> +  interrupts-extended:
>>>>> +    minItems: 1
>>>>> +    maxItems: 4095
>>>>> +
>>>>> +required:
>>>>> +  - compatible
>>>>> +  - reg
>>>> You've also not made reg-names or interrupts-extended required.
>>> That was intentional. A mtimer device without harts attached won't
>>> have interrupts (opensbi supports this), but I haven't come across a
>>> system that uses it this way. I have no preference here, what do you
>>> think?
>>>
>> I think reg-names is required. The spec archive does not requrire the core
>> implement both MTIME and MTIMECMP. So using reg-name will let the DT parser
>> does not reply on the order and leave the room for MTIMECMP only devices.
>>
>> interrupts-extended should also be required, it is kind of weird for 
>> a zero-interrupt timer.
>>
>>>> I think we should swap the regs around and make these two required at a
>>>> minimum, but also "initialise" this file by renaming the existing file.
>>> Bringing over the other devices sounds like a good idea to me. And I
>>> appreciate the spelling.
>>>
>>> The nuclei/anlogic boards document mtime[1] support:
>>>
>>>  - nuclei,ux900-aclint-mtimer
>>>  - anlogic,dr1v90-aclint-mtimer
>>>
>>> K3 has a mtime register (at 0xf181bff8, by experimentation on hardware):
>>>
>>>  - spacemit,k3-aclint-mtimer
>>>
>>> MIPS has it, as per their patch[2]:
>>>
>>>  - gf,mips-p8700-aclint-mtimer
>>>
>>> Note that MIPS have mips,p8700-aclint-mtimer in opensbi.
> /sigh. Aleksa, can we sort this out please as part of whatever revision
> is made to the mtimer patch in your series?
Right. I was hoping to address this in a separate OpenSBI series
by extending the corresponding drivers with the new gf,p8700-* compatibles,
without touching the mips,p8700 ones that are currently in use. Does that work? 

Best regards,
Aleksa 
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-11  5:04     ` Joel Stanley
  2026-11-11  6:21       ` Inochi Amaoto
@ 2026-11-12 16:50       ` Junhui Liu
  1 sibling, 0 replies; 19+ messages in thread
From: Junhui Liu @ 2026-11-12 16:50 UTC (permalink / raw)
  To: Joel Stanley, Conor Dooley, inochiama, junhui.liu,
	aleksa.paunovic, chen.wang, dlan, guoren
  Cc: Paul Walmsley, Rob Herring, Conor Dooley, Palmer Dabbelt,
	Anup Patel, Alexandre Ghiti, Thomas Gleixner, Krzysztof Kozlowski,
	Nicholas Piggin, Michael Ellerman, Drew Fustini,
	Anirudh Srinivasan, linux-riscv, devicetree

Hi there,

On Wed Nov 11, 2026 at 1:04 PM CST, Joel Stanley wrote:
> +cc people who might know more about the various hardware this binding supports.
>
> On Tue, 10 Nov 2026 at 05:59, Conor Dooley <conor@kernel.org> wrote:
>> > +++ b/Documentation/devicetree/bindings/timer/riscv,aclint-mtimer.yaml
>
>> > +properties:
>> > +  compatible:
>> > +    items:
>> > +      - enum:
>> > +          - tenstorrent,atlantis-aclint-mtimer
>> > +      - const: riscv,aclint-mtimer
>>
>> So, what are we doing about thead,c900-aclint-mtimer.yaml?
>
> Once we agree on this binding, I planned to submit a change to bring
> over the devices that implement the common binding. I can do that up
> front instead.
>
>>
>> > +
>> > +  reg:
>> > +    items:
>> > +      - description: mtime register
>> > +      - description: mtimecmp registers
>>
>> For example, I note that you have mtime and mtimecmp in the opposite
>> order to how the mips folks have had to add the mtime region to that
>> file:
>> https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
>
> This is the order OpenSBI has used since v1.0, when support was added
> about five years ago. It reads mtime followed by mtimecmp when there
> are no reg-names:
>
>  https://github.com/riscv-software-src/opensbi/blob/v1.9/lib/utils/timer/fdt_timer_mtimer.c#L79
>
> QEMU also generates a dt with mtime followed by mtimecmp, and without reg-names.
>
> The MIPS ordering works because it specifies reg-names. OpenSBI uses
> reg-names to parse the reg property so it would continue working, but
> u-boot takes index 0 as mtime and ignores reg-names.
>
>> > +
>> > +  reg-names:
>> > +    items:
>> > +      - const: mtime
>> > +      - const: mtimecmp
>> > +
>> > +  interrupts-extended:
>> > +    minItems: 1
>> > +    maxItems: 4095
>> > +
>> > +required:
>> > +  - compatible
>> > +  - reg
>>
>> You've also not made reg-names or interrupts-extended required.
>
> That was intentional. A mtimer device without harts attached won't
> have interrupts (opensbi supports this), but I haven't come across a
> system that uses it this way. I have no preference here, what do you
> think?
>
>> I think we should swap the regs around and make these two required at a
>> minimum, but also "initialise" this file by renaming the existing file.
>
> Bringing over the other devices sounds like a good idea to me. And I
> appreciate the spelling.
>
> The nuclei/anlogic boards document mtime[1] support:
>
>  - nuclei,ux900-aclint-mtimer
>  - anlogic,dr1v90-aclint-mtimer

I've tested this on DR1V90 and confirmed that the value read from
0x6803cff8 (offset 0x7ff8 from the mtimer base at 0x68035000) tracks the
TIME CSR. This confirms that DR1V90 indeed has an mtime register at that
address.

I'll follow the discussion and update the DR1V90 DTS if needed.

Best regards,
Junhui Liu

>
> K3 has a mtime register (at 0xf181bff8, by experimentation on hardware):
>
>  - spacemit,k3-aclint-mtimer
>
> MIPS has it, as per their patch[2]:
>
>  - gf,mips-p8700-aclint-mtimer
>
> Note that MIPS have mips,p8700-aclint-mtimer in opensbi.
>
> T-Head has no mtime[3], just a set of mtimecmp registers. Sophgo are
> unknown, can we assume it is the same design as T-Head?
>
>  - thead,c900-aclint-mtimer
>  - sophgo,sg2042-aclint-mtimer
>  - sophgo,sg2044-aclint-mtimer
>
> There are two options for T-Head:
>
> 1) Leave it in its own binding, because it doesn't have mtime registers.
>
> 2) Use this binding with an optional reg property for the mtime
> region, which means putting the optional part last.
>
> If we go with 1 we can preserve the mtime, mtimecmp ordering, matching
> u-boot, opensbi, qemu. If we go with 2 we put mtime last and make
> reg-names required.
>
> The current K3 and Anlogic current device trees would need an update
> to their reg property to describe mtime when adding the riscv
> compatible.
>
> I lean towards 1 because it reduces churn in firmware.
>
>> My ~assumption~hope is that all of the devices in that file have
>> implemented the aclint spec at the -rc1 revision that we're citing here.
>
> (-rc4). Yep, we can move the majority of the compatibles into this
> binding. The T-Head family might be the exception.
>
> Cheers,
>
> Joel
>
> [1] https://doc.nucleisys.com/nuclei_spec/isa/timer.html
> [2] https://lore.kernel.org/all/20261103-p8700-dts-v2-6-3ac5d49f2c37@htecgroup.com/
> [3] https://lore.kernel.org/all/IA1PR20MB4953D36ABE26822B62415500BBBBA@IA1PR20MB4953.namprd20.prod.outlook.com/

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings
  2026-11-12 15:44           ` Aleksa Paunovic
@ 2026-11-12 17:48             ` Conor Dooley
  0 siblings, 0 replies; 19+ messages in thread
From: Conor Dooley @ 2026-11-12 17:48 UTC (permalink / raw)
  To: Aleksa Paunovic
  Cc: alex@ghiti.fr, anup@brainfault.org,
	asrinivasan@oss.tenstorrent.com, chen.wang@linux.dev,
	conor+dt@kernel.org, devicetree@vger.kernel.org, dlan@kernel.org,
	fustini@kernel.org, guoren@kernel.org, inochiama@gmail.com,
	joel@jms.id.au, junhui.liu@pigmoral.tech, krzk+dt@kernel.org,
	linux-riscv@lists.infradead.org, mpe@kernel.org,
	npiggin@gmail.com, palmer@dabbelt.com, pjw@kernel.org,
	robh@kernel.org, tglx@kernel.org


[-- Attachment #1.1: Type: text/plain, Size: 732 bytes --]

On Thu, Nov 12, 2026 at 03:44:24PM +0000, Aleksa Paunovic wrote:

> >>> MIPS has it, as per their patch[2]:
> >>>
> >>>  - gf,mips-p8700-aclint-mtimer
> >>>
> >>> Note that MIPS have mips,p8700-aclint-mtimer in opensbi.
> > /sigh. Aleksa, can we sort this out please as part of whatever revision
> > is made to the mtimer patch in your series?
> Right. I was hoping to address this in a separate OpenSBI series
> by extending the corresponding drivers with the new gf,p8700-* compatibles,
> without touching the mips,p8700 ones that are currently in use. Does that work? 

Pretty sure that Rob said not to add the "gf,mips" compatibles for
things that had "mips," ones already and I would put this in that
category.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 161 bytes --]

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2026-11-12 17:48 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-09  5:10 [PATCH v3 0/7] riscv: dts: tenstorrent: Add Atlantis platform Joel Stanley
2026-11-09  5:10 ` [PATCH v3 1/7] dt-bindings: aplic: Add Tenstorrent Atlantis compatible Joel Stanley
2026-11-09 19:30   ` Conor Dooley
2026-11-09  5:10 ` [PATCH v3 2/7] dt-bindings: imsics: " Joel Stanley
2026-11-09  5:10 ` [PATCH v3 3/7] dt-bindings: riscv: cpus: Add Tenstorrent Ascalon Joel Stanley
2026-11-09  5:10 ` [PATCH v3 4/7] dt-bindings: timer: Add RISC-V ACLINT mtimer bindings Joel Stanley
2026-11-09 12:37   ` Krzysztof Kozlowski
2026-11-09 19:29   ` Conor Dooley
2026-11-11  5:04     ` Joel Stanley
2026-11-11  6:21       ` Inochi Amaoto
2026-11-11 10:17         ` Conor Dooley
2026-11-12 15:44           ` Aleksa Paunovic
2026-11-12 17:48             ` Conor Dooley
2026-11-12 16:50       ` Junhui Liu
2026-11-09  5:10 ` [PATCH v3 5/7] dt-bindings: riscv: add Smrnmi extension description Joel Stanley
2026-11-09  5:10 ` [PATCH v3 6/7] dt-bindings: riscv: Add Tenstorrent Atlantis platform Joel Stanley
2026-11-09  5:10 ` [PATCH v3 7/7] riscv: dts: tenstorrent: Add " Joel Stanley
2026-11-09 14:25   ` Anirudh Srinivasan
2026-11-10 19:31   ` Emil Renner Berthing

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox