From: Conor Dooley <conor@kernel.org>
To: "Clément Léger" <cleger@rivosinc.com>
Cc: Jonathan Corbet <corbet@lwn.net>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Anup Patel <anup@brainfault.org>, Shuah Khan <shuah@kernel.org>,
Atish Patra <atishp@atishpatra.org>,
linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
kvm@vger.kernel.org, kvm-riscv@lists.infradead.org,
linux-kselftest@vger.kernel.org
Subject: Re: [PATCH v2 03/12] dt-bindings: riscv: add Zc* extension rules implied by C extension
Date: Fri, 19 Apr 2024 16:49:16 +0100 [thread overview]
Message-ID: <20240419-blinked-timid-da722ec6ddc4@spud> (raw)
In-Reply-To: <20240418124300.1387978-4-cleger@rivosinc.com>
[-- Attachment #1.1: Type: text/plain, Size: 5221 bytes --]
On Thu, Apr 18, 2024 at 02:42:26PM +0200, Clément Léger wrote:
> As stated by Zc* spec:
>
> "As C defines the same instructions as Zca, Zcf and Zcd, the rule is that:
> - C always implies Zca
> - C+F implies Zcf (RV32 only)
> - C+D implies Zcd"
>
> Add additionnal validation rules to enforce this in dts.
I'll get it out of the way: NAK, and the dts patch is the perfect
example of why. I don't want us to have to continually update
devicetrees. If these are implied due to being subsets of other
extensions, then software should be able to enable them when that
other extension is present.
My fear is that, and a quick look at the "add probing" commit seemed to
confirm it, new subsets would require updates to the dts, even though
the existing extension is perfectly sufficient to determine presence.
I definitely want to avoid continual updates to the devicetree for churn
reasons whenever subsets are added, but not turning on the likes of Zca
when C is present because "the bindings were updated to enforce this"
is a complete blocker. I do concede that having two parents makes that
more difficult and will likely require some changes to how we probe - do
we need to have a "second round" type thing?
Taking Zcf as an example, maybe something like making both of C and F into
"standard" supersets and adding a case to riscv_isa_extension_check()
that would mandate that Zca and F are enabled before enabling it, and we
would ensure that C implies Zca before it implies Zcf?
Given we'd be relying on ordering, we have to perform the same implication
for both F and C and make sure that the "implies" struct has Zca before Zcf.
I don't really like that suggestion, hopefully there's a nicer way of doing
that, but I don't like the dt stuff here.
Thanks,
Conor.
>
> Signed-off-by: Clément Léger <cleger@rivosinc.com>
> ---
> .../devicetree/bindings/riscv/cpus.yaml | 8 +++--
> .../devicetree/bindings/riscv/extensions.yaml | 34 +++++++++++++++++++
> 2 files changed, 39 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
> index d87dd50f1a4b..c4e2c65437b1 100644
> --- a/Documentation/devicetree/bindings/riscv/cpus.yaml
> +++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
> @@ -168,7 +168,7 @@ examples:
> i-cache-size = <16384>;
> reg = <0>;
> riscv,isa-base = "rv64i";
> - riscv,isa-extensions = "i", "m", "a", "c";
> + riscv,isa-extensions = "i", "m", "a", "c", "zca";
>
> cpu_intc0: interrupt-controller {
> #interrupt-cells = <1>;
> @@ -194,7 +194,8 @@ examples:
> reg = <1>;
> tlb-split;
> riscv,isa-base = "rv64i";
> - riscv,isa-extensions = "i", "m", "a", "f", "d", "c";
> + riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zca",
> + "zcd";
>
> cpu_intc1: interrupt-controller {
> #interrupt-cells = <1>;
> @@ -215,7 +216,8 @@ examples:
> compatible = "riscv";
> mmu-type = "riscv,sv48";
> riscv,isa-base = "rv64i";
> - riscv,isa-extensions = "i", "m", "a", "f", "d", "c";
> + riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zca",
> + "zcd";
>
> interrupt-controller {
> #interrupt-cells = <1>;
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index db7daf22b863..0172cbaa13ca 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -549,6 +549,23 @@ properties:
> const: zca
> - contains:
> const: f
> + # C extension implies Zca
> + - if:
> + contains:
> + const: c
> + then:
> + contains:
> + const: zca
> + # C extension implies Zcd if d
> + - if:
> + allOf:
> + - contains:
> + const: c
> + - contains:
> + const: d
> + then:
> + contains:
> + const: zcd
>
> allOf:
> # Zcf extension does not exists on rv64
> @@ -566,6 +583,23 @@ allOf:
> not:
> contains:
> const: zcf
> + # C extension implies Zcf if f on rv32 only
> + - if:
> + properties:
> + riscv,isa-extensions:
> + allOf:
> + - contains:
> + const: c
> + - contains:
> + const: f
> + riscv,isa-base:
> + contains:
> + const: rv32i
> + then:
> + properties:
> + riscv,isa-extensions:
> + contains:
> + const: zcf
>
> additionalProperties: true
> ...
> --
> 2.43.0
>
[-- 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
next prev parent reply other threads:[~2024-04-19 15:49 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-18 12:42 [PATCH v2 00/12] Add support for a few Zc* extensions as well as Zcmop Clément Léger
2024-04-18 12:42 ` [PATCH v2 01/12] dt-bindings: riscv: add Zca, Zcf, Zcd and Zcb ISA extension description Clément Léger
2024-04-19 15:24 ` Conor Dooley
2024-04-18 12:42 ` [PATCH v2 02/12] riscv: dts: enable Zc* extensions when needed Clément Léger
2024-04-19 15:55 ` Conor Dooley
2024-04-18 12:42 ` [PATCH v2 03/12] dt-bindings: riscv: add Zc* extension rules implied by C extension Clément Léger
2024-04-19 15:49 ` Conor Dooley [this message]
2024-04-22 8:53 ` Clément Léger
2024-04-22 11:19 ` Conor Dooley
2024-04-22 11:40 ` Clément Léger
2024-04-18 12:42 ` [PATCH v2 04/12] riscv: add ISA parsing for Zca, Zcf, Zcd and Zcb Clément Léger
2024-04-19 15:51 ` Conor Dooley
2024-04-22 8:53 ` Clément Léger
2024-04-22 9:35 ` Conor Dooley
2024-04-22 11:14 ` Clément Léger
2024-04-22 11:36 ` Conor Dooley
2024-04-22 11:41 ` Clément Léger
2024-04-18 12:42 ` [PATCH v2 05/12] riscv: hwprobe: export Zca, Zcf, Zcd and Zcb ISA extensions Clément Léger
2024-04-18 12:42 ` [PATCH v2 06/12] RISC-V: KVM: Allow Zca, Zcf, Zcd and Zcb extensions for Guest/VM Clément Léger
2024-04-18 13:20 ` Anup Patel
2024-04-18 12:42 ` [PATCH v2 07/12] KVM: riscv: selftests: Add some Zc* extensions to get-reg-list test Clément Léger
2024-04-18 13:20 ` Anup Patel
2024-04-18 12:42 ` [PATCH v2 08/12] dt-bindings: riscv: add Zcmop ISA extension description Clément Léger
2024-04-19 15:50 ` Conor Dooley
2024-04-18 12:42 ` [PATCH v2 09/12] riscv: add ISA extension parsing for Zcmop Clément Léger
2024-04-18 12:42 ` [PATCH v2 10/12] riscv: hwprobe: export Zcmop ISA extension Clément Léger
2024-04-18 12:42 ` [PATCH v2 11/12] RISC-V: KVM: Allow Zcmop extension for Guest/VM Clément Léger
2024-04-18 13:21 ` Anup Patel
2024-04-18 12:42 ` [PATCH v2 12/12] KVM: riscv: selftests: Add Zcmop extension to get-reg-list test Clément Léger
2024-04-18 13:21 ` Anup Patel
2024-04-18 13:28 ` [PATCH v2 00/12] Add support for a few Zc* extensions as well as Zcmop Anup Patel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240419-blinked-timid-da722ec6ddc4@spud \
--to=conor@kernel.org \
--cc=anup@brainfault.org \
--cc=aou@eecs.berkeley.edu \
--cc=atishp@atishpatra.org \
--cc=cleger@rivosinc.com \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kvm-riscv@lists.infradead.org \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=robh@kernel.org \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox