[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 0/6] hw/arm: Fix smpboot[] on big-endian hosts and remove tswap32
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH 0/6] hw/arm: Fix smpboot[] on big-endian hosts and remove tswap32() |
Date: |
Thu, 22 Dec 2022 22:55:43 +0100 |
ARM CPUs fetch instructions in little-endian.
smpboot[] encoded instructions are written in little-endian.
We call tswap32() on the array. tswap32 function swap a 32-bit
value if the target endianness doesn't match the host one.
Otherwise it is a NOP.
* On a little-endian host, the array is stored as it. tswap32()
is a NOP, and the vCPU fetches the instructions as it, in
little-endian.
* On a big-endian host, the array is stored as it. tswap32()
swap the instructions to little-endian, and the vCPU fetches
the instructions as it, in little-endian.
Using tswap() on system emulation is a bit odd: while the target
particularities might change the system emulation, the host ones
(such its endianness) shouldn't interfere.
We can simplify by using const_le32() to always store the
instructions in the array in little-endian, removing the need
for the dubious tswap().
Two boards which weren't swapping (aspeed and raspi) are fixed.
Tested running ARM avocado tests on x86_64 and s390x.
Philippe Mathieu-Daudé (6):
hw/arm/aspeed: Fix smpboot[] on big-endian hosts
hw/arm/raspi: Fix smpboot[] on big-endian hosts
hw/arm/exynos4210: Remove tswap32() calls and constify smpboot[]
hw/arm/npcm7xx: Remove tswap32() calls and constify smpboot[]
hw/arm/xilinx_zynq: Remove tswap32() calls and constify smpboot[]
hw/arm/boot: Remove tswap32() calls and constify board_setup_blob[]
hw/arm/aspeed.c | 28 ++++++++++++------------
hw/arm/boot.c | 52 +++++++++++++++++++-------------------------
hw/arm/exynos4210.c | 48 ++++++++++++++++++----------------------
hw/arm/npcm7xx.c | 49 +++++++++++++++++------------------------
hw/arm/raspi.c | 46 +++++++++++++++++++--------------------
hw/arm/xilinx_zynq.c | 27 ++++++++++-------------
6 files changed, 112 insertions(+), 138 deletions(-)
--
2.38.1
- [PATCH 0/6] hw/arm: Fix smpboot[] on big-endian hosts and remove tswap32(),
Philippe Mathieu-Daudé <=
- [PATCH 1/6] hw/arm/aspeed: Fix smpboot[] on big-endian hosts, Philippe Mathieu-Daudé, 2022/12/22
- [PATCH 2/6] hw/arm/raspi: Fix smpboot[] on big-endian hosts, Philippe Mathieu-Daudé, 2022/12/22
- [PATCH 3/6] hw/arm/exynos4210: Remove tswap32() calls and constify smpboot[], Philippe Mathieu-Daudé, 2022/12/22
- [PATCH 4/6] hw/arm/npcm7xx: Remove tswap32() calls and constify smpboot[], Philippe Mathieu-Daudé, 2022/12/22
- [PATCH 5/6] hw/arm/xilinx_zynq: Remove tswap32() calls and constify smpboot[], Philippe Mathieu-Daudé, 2022/12/22
- [PATCH 6/6] hw/arm/boot: Remove tswap32() calls and constify board_setup_blob[], Philippe Mathieu-Daudé, 2022/12/22