diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
index 3d2934b15e80..1e4f67129f97 100644
--- a/Documentation/devicetree/bindings/riscv/cpus.yaml
+++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
@@ -23,6 +23,9 @@ description: |
   two cores, each of which has two hyperthreads, could be described as
   having four harts.
 
+allOf:
+  - $ref: extensions.yaml
+
 properties:
   compatible:
     oneOf:
@@ -79,25 +82,6 @@ properties:
     description:
       The blocksize in bytes for the Zicboz cache operations.
 
-  riscv,isa:
-    description:
-      Identifies the specific RISC-V instruction set architecture
-      supported by the hart.  These are documented in the RISC-V
-      User-Level ISA document, available from
-      https://riscv.org/specifications/
-
-      Due to revisions of the ISA specification, some deviations
-      have arisen over time.
-      Notably, riscv,isa was defined prior to the creation of the
-      Zicsr and Zifencei extensions and thus "i" implies
-      "zicsr_zifencei".
-
-      While the isa strings in ISA specification are case
-      insensitive, letters in the riscv,isa string must be all
-      lowercase to simplify parsing.
-    $ref: "/schemas/types.yaml#/definitions/string"
-    pattern: ^rv(?:64|32)imaf?d?q?c?b?k?j?p?v?h?(?:[hsxz](?:[a-z])+)?(?:_[hsxz](?:[a-z])+)*$
-
   # RISC-V requires 'timebase-frequency' in /cpus, so disallow it here
   timebase-frequency: false
 
@@ -133,8 +117,17 @@ properties:
       DMIPS/MHz, relative to highest capacity-dmips-mhz
       in the system.
 
+oneOf:
+  - required:
+      - riscv,isa
+  - required:
+      - riscv,isa-base
+
+dependencies:
+  riscv,isa-base: [ "riscv,isa-extensions" ]
+  riscv,isa-extensions: [ "riscv,isa-base" ]
+
 required:
-  - riscv,isa
   - interrupt-controller
 
 additionalProperties: true
@@ -177,8 +170,18 @@ examples:
                 i-tlb-size = <32>;
                 mmu-type = "riscv,sv39";
                 reg = <1>;
-                riscv,isa = "rv64imafdc";
                 tlb-split;
+                riscv,isa-base = "rv64i";
+
+                riscv,isa-extensions {
+                  i;
+                  m;
+                  a;
+                  f;
+                  d;
+                  c;
+                };
+
                 cpu_intc1: interrupt-controller {
                         #interrupt-cells = <1>;
                         compatible = "riscv,cpu-intc";
@@ -196,8 +199,18 @@ examples:
                 device_type = "cpu";
                 reg = <0>;
                 compatible = "riscv";
-                riscv,isa = "rv64imafdc";
                 mmu-type = "riscv,sv48";
+                riscv,isa-base = "rv64i";
+
+                riscv,isa-extensions {
+                  i;
+                  m;
+                  a;
+                  f;
+                  d;
+                  c;
+                };
+
                 interrupt-controller {
                         #interrupt-cells = <1>;
                         interrupt-controller;
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
new file mode 100644
index 000000000000..7257f186832e
--- /dev/null
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -0,0 +1,278 @@
+# SPDX-License-Identifier: (GPL-2.0 OR MIT)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/riscv/extensions.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: RISC-V ISA extensions
+
+maintainers:
+  - Paul Walmsley <paul.walmsley@sifive.com>
+  - Palmer Dabbelt <palmer@sifive.com>
+  - Conor Dooley <conor@kernel.org>
+
+description: |
+  RISC-V has a large number of extensions, some of which are "standard"
+  extensions,   meaning they are ratified by RISC-V International, and others
+  are "vendor" extensions.
+  This document defines properties that indicate whether a hart supports a
+  given extension.
+
+  Once a standard extension has been ratified, no changes in behaviour can be
+  made without the creation of a new extension.
+  The properties for standard extensions therefore map to their originally
+  ratified states, with the exception of the I, Zicntr & Zihpm extensions.
+  See the "i" property for more information.
+
+select:
+  properties:
+    compatible:
+      contains:
+        const: riscv
+
+properties:
+  riscv,isa:
+    description:
+      Identifies the specific RISC-V instruction set architecture
+      supported by the hart.  These are documented in the RISC-V
+      User-Level ISA document, available from
+      https://riscv.org/specifications/
+
+      Due to revisions of the ISA specification, some deviations
+      have arisen over time.
+      Notably, riscv,isa was defined prior to the creation of the
+      Zicsr and Zifencei extensions and thus "i" implies
+      "zicsr_zifencei".
+
+      While the isa strings in the ISA specification are case
+      insensitive, letters in the riscv,isa string must be all
+      lowercase to simplify parsing.
+
+      This property has been deprecated due to disparity between the
+      extension at the time of its creation and ratification of the
+      base ISA.
+
+    $ref: /schemas/types.yaml#/definitions/string
+    pattern: ^rv(?:64|32)imaf?d?q?c?b?k?j?p?v?h?(?:[hsxz](?:[a-z])+)?(?:_[hsxz](?:[a-z])+)*$
+    deprecated: true
+
+  riscv,isa-base:
+    description:
+      The base ISA implemented by this hart, as described by the 20191213
+      version of the unprivileged ISA specification.
+    enum:
+      - rv32i
+      - rv64i
+
+  riscv,isa-extensions:
+    type: object
+    description:
+      This child of the cpu node contains boolean properties, indicating which
+      ISA extensions are supported by the cpu.
+    additionalProperties: false
+    properties:
+      # single letter extensions, in canonical order
+
+      i:
+        type: boolean
+        description:
+          The base integer instruction set, as ratified in the 20191213 version
+          of the unprivileged ISA specification, with the exception of counter
+          access. Counter access was removed after the ratification of the
+          20191213 version of the unprivileged specification and shunted into
+          the Zicntr and Zihpm extensions.
+
+      m:
+        type: boolean
+        description:
+          The standard M extension for integer multiplication and division, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      a:
+        type: boolean
+        description:
+          The standard A extension for atomic instructions, as ratified in the
+          20191213 version of the unprivileged ISA specification.
+
+      f:
+        type: boolean
+        description:
+          The standard F extension for single-precision floating point, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      d:
+        type: boolean
+        description:
+          The standard D extension for double-precision floating-point, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      q:
+        type: boolean
+        description:
+          The standard Q extension for quad-precision floating-point, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      c:
+        type: boolean
+        description:
+          The standard C extension for compressed instructions, as ratified in
+          the 20191213 version of the unprivileged ISA specification.
+
+      v:
+        type: boolean
+        description:
+          The standard V extension for vector operations, as ratified
+          in-and-around commit 7a6c8ae ("Fix text that describes vfmv.v.f
+          encoding") of the riscv-v-spec.
+
+      h:
+        type: boolean
+        description:
+          The standard H extension for hypervisors as ratified in the 20191213
+          version of the privileged ISA specification.
+
+      # multi-letter extensions, sorted alphanumerically
+      smaia:
+        type: boolean
+        description: |
+          The standard Smaia supervisor-level extension for the advanced
+          interrupt architecture for machine-mode-visible csr and behavioural
+          changes to interrupts as frozen at commit ccbddab ("Merge pull
+          request #42 from riscv/jhauser-2023-RC4") of riscv-aia.
+
+      ssaia:
+        type: boolean
+        description: |
+          The standard Ssaia supervisor-level extension for the advanced
+          interrupt architecture for supervisor-mode-visible csr and behavioural
+          changes to interrupts as frozen at commit ccbddab ("Merge pull request
+          #42 from riscv/jhauser-2023-RC4") of riscv-aia.
+
+      sscofpmf:
+        type: boolean
+        description: |
+          The standard Sscofpmf supervisor-level extension for count overflow
+          and mode-based filtering as ratified at commit 01d1df0 ("Add ability
+          to manually trigger workflow. (#2)") of riscv-count-overflow.
+
+      sstc:
+        type: boolean
+        description:
+          The standard Sstc supervisor-level extension for time compare as
+          ratified at commit 3f9ed34 ("Add ability to manually trigger workflow.
+          (#2)") of riscv-time-compare.
+
+      svinval:
+        type: boolean
+        description:
+          The standard Svinval supervisor-level extension for fine-grained
+          address-translation cache invalidation as ratified in the 20191213
+          version of the privileged ISA specification.
+
+      svnapot:
+        type: boolean
+        description:
+          The standard Svnapot supervisor-level extensions for napot translation
+          contiguity as ratified in the 20191213 version of the privileged ISA
+          specification.
+
+      svpbmt:
+        type: boolean
+        description:
+          The standard Svpbmt supervisor-level extensions for page-based memory
+          types as ratified in the 20191213 version of the privileged ISA
+          specification.
+
+      zba:
+        type: boolean
+        description: |
+          The standard Zba bit-manipulation extension for address generation
+          acceleration instructions as ratified at commit 6d33919 ("Merge pull
+          request #158 from hirooih/clmul-fix-loop-end-condition") of
+          riscv-bitmanip.
+
+      zbb:
+        type: boolean
+        description: |
+          The standard Zbb bit-manipulation extension for basic bit-manipulation
+          as ratified at commit 6d33919 ("Merge pull request #158 from
+          hirooih/clmul-fix-loop-end-condition") of riscv-bitmanip.
+
+      zbc:
+        type: boolean
+        description: |
+          The standard Zbc bit-manipulation extension for carry-less
+          multiplication as ratified at commit 6d33919 ("Merge pull request #158
+          from hirooih/clmul-fix-loop-end-condition") of riscv-bitmanip.
+
+      zbs:
+        type: boolean
+        description: |
+          The standard Zbs bit-manipulation extension for single-bit
+          instructions as ratified at commit 6d33919 ("Merge pull request #158
+          from hirooih/clmul-fix-loop-end-condition") of riscv-bitmanip.
+
+      zicbom:
+        type: boolean
+        description:
+          The standard Zicbom extension for base cache management operations as
+          ratified in commit 3dd606f ("Create cmobase-v1.0.pdf") of riscv-CMOs.
+
+      zicbop:
+        type: boolean
+        description:
+          The standard Zicbop extension for cache-block prefetch instructions as
+          ratified in commit 3dd606f ("Create cmobase-v1.0.pdf") of riscv-CMOs.
+
+      zicboz:
+        type: boolean
+        description:
+          The standard  Zicbomz extension for cache-block zeroing as ratified in
+          commit 3dd606f ("Create cmobase-v1.0.pdf") of riscv-CMOs.
+
+      zicntr:
+        type: boolean
+        description:
+          The standard Zicntr extension for base counters and timers, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      zicsr:
+        type: boolean
+        description:
+          The standard Zicsr extension for control and status register
+          instructions, as ratified in the 20191213 version of the unprivileged
+          ISA specification.
+
+      zifencei:
+        type: boolean
+        description:
+          The standard Zifencei extension for instruction-fetch fence, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      zihintpause:
+        type: boolean
+        description: |
+          The standard Zihintpause extension for pause hints, as ratified in
+          commit d8ab5c7 ("Zihintpause is ratified") of the riscv-isa-manual.
+
+      zihpm:
+        type: boolean
+        description:
+          The standard Zihpm extension for hardware performance counters, as
+          ratified in the 20191213 version of the unprivileged ISA
+          specification.
+
+      ztso:
+        type: boolean
+        description:
+          The standard Ztso extension for total store ordering, as ratified in
+          commit 2e5236 ("Ztso is now ratified.") of the riscv-isa-manual.
+
+additionalProperties: true
+...
