fd53ee268d
The th.sxstatus CSR can be used to identify available custom extension on T-Head CPUs. The CSR is documented here: https://github.com/T-head-Semi/thead-extension-spec/blob/master/xtheadsxstatus.adoc An important property of this patch is, that the th.sxstatus MAEE field is not set (indicating that XTheadMae is not available). XTheadMae is a memory attribute extension (similar to Svpbmt) which is implemented in many T-Head CPUs (C906, C910, etc.) and utilizes bits in PTEs that are marked as reserved. QEMU maintainers prefer to not implement XTheadMae, so we need give kernels a mechanism to identify if XTheadMae is available in a system or not. And this patch introduces this mechanism in QEMU in a way that's compatible with real HW (i.e., probing the th.sxstatus.MAEE bit). Further context can be found on the list: https://lists.gnu.org/archive/html/qemu-devel/2024-02/msg00775.html Reviewed-by: LIU Zhiwei <zhiwe_liu@linux.alibaba.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu> Message-ID: <20240429073656.2486732-1-christoph.muellner@vrull.eu> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
46 lines
1.0 KiB
Meson
46 lines
1.0 KiB
Meson
# FIXME extra_args should accept files()
|
|
gen = [
|
|
decodetree.process('insn16.decode', extra_args: ['--static-decode=decode_insn16', '--insnwidth=16']),
|
|
decodetree.process('insn32.decode', extra_args: '--static-decode=decode_insn32'),
|
|
decodetree.process('xthead.decode', extra_args: '--static-decode=decode_xthead'),
|
|
decodetree.process('XVentanaCondOps.decode', extra_args: '--static-decode=decode_XVentanaCodeOps'),
|
|
]
|
|
|
|
riscv_ss = ss.source_set()
|
|
riscv_ss.add(gen)
|
|
riscv_ss.add(files(
|
|
'cpu.c',
|
|
'cpu_helper.c',
|
|
'csr.c',
|
|
'fpu_helper.c',
|
|
'gdbstub.c',
|
|
'op_helper.c',
|
|
'vector_helper.c',
|
|
'vector_internals.c',
|
|
'bitmanip_helper.c',
|
|
'translate.c',
|
|
'm128_helper.c',
|
|
'crypto_helper.c',
|
|
'zce_helper.c',
|
|
'vcrypto_helper.c'
|
|
))
|
|
|
|
riscv_system_ss = ss.source_set()
|
|
riscv_system_ss.add(files(
|
|
'arch_dump.c',
|
|
'pmp.c',
|
|
'debug.c',
|
|
'monitor.c',
|
|
'machine.c',
|
|
'pmu.c',
|
|
'th_csr.c',
|
|
'time_helper.c',
|
|
'riscv-qmp-cmds.c',
|
|
))
|
|
|
|
subdir('tcg')
|
|
subdir('kvm')
|
|
|
|
target_arch += {'riscv': riscv_ss}
|
|
target_system_arch += {'riscv': riscv_system_ss}
|