Re: [PATCH v2 07/13] dt-bindings: riscv: Add B ISA extension description
From: Alex Elder
Date: Tue Dec 30 2025 - 12:29:18 EST
On 12/30/25 11:09 AM, Conor Dooley wrote:
On Fri, Dec 26, 2025 at 03:28:25PM -0600, Alex Elder wrote:
On 12/23/25 12:51 AM, Guodong Xu wrote:
Hi, Conor
On Tue, Dec 23, 2025 at 5:17 AM Conor Dooley <conor@xxxxxxxxxx> wrote:
On Mon, Dec 22, 2025 at 09:04:17PM +0800, Guodong Xu wrote:
Add description of the single-letter "B" extennsion for Bit Manipulation.
B is mandatory for RVA23U64.
The B extension is ratified in the 20240411 version of the unprivileged
ISA specification. According to the ratified spec, "the B standard
extension comprises instructions provided by the Zba, Zbb, and Zbs
extensions.
Hence add a schema check rule to enforce that B implies Zba, Zbb and Zbs.
Signed-off-by: Guodong Xu <guodong@xxxxxxxxxxxx>
---
v2: New patch.
---
.../devicetree/bindings/riscv/extensions.yaml | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index 565cb2cbb49b552959392810a9b731b43346a594..385e1deb23996d294e7662693f1257f910a6e129 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -109,6 +109,13 @@ properties:
The standard C extension for compressed instructions, as ratified in
the 20191213 version of the unprivileged ISA specification.
+ - const: b
+ description:
+ The standard B extension for bit manipulation instructions, as
+ ratified in the 20240411 version of the unprivileged ISA
+ specification. The B standard extension comprises instructions
+ provided by the Zba, Zbb, and Zbs extensions.
+
- const: v
description:
The standard V extension for vector operations, as ratified
@@ -735,6 +742,18 @@ properties:
then:
contains:
const: f
+ # b comprises the following extensions
+ - if:
+ contains:
+ const: b
What's the value in adding b, if it depends on having all 3 of the
components defined individually too? Currently all "superset" types of
extensions are permitted without their component parts also being defined,
this doesn't follow convention and therefore needs to be explained.
You obviously need this construct because the kernel does not understand
"b", and even if you added support for interpreting "b" to the kernel
this is probably still needed to make sure the ABI is maintained for
anything importing a devicetree from the kernel.
Yes, exactly. Unlike other single-letter extensions, "b" was ratified
(Apr/2024) much later than its components zba/zbb/zbs (Jun/2021).
Existing software and the kernel already expect these explicit component
strings, so enforcing this dependency ensures cores declaring "b" will
also be correctly understood by older software that only looks for
zba/zbb/zbs.
I might be misunderstanding you, but I don't think extension "b"
should *require* the other three extensions. Instead, the "b"
extension should be considered *equivalent* to the other three.
That's what I understand it to mean, anyway.
https://github.com/riscv/riscv-b
There's no point in supporting "b" in devicetree to represent
the others if it also requires the others to be present.
The dependency can be go both ways, to also make specifying "b" mandatory
when the three components are. That probably produces the most helpful
devicetree ultimately.
What about DT files that specified zba+zbb+zbs before "b" was
ratified?
I think that, instead, "b", "zba", "zbb", and "zbs" should all
be allowed.
I might even go further and harden the requirement, saying that
if you specify "b" you should *not* specify "zba", "zbb", or "zbs".
But that might not be normal practice, and it's not necessary
because they aren't in conflict.
I disagree completely with this "even further", since that's potentially
actively harmful to importers of kernel devicetrees.
This is related to one of the things I mentioned to Rob that I
wanted to discuss.
This type of "equivalent" extension is problematic for DT, or I
guess, it doesn't really add any value. I'm sure the people
ratifying "b" to be equivalent to "zba+zbb+zbs" intend for it
to simplify how the supported extensions are represented.
But it actually complicates things for DT. If you're going
to support just "b" (which would be simpler and more concise)
then there needs to be logic that treats the two possibilities
as equivalent. But old software won't recognize new DT files
that contain only the newer (e.g. "b") extension.
So I agree, there's active harm in doing what I suggested.
But why even bother supporting "b" if you have to *also*
support "zba+zbb+zbs" if you use it? It adds the possibility
of new errors ("b" without "zbs", for example), while not
really enabling or representing anything new.
If "b" is to be allowed, I'm only in favour if having it requires the
component parts.
I'd opt for ignoring the "b" extension, and any other
"simplified" extensions that simply represent a specific
set of other extensions and nothing more. At least for DT.
That said, this "rule" would have to be followed/agreed to
by all users of DT.
-Alex