From: "Heiko Stübner" <heiko@sntech.de>
To: qemu-devel@nongnu.org, Atish Patra <atishp@rivosinc.com>
Cc: Atish Patra <atishp@rivosinc.com>,
Alistair Francis <alistair.francis@wdc.com>,
Bin Meng <bin.meng@windriver.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
qemu-riscv@nongnu.org
Subject: Re: [PATCH v2] target/riscv: Add isa extenstion strings to the device tree
Date: Wed, 16 Feb 2022 12:42:27 +0100 [thread overview]
Message-ID: <2042914.xst4mCEuAT@diego> (raw)
In-Reply-To: <20220216000904.1217872-1-atishp@rivosinc.com>
Am Mittwoch, 16. Februar 2022, 01:09:04 CET schrieb Atish Patra:
> The Linux kernel parses the ISA extensions from "riscv,isa" DT
> property. It used to parse only the single letter base extensions
> until now. A generic ISA extension parsing framework was proposed[1]
> recently that can parse multi-letter ISA extensions as well.
>
> Generate the extended ISA string by appending the available ISA extensions
> to the "riscv,isa" string if it is enabled so that kernel can process it.
>
> [1] https://lkml.org/lkml/2022/2/15/263
>
> Suggested-by: Heiko Stubner <heiko@sntech.de>
> Signed-off-by: Atish Patra <atishp@rivosinc.com>
Tested-by: Heiko Stuebner <heiko@sntech.de>
> ---
> Changes from v1->v2:
> 1. Improved the code redability by using arrays instead of individual check
> ---
> target/riscv/cpu.c | 35 ++++++++++++++++++++++++++++++++++-
> 1 file changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index b0a40b83e7a8..9bf8923f164b 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -34,6 +34,13 @@
>
> /* RISC-V CPU definitions */
>
> +/* This includes the null terminated character '\0' */
> +#define MAX_ISA_EXT_LEN 256
> +struct isa_ext_data {
> + const char *name;
> + bool enabled;
> +};
> +
> static const char riscv_exts[26] = "IEMAFDQCLBJTPVNSUHKORWXYZG";
>
> const char * const riscv_int_regnames[] = {
> @@ -881,10 +888,35 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
> device_class_set_props(dc, riscv_cpu_properties);
> }
>
> +static void riscv_isa_string_ext(RISCVCPU *cpu, char *isa_str, int max_str_len)
> +{
> + int offset = strnlen(isa_str, max_str_len);
> + int i;
> + struct isa_ext_data isa_edata_arr[] = {
> + { "svpbmt", cpu->cfg.ext_svpbmt },
> + { "svinval", cpu->cfg.ext_svinval },
> + { "svnapot", cpu->cfg.ext_svnapot },
> + };
> +
> + for (i = 0; i < ARRAY_SIZE(isa_edata_arr); i++) {
> + if (!isa_edata_arr[i].enabled) {
> + continue;
> + }
> + /* check available space */
> + if ((offset + strlen(isa_edata_arr[i].name) + 1) > max_str_len) {
> + qemu_log("No space left to append isa extension");
> + return;
> + }
> + offset += snprintf(isa_str + offset, max_str_len, "_%s",
> + isa_edata_arr[i].name);
> + }
> +}
> +
> char *riscv_isa_string(RISCVCPU *cpu)
> {
> int i;
> - const size_t maxlen = sizeof("rv128") + sizeof(riscv_exts) + 1;
> + const size_t maxlen = sizeof("rv128") + sizeof(riscv_exts) +
> + MAX_ISA_EXT_LEN;
> char *isa_str = g_new(char, maxlen);
> char *p = isa_str + snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BITS);
> for (i = 0; i < sizeof(riscv_exts); i++) {
> @@ -893,6 +925,7 @@ char *riscv_isa_string(RISCVCPU *cpu)
> }
> }
> *p = '\0';
> + riscv_isa_string_ext(cpu, isa_str, maxlen);
> return isa_str;
> }
>
>
prev parent reply other threads:[~2022-02-16 11:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-16 0:09 [PATCH v2] target/riscv: Add isa extenstion strings to the device tree Atish Patra
2022-02-16 0:09 ` Atish Patra
2022-02-16 3:18 ` Anup Patel
2022-02-16 3:18 ` Anup Patel
2022-02-22 22:28 ` Atish Patra
2022-02-16 11:42 ` Heiko Stübner [this message]
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=2042914.xst4mCEuAT@diego \
--to=heiko@sntech.de \
--cc=alistair.francis@wdc.com \
--cc=atishp@rivosinc.com \
--cc=bin.meng@windriver.com \
--cc=palmer@dabbelt.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.