[PATCH v10 0/7] Add RISC-V big-endian target support

Djordje Todorovic posted 7 patches 3 days, 8 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260527083151.17876-1-djordje.todorovic@htecgroup.com
Maintainers: Palmer Dabbelt <palmer@dabbelt.com>, Alistair Francis <alistair.francis@wdc.com>, Weiwei Li <liwei1518@gmail.com>, Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>, Liu Zhiwei <zhiwei_liu@linux.alibaba.com>, Chao Liu <chao.liu.zevorn@gmail.com>, Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>, Christoph Muellner <christoph.muellner@vrull.eu>
There is a newer version of this series
docs/system/target-riscv.rst                  | 29 +++++++
hw/riscv/boot.c                               | 81 ++++++++++++++++---
include/hw/riscv/boot.h                       |  1 +
target/riscv/cpu.c                            | 15 ++--
target/riscv/cpu.h                            | 23 ++++++
target/riscv/cpu_bits.h                       |  2 +
target/riscv/cpu_cfg_fields.h.inc             |  1 +
target/riscv/cpu_helper.c                     | 28 +++++--
target/riscv/insn_trans/trans_rva.c.inc       |  4 +-
target/riscv/insn_trans/trans_rvd.c.inc       |  4 +-
target/riscv/insn_trans/trans_rvf.c.inc       |  4 +-
target/riscv/insn_trans/trans_rvi.c.inc       |  8 +-
target/riscv/insn_trans/trans_rvzacas.c.inc   |  4 +-
target/riscv/insn_trans/trans_rvzalasr.c.inc  |  4 +-
target/riscv/insn_trans/trans_rvzce.c.inc     |  4 +-
target/riscv/insn_trans/trans_rvzfh.c.inc     |  4 +-
target/riscv/insn_trans/trans_rvzicfiss.c.inc |  4 +-
target/riscv/insn_trans/trans_xmips.c.inc     |  8 +-
target/riscv/insn_trans/trans_xthead.c.inc    | 16 ++--
target/riscv/insn_trans/trans_zilsd.c.inc     |  4 +-
target/riscv/internals.h                      |  9 +--
target/riscv/tcg/tcg-cpu.c                    |  3 +
target/riscv/translate.c                      | 22 ++---
tests/functional/riscv64/meson.build          |  1 +
tests/functional/riscv64/test_endianness.py   | 57 +++++++++++++
25 files changed, 260 insertions(+), 80 deletions(-)
create mode 100644 tests/functional/riscv64/test_endianness.py
[PATCH v10 0/7] Add RISC-V big-endian target support
Posted by Djordje Todorovic 3 days, 8 hours ago
Hi all,
 
This series adds big-endian data support for RISC-V system emulation.
 
Following the discussion on previous versions, this series models
fixed-endian harts, not a mixed-endian implementation where software can
toggle MBE/SBE/UBE at runtime. The reset value of MBE/SBE/UBE is selected
from the CPU configuration. These bits remain outside the
mstatus/mstatush/sstatus writable masks, so they are effectively hardwired
to 0 for the default little-endian CPUs and to 1 when `big-endian=on`.
 
The user-visible `big-endian` CPU property is exposed only after the data
path, boot path, and page-table walk support are in place, so the series
remains bisectable.

Djordje Todorovic (7):
  target/riscv: Define MSTATUS_SBE and MSTATUS_MBE bit masks
  target/riscv: Add big-endian CPU configuration field and reset logic
  target/riscv: Implement runtime data endianness via MSTATUS bits
  hw/riscv: Make boot code endianness-aware at runtime
  target/riscv: Fix page table walk endianness for big-endian harts
  target/riscv: Expose big-endian CPU property and add documentation
  target/riscv: Add endianness test for RISC-V BE

 docs/system/target-riscv.rst                  | 29 +++++++
 hw/riscv/boot.c                               | 81 ++++++++++++++++---
 include/hw/riscv/boot.h                       |  1 +
 target/riscv/cpu.c                            | 15 ++--
 target/riscv/cpu.h                            | 23 ++++++
 target/riscv/cpu_bits.h                       |  2 +
 target/riscv/cpu_cfg_fields.h.inc             |  1 +
 target/riscv/cpu_helper.c                     | 28 +++++--
 target/riscv/insn_trans/trans_rva.c.inc       |  4 +-
 target/riscv/insn_trans/trans_rvd.c.inc       |  4 +-
 target/riscv/insn_trans/trans_rvf.c.inc       |  4 +-
 target/riscv/insn_trans/trans_rvi.c.inc       |  8 +-
 target/riscv/insn_trans/trans_rvzacas.c.inc   |  4 +-
 target/riscv/insn_trans/trans_rvzalasr.c.inc  |  4 +-
 target/riscv/insn_trans/trans_rvzce.c.inc     |  4 +-
 target/riscv/insn_trans/trans_rvzfh.c.inc     |  4 +-
 target/riscv/insn_trans/trans_rvzicfiss.c.inc |  4 +-
 target/riscv/insn_trans/trans_xmips.c.inc     |  8 +-
 target/riscv/insn_trans/trans_xthead.c.inc    | 16 ++--
 target/riscv/insn_trans/trans_zilsd.c.inc     |  4 +-
 target/riscv/internals.h                      |  9 +--
 target/riscv/tcg/tcg-cpu.c                    |  3 +
 target/riscv/translate.c                      | 22 ++---
 tests/functional/riscv64/meson.build          |  1 +
 tests/functional/riscv64/test_endianness.py   | 57 +++++++++++++
 25 files changed, 260 insertions(+), 80 deletions(-)
 create mode 100644 tests/functional/riscv64/test_endianness.py

-- 
2.34.1