From a939c500793ae7672defe5e3dc83220576a7b202 Mon Sep 17 00:00:00 2001 From: Christoph Muellner Date: Fri, 24 Feb 2023 10:25:34 -0300 Subject: [PATCH 01/22] target/riscv: implement Zicboz extension The RISC-V base cache management operation (CBO) ISA extension has been ratified. It defines three extensions: Cache-Block Management, Cache-Block Prefetch and Cache-Block Zero. More information about the spec can be found at [1]. Let's start by implementing the Cache-Block Zero extension, Zicboz. It uses the cbo.zero instruction that, as with all CBO instructions that will be added later, needs to be implemented in an overlap group with the LQ instruction due to overlapping patterns. cbo.zero throws a Illegal Instruction/Virtual Instruction exception depending on CSR state. This is also the case for the remaining cbo instructions we're going to add next, so create a check_zicbo_envcfg() that will be used by all Zicbo[mz] instructions. [1] https://github.com/riscv/riscv-CMOs/blob/master/specifications/cmobase-v1.0.1.pdf Reviewed-by: Richard Henderson Co-developed-by: Philipp Tomsich Signed-off-by: Christoph Muellner Signed-off-by: Daniel Henrique Barboza Reviewed-by: Weiwei Li Message-ID: <20230224132536.552293-3-dbarboza@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- target/riscv/cpu.c | 4 ++ target/riscv/cpu.h | 2 + target/riscv/helper.h | 3 + target/riscv/insn32.decode | 10 ++- target/riscv/insn_trans/trans_rvzicbo.c.inc | 30 +++++++++ target/riscv/op_helper.c | 68 +++++++++++++++++++++ target/riscv/translate.c | 1 + 7 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 target/riscv/insn_trans/trans_rvzicbo.c.inc diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 5bc0005cc7..ab6c127859 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -75,6 +75,7 @@ struct isa_ext_data { static const struct isa_ext_data isa_edata_arr[] = { ISA_EXT_DATA_ENTRY(h, false, PRIV_VERSION_1_12_0, ext_h), ISA_EXT_DATA_ENTRY(v, false, PRIV_VERSION_1_10_0, ext_v), + ISA_EXT_DATA_ENTRY(zicboz, true, PRIV_VERSION_1_12_0, ext_icboz), ISA_EXT_DATA_ENTRY(zicond, true, PRIV_VERSION_1_12_0, ext_zicond), ISA_EXT_DATA_ENTRY(zicsr, true, PRIV_VERSION_1_10_0, ext_icsr), ISA_EXT_DATA_ENTRY(zifencei, true, PRIV_VERSION_1_10_0, ext_ifencei), @@ -1167,6 +1168,9 @@ static Property riscv_cpu_extensions[] = { DEFINE_PROP_BOOL("zhinx", RISCVCPU, cfg.ext_zhinx, false), DEFINE_PROP_BOOL("zhinxmin", RISCVCPU, cfg.ext_zhinxmin, false), + DEFINE_PROP_BOOL("zicboz", RISCVCPU, cfg.ext_icboz, true), + DEFINE_PROP_UINT16("cboz_blocksize", RISCVCPU, cfg.cboz_blocksize, 64), + DEFINE_PROP_BOOL("zmmul", RISCVCPU, cfg.ext_zmmul, false), /* Vendor-specific custom extensions */ diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 665b4c60b0..73c9832fb7 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -434,6 +434,7 @@ struct RISCVCPUConfig { bool ext_zkt; bool ext_ifencei; bool ext_icsr; + bool ext_icboz; bool ext_zicond; bool ext_zihintpause; bool ext_smstateen; @@ -486,6 +487,7 @@ struct RISCVCPUConfig { char *vext_spec; uint16_t vlen; uint16_t elen; + uint16_t cboz_blocksize; bool mmu; bool pmp; bool epmp; diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 0497370afd..ce165821b8 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -97,6 +97,9 @@ DEF_HELPER_FLAGS_2(fcvt_h_l, TCG_CALL_NO_RWG, i64, env, tl) DEF_HELPER_FLAGS_2(fcvt_h_lu, TCG_CALL_NO_RWG, i64, env, tl) DEF_HELPER_FLAGS_2(fclass_h, TCG_CALL_NO_RWG_SE, tl, env, i64) +/* Cache-block operations */ +DEF_HELPER_2(cbo_zero, void, env, tl) + /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) DEF_HELPER_3(csrw, void, env, int, tl) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index fb537e922e..a471adcea0 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -179,7 +179,15 @@ sraw 0100000 ..... ..... 101 ..... 0111011 @r # *** RV128I Base Instruction Set (in addition to RV64I) *** ldu ............ ..... 111 ..... 0000011 @i -lq ............ ..... 010 ..... 0001111 @i +{ + [ + # *** RV32 Zicboz Standard Extension *** + cbo_zero 0000000 00100 ..... 010 00000 0001111 @sfence_vm + ] + + # *** RVI128 lq *** + lq ............ ..... 010 ..... 0001111 @i +} sq ............ ..... 100 ..... 0100011 @s addid ............ ..... 000 ..... 1011011 @i sllid 000000 ...... ..... 001 ..... 1011011 @sh6 diff --git a/target/riscv/insn_trans/trans_rvzicbo.c.inc b/target/riscv/insn_trans/trans_rvzicbo.c.inc new file mode 100644 index 0000000000..feabc28342 --- /dev/null +++ b/target/riscv/insn_trans/trans_rvzicbo.c.inc @@ -0,0 +1,30 @@ +/* + * RISC-V translation routines for the RISC-V CBO Extension. + * + * Copyright (c) 2021 Philipp Tomsich, philipp.tomsich@vrull.eu + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#define REQUIRE_ZICBOZ(ctx) do { \ + if (!ctx->cfg_ptr->ext_icboz) { \ + return false; \ + } \ +} while (0) + +static bool trans_cbo_zero(DisasContext *ctx, arg_cbo_zero *a) +{ + REQUIRE_ZICBOZ(ctx); + gen_helper_cbo_zero(cpu_env, cpu_gpr[a->rs1]); + return true; +} diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 9c0b91c88f..d0217b6a98 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -3,6 +3,7 @@ * * Copyright (c) 2016-2017 Sagar Karandikar, sagark@eecs.berkeley.edu * Copyright (c) 2017-2018 SiFive, Inc. + * Copyright (c) 2022 VRULL GmbH * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -123,6 +124,73 @@ target_ulong helper_csrrw_i128(CPURISCVState *env, int csr, return int128_getlo(rv); } + +/* + * check_zicbo_envcfg + * + * Raise virtual exceptions and illegal instruction exceptions for + * Zicbo[mz] instructions based on the settings of [mhs]envcfg as + * specified in section 2.5.1 of the CMO specification. + */ +static void check_zicbo_envcfg(CPURISCVState *env, target_ulong envbits, + uintptr_t ra) +{ +#ifndef CONFIG_USER_ONLY + if ((env->priv < PRV_M) && !get_field(env->menvcfg, envbits)) { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, ra); + } + + if (riscv_cpu_virt_enabled(env) && + (((env->priv < PRV_H) && !get_field(env->henvcfg, envbits)) || + ((env->priv < PRV_S) && !get_field(env->senvcfg, envbits)))) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, ra); + } + + if ((env->priv < PRV_S) && !get_field(env->senvcfg, envbits)) { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, ra); + } +#endif +} + +void helper_cbo_zero(CPURISCVState *env, target_ulong address) +{ + RISCVCPU *cpu = env_archcpu(env); + uint16_t cbozlen = cpu->cfg.cboz_blocksize; + int mmu_idx = cpu_mmu_index(env, false); + uintptr_t ra = GETPC(); + void *mem; + + check_zicbo_envcfg(env, MENVCFG_CBZE, ra); + + /* Mask off low-bits to align-down to the cache-block. */ + address &= ~(cbozlen - 1); + + /* + * cbo.zero requires MMU_DATA_STORE access. Do a probe_write() + * to raise any exceptions, including PMP. + */ + mem = probe_write(env, address, cbozlen, mmu_idx, ra); + + if (likely(mem)) { + memset(mem, 0, cbozlen); + } else { + /* + * This means that we're dealing with an I/O page. Section 4.2 + * of cmobase v1.0.1 says: + * + * "Cache-block zero instructions store zeros independently + * of whether data from the underlying memory locations are + * cacheable." + * + * Write zeros in address + cbozlen regardless of not being + * a RAM page. + */ + for (int i = 0; i < cbozlen; i++) { + cpu_stb_mmuidx_ra(env, address + i, 0, mmu_idx, ra); + } + } +} + #ifndef CONFIG_USER_ONLY target_ulong helper_sret(CPURISCVState *env) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index a8d516ca3e..fa8bd79cef 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1105,6 +1105,7 @@ static uint32_t opcode_at(DisasContextBase *dcbase, target_ulong pc) #include "insn_trans/trans_rvb.c.inc" #include "insn_trans/trans_rvzicond.c.inc" #include "insn_trans/trans_rvzawrs.c.inc" +#include "insn_trans/trans_rvzicbo.c.inc" #include "insn_trans/trans_rvzfh.c.inc" #include "insn_trans/trans_rvk.c.inc" #include "insn_trans/trans_privileged.c.inc" From e05da09b7cfd8dd08c55e77ab2106634f7b06ad9 Mon Sep 17 00:00:00 2001 From: Christoph Muellner Date: Fri, 24 Feb 2023 10:25:35 -0300 Subject: [PATCH 02/22] target/riscv: implement Zicbom extension Zicbom is the Cache-Block Management extension defined in the already ratified RISC-V Base Cache Management Operation (CBO) ISA extension [1]. The extension contains three instructions: cbo.clean, cbo.flush and cbo.inval. All of them must be implemented in the same group as LQ and cbo.zero due to overlapping patterns. All these instructions can throw a Illegal Instruction/Virtual Instruction exception, similar to the existing cbo.zero. The same check_zicbo_envcfg() is used to handle these exceptions. Aside from that, these instructions also need to handle page faults and guest page faults. This is done in a new check_zicbom_access() helper. As with Zicboz, the cache block size for Zicbom is also configurable. Note that the spec determines that Zicbo[mp] and Zicboz can have different cache sizes (Section 2.7 of [1]), so we also include a 'cbom_blocksize' to go along with the existing 'cboz_blocksize'. They are set to the same size, so unless users want to play around with the settings both sizes will be the same. [1] https://github.com/riscv/riscv-CMOs/blob/master/specifications/cmobase-v1.0.1.pdf Reviewed-by: Richard Henderson Reviewed-by: Weiwei Li Co-developed-by: Philipp Tomsich Signed-off-by: Christoph Muellner Signed-off-by: Daniel Henrique Barboza Message-ID: <20230224132536.552293-4-dbarboza@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- target/riscv/cpu.c | 3 + target/riscv/cpu.h | 2 + target/riscv/helper.h | 2 + target/riscv/insn32.decode | 5 ++ target/riscv/insn_trans/trans_rvzicbo.c.inc | 27 +++++++++ target/riscv/op_helper.c | 67 +++++++++++++++++++++ 6 files changed, 106 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index ab6c127859..3e8f21a47d 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -75,6 +75,7 @@ struct isa_ext_data { static const struct isa_ext_data isa_edata_arr[] = { ISA_EXT_DATA_ENTRY(h, false, PRIV_VERSION_1_12_0, ext_h), ISA_EXT_DATA_ENTRY(v, false, PRIV_VERSION_1_10_0, ext_v), + ISA_EXT_DATA_ENTRY(zicbom, true, PRIV_VERSION_1_12_0, ext_icbom), ISA_EXT_DATA_ENTRY(zicboz, true, PRIV_VERSION_1_12_0, ext_icboz), ISA_EXT_DATA_ENTRY(zicond, true, PRIV_VERSION_1_12_0, ext_zicond), ISA_EXT_DATA_ENTRY(zicsr, true, PRIV_VERSION_1_10_0, ext_icsr), @@ -1168,6 +1169,8 @@ static Property riscv_cpu_extensions[] = { DEFINE_PROP_BOOL("zhinx", RISCVCPU, cfg.ext_zhinx, false), DEFINE_PROP_BOOL("zhinxmin", RISCVCPU, cfg.ext_zhinxmin, false), + DEFINE_PROP_BOOL("zicbom", RISCVCPU, cfg.ext_icbom, true), + DEFINE_PROP_UINT16("cbom_blocksize", RISCVCPU, cfg.cbom_blocksize, 64), DEFINE_PROP_BOOL("zicboz", RISCVCPU, cfg.ext_icboz, true), DEFINE_PROP_UINT16("cboz_blocksize", RISCVCPU, cfg.cboz_blocksize, 64), diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 73c9832fb7..b5b5425b99 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -434,6 +434,7 @@ struct RISCVCPUConfig { bool ext_zkt; bool ext_ifencei; bool ext_icsr; + bool ext_icbom; bool ext_icboz; bool ext_zicond; bool ext_zihintpause; @@ -487,6 +488,7 @@ struct RISCVCPUConfig { char *vext_spec; uint16_t vlen; uint16_t elen; + uint16_t cbom_blocksize; uint16_t cboz_blocksize; bool mmu; bool pmp; diff --git a/target/riscv/helper.h b/target/riscv/helper.h index ce165821b8..37b54e0991 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -98,6 +98,8 @@ DEF_HELPER_FLAGS_2(fcvt_h_lu, TCG_CALL_NO_RWG, i64, env, tl) DEF_HELPER_FLAGS_2(fclass_h, TCG_CALL_NO_RWG_SE, tl, env, i64) /* Cache-block operations */ +DEF_HELPER_2(cbo_clean_flush, void, env, tl) +DEF_HELPER_2(cbo_inval, void, env, tl) DEF_HELPER_2(cbo_zero, void, env, tl) /* Special functions */ diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index a471adcea0..282e41aa3e 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -181,6 +181,11 @@ sraw 0100000 ..... ..... 101 ..... 0111011 @r ldu ............ ..... 111 ..... 0000011 @i { [ + # *** RV32 Zicbom Standard Extension *** + cbo_clean 0000000 00001 ..... 010 00000 0001111 @sfence_vm + cbo_flush 0000000 00010 ..... 010 00000 0001111 @sfence_vm + cbo_inval 0000000 00000 ..... 010 00000 0001111 @sfence_vm + # *** RV32 Zicboz Standard Extension *** cbo_zero 0000000 00100 ..... 010 00000 0001111 @sfence_vm ] diff --git a/target/riscv/insn_trans/trans_rvzicbo.c.inc b/target/riscv/insn_trans/trans_rvzicbo.c.inc index feabc28342..7df9c30b58 100644 --- a/target/riscv/insn_trans/trans_rvzicbo.c.inc +++ b/target/riscv/insn_trans/trans_rvzicbo.c.inc @@ -16,12 +16,39 @@ * this program. If not, see . */ +#define REQUIRE_ZICBOM(ctx) do { \ + if (!ctx->cfg_ptr->ext_icbom) { \ + return false; \ + } \ +} while (0) + #define REQUIRE_ZICBOZ(ctx) do { \ if (!ctx->cfg_ptr->ext_icboz) { \ return false; \ } \ } while (0) +static bool trans_cbo_clean(DisasContext *ctx, arg_cbo_clean *a) +{ + REQUIRE_ZICBOM(ctx); + gen_helper_cbo_clean_flush(cpu_env, cpu_gpr[a->rs1]); + return true; +} + +static bool trans_cbo_flush(DisasContext *ctx, arg_cbo_flush *a) +{ + REQUIRE_ZICBOM(ctx); + gen_helper_cbo_clean_flush(cpu_env, cpu_gpr[a->rs1]); + return true; +} + +static bool trans_cbo_inval(DisasContext *ctx, arg_cbo_inval *a) +{ + REQUIRE_ZICBOM(ctx); + gen_helper_cbo_inval(cpu_env, cpu_gpr[a->rs1]); + return true; +} + static bool trans_cbo_zero(DisasContext *ctx, arg_cbo_zero *a) { REQUIRE_ZICBOZ(ctx); diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index d0217b6a98..84ee018f7d 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -191,6 +191,73 @@ void helper_cbo_zero(CPURISCVState *env, target_ulong address) } } +/* + * check_zicbom_access + * + * Check access permissions (LOAD, STORE or FETCH as specified in + * section 2.5.2 of the CMO specification) for Zicbom, raising + * either store page-fault (non-virtualized) or store guest-page + * fault (virtualized). + */ +static void check_zicbom_access(CPURISCVState *env, + target_ulong address, + uintptr_t ra) +{ + RISCVCPU *cpu = env_archcpu(env); + int mmu_idx = cpu_mmu_index(env, false); + uint16_t cbomlen = cpu->cfg.cbom_blocksize; + void *phost; + int ret; + + /* Mask off low-bits to align-down to the cache-block. */ + address &= ~(cbomlen - 1); + + /* + * Section 2.5.2 of cmobase v1.0.1: + * + * "A cache-block management instruction is permitted to + * access the specified cache block whenever a load instruction + * or store instruction is permitted to access the corresponding + * physical addresses. If neither a load instruction nor store + * instruction is permitted to access the physical addresses, + * but an instruction fetch is permitted to access the physical + * addresses, whether a cache-block management instruction is + * permitted to access the cache block is UNSPECIFIED." + */ + ret = probe_access_flags(env, address, cbomlen, MMU_DATA_LOAD, + mmu_idx, true, &phost, ra); + if (ret != TLB_INVALID_MASK) { + /* Success: readable */ + return; + } + + /* + * Since not readable, must be writable. On failure, store + * fault/store guest amo fault will be raised by + * riscv_cpu_tlb_fill(). PMP exceptions will be caught + * there as well. + */ + probe_write(env, address, cbomlen, mmu_idx, ra); +} + +void helper_cbo_clean_flush(CPURISCVState *env, target_ulong address) +{ + uintptr_t ra = GETPC(); + check_zicbo_envcfg(env, MENVCFG_CBCFE, ra); + check_zicbom_access(env, address, ra); + + /* We don't emulate the cache-hierarchy, so we're done. */ +} + +void helper_cbo_inval(CPURISCVState *env, target_ulong address) +{ + uintptr_t ra = GETPC(); + check_zicbo_envcfg(env, MENVCFG_CBIE, ra); + check_zicbom_access(env, address, ra); + + /* We don't emulate the cache-hierarchy, so we're done. */ +} + #ifndef CONFIG_USER_ONLY target_ulong helper_sret(CPURISCVState *env) From 59cb29d6a5149871d1acb18fb465879b1af5f3b2 Mon Sep 17 00:00:00 2001 From: Christoph Muellner Date: Fri, 24 Feb 2023 10:25:36 -0300 Subject: [PATCH 03/22] target/riscv: add Zicbop cbo.prefetch{i, r, m} placeholder The cmo.prefetch instructions are nops for QEMU (no emulation of the memory hierarchy, no illegal instructions, no permission faults, no traps). Add a comment noting where they would be decoded in case cbo.prefetch instructions become relevant in the future. Co-developed-by: Philipp Tomsich Signed-off-by: Christoph Muellner Signed-off-by: Daniel Henrique Barboza Reviewed-by: Richard Henderson Reviewed-by: Weiwei Li Message-ID: <20230224132536.552293-5-dbarboza@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- target/riscv/insn32.decode | 1 + 1 file changed, 1 insertion(+) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 282e41aa3e..73d5d1b045 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -134,6 +134,7 @@ addi ............ ..... 000 ..... 0010011 @i slti ............ ..... 010 ..... 0010011 @i sltiu ............ ..... 011 ..... 0010011 @i xori ............ ..... 100 ..... 0010011 @i +# cbo.prefetch_{i,r,m} instructions are ori with rd=x0 and not decoded. ori ............ ..... 110 ..... 0010011 @i andi ............ ..... 111 ..... 0010011 @i slli 00000. ...... ..... 001 ..... 0010011 @sh From 007698632814b4b4aeae1a9c176d932951e9c8cf Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Thu, 2 Mar 2023 06:14:06 -0300 Subject: [PATCH 04/22] hw/riscv/virt.c: add cbo[mz]-block-size fdt properties The cbom-block-size fdt property property is used to inform the OS about the blocksize in bytes for the Zicbom cache operations. Linux documents it in Documentation/devicetree/bindings/riscv/cpus.yaml as: riscv,cbom-block-size: $ref: /schemas/types.yaml#/definitions/uint32 description: The blocksize in bytes for the Zicbom cache operations. cboz-block-size has the same role but for the Zicboz extension, i.e. informs the size in bytes for Zicboz cache operations. Linux support for it is under review/approval in [1]. Patch 3 of that series describes cboz-block-size as: riscv,cboz-block-size: $ref: /schemas/types.yaml#/definitions/uint32 description: The blocksize in bytes for the Zicboz cache operations. [1] https://lore.kernel.org/all/20230224162631.405473-1-ajones@ventanamicro.com/ Cc: Andrew Jones Signed-off-by: Anup Patel Signed-off-by: Daniel Henrique Barboza Reviewed-by: Bin Meng Message-ID: <20230302091406.407824-2-dbarboza@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 4f8191860b..7f70fa11a1 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -249,6 +249,17 @@ static void create_fdt_socket_cpus(RISCVVirtState *s, int socket, name = riscv_isa_string(cpu_ptr); qemu_fdt_setprop_string(ms->fdt, cpu_name, "riscv,isa", name); g_free(name); + + if (cpu_ptr->cfg.ext_icbom) { + qemu_fdt_setprop_cell(ms->fdt, cpu_name, "riscv,cbom-block-size", + cpu_ptr->cfg.cbom_blocksize); + } + + if (cpu_ptr->cfg.ext_icboz) { + qemu_fdt_setprop_cell(ms->fdt, cpu_name, "riscv,cboz-block-size", + cpu_ptr->cfg.cboz_blocksize); + } + qemu_fdt_setprop_string(ms->fdt, cpu_name, "compatible", "riscv"); qemu_fdt_setprop_string(ms->fdt, cpu_name, "status", "okay"); qemu_fdt_setprop_cell(ms->fdt, cpu_name, "reg", From 270629024df1f9f4e704ce8325f958858c5cbff7 Mon Sep 17 00:00:00 2001 From: Ivan Klokov Date: Fri, 17 Feb 2023 18:14:59 +0300 Subject: [PATCH 05/22] disas/riscv Fix ctzw disassemble Due to typo in opcode list, ctzw is disassembled as clzw instruction. Signed-off-by: Ivan Klokov Fixes: 02c1b569a15b ("disas/riscv: Add Zb[abcs] instructions") Reviewed-by: Weiwei Li Reviewed-by: Daniel Henrique Barboza Message-ID: <20230217151459.54649-1-ivan.klokov@syntacore.com> Signed-off-by: Palmer Dabbelt --- disas/riscv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disas/riscv.c b/disas/riscv.c index ddda687c13..54455aaaa8 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1645,7 +1645,7 @@ const rv_opcode_data opcode_data[] = { { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, + { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, { "slli.uw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, From f1bd6f8ef6a47de7c10c8d94f526cc10b7d25c4d Mon Sep 17 00:00:00 2001 From: Mayuresh Chitale Date: Fri, 3 Mar 2023 12:20:54 +0530 Subject: [PATCH 06/22] target/riscv: cpu: Implement get_arch_id callback Implement the callback for getting the architecture-dependent CPU ID ie mhartid. Signed-off-by: Mayuresh Chitale Signed-off-by: Anup Patel Reviewed-by: Daniel Henrique Barboza Message-ID: <20230303065055.915652-2-mchitale@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- target/riscv/cpu.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 3e8f21a47d..0ad8f94a42 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1301,6 +1301,13 @@ static const char *riscv_gdb_get_dynamic_xml(CPUState *cs, const char *xmlname) } #ifndef CONFIG_USER_ONLY +static int64_t riscv_get_arch_id(CPUState *cs) +{ + RISCVCPU *cpu = RISCV_CPU(cs); + + return cpu->env.mhartid; +} + #include "hw/core/sysemu-cpu-ops.h" static const struct SysemuCPUOps riscv_sysemu_ops = { @@ -1355,6 +1362,7 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data) cc->disas_set_info = riscv_cpu_disas_set_info; #ifndef CONFIG_USER_ONLY cc->sysemu_ops = &riscv_sysemu_ops; + cc->get_arch_id = riscv_get_arch_id; #endif cc->gdb_arch_name = riscv_gdb_arch_name; cc->gdb_get_dynamic_xml = riscv_gdb_get_dynamic_xml; From 64452a09c5e37853b4f0a777805831fb87fb2c23 Mon Sep 17 00:00:00 2001 From: Mayuresh Chitale Date: Fri, 3 Mar 2023 12:20:55 +0530 Subject: [PATCH 07/22] hw: intc: Use cpu_by_arch_id to fetch CPU state Qemu_get_cpu uses the logical CPU id assigned during init to fetch the CPU state. However APLIC, IMSIC and ACLINT contain registers and states which are specific to physical hart Ids. The hart Ids in any given system might be sparse and hence calls to qemu_get_cpu need to be replaced by cpu_by_arch_id which performs lookup based on the sparse physical hart IDs. Signed-off-by: Mayuresh Chitale Signed-off-by: Anup Patel Reviewed-by: Daniel Henrique Barboza Message-ID: <20230303065055.915652-3-mchitale@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/intc/riscv_aclint.c | 16 ++++++++-------- hw/intc/riscv_aplic.c | 4 ++-- hw/intc/riscv_imsic.c | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/hw/intc/riscv_aclint.c b/hw/intc/riscv_aclint.c index eee04643cb..b466a6abaf 100644 --- a/hw/intc/riscv_aclint.c +++ b/hw/intc/riscv_aclint.c @@ -130,7 +130,7 @@ static uint64_t riscv_aclint_mtimer_read(void *opaque, hwaddr addr, addr < (mtimer->timecmp_base + (mtimer->num_harts << 3))) { size_t hartid = mtimer->hartid_base + ((addr - mtimer->timecmp_base) >> 3); - CPUState *cpu = qemu_get_cpu(hartid); + CPUState *cpu = cpu_by_arch_id(hartid); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -173,7 +173,7 @@ static void riscv_aclint_mtimer_write(void *opaque, hwaddr addr, addr < (mtimer->timecmp_base + (mtimer->num_harts << 3))) { size_t hartid = mtimer->hartid_base + ((addr - mtimer->timecmp_base) >> 3); - CPUState *cpu = qemu_get_cpu(hartid); + CPUState *cpu = cpu_by_arch_id(hartid); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -231,7 +231,7 @@ static void riscv_aclint_mtimer_write(void *opaque, hwaddr addr, /* Check if timer interrupt is triggered for each hart. */ for (i = 0; i < mtimer->num_harts; i++) { - CPUState *cpu = qemu_get_cpu(mtimer->hartid_base + i); + CPUState *cpu = cpu_by_arch_id(mtimer->hartid_base + i); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; if (!env) { continue; @@ -292,7 +292,7 @@ static void riscv_aclint_mtimer_realize(DeviceState *dev, Error **errp) s->timecmp = g_new0(uint64_t, s->num_harts); /* Claim timer interrupt bits */ for (i = 0; i < s->num_harts; i++) { - RISCVCPU *cpu = RISCV_CPU(qemu_get_cpu(s->hartid_base + i)); + RISCVCPU *cpu = RISCV_CPU(cpu_by_arch_id(s->hartid_base + i)); if (riscv_cpu_claim_interrupts(cpu, MIP_MTIP) < 0) { error_report("MTIP already claimed"); exit(1); @@ -372,7 +372,7 @@ DeviceState *riscv_aclint_mtimer_create(hwaddr addr, hwaddr size, sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, addr); for (i = 0; i < num_harts; i++) { - CPUState *cpu = qemu_get_cpu(hartid_base + i); + CPUState *cpu = cpu_by_arch_id(hartid_base + i); RISCVCPU *rvcpu = RISCV_CPU(cpu); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; riscv_aclint_mtimer_callback *cb = @@ -407,7 +407,7 @@ static uint64_t riscv_aclint_swi_read(void *opaque, hwaddr addr, if (addr < (swi->num_harts << 2)) { size_t hartid = swi->hartid_base + (addr >> 2); - CPUState *cpu = qemu_get_cpu(hartid); + CPUState *cpu = cpu_by_arch_id(hartid); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -430,7 +430,7 @@ static void riscv_aclint_swi_write(void *opaque, hwaddr addr, uint64_t value, if (addr < (swi->num_harts << 2)) { size_t hartid = swi->hartid_base + (addr >> 2); - CPUState *cpu = qemu_get_cpu(hartid); + CPUState *cpu = cpu_by_arch_id(hartid); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -545,7 +545,7 @@ DeviceState *riscv_aclint_swi_create(hwaddr addr, uint32_t hartid_base, sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, addr); for (i = 0; i < num_harts; i++) { - CPUState *cpu = qemu_get_cpu(hartid_base + i); + CPUState *cpu = cpu_by_arch_id(hartid_base + i); RISCVCPU *rvcpu = RISCV_CPU(cpu); qdev_connect_gpio_out(dev, i, diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index cfd007e629..cd7efc4ad4 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -833,7 +833,7 @@ static void riscv_aplic_realize(DeviceState *dev, Error **errp) /* Claim the CPU interrupt to be triggered by this APLIC */ for (i = 0; i < aplic->num_harts; i++) { - RISCVCPU *cpu = RISCV_CPU(qemu_get_cpu(aplic->hartid_base + i)); + RISCVCPU *cpu = RISCV_CPU(cpu_by_arch_id(aplic->hartid_base + i)); if (riscv_cpu_claim_interrupts(cpu, (aplic->mmode) ? MIP_MEIP : MIP_SEIP) < 0) { error_report("%s already claimed", @@ -966,7 +966,7 @@ DeviceState *riscv_aplic_create(hwaddr addr, hwaddr size, if (!msimode) { for (i = 0; i < num_harts; i++) { - CPUState *cpu = qemu_get_cpu(hartid_base + i); + CPUState *cpu = cpu_by_arch_id(hartid_base + i); qdev_connect_gpio_out_named(dev, NULL, i, qdev_get_gpio_in(DEVICE(cpu), diff --git a/hw/intc/riscv_imsic.c b/hw/intc/riscv_imsic.c index 4d4d5b50ca..fea3385b51 100644 --- a/hw/intc/riscv_imsic.c +++ b/hw/intc/riscv_imsic.c @@ -316,8 +316,8 @@ static const MemoryRegionOps riscv_imsic_ops = { static void riscv_imsic_realize(DeviceState *dev, Error **errp) { RISCVIMSICState *imsic = RISCV_IMSIC(dev); - RISCVCPU *rcpu = RISCV_CPU(qemu_get_cpu(imsic->hartid)); - CPUState *cpu = qemu_get_cpu(imsic->hartid); + RISCVCPU *rcpu = RISCV_CPU(cpu_by_arch_id(imsic->hartid)); + CPUState *cpu = cpu_by_arch_id(imsic->hartid); CPURISCVState *env = cpu ? cpu->env_ptr : NULL; imsic->num_eistate = imsic->num_pages * imsic->num_irqs; @@ -413,7 +413,7 @@ DeviceState *riscv_imsic_create(hwaddr addr, uint32_t hartid, bool mmode, uint32_t num_pages, uint32_t num_ids) { DeviceState *dev = qdev_new(TYPE_RISCV_IMSIC); - CPUState *cpu = qemu_get_cpu(hartid); + CPUState *cpu = cpu_by_arch_id(hartid); uint32_t i; assert(!(addr & (IMSIC_MMIO_PAGE_SZ - 1))); From 7bc1286b81d4e8380b3083beed1771c67ce87af3 Mon Sep 17 00:00:00 2001 From: Palmer Dabbelt Date: Fri, 3 Mar 2023 12:24:47 -0800 Subject: [PATCH 08/22] gitlab/opensbi: Move to docker:stable The OpenSBI build has been using docker:19.03.1, which appears to be old enough that v2 of the manifest is no longer supported. Something has started serving us those manifests, resulting in errors along the lines of $ docker build --cache-from $IMAGE_TAG --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $IMAGE_TAG .gitlab-ci.d/opensbi Step 1/7 : FROM ubuntu:18.04 18.04: Pulling from library/ubuntu mediaType in manifest should be 'application/vnd.docker.distribution.manifest.v2+json' not 'application/vnd.oci.image.manifest.v1+json' This moves to docker:stable, as was suggested by the template. It also adds the python3 package via apt, as OpenSBI requires that to build. Reviewed-by: Bin Meng Message-ID: <20230303202448.11911-2-palmer@rivosinc.com> Signed-off-by: Palmer Dabbelt --- .gitlab-ci.d/opensbi.yml | 4 ++-- .gitlab-ci.d/opensbi/Dockerfile | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.d/opensbi.yml b/.gitlab-ci.d/opensbi.yml index 04ed5a3ea1..9a651465d8 100644 --- a/.gitlab-ci.d/opensbi.yml +++ b/.gitlab-ci.d/opensbi.yml @@ -42,9 +42,9 @@ docker-opensbi: extends: .opensbi_job_rules stage: containers - image: docker:19.03.1 + image: docker:stable services: - - docker:19.03.1-dind + - docker:stable-dind variables: GIT_DEPTH: 3 IMAGE_TAG: $CI_REGISTRY_IMAGE:opensbi-cross-build diff --git a/.gitlab-ci.d/opensbi/Dockerfile b/.gitlab-ci.d/opensbi/Dockerfile index 4ba8a4de86..5ccf4151f4 100644 --- a/.gitlab-ci.d/opensbi/Dockerfile +++ b/.gitlab-ci.d/opensbi/Dockerfile @@ -15,6 +15,7 @@ RUN apt update \ ca-certificates \ git \ make \ + python3 \ wget \ && \ \ From 7c7173679fbe636ad16960b93c5985141d8fa233 Mon Sep 17 00:00:00 2001 From: Bin Meng Date: Fri, 3 Mar 2023 12:24:48 -0800 Subject: [PATCH 09/22] roms/opensbi: Upgrade from v1.1 to v1.2 Upgrade OpenSBI from v1.1 to v1.2 and the pre-built bios images. The v1.2 release includes the following commits: 994c8cf lib: sbi_timer: Added a conditional wait function which can timeout caa5eea lib: sbi: add check for ipi device for hsm start 0374ccf lib: sbi_hart: Shorten the code to set MPV bit 4e21cca lib: utils/serial: Update Shakti UART based on latest implementation 88b790f lib: sbi: Fix sbi_snprintf 1545afd lib: sbi: Fix counter index sanity check 83db3af lib: sbi: Add the bound check for events during config match 860a376 lib: sbi: Fix possible buffer overrun in counter validation 11c0008 lib: sbi: Fix fw_event_map initialization 8e86b23 lib: utils/fdt: Factor out common uart node code 7d28d3b lib: utils/serial: Initialize platform_uart_data to zero 7198e1d lib: serial: Clean up coding style in sifive-uart.c f272035 lib: utils/serial: Ensure baudrate is non-zero before using b9edf49 lib: sbi: Fix printf handling of long long 422f0e0 scripts: Add Kconfiglib v14.1.0 under scripts directory 662e631 Makefile: Add initial kconfig support for each platform de80e93 Makefile: Compile lib/utils sources separately for each platform 26bbff5 lib: utils/serial: Use kconfig for enabling/disabling drivers 2adc94b lib: utils/reset: Use kconfig for enabling/disabling drivers 3e76a60 lib: utils/sys: Use kconfig for enabling/disabling drivers 013dbb3 lib: utils/timer: Use kconfig for enabling/disabling drivers 76af9d4 lib: utils/ipi: Use kconfig for enabling/disabling drivers 0b1cf2f lib: utils/irqchip: Use kconfig for enabling/disabling drivers b126ce4 lib: utils/i2c: Use kconfig for enabling/disabling drivers 5616aa4 lib: utils/gpio: Use kconfig for enabling/disabling drivers 68d7b85 lib: utils/fdt: Use kconfig for enabling/disabling d514a8f platform: generic: Use kconfig for enabling/disabling overrides bc317a3 platform: generic: Use kconfig to set platform version and default name eccb9df platform: Remove redundant config.mk from all platforms 0723bab docs: Update documentation for kconfig support a6a8557 Makefile: Fix typo related to object.mk 9529e36 include: Add mstatus[h].GVA encodings 1fbe777 lib: sbi_trap: Save mstatus[h].GVA in trap->gva 1c4ce74 lib: sbi: Set gva when creating sbi_trap_info 5a0ca09 lib: sbi_trap: Set hypervisor CSRs for HS-mode a69eb6c lib: sbi_trap: Set hstatus.GVA when going to HS-mode 111afc1 lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop adf44b5 lib: sbi: Use the official extension name for AIA M-mode CSRs cbaa9b0 lib: utils: serial: Add Cadence UART driver 622cc5f include: Remove sideleg and sedeleg a90cf6b lib: sbi_pmu: Remove "event_idx" member from struct sbi_pmu_fw_event 1664d0e lib: sbi_pmu: Replace sbi_pmu_ctr_read() with sbi_pmu_ctr_fw_read() e238459 lib: sbi_pmu: Firmware counters are always 64 bits wide c9b388d lib: sbi_pmu: Simplify FW counters to reduce memory usage d10c1f4 lib: sbi_pmu: Add custom PMU device operations ee69f8e lib: sbi: Print platform PMU device at boot-time 5019fd1 include: sbi: Reduce includes in sbi_pmu.h d32b0a9 docs: pmu: fix Unmatched example typo 19664f6 docs: pmu: extend bindings example for Unmatched 37a0d83 lib: sbi_trap: Add helper to get GVA in sbi_trap_regs 46e744a lib: sbi_misaligned_ldst: Set GVA if not emulating 8ce486a lib: utils/fdt: Fix DT parsing in fdt_pmu_setup() 49372f2 lib: sbi: Fix sbi_strnlen wrong count decrement 7f09fba lib: utils/serial: add semihosting support 7105c18 docs/firmware: Update FW_JUMP documentation 3f3d401 docs: Fix some typos e54cb32 lib: sbi_pmu: move pmu irq information into pmu itself c316fa3 lib: sbi_hart: move hart_features struct to a public location 4f2acb5 lib: sbi_platform: expose hart_features to extension_init callback 2f63f24 platform: generic: add extensions_init handler and platform-override b6e520b platform: generic: allwinner: add support for c9xx pmu 98aa127 include: sbi: Fix typo in comment 11d14ae lib: sbi: Fix typo in comment 60b78fe include: sbi: Fix grammar in comment dcdaf30 lib: sbi: Add sbi_domain_root_add_memrange() API bd7ef41 platform: andes/ae350: Remove enabling cache from an350_final_init 9899b59 platform: andes/ae350: Use kconfig to set platform version and default name 88f58a3 platform: andes/ae350: Use fdt serial driver ef9f02e lib: utils/timer: Add Andes fdt timer support 8234fc1 lib: utils/reset: Add Andes fdt reset driver support 127a3f2 platform: andes/ae350: Use fdt irqchip driver 6f3258e platform: andes/ae350: Add fw_platform_init for platform initialization ce7c490 lib: utils/ipi: Add Andes fdt ipi driver support c8683c5 platform: andes/ae350: Add AE350 domain support d682a0a docs: andes-ae350.md: Update ae350 documentation for fdt driver support 0fee0bf Makefile: Add cscope support 51acd49 docs/firmware: update the document 9d54f43 Makefile: Add rules for carray sources in lib/sbi 56bed1a lib: sbi_ecall: Generate extensions list with carray 22f38ee lib: sbi_ecall: Add Kconfig option for each extension 85cf56c lib: utils/fdt: Remove redundant code 21ba418 lib: utils/fdt: Simplified code 8e9966c docs: fix some typos 7b29264 lib: utils/serial: Fix semihosting compile error using LLVM 14f5c4c lib: sbi_ecall: Split up sbi_ecall_replace 8e63716 firmware: payloads: Optimize usage of "ALIGN" 1b0d71b platform: generic/allwinner: Remove unused header files 9a740f5 platform: generic/allwinner: Remove ghostly type cast ba32021 Makefile: replace `echo` with `printf` for compatibility 49b0e35 Makefile: bugfix for handling platform paths 74e2029 lib: sbi: Simplified mmio match checking fc82e84 lib: sbi: Fix is_region_valid() f8eec91 lib: simplify fdt_parse_plmt_node() cc54184 lib: simplify fdt_parse_plicsw_node() e9bc7f1 lib: fix fdt_parse_plmt_node() 5daa0ef lib: fix fdt_parse_plicsw_node() 1f6866e lib: simplify fdt_translate_address() ad2ac29 lib: fix fdt_parse_aclint_node() cfbabb9 firmware: Minor optimization for relocate a36d455 platform: generic/andes: Enable generic platform support for AE350 6cd4b9b docs: platform: Update AE350 and generic platform documentation d3fcff7 docs: andes-ae350.md: fix watchdog nodename in dts example 4640d04 scripts/create-binary-archive.sh: remove andes/ae350 build directory e977512 lib: utils: Add fdt_fixup_node() helper function e1a0cb0 gitignore: add vim swap files ed8b8f5 platform: generic: Make use of fdt_match_node() 8b00be6 lib: fix is_region_valid() c2be214 lib: fix __fdt_parse_region() 7b08778 lib: fix irqchip_plic_update_hartid_table cb568b9 lib: sbi: Synchronize PMP settings with virtual memory system 506928a scripts: use env to invoke bash 64e8b9f lib: utils: serial: Add Renesas SCIF driver 0021b43 lib: utils: serial: Add FDT driver for Renesas SCIF 6840902 lib: utils/irqchip: Add compatible string for Andestech NCEPLIC100 8b1617d platform: generic: Add Renesas RZ/Five initial support 7a3354a docs: platform: Add documentation for Renesas RZ/Five SoC 34da663 lib: utils/irqchip: plic: Fix the off-by-one error in priority save/restore helpers 8509e46 lib: utils/irqchip: plic: Ensure no out-of-bound access in priority save/restore helpers 91c8a7d lib: utils/irqchip: plic: Fix the off-by-one error in plic_context_init() fabbc00 lib: utils/irqchip: plic: Fix the off-by-one error in context save/restore helpers 9a2eeb4 lib: utils/irqchip: plic: Ensure no out-of-bound access in context save/restore helpers a8ee82c lib: utils/ipi: mswi: add T-Head C9xx CLINT compatible ca7810a lib: utils/timer: mtimer: add a quirk for lacking mtime register b848d87 lib: utils/timer: mtimer: add T-Head C9xx CLINT compatible 391ec85 docs: pmu: fix binding example 0412460 docs: pmu: update a reference to a deprecated property name d5d12a9 docs: pmu: Update the pmu doc with removal of mcountinhbit restriction 6b5188c include: Bump-up version to 1.2 Signed-off-by: Bin Meng Reviewed-by: Alistair Francis Message-id: <20230207044003.3669059-1-bmeng@tinylab.org> Signed-off-by: Alistair Francis Message-ID: <20230303202448.11911-3-palmer@rivosinc.com> Signed-off-by: Palmer Dabbelt --- .../opensbi-riscv32-generic-fw_dynamic.bin | Bin 117704 -> 123072 bytes .../opensbi-riscv64-generic-fw_dynamic.bin | Bin 115344 -> 121800 bytes roms/opensbi | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin b/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin index 81bab1adc97bbe9b376f3bfe4da98cdfcf3ade7a..6a8425885c7dd0263391637b665c83d04684c68a 100644 GIT binary patch literal 123072 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 literal 117704 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%0AjLQjZPi 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⪚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 IP#&-NU*?h>$^ZZW diff --git a/pc-bios/opensbi-riscv64-generic-fw_dynamic.bin b/pc-bios/opensbi-riscv64-generic-fw_dynamic.bin index 5eb0a743260b47e07e674db3728d6ba4125847c0..80bdbf2170037541848cf96a6ff71bacea91baf7 100644 GIT binary patch literal 121800 zcmbrn3tUvy_Bg)JoH=tC1VslK6fATClFCRxG|da@FiB}#3rYLdMURNj#E=Y&8^drI z2UMUV9uT^rT|l|_b}7eulgg2fpuHt?Q2^l8`)HFgW`qVF)s+CB3CmS$)AVbykvk~g|;H%N2`!vCSMdC?} zKktaz0`KVghd9GZ#l8b{jcmw$G3RrRqCd$Pq-!#U?tACHziEPRQDFzfPvDDP)6y`G z@Ru<%)tf_Ol#97>=V*+(;+g7P8(p0}NEzTOx+WX_^&RK8%`(e#&-RTiJ@R*nqAPcp z`Ix>jD45nq*pS~m^>v`abzQsoIE{qt>n)mKS2WqxvS|5`+7;U48a*x9V|lO|a#gOb zw@m9osO4112yRuI6ez@%1+K*}7|F5fEF}tIUD5C22FE;GExVV)PW)S1*mGLjHOSO&MJcPr{G8Q1##~baHe^E{#Iow4s$_gs%-$b%zC2TTW5c zmapNTh1x4{%aalPi419iPf`11lW9wI@}Oy+`dut%dHX($PQH+PZhC(4cgYdiLak5ZN=n{Fy z6cj9c^#Ky@Oh>~0>1beFNMt0czB2`p-+4=r=Hn^1RQilthUpn{uTK13#}toHuPgXV zuU6T0S(Bn=^o?=t6MOFK-``Z;QhD{g8y~bE?mXJ_N&md&C~Ne!#W$DSUTR<7`_jOb z=2q+VYqxIRx!q;&>m3{jVJKt^PJh@C%p>|ShB7?HQ}lF3Mu#x8A%v&>Ry>gK@W$ZH zp(!&{=cLgy85hG$-i4mUC=IiCCH*+#YIvM?rDrpv472%B^c=>`Fo$=epJ3b#Pw?*a zTxPUkEA4$#A&!gt+ z=Ti&x3-nQxPOqb$)IUir)Gwr>_0iN*`lqO;^-oia^oyv)`o+{U`e%}3P-sTFlfUNJ zc?*kqd#KAwi~7)@N$axOa;gk|xdn%i%c~jbX|WmUxIY~I>f&Z`%pVueb)JrNpo{0r z&U72=`HH7Ssqj<_&aws!ME5SXLyzBFe(fde%I0)sa!|x= zfo*4tm97Z-j^^6JX^v6K3_(h!GV?4S&D&7>^OQgLdMs6v#OOFv8*M?3U))8>1RAvI|3s@tGfd!`(>+H`a+v-i-<_ZWvQO-A5veyZDQW6?lw}mB*@#6 zocC04av=1jnw6;<8!6FDA%nTT6MvTp7t}Xz5tyik@&9Ew%VCO(gA+^aSujN~0u=<$mTz@*a7(TP8Tteo3<}DrXu! zWtqf$Px_0tcr)MMtz$jm=Kaifm>%5QoG?DdA`Vr#%eln+@YTZAAWw;dVLc{cBmhRtn4RrYfVw}Ew+}eV$%6Jxwt2L>khfE$w~P_^@2A%?uo|>;kmJJmIq)GT?>@bj zf}EI@kfUJkbCeG`?Y=wWr6=olpwD;5D(Q*OKB(9GL;gftMAQ5r6U?&(J_-gEGfD?f ztl5A+L7jkSQ`!Fj?cR9pC~9+jpJR*nBXbJBjMd*>GW$x)F$0y1atiSfHA7fR`9)mn+UMHmK=k$J!_noH5v>FjGVI7}F9hXx6)9lq!ihrcpk+MFV;7Dm7Ug1cUJ@mFC#XMxH zmfDiwtoP5hnDkVYV=hqI@1QQf72i2>nI*QE(ye;!4@V-$PH90d>PBc`cwpezbAlHm z6B;j4;$c`@4=dg|4D=S&AB9zG%BsitNGcZr&Rqu~m7{TG4HH;>6d{aK`lfZ3{6U#BIdJ`ZjjlwYfS%Q)5z{o2NvZbGY zMWQb`J~DL5DqK4}gS>}acr9L`_Q%V}TiD%cuDRZI)@GGjA)C?@(7EKQqCdKQ@r|V| z%bU`X`a9?~*GeBDu95mmG{A`dAd|~g$_0@bv6BSm9TlgUc5v_48p2)uXtPpQnH`d2 zN6Px>ESbpZ7}l�fBO{lX1qldR~}Qh2_SG;hoP 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 Date: Fri, 3 Mar 2023 14:12:48 +0100 Subject: [PATCH 10/22] riscv: Pass Object to register_cpu_props instead of DeviceState One can extract the DeviceState pointer from the Object pointer, so pass the Object for future commits to access other fields of Object. No functional changes intended. Signed-off-by: Alexandre Ghiti Reviewed-by: Alistair Francis Reviewed-by: Frank Chang Reviewed-by: Andrew Jones Reviewed-by: Bin Meng Message-ID: <20230303131252.892893-2-alexghiti@rivosinc.com> Signed-off-by: Palmer Dabbelt --- target/riscv/cpu.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 0ad8f94a42..1c4d8aaa74 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -220,7 +220,7 @@ static const char * const riscv_intr_names[] = { "reserved" }; -static void register_cpu_props(DeviceState *dev); +static void register_cpu_props(Object *obj); const char *riscv_cpu_get_trap_name(target_ulong cause, bool async) { @@ -258,7 +258,7 @@ static void riscv_any_cpu_init(Object *obj) set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVU); #endif set_priv_version(env, PRIV_VERSION_1_12_0); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); } #if defined(TARGET_RISCV64) @@ -267,7 +267,7 @@ static void rv64_base_cpu_init(Object *obj) CPURISCVState *env = &RISCV_CPU(obj)->env; /* We set this in the realise function */ set_misa(env, MXL_RV64, 0); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); /* Set latest version of privileged specification */ set_priv_version(env, PRIV_VERSION_1_12_0); } @@ -276,7 +276,7 @@ static void rv64_sifive_u_cpu_init(Object *obj) { CPURISCVState *env = &RISCV_CPU(obj)->env; set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); } @@ -286,7 +286,7 @@ static void rv64_sifive_e_cpu_init(Object *obj) RISCVCPU *cpu = RISCV_CPU(obj); set_misa(env, MXL_RV64, RVI | RVM | RVA | RVC | RVU); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); cpu->cfg.mmu = false; } @@ -331,7 +331,7 @@ static void rv128_base_cpu_init(Object *obj) CPURISCVState *env = &RISCV_CPU(obj)->env; /* We set this in the realise function */ set_misa(env, MXL_RV128, 0); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); /* Set latest version of privileged specification */ set_priv_version(env, PRIV_VERSION_1_12_0); } @@ -341,7 +341,7 @@ static void rv32_base_cpu_init(Object *obj) CPURISCVState *env = &RISCV_CPU(obj)->env; /* We set this in the realise function */ set_misa(env, MXL_RV32, 0); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); /* Set latest version of privileged specification */ set_priv_version(env, PRIV_VERSION_1_12_0); } @@ -350,7 +350,7 @@ static void rv32_sifive_u_cpu_init(Object *obj) { CPURISCVState *env = &RISCV_CPU(obj)->env; set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); } @@ -360,7 +360,7 @@ static void rv32_sifive_e_cpu_init(Object *obj) RISCVCPU *cpu = RISCV_CPU(obj); set_misa(env, MXL_RV32, RVI | RVM | RVA | RVC | RVU); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); cpu->cfg.mmu = false; } @@ -371,7 +371,7 @@ static void rv32_ibex_cpu_init(Object *obj) RISCVCPU *cpu = RISCV_CPU(obj); set_misa(env, MXL_RV32, RVI | RVM | RVC | RVU); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_11_0); cpu->cfg.mmu = false; cpu->cfg.epmp = true; @@ -383,7 +383,7 @@ static void rv32_imafcu_nommu_cpu_init(Object *obj) RISCVCPU *cpu = RISCV_CPU(obj); set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVC | RVU); - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); cpu->cfg.mmu = false; } @@ -398,7 +398,7 @@ static void riscv_host_cpu_init(Object *obj) #elif defined(TARGET_RISCV64) set_misa(env, MXL_RV64, 0); #endif - register_cpu_props(DEVICE(obj)); + register_cpu_props(obj); } #endif @@ -1210,11 +1210,12 @@ static Property riscv_cpu_extensions[] = { * properties and leave. env.misa_ext = 0 means that we want * all the default properties to be registered. */ -static void register_cpu_props(DeviceState *dev) +static void register_cpu_props(Object *obj) { - RISCVCPU *cpu = RISCV_CPU(OBJECT(dev)); + RISCVCPU *cpu = RISCV_CPU(obj); uint32_t misa_ext = cpu->env.misa_ext; Property *prop; + DeviceState *dev = DEVICE(obj); /* * If misa_ext is not zero, set cfg properties now to From bf1a6abec47b57b1e891db625cd93e45e0c5ecd5 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Fri, 3 Mar 2023 14:12:49 +0100 Subject: [PATCH 11/22] riscv: Change type of valid_vm_1_10_[32|64] to bool This array is actually used as a boolean so swap its current char type to a boolean and at the same time, change the type of validate_vm to bool since it returns valid_vm_1_10_[32|64]. Suggested-by: Andrew Jones Signed-off-by: Alexandre Ghiti Reviewed-by: Andrew Jones Reviewed-by: Alistair Francis Reviewed-by: Bin Meng Reviewed-by: Frank Chang Message-ID: <20230303131252.892893-3-alexghiti@rivosinc.com> Signed-off-by: Palmer Dabbelt --- target/riscv/csr.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 3106f96212..d93d481bd6 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -1141,16 +1141,16 @@ static const target_ulong hip_writable_mask = MIP_VSSIP; static const target_ulong hvip_writable_mask = MIP_VSSIP | MIP_VSTIP | MIP_VSEIP; static const target_ulong vsip_writable_mask = MIP_VSSIP; -static const char valid_vm_1_10_32[16] = { - [VM_1_10_MBARE] = 1, - [VM_1_10_SV32] = 1 +static const bool valid_vm_1_10_32[16] = { + [VM_1_10_MBARE] = true, + [VM_1_10_SV32] = true }; -static const char valid_vm_1_10_64[16] = { - [VM_1_10_MBARE] = 1, - [VM_1_10_SV39] = 1, - [VM_1_10_SV48] = 1, - [VM_1_10_SV57] = 1 +static const bool valid_vm_1_10_64[16] = { + [VM_1_10_MBARE] = true, + [VM_1_10_SV39] = true, + [VM_1_10_SV48] = true, + [VM_1_10_SV57] = true }; /* Machine Information Registers */ @@ -1230,7 +1230,7 @@ static RISCVException read_mstatus(CPURISCVState *env, int csrno, return RISCV_EXCP_NONE; } -static int validate_vm(CPURISCVState *env, target_ulong vm) +static bool validate_vm(CPURISCVState *env, target_ulong vm) { if (riscv_cpu_mxl(env) == MXL_RV32) { return valid_vm_1_10_32[vm & 0xf]; @@ -2669,7 +2669,8 @@ static RISCVException read_satp(CPURISCVState *env, int csrno, static RISCVException write_satp(CPURISCVState *env, int csrno, target_ulong val) { - target_ulong vm, mask; + target_ulong mask; + bool vm; if (!riscv_cpu_cfg(env)->mmu) { return RISCV_EXCP_NONE; From 6f23aaeb9be13d4a26b7f863533c316105481640 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Fri, 3 Mar 2023 14:12:50 +0100 Subject: [PATCH 12/22] riscv: Allow user to set the satp mode RISC-V specifies multiple sizes for addressable memory and Linux probes for the machine's support at startup via the satp CSR register (done in csr.c:validate_vm). As per the specification, sv64 must support sv57, which in turn must support sv48...etc. So we can restrict machine support by simply setting the "highest" supported mode and the bare mode is always supported. You can set the satp mode using the new properties "sv32", "sv39", "sv48", "sv57" and "sv64" as follows: -cpu rv64,sv57=on # Linux will boot using sv57 scheme -cpu rv64,sv39=on # Linux will boot using sv39 scheme -cpu rv64,sv57=off # Linux will boot using sv48 scheme -cpu rv64 # Linux will boot using sv57 scheme by default We take the highest level set by the user: -cpu rv64,sv48=on,sv57=on # Linux will boot using sv57 scheme We make sure that invalid configurations are rejected: -cpu rv64,sv39=off,sv48=on # sv39 must be supported if higher modes are # enabled We accept "redundant" configurations: -cpu rv64,sv48=on,sv57=off # Linux will boot using sv48 scheme And contradictory configurations: -cpu rv64,sv48=on,sv48=off # Linux will boot using sv39 scheme Co-Developed-by: Ludovic Henry Signed-off-by: Ludovic Henry Signed-off-by: Alexandre Ghiti Reviewed-by: Andrew Jones Reviewed-by: Bin Meng Acked-by: Alistair Francis Reviewed-by: Frank Chang Message-ID: <20230303131252.892893-4-alexghiti@rivosinc.com> Signed-off-by: Palmer Dabbelt --- target/riscv/cpu.c | 214 +++++++++++++++++++++++++++++++++++++++++++++ target/riscv/cpu.h | 21 +++++ target/riscv/csr.c | 12 ++- 3 files changed, 240 insertions(+), 7 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 1c4d8aaa74..e1e8057836 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -28,6 +28,7 @@ #include "time_helper.h" #include "exec/exec-all.h" #include "qapi/error.h" +#include "qapi/visitor.h" #include "qemu/error-report.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" @@ -249,6 +250,82 @@ static void set_vext_version(CPURISCVState *env, int vext_ver) env->vext_ver = vext_ver; } +#ifndef CONFIG_USER_ONLY +static uint8_t satp_mode_from_str(const char *satp_mode_str) +{ + if (!strncmp(satp_mode_str, "mbare", 5)) { + return VM_1_10_MBARE; + } + + if (!strncmp(satp_mode_str, "sv32", 4)) { + return VM_1_10_SV32; + } + + if (!strncmp(satp_mode_str, "sv39", 4)) { + return VM_1_10_SV39; + } + + if (!strncmp(satp_mode_str, "sv48", 4)) { + return VM_1_10_SV48; + } + + if (!strncmp(satp_mode_str, "sv57", 4)) { + return VM_1_10_SV57; + } + + if (!strncmp(satp_mode_str, "sv64", 4)) { + return VM_1_10_SV64; + } + + g_assert_not_reached(); +} + +uint8_t satp_mode_max_from_map(uint32_t map) +{ + /* map here has at least one bit set, so no problem with clz */ + return 31 - __builtin_clz(map); +} + +const char *satp_mode_str(uint8_t satp_mode, bool is_32_bit) +{ + if (is_32_bit) { + switch (satp_mode) { + case VM_1_10_SV32: + return "sv32"; + case VM_1_10_MBARE: + return "none"; + } + } else { + switch (satp_mode) { + case VM_1_10_SV64: + return "sv64"; + case VM_1_10_SV57: + return "sv57"; + case VM_1_10_SV48: + return "sv48"; + case VM_1_10_SV39: + return "sv39"; + case VM_1_10_MBARE: + return "none"; + } + } + + g_assert_not_reached(); +} + +/* Sets the satp mode to the max supported */ +static void set_satp_mode_default_map(RISCVCPU *cpu) +{ + bool rv32 = riscv_cpu_mxl(&cpu->env) == MXL_RV32; + + if (riscv_feature(&cpu->env, RISCV_FEATURE_MMU)) { + cpu->cfg.satp_mode.map |= (1 << (rv32 ? VM_1_10_SV32 : VM_1_10_SV57)); + } else { + cpu->cfg.satp_mode.map |= (1 << VM_1_10_MBARE); + } +} +#endif + static void riscv_any_cpu_init(Object *obj) { CPURISCVState *env = &RISCV_CPU(obj)->env; @@ -918,6 +995,87 @@ static void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp) set_misa(env, env->misa_mxl, ext); } +#ifndef CONFIG_USER_ONLY +static void riscv_cpu_satp_mode_finalize(RISCVCPU *cpu, Error **errp) +{ + bool rv32 = riscv_cpu_mxl(&cpu->env) == MXL_RV32; + const bool *valid_vm = rv32 ? valid_vm_1_10_32 : valid_vm_1_10_64; + uint8_t satp_mode_max; + + if (cpu->cfg.satp_mode.map == 0) { + if (cpu->cfg.satp_mode.init == 0) { + /* If unset by the user, we fallback to the default satp mode. */ + set_satp_mode_default_map(cpu); + } else { + /* + * Find the lowest level that was disabled and then enable the + * first valid level below which can be found in + * valid_vm_1_10_32/64. + */ + for (int i = 1; i < 16; ++i) { + if ((cpu->cfg.satp_mode.init & (1 << i)) && valid_vm[i]) { + for (int j = i - 1; j >= 0; --j) { + if (valid_vm[j]) { + cpu->cfg.satp_mode.map |= (1 << j); + break; + } + } + break; + } + } + } + } + + /* Make sure the configuration asked is supported by qemu */ + for (int i = 0; i < 16; ++i) { + if ((cpu->cfg.satp_mode.map & (1 << i)) && !valid_vm[i]) { + error_setg(errp, "satp_mode %s is not valid", + satp_mode_str(i, rv32)); + return; + } + } + + /* + * Make sure the user did not ask for an invalid configuration as per + * the specification. + */ + satp_mode_max = satp_mode_max_from_map(cpu->cfg.satp_mode.map); + + if (!rv32) { + for (int i = satp_mode_max - 1; i >= 0; --i) { + if (!(cpu->cfg.satp_mode.map & (1 << i)) && + (cpu->cfg.satp_mode.init & (1 << i)) && + valid_vm[i]) { + error_setg(errp, "cannot disable %s satp mode if %s " + "is enabled", satp_mode_str(i, false), + satp_mode_str(satp_mode_max, false)); + return; + } + } + } + + /* Finally expand the map so that all valid modes are set */ + for (int i = satp_mode_max - 1; i >= 0; --i) { + if (valid_vm[i]) { + cpu->cfg.satp_mode.map |= (1 << i); + } + } +} +#endif + +static void riscv_cpu_finalize_features(RISCVCPU *cpu, Error **errp) +{ +#ifndef CONFIG_USER_ONLY + Error *local_err = NULL; + + riscv_cpu_satp_mode_finalize(cpu, &local_err); + if (local_err != NULL) { + error_propagate(errp, local_err); + return; + } +#endif +} + static void riscv_cpu_realize(DeviceState *dev, Error **errp) { CPUState *cs = CPU(dev); @@ -1017,6 +1175,12 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) } #endif + riscv_cpu_finalize_features(cpu, &local_err); + if (local_err != NULL) { + error_propagate(errp, local_err); + return; + } + riscv_cpu_register_gdb_regs_for_features(cs); qemu_init_vcpu(cs); @@ -1026,6 +1190,52 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) } #ifndef CONFIG_USER_ONLY +static void cpu_riscv_get_satp(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + RISCVSATPMap *satp_map = opaque; + uint8_t satp = satp_mode_from_str(name); + bool value; + + value = satp_map->map & (1 << satp); + + visit_type_bool(v, name, &value, errp); +} + +static void cpu_riscv_set_satp(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + RISCVSATPMap *satp_map = opaque; + uint8_t satp = satp_mode_from_str(name); + bool value; + + if (!visit_type_bool(v, name, &value, errp)) { + return; + } + + satp_map->map = deposit32(satp_map->map, satp, 1, value); + satp_map->init |= 1 << satp; +} + +static void riscv_add_satp_mode_properties(Object *obj) +{ + RISCVCPU *cpu = RISCV_CPU(obj); + + if (cpu->env.misa_mxl == MXL_RV32) { + object_property_add(obj, "sv32", "bool", cpu_riscv_get_satp, + cpu_riscv_set_satp, NULL, &cpu->cfg.satp_mode); + } else { + object_property_add(obj, "sv39", "bool", cpu_riscv_get_satp, + cpu_riscv_set_satp, NULL, &cpu->cfg.satp_mode); + object_property_add(obj, "sv48", "bool", cpu_riscv_get_satp, + cpu_riscv_set_satp, NULL, &cpu->cfg.satp_mode); + object_property_add(obj, "sv57", "bool", cpu_riscv_get_satp, + cpu_riscv_set_satp, NULL, &cpu->cfg.satp_mode); + object_property_add(obj, "sv64", "bool", cpu_riscv_get_satp, + cpu_riscv_set_satp, NULL, &cpu->cfg.satp_mode); + } +} + static void riscv_cpu_set_irq(void *opaque, int irq, int level) { RISCVCPU *cpu = RISCV_CPU(opaque); @@ -1246,6 +1456,10 @@ static void register_cpu_props(Object *obj) for (prop = riscv_cpu_extensions; prop && prop->name; prop++) { qdev_property_add_static(dev, prop); } + +#ifndef CONFIG_USER_ONLY + riscv_add_satp_mode_properties(obj); +#endif } static Property riscv_cpu_properties[] = { diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index b5b5425b99..67ac665ff0 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -27,6 +27,7 @@ #include "qom/object.h" #include "qemu/int128.h" #include "cpu_bits.h" +#include "qapi/qapi-types-common.h" #define TCG_GUEST_DEFAULT_MO 0 @@ -401,6 +402,17 @@ struct RISCVCPUClass { ResettablePhases parent_phases; }; +/* + * map is a 16-bit bitmap: the most significant set bit in map is the maximum + * satp mode that is supported. + * + * init is a 16-bit bitmap used to make sure the user selected a correct + * configuration as per the specification. + */ +typedef struct { + uint16_t map, init; +} RISCVSATPMap; + struct RISCVCPUConfig { bool ext_i; bool ext_e; @@ -497,6 +509,10 @@ struct RISCVCPUConfig { bool misa_w; bool short_isa_string; + +#ifndef CONFIG_USER_ONLY + RISCVSATPMap satp_mode; +#endif }; typedef struct RISCVCPUConfig RISCVCPUConfig; @@ -798,9 +814,14 @@ enum riscv_pmu_event_idx { /* CSR function table */ extern riscv_csr_operations csr_ops[CSR_TABLE_SIZE]; +extern const bool valid_vm_1_10_32[], valid_vm_1_10_64[]; + void riscv_get_csr_ops(int csrno, riscv_csr_operations *ops); void riscv_set_csr_ops(int csrno, riscv_csr_operations *ops); void riscv_cpu_register_gdb_regs_for_features(CPUState *cs); +uint8_t satp_mode_max_from_map(uint32_t map); +const char *satp_mode_str(uint8_t satp_mode, bool is_32_bit); + #endif /* RISCV_CPU_H */ diff --git a/target/riscv/csr.c b/target/riscv/csr.c index d93d481bd6..ab566639e5 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -1141,12 +1141,12 @@ static const target_ulong hip_writable_mask = MIP_VSSIP; static const target_ulong hvip_writable_mask = MIP_VSSIP | MIP_VSTIP | MIP_VSEIP; static const target_ulong vsip_writable_mask = MIP_VSSIP; -static const bool valid_vm_1_10_32[16] = { +const bool valid_vm_1_10_32[16] = { [VM_1_10_MBARE] = true, [VM_1_10_SV32] = true }; -static const bool valid_vm_1_10_64[16] = { +const bool valid_vm_1_10_64[16] = { [VM_1_10_MBARE] = true, [VM_1_10_SV39] = true, [VM_1_10_SV48] = true, @@ -1232,11 +1232,9 @@ static RISCVException read_mstatus(CPURISCVState *env, int csrno, static bool validate_vm(CPURISCVState *env, target_ulong vm) { - if (riscv_cpu_mxl(env) == MXL_RV32) { - return valid_vm_1_10_32[vm & 0xf]; - } else { - return valid_vm_1_10_64[vm & 0xf]; - } + RISCVCPU *cpu = RISCV_CPU(env_cpu(env)); + + return (vm & 0xf) <= satp_mode_max_from_map(cpu->cfg.satp_mode.map); } static RISCVException write_mstatus(CPURISCVState *env, int csrno, From 6df3747a2745534c86db8e8f2ffdb1b8a66e5e84 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Fri, 3 Mar 2023 14:12:51 +0100 Subject: [PATCH 13/22] riscv: Introduce satp mode hw capabilities Currently, the max satp mode is set with the only constraint that it must be implemented in QEMU, i.e. set in valid_vm_1_10_[32|64]. But we actually need to add another level of constraint: what the hw is actually capable of, because currently, a linux booting on a sifive-u54 boots in sv57 mode which is incompatible with the cpu's sv39 max capability. So add a new bitmap to RISCVSATPMap which contains this capability and initialize it in every XXX_cpu_init. Finally: - valid_vm_1_10_[32|64] constrains which satp mode the CPU can use - the CPU hw capabilities constrains what the user may select - the user's selection then constrains what's available to the guest OS. Signed-off-by: Alexandre Ghiti Reviewed-by: Andrew Jones Reviewed-by: Bin Meng Reviewed-by: Frank Chang Reviewed-by: Alistair Francis Message-ID: <20230303131252.892893-5-alexghiti@rivosinc.com> Signed-off-by: Palmer Dabbelt --- target/riscv/cpu.c | 93 ++++++++++++++++++++++++++++++++++------------ target/riscv/cpu.h | 8 +++- 2 files changed, 75 insertions(+), 26 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index e1e8057836..1e97473af2 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -313,17 +313,24 @@ const char *satp_mode_str(uint8_t satp_mode, bool is_32_bit) g_assert_not_reached(); } -/* Sets the satp mode to the max supported */ -static void set_satp_mode_default_map(RISCVCPU *cpu) +static void set_satp_mode_max_supported(RISCVCPU *cpu, + uint8_t satp_mode) { bool rv32 = riscv_cpu_mxl(&cpu->env) == MXL_RV32; + const bool *valid_vm = rv32 ? valid_vm_1_10_32 : valid_vm_1_10_64; - if (riscv_feature(&cpu->env, RISCV_FEATURE_MMU)) { - cpu->cfg.satp_mode.map |= (1 << (rv32 ? VM_1_10_SV32 : VM_1_10_SV57)); - } else { - cpu->cfg.satp_mode.map |= (1 << VM_1_10_MBARE); + for (int i = 0; i <= satp_mode; ++i) { + if (valid_vm[i]) { + cpu->cfg.satp_mode.supported |= (1 << i); + } } } + +/* Set the satp mode to the max supported */ +static void set_satp_mode_default_map(RISCVCPU *cpu) +{ + cpu->cfg.satp_mode.map = cpu->cfg.satp_mode.supported; +} #endif static void riscv_any_cpu_init(Object *obj) @@ -334,6 +341,13 @@ static void riscv_any_cpu_init(Object *obj) #elif defined(TARGET_RISCV64) set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVU); #endif + +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), + riscv_cpu_mxl(&RISCV_CPU(obj)->env) == MXL_RV32 ? + VM_1_10_SV32 : VM_1_10_SV57); +#endif + set_priv_version(env, PRIV_VERSION_1_12_0); register_cpu_props(obj); } @@ -347,6 +361,9 @@ static void rv64_base_cpu_init(Object *obj) register_cpu_props(obj); /* Set latest version of privileged specification */ set_priv_version(env, PRIV_VERSION_1_12_0); +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV57); +#endif } static void rv64_sifive_u_cpu_init(Object *obj) @@ -355,6 +372,9 @@ static void rv64_sifive_u_cpu_init(Object *obj) set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV39); +#endif } static void rv64_sifive_e_cpu_init(Object *obj) @@ -366,6 +386,9 @@ static void rv64_sifive_e_cpu_init(Object *obj) register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); cpu->cfg.mmu = false; +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(cpu, VM_1_10_MBARE); +#endif } static void rv64_thead_c906_cpu_init(Object *obj) @@ -395,6 +418,9 @@ static void rv64_thead_c906_cpu_init(Object *obj) cpu->cfg.ext_xtheadsync = true; cpu->cfg.mvendorid = THEAD_VENDOR_ID; +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(cpu, VM_1_10_SV39); +#endif } static void rv128_base_cpu_init(Object *obj) @@ -411,6 +437,9 @@ static void rv128_base_cpu_init(Object *obj) register_cpu_props(obj); /* Set latest version of privileged specification */ set_priv_version(env, PRIV_VERSION_1_12_0); +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV57); +#endif } #else static void rv32_base_cpu_init(Object *obj) @@ -421,6 +450,9 @@ static void rv32_base_cpu_init(Object *obj) register_cpu_props(obj); /* Set latest version of privileged specification */ set_priv_version(env, PRIV_VERSION_1_12_0); +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV32); +#endif } static void rv32_sifive_u_cpu_init(Object *obj) @@ -429,6 +461,9 @@ static void rv32_sifive_u_cpu_init(Object *obj) set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV32); +#endif } static void rv32_sifive_e_cpu_init(Object *obj) @@ -440,6 +475,9 @@ static void rv32_sifive_e_cpu_init(Object *obj) register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); cpu->cfg.mmu = false; +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(cpu, VM_1_10_MBARE); +#endif } static void rv32_ibex_cpu_init(Object *obj) @@ -451,6 +489,9 @@ static void rv32_ibex_cpu_init(Object *obj) register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_11_0); cpu->cfg.mmu = false; +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(cpu, VM_1_10_MBARE); +#endif cpu->cfg.epmp = true; } @@ -463,6 +504,9 @@ static void rv32_imafcu_nommu_cpu_init(Object *obj) register_cpu_props(obj); set_priv_version(env, PRIV_VERSION_1_10_0); cpu->cfg.mmu = false; +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(cpu, VM_1_10_MBARE); +#endif } #endif @@ -999,8 +1043,9 @@ static void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp) static void riscv_cpu_satp_mode_finalize(RISCVCPU *cpu, Error **errp) { bool rv32 = riscv_cpu_mxl(&cpu->env) == MXL_RV32; - const bool *valid_vm = rv32 ? valid_vm_1_10_32 : valid_vm_1_10_64; - uint8_t satp_mode_max; + uint8_t satp_mode_map_max; + uint8_t satp_mode_supported_max = + satp_mode_max_from_map(cpu->cfg.satp_mode.supported); if (cpu->cfg.satp_mode.map == 0) { if (cpu->cfg.satp_mode.init == 0) { @@ -1013,9 +1058,10 @@ static void riscv_cpu_satp_mode_finalize(RISCVCPU *cpu, Error **errp) * valid_vm_1_10_32/64. */ for (int i = 1; i < 16; ++i) { - if ((cpu->cfg.satp_mode.init & (1 << i)) && valid_vm[i]) { + if ((cpu->cfg.satp_mode.init & (1 << i)) && + (cpu->cfg.satp_mode.supported & (1 << i))) { for (int j = i - 1; j >= 0; --j) { - if (valid_vm[j]) { + if (cpu->cfg.satp_mode.supported & (1 << j)) { cpu->cfg.satp_mode.map |= (1 << j); break; } @@ -1026,37 +1072,36 @@ static void riscv_cpu_satp_mode_finalize(RISCVCPU *cpu, Error **errp) } } - /* Make sure the configuration asked is supported by qemu */ - for (int i = 0; i < 16; ++i) { - if ((cpu->cfg.satp_mode.map & (1 << i)) && !valid_vm[i]) { - error_setg(errp, "satp_mode %s is not valid", - satp_mode_str(i, rv32)); - return; - } + satp_mode_map_max = satp_mode_max_from_map(cpu->cfg.satp_mode.map); + + /* Make sure the user asked for a supported configuration (HW and qemu) */ + if (satp_mode_map_max > satp_mode_supported_max) { + error_setg(errp, "satp_mode %s is higher than hw max capability %s", + satp_mode_str(satp_mode_map_max, rv32), + satp_mode_str(satp_mode_supported_max, rv32)); + return; } /* * Make sure the user did not ask for an invalid configuration as per * the specification. */ - satp_mode_max = satp_mode_max_from_map(cpu->cfg.satp_mode.map); - if (!rv32) { - for (int i = satp_mode_max - 1; i >= 0; --i) { + for (int i = satp_mode_map_max - 1; i >= 0; --i) { if (!(cpu->cfg.satp_mode.map & (1 << i)) && (cpu->cfg.satp_mode.init & (1 << i)) && - valid_vm[i]) { + (cpu->cfg.satp_mode.supported & (1 << i))) { error_setg(errp, "cannot disable %s satp mode if %s " "is enabled", satp_mode_str(i, false), - satp_mode_str(satp_mode_max, false)); + satp_mode_str(satp_mode_map_max, false)); return; } } } /* Finally expand the map so that all valid modes are set */ - for (int i = satp_mode_max - 1; i >= 0; --i) { - if (valid_vm[i]) { + for (int i = satp_mode_map_max - 1; i >= 0; --i) { + if (cpu->cfg.satp_mode.supported & (1 << i)) { cpu->cfg.satp_mode.map |= (1 << i); } } diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 67ac665ff0..638e47c75a 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -404,13 +404,17 @@ struct RISCVCPUClass { /* * map is a 16-bit bitmap: the most significant set bit in map is the maximum - * satp mode that is supported. + * satp mode that is supported. It may be chosen by the user and must respect + * what qemu implements (valid_1_10_32/64) and what the hw is capable of + * (supported bitmap below). * * init is a 16-bit bitmap used to make sure the user selected a correct * configuration as per the specification. + * + * supported is a 16-bit bitmap used to reflect the hw capabilities. */ typedef struct { - uint16_t map, init; + uint16_t map, init, supported; } RISCVSATPMap; struct RISCVCPUConfig { From ed9eb206942e31abbc593a4bfe8bb97f5fb5d551 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Fri, 3 Mar 2023 14:12:52 +0100 Subject: [PATCH 14/22] riscv: Correctly set the device-tree entry 'mmu-type' The 'mmu-type' should reflect what the hardware is capable of so use the new satp_mode field in RISCVCPUConfig to do that. Signed-off-by: Alexandre Ghiti Reviewed-by: Andrew Jones Reviewed-by: Alistair Francis Reviewed-by: Bin Meng Reviewed-by: Frank Chang Message-ID: <20230303131252.892893-6-alexghiti@rivosinc.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 7f70fa11a1..26eb81d036 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -228,8 +228,9 @@ static void create_fdt_socket_cpus(RISCVVirtState *s, int socket, int cpu; uint32_t cpu_phandle; MachineState *ms = MACHINE(s); - char *name, *cpu_name, *core_name, *intc_name; + char *name, *cpu_name, *core_name, *intc_name, *sv_name; bool is_32_bit = riscv_is_32bit(&s->soc[0]); + uint8_t satp_mode_max; for (cpu = s->soc[socket].num_harts - 1; cpu >= 0; cpu--) { RISCVCPU *cpu_ptr = &s->soc[socket].harts[cpu]; @@ -239,13 +240,15 @@ static void create_fdt_socket_cpus(RISCVVirtState *s, int socket, cpu_name = g_strdup_printf("/cpus/cpu@%d", s->soc[socket].hartid_base + cpu); qemu_fdt_add_subnode(ms->fdt, cpu_name); - if (cpu_ptr->cfg.mmu) { - qemu_fdt_setprop_string(ms->fdt, cpu_name, "mmu-type", - (is_32_bit) ? "riscv,sv32" : "riscv,sv48"); - } else { - qemu_fdt_setprop_string(ms->fdt, cpu_name, "mmu-type", - "riscv,none"); - } + + satp_mode_max = satp_mode_max_from_map( + s->soc[socket].harts[cpu].cfg.satp_mode.map); + sv_name = g_strdup_printf("riscv,%s", + satp_mode_str(satp_mode_max, is_32_bit)); + qemu_fdt_setprop_string(ms->fdt, cpu_name, "mmu-type", sv_name); + g_free(sv_name); + + name = riscv_isa_string(cpu_ptr); qemu_fdt_setprop_string(ms->fdt, cpu_name, "riscv,isa", name); g_free(name); From 90477a652b6389aca542f663e4832e8bfb8a7356 Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:05 +0530 Subject: [PATCH 15/22] hw/riscv/virt: Add OEM_ID and OEM_TABLE_ID fields ACPI needs OEM_ID and OEM_TABLE_ID for the machine. Add these fields in the RISCVVirtState structure and initialize with default values. Signed-off-by: Sunil V L Reviewed-by: Bin Meng Acked-by: Alistair Francis Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-2-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt.c | 5 +++++ include/hw/riscv/virt.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 26eb81d036..5a059489b5 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -49,6 +49,7 @@ #include "hw/pci/pci.h" #include "hw/pci-host/gpex.h" #include "hw/display/ramfb.h" +#include "hw/acpi/aml-build.h" /* * The virt machine physical address space used by some of the devices @@ -1528,6 +1529,10 @@ static void virt_machine_init(MachineState *machine) static void virt_machine_instance_init(Object *obj) { + RISCVVirtState *s = RISCV_VIRT_MACHINE(obj); + + s->oem_id = g_strndup(ACPI_BUILD_APPNAME6, 6); + s->oem_table_id = g_strndup(ACPI_BUILD_APPNAME8, 8); } static char *virt_get_aia_guests(Object *obj, Error **errp) diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index b3d26135c0..6c7885bf89 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -56,6 +56,8 @@ struct RISCVVirtState { bool have_aclint; RISCVVirtAIAType aia_type; int aia_guests; + char *oem_id; + char *oem_table_id; }; enum { From 168b8c29cedb9c1639fabbd96410ed8488af5cf9 Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:06 +0530 Subject: [PATCH 16/22] hw/riscv/virt: Add a switch to disable ACPI ACPI will be enabled by default. Add a switch to turn off for testing and debug purposes. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-3-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt.c | 29 +++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 5a059489b5..90579a4c0e 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -50,6 +50,7 @@ #include "hw/pci-host/gpex.h" #include "hw/display/ramfb.h" #include "hw/acpi/aml-build.h" +#include "qapi/qapi-visit-common.h" /* * The virt machine physical address space used by some of the devices @@ -1533,6 +1534,7 @@ static void virt_machine_instance_init(Object *obj) s->oem_id = g_strndup(ACPI_BUILD_APPNAME6, 6); s->oem_table_id = g_strndup(ACPI_BUILD_APPNAME8, 8); + s->acpi = ON_OFF_AUTO_AUTO; } static char *virt_get_aia_guests(Object *obj, Error **errp) @@ -1607,6 +1609,28 @@ static void virt_set_aclint(Object *obj, bool value, Error **errp) s->have_aclint = value; } +bool virt_is_acpi_enabled(RISCVVirtState *s) +{ + return s->acpi != ON_OFF_AUTO_OFF; +} + +static void virt_get_acpi(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + RISCVVirtState *s = RISCV_VIRT_MACHINE(obj); + OnOffAuto acpi = s->acpi; + + visit_type_OnOffAuto(v, name, &acpi, errp); +} + +static void virt_set_acpi(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + RISCVVirtState *s = RISCV_VIRT_MACHINE(obj); + + visit_type_OnOffAuto(v, name, &s->acpi, errp); +} + static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine, DeviceState *dev) { @@ -1678,6 +1702,11 @@ static void virt_machine_class_init(ObjectClass *oc, void *data) sprintf(str, "Set number of guest MMIO pages for AIA IMSIC. Valid value " "should be between 0 and %d.", VIRT_IRQCHIP_MAX_GUESTS); object_class_property_set_description(oc, "aia-guests", str); + object_class_property_add(oc, "acpi", "OnOffAuto", + virt_get_acpi, virt_set_acpi, + NULL, NULL); + object_class_property_set_description(oc, "acpi", + "Enable ACPI"); } static const TypeInfo virt_machine_typeinfo = { diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 6c7885bf89..62efebaa32 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -58,6 +58,7 @@ struct RISCVVirtState { int aia_guests; char *oem_id; char *oem_table_id; + OnOffAuto acpi; }; enum { @@ -123,4 +124,5 @@ enum { #define FDT_APLIC_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ 1 + FDT_APLIC_INT_CELLS) +bool virt_is_acpi_enabled(RISCVVirtState *s); #endif From 71302ff3bc9fbcceeb3ad7e6bb724ea942b5bba1 Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:07 +0530 Subject: [PATCH 17/22] hw/riscv/virt: Add memmap pointer to RiscVVirtState memmap needs to be exported outside of virt.c so that modules like acpi can use it. Hence, add a pointer field in RiscVVirtState structure and initialize it with the memorymap. Signed-off-by: Sunil V L Reviewed-by: Bin Meng Acked-by: Alistair Francis Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-4-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt.c | 2 ++ include/hw/riscv/virt.h | 1 + 2 files changed, 3 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 90579a4c0e..aed303e1e6 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -1458,6 +1458,8 @@ static void virt_machine_init(MachineState *machine) ROUND_UP(virt_high_pcie_memmap.base, virt_high_pcie_memmap.size); } + s->memmap = virt_memmap; + /* register system main memory (actual RAM) */ memory_region_add_subregion(system_memory, memmap[VIRT_DRAM].base, machine->ram); diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 62efebaa32..379501edcc 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -59,6 +59,7 @@ struct RISCVVirtState { char *oem_id; char *oem_table_id; OnOffAuto acpi; + const MemMapEntry *memmap; }; enum { From 7da2fb240f9750d9a6fd2dac1397ec18b512a1b5 Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:08 +0530 Subject: [PATCH 18/22] hw/riscv/virt: Enable basic ACPI infrastructure Add basic ACPI infrastructure for RISC-V with below tables. 1) DSDT with below basic objects - CPUs - fw_cfg 2) FADT revision 6 with HW_REDUCED flag 3) XSDT 4) RSDP Add this functionality in a new file virt-acpi-build.c and enable building this infrastructure. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-5-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/Kconfig | 1 + hw/riscv/meson.build | 1 + hw/riscv/virt-acpi-build.c | 304 +++++++++++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 1 + 4 files changed, 307 insertions(+) create mode 100644 hw/riscv/virt-acpi-build.c diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index 4550b3b938..6528ebfa3a 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -44,6 +44,7 @@ config RISCV_VIRT select VIRTIO_MMIO select FW_CFG_DMA select PLATFORM_BUS + select ACPI config SHAKTI_C bool diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index ab6cae57ea..2f7ee81be3 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -9,5 +9,6 @@ riscv_ss.add(when: 'CONFIG_SIFIVE_E', if_true: files('sifive_e.c')) riscv_ss.add(when: 'CONFIG_SIFIVE_U', if_true: files('sifive_u.c')) riscv_ss.add(when: 'CONFIG_SPIKE', if_true: files('spike.c')) riscv_ss.add(when: 'CONFIG_MICROCHIP_PFSOC', if_true: files('microchip_pfsoc.c')) +riscv_ss.add(when: 'CONFIG_ACPI', if_true: files('virt-acpi-build.c')) hw_arch += {'riscv': riscv_ss} diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c new file mode 100644 index 0000000000..d6947fdc74 --- /dev/null +++ b/hw/riscv/virt-acpi-build.c @@ -0,0 +1,304 @@ +/* + * Support for generating ACPI tables and passing them to Guests + * + * RISC-V virt ACPI generation + * + * Copyright (C) 2008-2010 Kevin O'Connor + * Copyright (C) 2006 Fabrice Bellard + * Copyright (C) 2013 Red Hat Inc + * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO.,LTD. + * Copyright (C) 2021-2023 Ventana Micro Systems Inc + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "hw/acpi/acpi-defs.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/aml-build.h" +#include "hw/acpi/utils.h" +#include "qapi/error.h" +#include "sysemu/reset.h" +#include "migration/vmstate.h" +#include "hw/riscv/virt.h" + +#define ACPI_BUILD_TABLE_SIZE 0x20000 + +typedef struct AcpiBuildState { + /* Copy of table in RAM (for patching) */ + MemoryRegion *table_mr; + MemoryRegion *rsdp_mr; + MemoryRegion *linker_mr; + /* Is table patched? */ + bool patched; +} AcpiBuildState; + +static void acpi_align_size(GArray *blob, unsigned align) +{ + /* + * Align size to multiple of given size. This reduces the chance + * we need to change size in the future (breaking cross version migration). + */ + g_array_set_size(blob, ROUND_UP(acpi_data_len(blob), align)); +} + +static void riscv_acpi_madt_add_rintc(uint32_t uid, + const CPUArchIdList *arch_ids, + GArray *entry) +{ + uint64_t hart_id = arch_ids->cpus[uid].arch_id; + + build_append_int_noprefix(entry, 0x18, 1); /* Type */ + build_append_int_noprefix(entry, 20, 1); /* Length */ + build_append_int_noprefix(entry, 1, 1); /* Version */ + build_append_int_noprefix(entry, 0, 1); /* Reserved */ + build_append_int_noprefix(entry, 0x1, 4); /* Flags */ + build_append_int_noprefix(entry, hart_id, 8); /* Hart ID */ + build_append_int_noprefix(entry, uid, 4); /* ACPI Processor UID */ +} + +static void acpi_dsdt_add_cpus(Aml *scope, RISCVVirtState *s) +{ + MachineClass *mc = MACHINE_GET_CLASS(s); + MachineState *ms = MACHINE(s); + const CPUArchIdList *arch_ids = mc->possible_cpu_arch_ids(ms); + + for (int i = 0; i < arch_ids->len; i++) { + Aml *dev; + GArray *madt_buf = g_array_new(0, 1, 1); + + dev = aml_device("C%.03X", i); + aml_append(dev, aml_name_decl("_HID", aml_string("ACPI0007"))); + aml_append(dev, aml_name_decl("_UID", + aml_int(arch_ids->cpus[i].arch_id))); + + /* build _MAT object */ + riscv_acpi_madt_add_rintc(i, arch_ids, madt_buf); + aml_append(dev, aml_name_decl("_MAT", + aml_buffer(madt_buf->len, + (uint8_t *)madt_buf->data))); + g_array_free(madt_buf, true); + + aml_append(scope, dev); + } +} + +static void acpi_dsdt_add_fw_cfg(Aml *scope, const MemMapEntry *fw_cfg_memmap) +{ + Aml *dev = aml_device("FWCF"); + aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0002"))); + + /* device present, functioning, decoding, not shown in UI */ + aml_append(dev, aml_name_decl("_STA", aml_int(0xB))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + Aml *crs = aml_resource_template(); + aml_append(crs, aml_memory32_fixed(fw_cfg_memmap->base, + fw_cfg_memmap->size, AML_READ_WRITE)); + aml_append(dev, aml_name_decl("_CRS", crs)); + aml_append(scope, dev); +} + +/* FADT */ +static void build_fadt_rev6(GArray *table_data, + BIOSLinker *linker, + RISCVVirtState *s, + unsigned dsdt_tbl_offset) +{ + AcpiFadtData fadt = { + .rev = 6, + .minor_ver = 5, + .flags = 1 << ACPI_FADT_F_HW_REDUCED_ACPI, + .xdsdt_tbl_offset = &dsdt_tbl_offset, + }; + + build_fadt(table_data, linker, &fadt, s->oem_id, s->oem_table_id); +} + +/* DSDT */ +static void build_dsdt(GArray *table_data, + BIOSLinker *linker, + RISCVVirtState *s) +{ + Aml *scope, *dsdt; + const MemMapEntry *memmap = s->memmap; + AcpiTable table = { .sig = "DSDT", .rev = 2, .oem_id = s->oem_id, + .oem_table_id = s->oem_table_id }; + + + acpi_table_begin(&table, table_data); + dsdt = init_aml_allocator(); + + /* + * When booting the VM with UEFI, UEFI takes ownership of the RTC hardware. + * While UEFI can use libfdt to disable the RTC device node in the DTB that + * it passes to the OS, it cannot modify AML. Therefore, we won't generate + * the RTC ACPI device at all when using UEFI. + */ + scope = aml_scope("\\_SB"); + acpi_dsdt_add_cpus(scope, s); + + acpi_dsdt_add_fw_cfg(scope, &memmap[VIRT_FW_CFG]); + + aml_append(dsdt, scope); + + /* copy AML table into ACPI tables blob and patch header there */ + g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len); + + acpi_table_end(linker, &table); + free_aml_allocator(); +} + +static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables) +{ + GArray *table_offsets; + unsigned dsdt, xsdt; + GArray *tables_blob = tables->table_data; + + table_offsets = g_array_new(false, true, + sizeof(uint32_t)); + + bios_linker_loader_alloc(tables->linker, + ACPI_BUILD_TABLE_FILE, tables_blob, + 64, false); + + /* DSDT is pointed to by FADT */ + dsdt = tables_blob->len; + build_dsdt(tables_blob, tables->linker, s); + + /* FADT and others pointed to by XSDT */ + acpi_add_table(table_offsets, tables_blob); + build_fadt_rev6(tables_blob, tables->linker, s, dsdt); + + /* XSDT is pointed to by RSDP */ + xsdt = tables_blob->len; + build_xsdt(tables_blob, tables->linker, table_offsets, s->oem_id, + s->oem_table_id); + + /* RSDP is in FSEG memory, so allocate it separately */ + { + AcpiRsdpData rsdp_data = { + .revision = 2, + .oem_id = s->oem_id, + .xsdt_tbl_offset = &xsdt, + .rsdt_tbl_offset = NULL, + }; + build_rsdp(tables->rsdp, tables->linker, &rsdp_data); + } + + /* + * The align size is 128, warn if 64k is not enough therefore + * the align size could be resized. + */ + if (tables_blob->len > ACPI_BUILD_TABLE_SIZE / 2) { + warn_report("ACPI table size %u exceeds %d bytes," + " migration may not work", + tables_blob->len, ACPI_BUILD_TABLE_SIZE / 2); + error_printf("Try removing some objects."); + } + + acpi_align_size(tables_blob, ACPI_BUILD_TABLE_SIZE); + + /* Clean up memory that's no longer used */ + g_array_free(table_offsets, true); +} + +static void acpi_ram_update(MemoryRegion *mr, GArray *data) +{ + uint32_t size = acpi_data_len(data); + + /* + * Make sure RAM size is correct - in case it got changed + * e.g. by migration + */ + memory_region_ram_resize(mr, size, &error_abort); + + memcpy(memory_region_get_ram_ptr(mr), data->data, size); + memory_region_set_dirty(mr, 0, size); +} + +static void virt_acpi_build_update(void *build_opaque) +{ + AcpiBuildState *build_state = build_opaque; + AcpiBuildTables tables; + + /* No state to update or already patched? Nothing to do. */ + if (!build_state || build_state->patched) { + return; + } + + build_state->patched = true; + + acpi_build_tables_init(&tables); + + virt_acpi_build(RISCV_VIRT_MACHINE(qdev_get_machine()), &tables); + + acpi_ram_update(build_state->table_mr, tables.table_data); + acpi_ram_update(build_state->rsdp_mr, tables.rsdp); + acpi_ram_update(build_state->linker_mr, tables.linker->cmd_blob); + + acpi_build_tables_cleanup(&tables, true); +} + +static void virt_acpi_build_reset(void *build_opaque) +{ + AcpiBuildState *build_state = build_opaque; + build_state->patched = false; +} + +static const VMStateDescription vmstate_virt_acpi_build = { + .name = "virt_acpi_build", + .version_id = 1, + .minimum_version_id = 1, + .fields = (VMStateField[]) { + VMSTATE_BOOL(patched, AcpiBuildState), + VMSTATE_END_OF_LIST() + }, +}; + +void virt_acpi_setup(RISCVVirtState *s) +{ + AcpiBuildTables tables; + AcpiBuildState *build_state; + + build_state = g_malloc0(sizeof *build_state); + + acpi_build_tables_init(&tables); + virt_acpi_build(s, &tables); + + /* Now expose it all to Guest */ + build_state->table_mr = acpi_add_rom_blob(virt_acpi_build_update, + build_state, tables.table_data, + ACPI_BUILD_TABLE_FILE); + assert(build_state->table_mr != NULL); + + build_state->linker_mr = acpi_add_rom_blob(virt_acpi_build_update, + build_state, + tables.linker->cmd_blob, + ACPI_BUILD_LOADER_FILE); + + build_state->rsdp_mr = acpi_add_rom_blob(virt_acpi_build_update, + build_state, tables.rsdp, + ACPI_BUILD_RSDP_FILE); + + qemu_register_reset(virt_acpi_build_reset, build_state); + virt_acpi_build_reset(build_state); + vmstate_register(NULL, 0, &vmstate_virt_acpi_build, build_state); + + /* + * Clean up tables but don't free the memory: we track it + * in build_state. + */ + acpi_build_tables_cleanup(&tables, false); +} diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 379501edcc..e5c474b26e 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -126,4 +126,5 @@ enum { 1 + FDT_APLIC_INT_CELLS) bool virt_is_acpi_enabled(RISCVVirtState *s); +void virt_acpi_setup(RISCVVirtState *vms); #endif From 6cc40ea2117fd81cc14fcb22e2b7a9f77b5a8dae Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:09 +0530 Subject: [PATCH 19/22] hw/riscv/virt: virt-acpi-build.c: Add RINTC in MADT Add Multiple APIC Description Table (MADT) with the RINTC structure for each cpu. Signed-off-by: Sunil V L Acked-by: Alistair Francis Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-6-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt-acpi-build.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c index d6947fdc74..026d1eaf88 100644 --- a/hw/riscv/virt-acpi-build.c +++ b/hw/riscv/virt-acpi-build.c @@ -32,6 +32,7 @@ #include "sysemu/reset.h" #include "migration/vmstate.h" #include "hw/riscv/virt.h" +#include "hw/riscv/numa.h" #define ACPI_BUILD_TABLE_SIZE 0x20000 @@ -160,6 +161,36 @@ static void build_dsdt(GArray *table_data, free_aml_allocator(); } +/* + * ACPI spec, Revision 6.5+ + * 5.2.12 Multiple APIC Description Table (MADT) + * REF: https://github.com/riscv-non-isa/riscv-acpi/issues/15 + * https://drive.google.com/file/d/1R6k4MshhN3WTT-hwqAquu5nX6xSEqK2l/view + */ +static void build_madt(GArray *table_data, + BIOSLinker *linker, + RISCVVirtState *s) +{ + MachineClass *mc = MACHINE_GET_CLASS(s); + MachineState *ms = MACHINE(s); + const CPUArchIdList *arch_ids = mc->possible_cpu_arch_ids(ms); + + AcpiTable table = { .sig = "APIC", .rev = 6, .oem_id = s->oem_id, + .oem_table_id = s->oem_table_id }; + + acpi_table_begin(&table, table_data); + /* Local Interrupt Controller Address */ + build_append_int_noprefix(table_data, 0, 4); + build_append_int_noprefix(table_data, 0, 4); /* MADT Flags */ + + /* RISC-V Local INTC structures per HART */ + for (int i = 0; i < arch_ids->len; i++) { + riscv_acpi_madt_add_rintc(i, arch_ids, table_data); + } + + acpi_table_end(linker, &table); +} + static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables) { GArray *table_offsets; @@ -181,6 +212,9 @@ static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables) acpi_add_table(table_offsets, tables_blob); build_fadt_rev6(tables_blob, tables->linker, s, dsdt); + acpi_add_table(table_offsets, tables_blob); + build_madt(tables_blob, tables->linker, s); + /* XSDT is pointed to by RSDP */ xsdt = tables_blob->len; build_xsdt(tables_blob, tables->linker, table_offsets, s->oem_id, From ebfd392893701a8cde9c1b6017009a03c90ab34b Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:10 +0530 Subject: [PATCH 20/22] hw/riscv/virt: virt-acpi-build.c: Add RHCT Table RISC-V ACPI platforms need to provide RISC-V Hart Capabilities Table (RHCT). Add this to the ACPI tables. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-7-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt-acpi-build.c | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c index 026d1eaf88..82da0a238c 100644 --- a/hw/riscv/virt-acpi-build.c +++ b/hw/riscv/virt-acpi-build.c @@ -33,6 +33,7 @@ #include "migration/vmstate.h" #include "hw/riscv/virt.h" #include "hw/riscv/numa.h" +#include "hw/intc/riscv_aclint.h" #define ACPI_BUILD_TABLE_SIZE 0x20000 @@ -111,6 +112,80 @@ static void acpi_dsdt_add_fw_cfg(Aml *scope, const MemMapEntry *fw_cfg_memmap) aml_append(scope, dev); } +/* RHCT Node[N] starts at offset 56 */ +#define RHCT_NODE_ARRAY_OFFSET 56 + +/* + * ACPI spec, Revision 6.5+ + * 5.2.36 RISC-V Hart Capabilities Table (RHCT) + * REF: https://github.com/riscv-non-isa/riscv-acpi/issues/16 + * https://drive.google.com/file/d/1nP3nFiH4jkPMp6COOxP6123DCZKR-tia/view + */ +static void build_rhct(GArray *table_data, + BIOSLinker *linker, + RISCVVirtState *s) +{ + MachineClass *mc = MACHINE_GET_CLASS(s); + MachineState *ms = MACHINE(s); + const CPUArchIdList *arch_ids = mc->possible_cpu_arch_ids(ms); + size_t len, aligned_len; + uint32_t isa_offset, num_rhct_nodes; + RISCVCPU *cpu; + char *isa; + + AcpiTable table = { .sig = "RHCT", .rev = 1, .oem_id = s->oem_id, + .oem_table_id = s->oem_table_id }; + + acpi_table_begin(&table, table_data); + + build_append_int_noprefix(table_data, 0x0, 4); /* Reserved */ + + /* Time Base Frequency */ + build_append_int_noprefix(table_data, + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ, 8); + + /* ISA + N hart info */ + num_rhct_nodes = 1 + ms->smp.cpus; + + /* Number of RHCT nodes*/ + build_append_int_noprefix(table_data, num_rhct_nodes, 4); + + /* Offset to the RHCT node array */ + build_append_int_noprefix(table_data, RHCT_NODE_ARRAY_OFFSET, 4); + + /* ISA String Node */ + isa_offset = table_data->len - table.table_offset; + build_append_int_noprefix(table_data, 0, 2); /* Type 0 */ + + cpu = &s->soc[0].harts[0]; + isa = riscv_isa_string(cpu); + len = 8 + strlen(isa) + 1; + aligned_len = (len % 2) ? (len + 1) : len; + + build_append_int_noprefix(table_data, aligned_len, 2); /* Length */ + build_append_int_noprefix(table_data, 0x1, 2); /* Revision */ + + /* ISA string length including NUL */ + build_append_int_noprefix(table_data, strlen(isa) + 1, 2); + g_array_append_vals(table_data, isa, strlen(isa) + 1); /* ISA string */ + + if (aligned_len != len) { + build_append_int_noprefix(table_data, 0x0, 1); /* Optional Padding */ + } + + /* Hart Info Node */ + for (int i = 0; i < arch_ids->len; i++) { + build_append_int_noprefix(table_data, 0xFFFF, 2); /* Type */ + build_append_int_noprefix(table_data, 16, 2); /* Length */ + build_append_int_noprefix(table_data, 0x1, 2); /* Revision */ + build_append_int_noprefix(table_data, 1, 2); /* Number of offsets */ + build_append_int_noprefix(table_data, i, 4); /* ACPI Processor UID */ + build_append_int_noprefix(table_data, isa_offset, 4); /* Offsets[0] */ + } + + acpi_table_end(linker, &table); +} + /* FADT */ static void build_fadt_rev6(GArray *table_data, BIOSLinker *linker, @@ -215,6 +290,9 @@ static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables) acpi_add_table(table_offsets, tables_blob); build_madt(tables_blob, tables->linker, s); + acpi_add_table(table_offsets, tables_blob); + build_rhct(tables_blob, tables->linker, s); + /* XSDT is pointed to by RSDP */ xsdt = tables_blob->len; build_xsdt(tables_blob, tables->linker, table_offsets, s->oem_id, From f709360f0ac364967deb2ed36142c05dfbb4e535 Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:11 +0530 Subject: [PATCH 21/22] hw/riscv/virt.c: Initialize the ACPI tables Initialize the ACPI tables if the acpi option is not disabled. Signed-off-by: Sunil V L Reviewed-by: Bin Meng Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-8-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- hw/riscv/virt.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index aed303e1e6..4e3efbee16 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -1323,6 +1323,10 @@ static void virt_machine_done(Notifier *notifier, void *data) if (kvm_enabled()) { riscv_setup_direct_kernel(kernel_entry, fdt_load_addr); } + + if (virt_is_acpi_enabled(s)) { + virt_acpi_setup(s); + } } static void virt_machine_init(MachineState *machine) From 47fc340010335bc2549bc1f07e5fd85d86a2b9f9 Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Thu, 2 Mar 2023 14:42:12 +0530 Subject: [PATCH 22/22] MAINTAINERS: Add entry for RISC-V ACPI RISC-V ACPI related functionality for virt machine is added in virt-acpi-build.c. Add the maintainer entry after moving the ARM ACPI entry under the main ACPI entry. Signed-off-by: Sunil V L Reviewed-by: Bin Meng Acked-by: Alistair Francis Reviewed-by: Andrew Jones Message-ID: <20230302091212.999767-9-sunilvl@ventanamicro.com> Signed-off-by: Palmer Dabbelt --- MAINTAINERS | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 011fd85a09..26bf14b57b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -999,12 +999,6 @@ S: Maintained F: hw/ssi/xlnx-versal-ospi.c F: include/hw/ssi/xlnx-versal-ospi.h -ARM ACPI Subsystem -M: Shannon Zhao -L: qemu-arm@nongnu.org -S: Maintained -F: hw/arm/virt-acpi-build.c - STM32F100 M: Alexandre Iooss L: qemu-arm@nongnu.org @@ -1892,6 +1886,18 @@ F: docs/specs/acpi_nvdimm.rst F: docs/specs/acpi_pci_hotplug.rst F: docs/specs/acpi_hw_reduced_hotplug.rst +ARM ACPI Subsystem +M: Shannon Zhao +L: qemu-arm@nongnu.org +S: Maintained +F: hw/arm/virt-acpi-build.c + +RISC-V ACPI Subsystem +M: Sunil V L +L: qemu-riscv@nongnu.org +S: Maintained +F: hw/riscv/virt-acpi-build.c + ACPI/VIOT M: Jean-Philippe Brucker S: Supported