* [PULL 01/59] target/arm/tcg: increase cache level for cpu=max
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 02/59] hw/core/machine: topology functions capabilities added Peter Maydell
` (59 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
This patch addresses cache description in the `aarch64_max_tcg_initfn`
function for cpu=max. It introduces three levels of caches and modifies
the cache description registers accordingly.
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Message-id: 20260311160609.358-2-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/cpu64.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c
index 84857fb706..649d854a65 100644
--- a/target/arm/tcg/cpu64.c
+++ b/target/arm/tcg/cpu64.c
@@ -1167,6 +1167,16 @@ void aarch64_max_tcg_initfn(Object *obj)
uint64_t t;
uint32_t u;
+ SET_IDREG(isar, CLIDR, 0x8200123);
+ /* 64KB L1 dcache */
+ cpu->ccsidr[0] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 4, 64, 64 * KiB, 7);
+ /* 64KB L1 icache */
+ cpu->ccsidr[1] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 4, 64, 64 * KiB, 2);
+ /* 1MB L2 unified cache */
+ cpu->ccsidr[2] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 8, 64, 1 * MiB, 7);
+ /* 2MB L3 unified cache */
+ cpu->ccsidr[4] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 8, 64, 2 * MiB, 7);
+
/*
* Unset ARM_FEATURE_BACKCOMPAT_CNTFRQ, which we would otherwise default
* to because we started with aarch64_a57_initfn(). A 'max' CPU might
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 02/59] hw/core/machine: topology functions capabilities added
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
2026-04-23 10:01 ` [PULL 01/59] target/arm/tcg: increase cache level for cpu=max Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 03/59] hw/arm/virt: add cache hierarchy to device tree Peter Maydell
` (58 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
Add two functions one of which finds the lowest cache level defined in
the cache description input, and the other checks if a given cache
topology is defined at a particular cache level
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Message-id: 20260311160609.358-3-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/core/machine-smp.c | 52 ++++++++++++++++++++++++++++++++++++++++
include/hw/core/boards.h | 5 ++++
2 files changed, 57 insertions(+)
diff --git a/hw/core/machine-smp.c b/hw/core/machine-smp.c
index 189c70015f..bef04aa2d7 100644
--- a/hw/core/machine-smp.c
+++ b/hw/core/machine-smp.c
@@ -406,3 +406,55 @@ bool machine_check_smp_cache(const MachineState *ms, Error **errp)
return true;
}
+
+/*
+ * This function assumes L3 and L2 have unified cache and L1 is split L1d and
+ * L1i.
+ */
+bool machine_find_lowest_level_cache_at_topo_level(const MachineState *ms,
+ int *lowest_cache_level,
+ CpuTopologyLevel topo_level)
+{
+ enum CacheLevelAndType cache_level;
+ enum CpuTopologyLevel t;
+
+ for (cache_level = CACHE_LEVEL_AND_TYPE_L1D;
+ cache_level < CACHE_LEVEL_AND_TYPE__MAX; cache_level++) {
+ t = machine_get_cache_topo_level(ms, cache_level);
+ if (t == topo_level) {
+ /* Assume L1 is split into L1d and L1i caches. */
+ if (cache_level == CACHE_LEVEL_AND_TYPE_L1D ||
+ cache_level == CACHE_LEVEL_AND_TYPE_L1I) {
+ *lowest_cache_level = 1; /* L1 */
+ } else {
+ /* Assume the other caches are unified. */
+ *lowest_cache_level = cache_level;
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/*
+ * Check if there are caches defined at a particular level. It supports only
+ * L1, L2 and L3 caches, but this can be extended to more levels as needed.
+ *
+ * Return True on success, False otherwise.
+ */
+bool machine_defines_cache_at_topo_level(const MachineState *ms,
+ CpuTopologyLevel topology)
+{
+ enum CacheLevelAndType cache_level;
+
+ for (cache_level = CACHE_LEVEL_AND_TYPE_L1D;
+ cache_level < CACHE_LEVEL_AND_TYPE__MAX; cache_level++) {
+ if (machine_get_cache_topo_level(ms, cache_level) == topology) {
+ return true;
+ }
+ }
+
+ return false;
+}
diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h
index b8dad0a107..f38b3f5f78 100644
--- a/include/hw/core/boards.h
+++ b/include/hw/core/boards.h
@@ -60,6 +60,11 @@ void machine_set_cache_topo_level(MachineState *ms, CacheLevelAndType cache,
CpuTopologyLevel level);
bool machine_check_smp_cache(const MachineState *ms, Error **errp);
void machine_memory_devices_init(MachineState *ms, hwaddr base, uint64_t size);
+bool machine_defines_cache_at_topo_level(const MachineState *ms,
+ CpuTopologyLevel topology);
+bool machine_find_lowest_level_cache_at_topo_level(const MachineState *ms,
+ int *lowest_cache_level,
+ CpuTopologyLevel topo_level);
/**
* machine_class_allow_dynamic_sysbus_dev: Add type to list of valid devices
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 03/59] hw/arm/virt: add cache hierarchy to device tree
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
2026-04-23 10:01 ` [PULL 01/59] target/arm/tcg: increase cache level for cpu=max Peter Maydell
2026-04-23 10:01 ` [PULL 02/59] hw/core/machine: topology functions capabilities added Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 04/59] bios-tables-test: prepare to change ARM ACPI virt PPTT Peter Maydell
` (57 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
Specify which level (core/cluster/socket) caches found at in the CPU
topology. Updating cache topology to device tree (spec v0.4).
Example:
For example, 2 sockets (packages), and 2 clusters, 4 cores and 2 threads
created, in aggregate 2*2*4*2 logical cores. In the smp-cache object,
cores will have L1d and L1i. However, extending this is not difficult.
The clusters will share a unified L2 level cache, and finally sockets
will share L3. In this patch, threads will share L1 caches by default,
but this can be adjusted if case required.
Only three levels of caches are supported. The patch does not
allow partial declaration of caches. In other words, the topology level
of every cache must be specified if that of any level is.
./qemu-system-aarch64 \
-machine virt,\
smp-cache.0.cache=l1i,smp-cache.0.topology=core,\
smp-cache.1.cache=l1d,smp-cache.1.topology=core,\
smp-cache.2.cache=l2,smp-cache.2.topology=cluster,\
smp-cache.3.cache=l3,smp-cache.3.topology=socket\
-cpu max \
-m 2048 \
-smp sockets=2,clusters=2,cores=4,threads=1 \
-kernel ./Image.gz \
-append "console=ttyAMA0 root=/dev/ram rdinit=/init acpi=force" \
-initrd rootfs.cpio.gz \
-bios ./edk2-aarch64-code.fd \
-nographic
For instance, following device tree will be generated for a scenario
where we have 2 sockets, 2 clusters, 2 cores and 2 threads, in total 16
PEs. L1i and L1d are private to each thread, and L2 and L3 are shared at
socket level as an example.
Limitation: SMT cores cannot share L1 cache for now. This
problem does not exist in PPTT tables.
Co-developed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Message-id: 20260311160609.358-4-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/arm/virt.c | 335 +++++++++++++++++++++++++++++++++++++++++-
include/hw/arm/virt.h | 17 ++-
include/hw/core/cpu.h | 12 ++
3 files changed, 362 insertions(+), 2 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index ec0d8475ca..1725744d1a 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -91,6 +91,7 @@
#include "hw/virtio/virtio-md-pci.h"
#include "hw/virtio/virtio-iommu.h"
#include "hw/char/pl011.h"
+#include "hw/core/cpu.h"
#include "hw/cxl/cxl.h"
#include "hw/cxl/cxl_host.h"
#include "qemu/guest-random.h"
@@ -281,6 +282,86 @@ static bool ns_el2_virt_timer_present(void)
arm_feature(env, ARM_FEATURE_EL2) && cpu_isar_feature(aa64_vh, cpu);
}
+void set_cpu_cache(CPUCoreCaches *cpu_cache, enum CacheType cache_type,
+ int cache_level, bool is_i_cache0)
+{
+ int bank_index = ((cache_level - 1) * 2) | is_i_cache0;
+ ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0));
+ bool ccidx = cpu_isar_feature(any_ccidx, armcpu);
+
+ if (ccidx) {
+ *cpu_cache = (CPUCoreCaches){
+ .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1,
+ CCIDX_LINESIZE) + 4),
+ .associativity = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1,
+ CCIDX_ASSOCIATIVITY) + 1,
+ .sets = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1,
+ CCIDX_NUMSETS) + 1,
+ };
+ } else {
+ *cpu_cache = (CPUCoreCaches){
+ .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1,
+ LINESIZE) + 4),
+ .associativity = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1,
+ ASSOCIATIVITY) + 1,
+ .sets =
+ FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1, NUMSETS) + 1,
+ };
+ }
+ cpu_cache->type = cache_type;
+ cpu_cache->level = cache_level;
+ cpu_cache->size = cpu_cache->associativity *
+ cpu_cache->sets *
+ cpu_cache->linesize;
+
+ return;
+}
+
+unsigned int virt_get_caches(const VirtMachineState *vms, CPUCoreCaches *caches)
+{
+ int num_cache = 0;
+ ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0)); /* assume homogeneous CPUs */
+ ARMISARegisters *isar = &armcpu->isar;
+ uint32_t clidr = GET_IDREG(isar, CLIDR);
+
+ for (int cache_level = 1; cache_level <= CLIDR_CTYPE_MAX_CACHE_LEVEL;
+ cache_level++) {
+ uint8_t ctype =
+ (clidr >> (3 * (cache_level - 1))) & CLIDR_CTYPE_MAX_CACHE_LEVEL;
+
+ if (ctype == CLIDR_CTYPE_NO_CACHE) {
+ /*
+ * If a "No cache" cache type is found it means no manageable caches
+ * exist at further-out levels of hierarchy, so ignore them.
+ */
+ break;
+ } else if (ctype == CLIDR_CTYPE_SEPARATE_I_D_CACHES) {
+ /*
+ * Create separate D and I caches. D-cache is stored first.
+ */
+ enum CacheType cache_type;
+ for (cache_type = DATA_CACHE; cache_type <= INSTRUCTION_CACHE;
+ cache_type++) {
+ set_cpu_cache(&caches[num_cache++], cache_type, cache_level,
+ cache_type == INSTRUCTION_CACHE ? true : false);
+ }
+ } else if (ctype == CLIDR_CTYPE_UNIFIED_CACHE) {
+ set_cpu_cache(&caches[num_cache++], UNIFIED_CACHE, cache_level,
+ false);
+ } else if (ctype == CLIDR_CTYPE_D_CACHE) {
+ set_cpu_cache(&caches[num_cache++], DATA_CACHE, cache_level, false);
+ } else if (ctype == CLIDR_CTYPE_I_CACHE) {
+ set_cpu_cache(&caches[num_cache++], INSTRUCTION_CACHE, cache_level,
+ true);
+ } else {
+ error_setg(&error_abort, "Unrecognized cache type");
+ return 0;
+ }
+ }
+
+ return num_cache;
+}
+
static void create_fdt(VirtMachineState *vms)
{
MachineState *ms = MACHINE(vms);
@@ -431,13 +512,124 @@ static void fdt_add_timer_nodes(const VirtMachineState *vms)
}
}
+static void add_cache_node(void *fdt, char *nodepath, CPUCoreCaches cache,
+ uint32_t *next_level)
+{
+ /* Assume L2/3 are unified caches. */
+
+ uint32_t phandle;
+
+ qemu_fdt_add_path(fdt, nodepath);
+ phandle = qemu_fdt_alloc_phandle(fdt);
+ qemu_fdt_setprop_cell(fdt, nodepath, "phandle", phandle);
+ qemu_fdt_setprop_cell(fdt, nodepath, "cache-level", cache.level);
+ qemu_fdt_setprop_cell(fdt, nodepath, "cache-size", cache.size);
+ qemu_fdt_setprop_cell(fdt, nodepath, "cache-block-size", cache.linesize);
+ qemu_fdt_setprop_cell(fdt, nodepath, "cache-sets", cache.sets);
+ qemu_fdt_setprop(fdt, nodepath, "cache-unified", NULL, 0);
+ qemu_fdt_setprop_string(fdt, nodepath, "compatible", "cache");
+ if (cache.level != 3) {
+ /* top level cache doesn't have next-level-cache property */
+ qemu_fdt_setprop_cell(fdt, nodepath, "next-level-cache", *next_level);
+ }
+
+ *next_level = phandle;
+}
+
+static bool add_cpu_cache_hierarchy(void *fdt, CPUCoreCaches* cache,
+ uint32_t cache_cnt,
+ uint32_t top_level,
+ uint32_t bottom_level,
+ uint32_t cpu_id,
+ uint32_t *next_level) {
+ bool found_cache = false;
+
+ for (int level = top_level; level >= bottom_level; level--) {
+ for (int i = 0; i < cache_cnt; i++) {
+ char *nodepath;
+
+ if (i != level) {
+ continue;
+ }
+
+ nodepath = g_strdup_printf("/cpus/cpu@%d/l%d-cache",
+ cpu_id, level);
+ add_cache_node(fdt, nodepath, cache[i], next_level);
+ found_cache = true;
+ g_free(nodepath);
+
+ }
+ }
+
+ return found_cache;
+}
+
+static void set_cache_properties(void *fdt, const char *nodename,
+ const char *prefix, CPUCoreCaches cache)
+{
+ char prop_name[64];
+
+ snprintf(prop_name, sizeof(prop_name), "%s-block-size", prefix);
+ qemu_fdt_setprop_cell(fdt, nodename, prop_name, cache.linesize);
+
+ snprintf(prop_name, sizeof(prop_name), "%s-size", prefix);
+ qemu_fdt_setprop_cell(fdt, nodename, prop_name, cache.size);
+
+ snprintf(prop_name, sizeof(prop_name), "%s-sets", prefix);
+ qemu_fdt_setprop_cell(fdt, nodename, prop_name, cache.sets);
+}
+
+static bool partial_cache_description(const MachineState *ms, int num_caches)
+{
+ assert(num_caches - 1 < CACHE_LEVEL_AND_TYPE__MAX);
+ enum CpuTopologyLevel topo_level;
+ enum CacheLevelAndType cache_level;
+
+ for (cache_level = 0; cache_level < num_caches; cache_level++) {
+ topo_level = machine_get_cache_topo_level(ms, cache_level);
+ if (topo_level == CPU_TOPOLOGY_LEVEL_DEFAULT) {
+ /* No topology level described for this cache level. */
+ return true;
+ }
+ }
+
+ return false;
+}
+
static void fdt_add_cpu_nodes(const VirtMachineState *vms)
{
int cpu;
int addr_cells = 1;
const MachineState *ms = MACHINE(vms);
+ const MachineClass *mc = MACHINE_GET_CLASS(ms);
const VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
int smp_cpus = ms->smp.cpus;
+ int socket_id, cluster_id, core_id;
+ uint32_t next_level = 0;
+ uint32_t socket_offset = 0;
+ uint32_t cluster_offset = 0;
+ uint32_t core_offset = 0;
+ int last_socket = -1;
+ int last_cluster = -1;
+ int last_core = -1;
+ int top_node = 3;
+ int top_cluster = 3;
+ int top_core = 3;
+ int bottom_node = 3;
+ int bottom_cluster = 3;
+ int bottom_core = 3;
+ unsigned int num_cache;
+ CPUCoreCaches caches[CPU_MAX_CACHES];
+ bool cache_created = false;
+ bool cache_at_topo_level;
+
+ num_cache = virt_get_caches(vms, caches);
+
+ if (mc->smp_props.has_caches &&
+ partial_cache_description(ms, num_cache)) {
+ error_setg(&error_fatal, "Missing cache description");
+ return;
+ }
/*
* See Linux Documentation/devicetree/bindings/arm/cpus.yaml
@@ -466,9 +658,14 @@ static void fdt_add_cpu_nodes(const VirtMachineState *vms)
qemu_fdt_setprop_cell(ms->fdt, "/cpus", "#size-cells", 0x0);
for (cpu = smp_cpus - 1; cpu >= 0; cpu--) {
+ socket_id = cpu / (ms->smp.clusters * ms->smp.cores * ms->smp.threads);
+ cluster_id = cpu / (ms->smp.cores * ms->smp.threads) % ms->smp.clusters;
+ core_id = cpu / ms->smp.threads % ms->smp.cores;
+
char *nodename = g_strdup_printf("/cpus/cpu@%d", cpu);
ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(cpu));
CPUState *cs = CPU(armcpu);
+ const char *prefix = NULL;
qemu_fdt_add_subnode(ms->fdt, nodename);
qemu_fdt_setprop_string(ms->fdt, nodename, "device_type", "cpu");
@@ -498,6 +695,136 @@ static void fdt_add_cpu_nodes(const VirtMachineState *vms)
qemu_fdt_alloc_phandle(ms->fdt));
}
+ if (!vmc->no_cpu_topology && num_cache) {
+ for (uint8_t i = 0; i < num_cache; i++) {
+ /* Only level 1 in the CPU entry. */
+ if (caches[i].level > 1) {
+ continue;
+ }
+
+ if (caches[i].type == INSTRUCTION_CACHE) {
+ prefix = "i-cache";
+ } else if (caches[i].type == DATA_CACHE) {
+ prefix = "d-cache";
+ } else if (caches[i].type == UNIFIED_CACHE) {
+ error_setg(&error_fatal,
+ "Unified type is not implemented at level %d",
+ caches[i].level);
+ return;
+ } else {
+ error_setg(&error_fatal, "Undefined cache type");
+ return;
+ }
+
+ set_cache_properties(ms->fdt, nodename, prefix, caches[i]);
+ }
+ }
+
+ if (socket_id != last_socket) {
+ bottom_node = top_node;
+ /* This assumes socket as the highest topological level. */
+ socket_offset = 0;
+ cluster_offset = 0;
+ cache_at_topo_level =
+ machine_find_lowest_level_cache_at_topo_level(ms,
+ &bottom_node,
+ CPU_TOPOLOGY_LEVEL_SOCKET);
+ if (cache_at_topo_level) {
+ if (bottom_node == 1 && !virt_is_acpi_enabled(vms))
+ error_setg(
+ &error_fatal,
+ "Cannot share L1 at socket_id %d."
+ "DT limitation on sharing at cache level = 1",
+ socket_id);
+
+ cache_created = add_cpu_cache_hierarchy(ms->fdt, caches,
+ num_cache,
+ top_node,
+ bottom_node, cpu,
+ &socket_offset);
+
+ if (!cache_created) {
+ error_setg(&error_fatal,
+ "Socket: No caches at levels %d-%d",
+ top_node, bottom_node);
+ return;
+ }
+
+ top_cluster = bottom_node - 1;
+ }
+
+ last_socket = socket_id;
+ }
+
+ if (cluster_id != last_cluster) {
+ bottom_cluster = top_cluster;
+ cluster_offset = socket_offset;
+ core_offset = 0;
+ cache_at_topo_level =
+ machine_find_lowest_level_cache_at_topo_level(ms,
+ &bottom_cluster,
+ CPU_TOPOLOGY_LEVEL_CLUSTER);
+ if (cache_at_topo_level) {
+ cache_created = add_cpu_cache_hierarchy(ms->fdt, caches,
+ num_cache,
+ top_cluster,
+ bottom_cluster, cpu,
+ &cluster_offset);
+ if (bottom_cluster == 1 && !virt_is_acpi_enabled(vms)) {
+ error_setg(&error_fatal,
+ "Cannot share L1 at socket_id %d, cluster_id %d. "
+ "DT limitation on sharing at cache level = 1.",
+ socket_id, cluster_id);
+ }
+
+ if (!cache_created) {
+ error_setg(&error_fatal,
+ "Cluster: No caches at levels %d-%d.",
+ top_cluster, bottom_cluster);
+ return;
+ }
+
+ top_core = bottom_cluster - 1;
+ } else if (top_cluster == bottom_node - 1) {
+ top_core = bottom_node - 1;
+ }
+
+ last_cluster = cluster_id;
+ }
+
+ if (core_id != last_core) {
+ bottom_core = top_core;
+ core_offset = cluster_offset;
+ cache_at_topo_level =
+ machine_find_lowest_level_cache_at_topo_level(ms,
+ &bottom_core,
+ CPU_TOPOLOGY_LEVEL_CORE);
+ if (cache_at_topo_level) {
+ if (bottom_core == 1 && top_core > 1) {
+ bottom_core++;
+ cache_created = add_cpu_cache_hierarchy(ms->fdt,
+ caches,
+ num_cache,
+ top_core,
+ bottom_core, cpu,
+ &core_offset);
+
+ if (!cache_created) {
+ error_setg(&error_fatal,
+ "Core: No caches at levels %d-%d",
+ top_core, bottom_core);
+ return;
+ }
+ }
+ }
+
+ last_core = core_id;
+ }
+
+ next_level = core_offset;
+ qemu_fdt_setprop_cell(ms->fdt, nodename, "next-level-cache",
+ next_level);
+
g_free(nodename);
}
@@ -2912,7 +3239,7 @@ static void virt_set_oem_table_id(Object *obj, const char *value,
}
-bool virt_is_acpi_enabled(VirtMachineState *vms)
+bool virt_is_acpi_enabled(const VirtMachineState *vms)
{
if (vms->acpi == ON_OFF_AUTO_OFF) {
return false;
@@ -3496,6 +3823,12 @@ static void virt_machine_class_init(ObjectClass *oc, const void *data)
hc->unplug = virt_machine_device_unplug_cb;
mc->nvdimm_supported = true;
mc->smp_props.clusters_supported = true;
+
+ /* Supported caches */
+ mc->smp_props.cache_supported[CACHE_LEVEL_AND_TYPE_L1D] = true;
+ mc->smp_props.cache_supported[CACHE_LEVEL_AND_TYPE_L1I] = true;
+ mc->smp_props.cache_supported[CACHE_LEVEL_AND_TYPE_L2] = true;
+ mc->smp_props.cache_supported[CACHE_LEVEL_AND_TYPE_L3] = true;
mc->auto_enable_numa_with_memhp = true;
mc->auto_enable_numa_with_memdev = true;
/* platform instead of architectural choice */
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
index 5fcbd1c76f..fc7950da85 100644
--- a/include/hw/arm/virt.h
+++ b/include/hw/arm/virt.h
@@ -41,6 +41,7 @@
#include "system/kvm.h"
#include "hw/intc/arm_gicv3_common.h"
#include "qom/object.h"
+#include "hw/core/cpu.h"
#define NUM_GICV2M_SPIS 64
#define NUM_VIRTIO_TRANSPORTS 32
@@ -52,6 +53,8 @@
/* GPIO pins */
#define GPIO_PIN_POWER_BUTTON 3
+#define CPU_MAX_CACHES 16
+
enum {
VIRT_FLASH,
VIRT_MEM,
@@ -195,7 +198,19 @@ struct VirtMachineState {
OBJECT_DECLARE_TYPE(VirtMachineState, VirtMachineClass, VIRT_MACHINE)
void virt_acpi_setup(VirtMachineState *vms);
-bool virt_is_acpi_enabled(VirtMachineState *vms);
+bool virt_is_acpi_enabled(const VirtMachineState *vms);
+
+#define CLIDR_CTYPE_NO_CACHE 0x00
+#define CLIDR_CTYPE_I_CACHE 0x01
+#define CLIDR_CTYPE_D_CACHE 0x02
+#define CLIDR_CTYPE_SEPARATE_I_D_CACHES 0x03
+#define CLIDR_CTYPE_UNIFIED_CACHE 0x04
+#define CLIDR_CTYPE_MAX_CACHE_LEVEL 7
+
+unsigned int virt_get_caches(const VirtMachineState *vms,
+ CPUCoreCaches *caches);
+void set_cpu_cache(CPUCoreCaches *cpu_cache, enum CacheType cache_type,
+ int cache_level, bool is_i_cache);
/* Return number of redistributors that fit in the specified region */
static uint32_t virt_redist_capacity(VirtMachineState *vms, int region)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 04e1f970ca..6bdae9ab70 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -1218,4 +1218,16 @@ enum CacheType {
UNIFIED_CACHE
};
+struct CPUCoreCaches {
+ enum CacheType type;
+ uint32_t sets;
+ uint32_t size;
+ uint32_t level;
+ uint16_t linesize;
+ uint8_t attributes; /* write policy: 0x0 write back, 0x1 write through */
+ uint8_t associativity;
+};
+
+typedef struct CPUCoreCaches CPUCoreCaches;
+
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 04/59] bios-tables-test: prepare to change ARM ACPI virt PPTT
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (2 preceding siblings ...)
2026-04-23 10:01 ` [PULL 03/59] hw/arm/virt: add cache hierarchy to device tree Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 05/59] acpi: Add parameters to pass cache descriptions to ACPI build_pptt() Peter Maydell
` (56 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
Prepare to update `build_pptt` function to add cache description
functionalities, thus add binaries in this patch.
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Message-id: 20260311160609.358-5-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
tests/qtest/bios-tables-test-allowed-diff.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
index dfb8523c8b..e84d6c6955 100644
--- a/tests/qtest/bios-tables-test-allowed-diff.h
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
@@ -1 +1,4 @@
/* List of comma-separated changed AML files to ignore */
+"tests/data/acpi/aarch64/virt/PPTT",
+"tests/data/acpi/aarch64/virt/PPTT.acpihmatvirt",
+"tests/data/acpi/aarch64/virt/PPTT.topology",
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 05/59] acpi: Add parameters to pass cache descriptions to ACPI build_pptt()
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (3 preceding siblings ...)
2026-04-23 10:01 ` [PULL 04/59] bios-tables-test: prepare to change ARM ACPI virt PPTT Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 06/59] hw/acpi: add cache hierarchy to pptt table Peter Maydell
` (55 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
Add optional parameters to pass cache descriptions to build_pptt().
Update ARM and Loongarch callers to pass none for now.
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Message-id: 20260311160609.358-6-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/acpi/aml-build.c | 3 ++-
hw/arm/virt-acpi-build.c | 2 +-
hw/loongarch/virt-acpi-build.c | 4 ++--
include/hw/acpi/aml-build.h | 4 +++-
4 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index 4b37405088..b0ea8a5d5d 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -2155,7 +2155,8 @@ void build_spcr(GArray *table_data, BIOSLinker *linker,
* 5.2.29 Processor Properties Topology Table (PPTT)
*/
void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
- const char *oem_id, const char *oem_table_id)
+ const char *oem_id, const char *oem_table_id,
+ int num_caches, CPUCoreCaches *caches)
{
MachineClass *mc = MACHINE_GET_CLASS(ms);
CPUArchIdList *cpus = ms->possible_cpus;
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 591cfc993c..cd0700416e 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -1277,7 +1277,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
if (!vmc->no_cpu_topology) {
acpi_add_table(table_offsets, tables_blob);
build_pptt(tables_blob, tables->linker, ms,
- vms->oem_id, vms->oem_table_id);
+ vms->oem_id, vms->oem_table_id, 0, NULL);
}
acpi_add_table(table_offsets, tables_blob);
diff --git a/hw/loongarch/virt-acpi-build.c b/hw/loongarch/virt-acpi-build.c
index 3e34bedcd6..a0b445f297 100644
--- a/hw/loongarch/virt-acpi-build.c
+++ b/hw/loongarch/virt-acpi-build.c
@@ -538,8 +538,8 @@ static void acpi_build(AcpiBuildTables *tables, MachineState *machine)
build_madt(tables_blob, tables->linker, lvms);
acpi_add_table(table_offsets, tables_blob);
- build_pptt(tables_blob, tables->linker, machine,
- lvms->oem_id, lvms->oem_table_id);
+ build_pptt(tables_blob, tables->linker, machine, lvms->oem_id,
+ lvms->oem_table_id, 0, NULL);
acpi_add_table(table_offsets, tables_blob);
build_srat(tables_blob, tables->linker, machine);
diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
index f38e129719..e70e0643b1 100644
--- a/include/hw/acpi/aml-build.h
+++ b/include/hw/acpi/aml-build.h
@@ -3,6 +3,7 @@
#include "hw/acpi/acpi-defs.h"
#include "hw/acpi/bios-linker-loader.h"
+#include "hw/core/cpu.h"
#define ACPI_BUILD_APPNAME6 "BOCHS "
#define ACPI_BUILD_APPNAME8 "BXPC "
@@ -499,7 +500,8 @@ void build_slit(GArray *table_data, BIOSLinker *linker, MachineState *ms,
const char *oem_id, const char *oem_table_id);
void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
- const char *oem_id, const char *oem_table_id);
+ const char *oem_id, const char *oem_table_id,
+ int num_caches, CPUCoreCaches *caches);
void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f,
const char *oem_id, const char *oem_table_id);
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 06/59] hw/acpi: add cache hierarchy to pptt table
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (4 preceding siblings ...)
2026-04-23 10:01 ` [PULL 05/59] acpi: Add parameters to pass cache descriptions to ACPI build_pptt() Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 07/59] tests/qtest/bios-table-test: testing new ARM ACPI PPTT topology Peter Maydell
` (54 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
Add cache topology to PPTT table.
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Message-id: 20260311160609.358-7-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/acpi/aml-build.c | 200 +++++++++++++++++++++++++++++++++++++--
hw/arm/virt-acpi-build.c | 8 +-
include/hw/acpi/cpu.h | 10 ++
3 files changed, 209 insertions(+), 9 deletions(-)
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index b0ea8a5d5d..7edc8aed42 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -34,6 +34,7 @@
#include "hw/pci/pci_bridge.h"
#include "hw/acpi/acpi_aml_interface.h"
#include "qemu/cutils.h"
+#include "hw/core/cpu.h"
static GArray *build_alloc_array(void)
{
@@ -2150,6 +2151,108 @@ void build_spcr(GArray *table_data, BIOSLinker *linker,
}
acpi_table_end(linker, &table);
}
+
+/*
+ * ACPI spec, Revision 6.3
+ * 5.2.29.2 Cache Type Structure (Type 1)
+ */
+static void build_cache_nodes(GArray *tbl, CPUCoreCaches *cache,
+ uint32_t next_offset)
+{
+ const uint8_t node_length = 24;
+ int start_len = tbl->len;
+ int val;
+
+ build_append_byte(tbl, 1); /* Type 1 - cache */
+ build_append_byte(tbl, node_length); /* Length */
+ build_append_int_noprefix(tbl, 0, 2); /* Reserved */
+ build_append_int_noprefix(tbl, 0x7f, 4); /* Flags */
+ build_append_int_noprefix(tbl, next_offset, 4); /* Next Level of Cache */
+ build_append_int_noprefix(tbl, cache->size, 4); /* Size */
+ build_append_int_noprefix(tbl, cache->sets, 4); /* Number of sets */
+ build_append_byte(tbl, cache->associativity); /* Associativity */
+ val = 0x3;
+ switch (cache->type) {
+ case INSTRUCTION_CACHE:
+ val |= (1 << 2); /* Instruction Cache */
+ break;
+ case DATA_CACHE:
+ val |= (0 << 2); /* Data Cache */
+ break;
+ case UNIFIED_CACHE:
+ val |= (3 << 2); /* Unified */
+ break;
+ }
+ build_append_byte(tbl, val); /* Attributes */
+ build_append_int_noprefix(tbl, cache->linesize, 2); /* Line size */
+ g_assert(tbl->len == start_len + node_length);
+}
+
+/*
+ * Build PPTT Cache Type structures (Type 1) from cache level `level_high`
+ * down to `level_low` (both inclusive), appending them to the PPTT table.
+ *
+ * On output, `data_offset` and `instr_offset` hold the PPTT offsets of the
+ * lowest-level data and instruction cache nodes respectively. These offsets
+ * are referenced as private resources in the Processor Hierarchy Node (Type 0)
+ * that owns the caches.
+ */
+static bool build_caches(GArray *table_data, uint32_t pptt_start,
+ int num_caches, CPUCoreCaches *caches,
+ uint8_t level_high, /* Inclusive */
+ uint8_t level_low, /* Inclusive */
+ uint32_t *data_offset,
+ uint32_t *instr_offset)
+{
+ uint32_t next_level_offset_data = 0, next_level_offset_instruction = 0;
+ uint32_t this_offset, next_offset = 0;
+ int c, level;
+ bool found_cache = false;
+
+ /* Walk caches from top to bottom */
+ for (level = level_high; level >= level_low; level--) {
+ for (c = 0; c < num_caches; c++) {
+ if (caches[c].level != level) {
+ continue;
+ }
+
+ /* Assume only unified above l1 for now */
+ this_offset = table_data->len - pptt_start;
+ switch (caches[c].type) {
+ case INSTRUCTION_CACHE:
+ next_offset = next_level_offset_instruction;
+ break;
+ case DATA_CACHE:
+ next_offset = next_level_offset_data;
+ break;
+ case UNIFIED_CACHE:
+ /* Either is fine here */
+ next_offset = next_level_offset_instruction;
+ break;
+ }
+ build_cache_nodes(table_data, &caches[c], next_offset);
+ switch (caches[c].type) {
+ case INSTRUCTION_CACHE:
+ next_level_offset_instruction = this_offset;
+ break;
+ case DATA_CACHE:
+ next_level_offset_data = this_offset;
+ break;
+ case UNIFIED_CACHE:
+ next_level_offset_instruction = this_offset;
+ next_level_offset_data = this_offset;
+ break;
+ }
+ *data_offset = next_level_offset_data;
+ *instr_offset = next_level_offset_instruction;
+
+ found_cache = true;
+ }
+ }
+
+ return found_cache;
+}
+
/*
* ACPI spec, Revision 6.3
* 5.2.29 Processor Properties Topology Table (PPTT)
@@ -2160,11 +2263,31 @@ void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
{
MachineClass *mc = MACHINE_GET_CLASS(ms);
CPUArchIdList *cpus = ms->possible_cpus;
- int64_t socket_id = -1, cluster_id = -1, core_id = -1;
- uint32_t socket_offset = 0, cluster_offset = 0, core_offset = 0;
+ uint32_t core_data_offset = 0;
+ uint32_t core_instr_offset = 0;
+ uint32_t cluster_instr_offset = 0;
+ uint32_t cluster_data_offset = 0;
+ uint32_t node_data_offset = 0;
+ uint32_t node_instr_offset = 0;
+ int top_node = 3;
+ int top_cluster = 3;
+ int top_core = 3;
+ int bottom_node = 3;
+ int bottom_cluster = 3;
+ int bottom_core = 3;
+ int64_t socket_id = -1;
+ int64_t cluster_id = -1;
+ int64_t core_id = -1;
+ uint32_t socket_offset = 0;
+ uint32_t cluster_offset = 0;
+ uint32_t core_offset = 0;
uint32_t pptt_start = table_data->len;
uint32_t root_offset;
int n;
+ uint32_t priv_rsrc[2];
+ uint32_t num_priv = 0;
+ bool cache_at_topo_level;
+
AcpiTable table = { .sig = "PPTT", .rev = 2,
.oem_id = oem_id, .oem_table_id = oem_table_id };
@@ -2194,11 +2317,29 @@ void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
socket_id = cpus->cpus[n].props.socket_id;
cluster_id = -1;
core_id = -1;
+ bottom_node = top_node;
+ num_priv = 0;
+ cache_at_topo_level =
+ machine_find_lowest_level_cache_at_topo_level(
+ ms, &bottom_node, CPU_TOPOLOGY_LEVEL_SOCKET);
+ if (cache_at_topo_level) {
+ build_caches(table_data, pptt_start, num_caches, caches,
+ top_node, bottom_node, &node_data_offset,
+ &node_instr_offset);
+ priv_rsrc[0] = node_instr_offset;
+ priv_rsrc[1] = node_data_offset;
+ if (node_instr_offset || node_data_offset) {
+ num_priv = node_instr_offset == node_data_offset ? 1 : 2;
+ }
+
+ top_cluster = bottom_node - 1;
+ }
+
socket_offset = table_data->len - pptt_start;
build_processor_hierarchy_node(table_data,
(1 << 0) | /* Physical package */
(1 << 4), /* Identical Implementation */
- root_offset, socket_id, NULL, 0);
+ root_offset, socket_id, priv_rsrc, num_priv);
}
if (mc->smp_props.clusters_supported && mc->smp_props.has_clusters) {
@@ -2206,21 +2347,66 @@ void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
assert(cpus->cpus[n].props.cluster_id > cluster_id);
cluster_id = cpus->cpus[n].props.cluster_id;
core_id = -1;
+ bottom_cluster = top_cluster;
+ num_priv = 0;
+ cache_at_topo_level =
+ machine_find_lowest_level_cache_at_topo_level(
+ ms, &bottom_cluster, CPU_TOPOLOGY_LEVEL_CLUSTER);
+
+ if (cache_at_topo_level) {
+ build_caches(table_data, pptt_start, num_caches, caches,
+ top_cluster, bottom_cluster,
+ &cluster_data_offset, &cluster_instr_offset);
+ priv_rsrc[0] = cluster_instr_offset;
+ priv_rsrc[1] = cluster_data_offset;
+ if (cluster_instr_offset || cluster_data_offset) {
+ num_priv =
+ cluster_instr_offset == cluster_data_offset ? 1 : 2;
+ }
+ top_core = bottom_cluster - 1;
+ } else if (top_cluster == bottom_node - 1) {
+ /* socket cache but no cluster cache */
+ top_core = bottom_node - 1;
+ }
+
cluster_offset = table_data->len - pptt_start;
build_processor_hierarchy_node(table_data,
(0 << 0) | /* Not a physical package */
(1 << 4), /* Identical Implementation */
- socket_offset, cluster_id, NULL, 0);
+ socket_offset, cluster_id, priv_rsrc, num_priv);
}
} else {
+ if (machine_defines_cache_at_topo_level(
+ ms, CPU_TOPOLOGY_LEVEL_CLUSTER)) {
+ error_setg(&error_fatal, "Not clusters found for the cache");
+ return;
+ }
+
cluster_offset = socket_offset;
+ top_core = bottom_node - 1; /* there is no cluster */
+ }
+
+ if (cpus->cpus[n].props.core_id != core_id) {
+ bottom_core = top_core;
+ num_priv = 0;
+ cache_at_topo_level =
+ machine_find_lowest_level_cache_at_topo_level(
+ ms, &bottom_core, CPU_TOPOLOGY_LEVEL_CORE);
+ if (cache_at_topo_level) {
+ build_caches(table_data, pptt_start, num_caches, caches,
+ top_core, bottom_core, &core_data_offset,
+ &core_instr_offset);
+ priv_rsrc[0] = core_instr_offset;
+ priv_rsrc[1] = core_data_offset;
+ num_priv = core_instr_offset == core_data_offset ? 1 : 2;
+ }
}
if (ms->smp.threads == 1) {
build_processor_hierarchy_node(table_data,
(1 << 1) | /* ACPI Processor ID valid */
- (1 << 3), /* Node is a Leaf */
- cluster_offset, n, NULL, 0);
+ (1 << 3), /* Node is a Leaf */
+ cluster_offset, n, priv_rsrc, num_priv);
} else {
if (cpus->cpus[n].props.core_id != core_id) {
assert(cpus->cpus[n].props.core_id > core_id);
@@ -2229,7 +2415,7 @@ void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
build_processor_hierarchy_node(table_data,
(0 << 0) | /* Not a physical package */
(1 << 4), /* Identical Implementation */
- cluster_offset, core_id, NULL, 0);
+ cluster_offset, core_id, priv_rsrc, num_priv);
}
build_processor_hierarchy_node(table_data,
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index cd0700416e..41ca0bab08 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -1255,6 +1255,10 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
unsigned dsdt, xsdt;
GArray *tables_blob = tables->table_data;
MachineState *ms = MACHINE(vms);
+ CPUCoreCaches caches[CPU_MAX_CACHES];
+ unsigned int num_caches;
+
+ num_caches = virt_get_caches(vms, caches);
table_offsets = g_array_new(false, true /* clear */,
sizeof(uint32_t));
@@ -1276,8 +1280,8 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
if (!vmc->no_cpu_topology) {
acpi_add_table(table_offsets, tables_blob);
- build_pptt(tables_blob, tables->linker, ms,
- vms->oem_id, vms->oem_table_id, 0, NULL);
+ build_pptt(tables_blob, tables->linker, ms, vms->oem_id,
+ vms->oem_table_id, num_caches, caches);
}
acpi_add_table(table_offsets, tables_blob);
diff --git a/include/hw/acpi/cpu.h b/include/hw/acpi/cpu.h
index 2809dd8a91..04c821d2b9 100644
--- a/include/hw/acpi/cpu.h
+++ b/include/hw/acpi/cpu.h
@@ -69,6 +69,16 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
void acpi_cpu_ospm_status(CPUHotplugState *cpu_st, ACPIOSTInfoList ***list);
+struct CPUPPTTCaches {
+ enum CacheType type;
+ uint32_t sets;
+ uint32_t size;
+ uint32_t level;
+ uint16_t linesize;
+ uint8_t attributes; /* write policy: 0x0 write back, 0x1 write through */
+ uint8_t associativity;
+};
+
extern const VMStateDescription vmstate_cpu_hotplug;
#define VMSTATE_CPU_HOTPLUG(cpuhp, state) \
VMSTATE_STRUCT(cpuhp, state, 1, \
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 07/59] tests/qtest/bios-table-test: testing new ARM ACPI PPTT topology
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (5 preceding siblings ...)
2026-04-23 10:01 ` [PULL 06/59] hw/acpi: add cache hierarchy to pptt table Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 08/59] Update the ACPI tables based on new aml-build.c Peter Maydell
` (53 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
Test new PPTT topolopy with cache representation.
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Message-id: 20260311160609.358-8-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
tests/qtest/bios-tables-test.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index a5a5b8807b..510751799e 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -2229,6 +2229,10 @@ static void test_acpi_aarch64_virt_tcg_topology(void)
};
test_acpi_one("-cpu cortex-a57 "
+ "-M virt,smp-cache.0.cache=l1i,smp-cache.0.topology=cluster,"
+ "smp-cache.1.cache=l1d,smp-cache.1.topology=cluster,"
+ "smp-cache.2.cache=l2,smp-cache.2.topology=cluster,"
+ "smp-cache.3.cache=l3,smp-cache.3.topology=cluster "
"-smp sockets=1,clusters=2,cores=2,threads=2", &data);
free_test_data(&data);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 08/59] Update the ACPI tables based on new aml-build.c
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (6 preceding siblings ...)
2026-04-23 10:01 ` [PULL 07/59] tests/qtest/bios-table-test: testing new ARM ACPI PPTT topology Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 09/59] target/arm: Move OMAP CP15 register definitions to cpregs-omap.c Peter Maydell
` (52 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alireza Sanaee <alireza.sanaee@huawei.com>
The disassembled differences between actual and expected PPTT based on
the following cache topology representation:
- l1d and l1i shared at cluster level
- l2 shared at cluster level
- l3 shared at cluster level
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20230628 (64-bit version)
* Copyright (c) 2000 - 2023 Intel Corporation
*
- * Disassembly of tests/data/acpi/aarch64/virt/PPTT.topology, Fri Aug 8 16:50:38 2025
+ * Disassembly of /tmp/aml-JGBZA3, Fri Aug 8 16:50:38 2025
*
* ACPI Data Table [PPTT]
*
* Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue (in hex)
*/
[000h 0000 004h] Signature : "PPTT" [Processor Properties Topology Table]
-[004h 0004 004h] Table Length : 00000164
+[004h 0004 004h] Table Length : 00000204
[008h 0008 001h] Revision : 02
-[009h 0009 001h] Checksum : 97
+[009h 0009 001h] Checksum : B8
[00Ah 0010 006h] Oem ID : "BOCHS "
[010h 0016 008h] Oem Table ID : "BXPC "
[018h 0024 004h] Oem Revision : 00000001
[01Ch 0028 004h] Asl Compiler ID : "BXPC"
[020h 0032 004h] Asl Compiler Revision : 00000001
[024h 0036 001h] Subtable Type : 00 [Processor Hierarchy Node]
[025h 0037 001h] Length : 14
[026h 0038 002h] Reserved : 0000
[028h 0040 004h] Flags (decoded below) : 00000011
Physical package : 1
ACPI Processor ID valid : 0
Processor is a thread : 0
Node is a leaf : 0
Identical Implementation : 1
@@ -34,223 +34,369 @@
[030h 0048 004h] ACPI Processor ID : 00000000
[034h 0052 004h] Private Resource Number : 00000000
[038h 0056 001h] Subtable Type : 00 [Processor Hierarchy Node]
[039h 0057 001h] Length : 14
[03Ah 0058 002h] Reserved : 0000
[03Ch 0060 004h] Flags (decoded below) : 00000011
Physical package : 1
ACPI Processor ID valid : 0
Processor is a thread : 0
Node is a leaf : 0
Identical Implementation : 1
[040h 0064 004h] Parent : 00000024
[044h 0068 004h] ACPI Processor ID : 00000000
[048h 0072 004h] Private Resource Number : 00000000
-[04Ch 0076 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[04Dh 0077 001h] Length : 14
+[04Ch 0076 001h] Subtable Type : 01 [Cache Type]
+[04Dh 0077 001h] Length : 18
[04Eh 0078 002h] Reserved : 0000
-[050h 0080 004h] Flags (decoded below) : 00000010
+[050h 0080 004h] Flags (decoded below) : 0000007F
+ Size valid : 1
+ Number of Sets valid : 1
+ Associativity valid : 1
+ Allocation Type valid : 1
+ Cache Type valid : 1
+ Write Policy valid : 1
+ Line Size valid : 1
+ Cache ID valid : 0
+[054h 0084 004h] Next Level of Cache : 00000000
+[058h 0088 004h] Size : 00200000
+[05Ch 0092 004h] Number of Sets : 00000800
+[060h 0096 001h] Associativity : 10
+[061h 0097 001h] Attributes : 0F
+ Allocation Type : 3
+ Cache Type : 3
+ Write Policy : 0
+[062h 0098 002h] Line Size : 0040
+
+[064h 0100 001h] Subtable Type : 01 [Cache Type]
+[065h 0101 001h] Length : 18
+[066h 0102 002h] Reserved : 0000
+[068h 0104 004h] Flags (decoded below) : 0000007F
+ Size valid : 1
+ Number of Sets valid : 1
+ Associativity valid : 1
+ Allocation Type valid : 1
+ Cache Type valid : 1
+ Write Policy valid : 1
+ Line Size valid : 1
+ Cache ID valid : 0
+[06Ch 0108 004h] Next Level of Cache : 0000004C
+[070h 0112 004h] Size : 00008000
+[074h 0116 004h] Number of Sets : 00000080
+[078h 0120 001h] Associativity : 04
+[079h 0121 001h] Attributes : 03
+ Allocation Type : 3
+ Cache Type : 0
+ Write Policy : 0
+[07Ah 0122 002h] Line Size : 0040
+
+[07Ch 0124 001h] Subtable Type : 01 [Cache Type]
+[07Dh 0125 001h] Length : 18
+[07Eh 0126 002h] Reserved : 0000
+[080h 0128 004h] Flags (decoded below) : 0000007F
+ Size valid : 1
+ Number of Sets valid : 1
+ Associativity valid : 1
+ Allocation Type valid : 1
+ Cache Type valid : 1
+ Write Policy valid : 1
+ Line Size valid : 1
+ Cache ID valid : 0
+[084h 0132 004h] Next Level of Cache : 0000004C
+[088h 0136 004h] Size : 0000C000
+[08Ch 0140 004h] Number of Sets : 00000100
+[090h 0144 001h] Associativity : 03
+[091h 0145 001h] Attributes : 07
+ Allocation Type : 3
+ Cache Type : 1
+ Write Policy : 0
+[092h 0146 002h] Line Size : 0040
+
+[094h 0148 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[095h 0149 001h] Length : 1C
+[096h 0150 002h] Reserved : 0000
+[098h 0152 004h] Flags (decoded below) : 00000010
Physical package : 0
ACPI Processor ID valid : 0
Processor is a thread : 0
Node is a leaf : 0
Identical Implementation : 1
-[054h 0084 004h] Parent : 00000038
-[058h 0088 004h] ACPI Processor ID : 00000000
-[05Ch 0092 004h] Private Resource Number : 00000000
-
-[060h 0096 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[061h 0097 001h] Length : 14
-[062h 0098 002h] Reserved : 0000
-[064h 0100 004h] Flags (decoded below) : 00000010
- Physical package : 0
- ACPI Processor ID valid : 0
- Processor is a thread : 0
- Node is a leaf : 0
- Identical Implementation : 1
-[068h 0104 004h] Parent : 0000004C
-[06Ch 0108 004h] ACPI Processor ID : 00000000
-[070h 0112 004h] Private Resource Number : 00000000
-
-[074h 0116 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[075h 0117 001h] Length : 14
-[076h 0118 002h] Reserved : 0000
-[078h 0120 004h] Flags (decoded below) : 0000000E
- Physical package : 0
- ACPI Processor ID valid : 1
- Processor is a thread : 1
- Node is a leaf : 1
- Identical Implementation : 0
-[07Ch 0124 004h] Parent : 00000060
-[080h 0128 004h] ACPI Processor ID : 00000000
-[084h 0132 004h] Private Resource Number : 00000000
-
-[088h 0136 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[089h 0137 001h] Length : 14
-[08Ah 0138 002h] Reserved : 0000
-[08Ch 0140 004h] Flags (decoded below) : 0000000E
- Physical package : 0
- ACPI Processor ID valid : 1
- Processor is a thread : 1
- Node is a leaf : 1
- Identical Implementation : 0
-[090h 0144 004h] Parent : 00000060
-[094h 0148 004h] ACPI Processor ID : 00000001
-[098h 0152 004h] Private Resource Number : 00000000
-
-[09Ch 0156 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[09Dh 0157 001h] Length : 14
-[09Eh 0158 002h] Reserved : 0000
-[0A0h 0160 004h] Flags (decoded below) : 00000010
- Physical package : 0
- ACPI Processor ID valid : 0
- Processor is a thread : 0
- Node is a leaf : 0
- Identical Implementation : 1
-[0A4h 0164 004h] Parent : 0000004C
-[0A8h 0168 004h] ACPI Processor ID : 00000001
-[0ACh 0172 004h] Private Resource Number : 00000000
+[09Ch 0156 004h] Parent : 00000038
+[0A0h 0160 004h] ACPI Processor ID : 00000000
+[0A4h 0164 004h] Private Resource Number : 00000002
+[0A8h 0168 004h] Private Resource : 0000007C
+[0ACh 0172 004h] Private Resource : 00000064
[0B0h 0176 001h] Subtable Type : 00 [Processor Hierarchy Node]
[0B1h 0177 001h] Length : 14
[0B2h 0178 002h] Reserved : 0000
-[0B4h 0180 004h] Flags (decoded below) : 0000000E
+[0B4h 0180 004h] Flags (decoded below) : 00000010
Physical package : 0
- ACPI Processor ID valid : 1
- Processor is a thread : 1
- Node is a leaf : 1
- Identical Implementation : 0
-[0B8h 0184 004h] Parent : 0000009C
-[0BCh 0188 004h] ACPI Processor ID : 00000002
+ ACPI Processor ID valid : 0
+ Processor is a thread : 0
+ Node is a leaf : 0
+ Identical Implementation : 1
+[0B8h 0184 004h] Parent : 00000094
+[0BCh 0188 004h] ACPI Processor ID : 00000000
[0C0h 0192 004h] Private Resource Number : 00000000
[0C4h 0196 001h] Subtable Type : 00 [Processor Hierarchy Node]
[0C5h 0197 001h] Length : 14
[0C6h 0198 002h] Reserved : 0000
[0C8h 0200 004h] Flags (decoded below) : 0000000E
Physical package : 0
ACPI Processor ID valid : 1
Processor is a thread : 1
Node is a leaf : 1
Identical Implementation : 0
-[0CCh 0204 004h] Parent : 0000009C
-[0D0h 0208 004h] ACPI Processor ID : 00000003
+[0CCh 0204 004h] Parent : 000000B0
+[0D0h 0208 004h] ACPI Processor ID : 00000000
[0D4h 0212 004h] Private Resource Number : 00000000
[0D8h 0216 001h] Subtable Type : 00 [Processor Hierarchy Node]
[0D9h 0217 001h] Length : 14
[0DAh 0218 002h] Reserved : 0000
-[0DCh 0220 004h] Flags (decoded below) : 00000010
+[0DCh 0220 004h] Flags (decoded below) : 0000000E
Physical package : 0
- ACPI Processor ID valid : 0
- Processor is a thread : 0
- Node is a leaf : 0
- Identical Implementation : 1
-[0E0h 0224 004h] Parent : 00000038
+ ACPI Processor ID valid : 1
+ Processor is a thread : 1
+ Node is a leaf : 1
+ Identical Implementation : 0
+[0E0h 0224 004h] Parent : 000000B0
[0E4h 0228 004h] ACPI Processor ID : 00000001
[0E8h 0232 004h] Private Resource Number : 00000000
[0ECh 0236 001h] Subtable Type : 00 [Processor Hierarchy Node]
[0EDh 0237 001h] Length : 14
[0EEh 0238 002h] Reserved : 0000
[0F0h 0240 004h] Flags (decoded below) : 00000010
Physical package : 0
ACPI Processor ID valid : 0
Processor is a thread : 0
Node is a leaf : 0
Identical Implementation : 1
-[0F4h 0244 004h] Parent : 000000D8
-[0F8h 0248 004h] ACPI Processor ID : 00000000
+[0F4h 0244 004h] Parent : 00000094
+[0F8h 0248 004h] ACPI Processor ID : 00000001
[0FCh 0252 004h] Private Resource Number : 00000000
[100h 0256 001h] Subtable Type : 00 [Processor Hierarchy Node]
[101h 0257 001h] Length : 14
[102h 0258 002h] Reserved : 0000
[104h 0260 004h] Flags (decoded below) : 0000000E
Physical package : 0
ACPI Processor ID valid : 1
Processor is a thread : 1
Node is a leaf : 1
Identical Implementation : 0
[108h 0264 004h] Parent : 000000EC
-[10Ch 0268 004h] ACPI Processor ID : 00000004
+[10Ch 0268 004h] ACPI Processor ID : 00000002
[110h 0272 004h] Private Resource Number : 00000000
[114h 0276 001h] Subtable Type : 00 [Processor Hierarchy Node]
[115h 0277 001h] Length : 14
[116h 0278 002h] Reserved : 0000
[118h 0280 004h] Flags (decoded below) : 0000000E
Physical package : 0
ACPI Processor ID valid : 1
Processor is a thread : 1
Node is a leaf : 1
Identical Implementation : 0
[11Ch 0284 004h] Parent : 000000EC
-[120h 0288 004h] ACPI Processor ID : 00000005
+[120h 0288 004h] ACPI Processor ID : 00000003
[124h 0292 004h] Private Resource Number : 00000000
-[128h 0296 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[129h 0297 001h] Length : 14
+[128h 0296 001h] Subtable Type : 01 [Cache Type]
+[129h 0297 001h] Length : 18
[12Ah 0298 002h] Reserved : 0000
-[12Ch 0300 004h] Flags (decoded below) : 00000010
+[12Ch 0300 004h] Flags (decoded below) : 0000007F
+ Size valid : 1
+ Number of Sets valid : 1
+ Associativity valid : 1
+ Allocation Type valid : 1
+ Cache Type valid : 1
+ Write Policy valid : 1
+ Line Size valid : 1
+ Cache ID valid : 0
+[130h 0304 004h] Next Level of Cache : 00000000
+[134h 0308 004h] Size : 00200000
+[138h 0312 004h] Number of Sets : 00000800
+[13Ch 0316 001h] Associativity : 10
+[13Dh 0317 001h] Attributes : 0F
+ Allocation Type : 3
+ Cache Type : 3
+ Write Policy : 0
+[13Eh 0318 002h] Line Size : 0040
+
+[140h 0320 001h] Subtable Type : 01 [Cache Type]
+[141h 0321 001h] Length : 18
+[142h 0322 002h] Reserved : 0000
+[144h 0324 004h] Flags (decoded below) : 0000007F
+ Size valid : 1
+ Number of Sets valid : 1
+ Associativity valid : 1
+ Allocation Type valid : 1
+ Cache Type valid : 1
+ Write Policy valid : 1
+ Line Size valid : 1
+ Cache ID valid : 0
+[148h 0328 004h] Next Level of Cache : 00000128
+[14Ch 0332 004h] Size : 00008000
+[150h 0336 004h] Number of Sets : 00000080
+[154h 0340 001h] Associativity : 04
+[155h 0341 001h] Attributes : 03
+ Allocation Type : 3
+ Cache Type : 0
+ Write Policy : 0
+[156h 0342 002h] Line Size : 0040
+
+[158h 0344 001h] Subtable Type : 01 [Cache Type]
+[159h 0345 001h] Length : 18
+[15Ah 0346 002h] Reserved : 0000
+[15Ch 0348 004h] Flags (decoded below) : 0000007F
+ Size valid : 1
+ Number of Sets valid : 1
+ Associativity valid : 1
+ Allocation Type valid : 1
+ Cache Type valid : 1
+ Write Policy valid : 1
+ Line Size valid : 1
+ Cache ID valid : 0
+[160h 0352 004h] Next Level of Cache : 00000128
+[164h 0356 004h] Size : 0000C000
+[168h 0360 004h] Number of Sets : 00000100
+[16Ch 0364 001h] Associativity : 03
+[16Dh 0365 001h] Attributes : 07
+ Allocation Type : 3
+ Cache Type : 1
+ Write Policy : 0
+[16Eh 0366 002h] Line Size : 0040
+
+[170h 0368 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[171h 0369 001h] Length : 1C
+[172h 0370 002h] Reserved : 0000
+[174h 0372 004h] Flags (decoded below) : 00000010
+ Physical package : 0
+ ACPI Processor ID valid : 0
+ Processor is a thread : 0
+ Node is a leaf : 0
+ Identical Implementation : 1
+[178h 0376 004h] Parent : 00000038
+[17Ch 0380 004h] ACPI Processor ID : 00000001
+[180h 0384 004h] Private Resource Number : 00000002
+[184h 0388 004h] Private Resource : 00000158
+[188h 0392 004h] Private Resource : 00000140
+
+[18Ch 0396 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[18Dh 0397 001h] Length : 14
+[18Eh 0398 002h] Reserved : 0000
+[190h 0400 004h] Flags (decoded below) : 00000010
+ Physical package : 0
+ ACPI Processor ID valid : 0
+ Processor is a thread : 0
+ Node is a leaf : 0
+ Identical Implementation : 1
+[194h 0404 004h] Parent : 00000170
+[198h 0408 004h] ACPI Processor ID : 00000000
+[19Ch 0412 004h] Private Resource Number : 00000000
+
+[1A0h 0416 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[1A1h 0417 001h] Length : 14
+[1A2h 0418 002h] Reserved : 0000
+[1A4h 0420 004h] Flags (decoded below) : 0000000E
+ Physical package : 0
+ ACPI Processor ID valid : 1
+ Processor is a thread : 1
+ Node is a leaf : 1
+ Identical Implementation : 0
+[1A8h 0424 004h] Parent : 0000018C
+[1ACh 0428 004h] ACPI Processor ID : 00000004
+[1B0h 0432 004h] Private Resource Number : 00000000
+
+[1B4h 0436 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[1B5h 0437 001h] Length : 14
+[1B6h 0438 002h] Reserved : 0000
+[1B8h 0440 004h] Flags (decoded below) : 0000000E
+ Physical package : 0
+ ACPI Processor ID valid : 1
+ Processor is a thread : 1
+ Node is a leaf : 1
+ Identical Implementation : 0
+[1BCh 0444 004h] Parent : 0000018C
+[1C0h 0448 004h] ACPI Processor ID : 00000005
+[1C4h 0452 004h] Private Resource Number : 00000000
+
+[1C8h 0456 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[1C9h 0457 001h] Length : 14
+[1CAh 0458 002h] Reserved : 0000
+[1CCh 0460 004h] Flags (decoded below) : 00000010
Physical package : 0
ACPI Processor ID valid : 0
Processor is a thread : 0
Node is a leaf : 0
Identical Implementation : 1
-[130h 0304 004h] Parent : 000000D8
-[134h 0308 004h] ACPI Processor ID : 00000001
-[138h 0312 004h] Private Resource Number : 00000000
-
-[13Ch 0316 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[13Dh 0317 001h] Length : 14
-[13Eh 0318 002h] Reserved : 0000
-[140h 0320 004h] Flags (decoded below) : 0000000E
+[1D0h 0464 004h] Parent : 00000170
+[1D4h 0468 004h] ACPI Processor ID : 00000001
+[1D8h 0472 004h] Private Resource Number : 00000000
+
+[1DCh 0476 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[1DDh 0477 001h] Length : 14
+[1DEh 0478 002h] Reserved : 0000
+[1E0h 0480 004h] Flags (decoded below) : 0000000E
Physical package : 0
ACPI Processor ID valid : 1
Processor is a thread : 1
Node is a leaf : 1
Identical Implementation : 0
-[144h 0324 004h] Parent : 00000128
-[148h 0328 004h] ACPI Processor ID : 00000006
-[14Ch 0332 004h] Private Resource Number : 00000000
-
-[150h 0336 001h] Subtable Type : 00 [Processor Hierarchy Node]
-[151h 0337 001h] Length : 14
-[152h 0338 002h] Reserved : 0000
-[154h 0340 004h] Flags (decoded below) : 0000000E
+[1E4h 0484 004h] Parent : 000001C8
+[1E8h 0488 004h] ACPI Processor ID : 00000006
+[1ECh 0492 004h] Private Resource Number : 00000000
+
+[1F0h 0496 001h] Subtable Type : 00 [Processor Hierarchy Node]
+[1F1h 0497 001h] Length : 14
+[1F2h 0498 002h] Reserved : 0000
+[1F4h 0500 004h] Flags (decoded below) : 0000000E
Physical package : 0
ACPI Processor ID valid : 1
Processor is a thread : 1
Node is a leaf : 1
Identical Implementation : 0
-[158h 0344 004h] Parent : 00000128
-[15Ch 0348 004h] ACPI Processor ID : 00000007
-[160h 0352 004h] Private Resource Number : 00000000
+[1F8h 0504 004h] Parent : 000001C8
+[1FCh 0508 004h] ACPI Processor ID : 00000007
+[200h 0512 004h] Private Resource Number : 00000000
-Raw Table Data: Length 356 (0x164)
+Raw Table Data: Length 516 (0x204)
- 0000: 50 50 54 54 64 01 00 00 02 97 42 4F 43 48 53 20 // PPTTd.....BOCHS
+ 0000: 50 50 54 54 04 02 00 00 02 B8 42 4F 43 48 53 20 // PPTT......BOCHS
0010: 42 58 50 43 20 20 20 20 01 00 00 00 42 58 50 43 // BXPC ....BXPC
0020: 01 00 00 00 00 14 00 00 11 00 00 00 00 00 00 00 // ................
0030: 00 00 00 00 00 00 00 00 00 14 00 00 11 00 00 00 // ................
- 0040: 24 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 // $...............
- 0050: 10 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 // ....8...........
- 0060: 00 14 00 00 10 00 00 00 4C 00 00 00 00 00 00 00 // ........L.......
- 0070: 00 00 00 00 00 14 00 00 0E 00 00 00 60 00 00 00 // ............`...
- 0080: 00 00 00 00 00 00 00 00 00 14 00 00 0E 00 00 00 // ................
- 0090: 60 00 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // `...............
- 00A0: 10 00 00 00 4C 00 00 00 01 00 00 00 00 00 00 00 // ....L...........
- 00B0: 00 14 00 00 0E 00 00 00 9C 00 00 00 02 00 00 00 // ................
- 00C0: 00 00 00 00 00 14 00 00 0E 00 00 00 9C 00 00 00 // ................
- 00D0: 03 00 00 00 00 00 00 00 00 14 00 00 10 00 00 00 // ................
- 00E0: 38 00 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // 8...............
- 00F0: 10 00 00 00 D8 00 00 00 00 00 00 00 00 00 00 00 // ................
- 0100: 00 14 00 00 0E 00 00 00 EC 00 00 00 04 00 00 00 // ................
+ 0040: 24 00 00 00 00 00 00 00 00 00 00 00 01 18 00 00 // $...............
+ 0050: 7F 00 00 00 00 00 00 00 00 00 20 00 00 08 00 00 // .......... .....
+ 0060: 10 0F 40 00 01 18 00 00 7F 00 00 00 4C 00 00 00 // ..@.........L...
+ 0070: 00 80 00 00 80 00 00 00 04 03 40 00 01 18 00 00 // ..........@.....
+ 0080: 7F 00 00 00 4C 00 00 00 00 C0 00 00 00 01 00 00 // ....L...........
+ 0090: 03 07 40 00 00 1C 00 00 10 00 00 00 38 00 00 00 // ..@.........8...
+ 00A0: 00 00 00 00 02 00 00 00 7C 00 00 00 64 00 00 00 // ........|...d...
+ 00B0: 00 14 00 00 10 00 00 00 94 00 00 00 00 00 00 00 // ................
+ 00C0: 00 00 00 00 00 14 00 00 0E 00 00 00 B0 00 00 00 // ................
+ 00D0: 00 00 00 00 00 00 00 00 00 14 00 00 0E 00 00 00 // ................
+ 00E0: B0 00 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // ................
+ 00F0: 10 00 00 00 94 00 00 00 01 00 00 00 00 00 00 00 // ................
+ 0100: 00 14 00 00 0E 00 00 00 EC 00 00 00 02 00 00 00 // ................
0110: 00 00 00 00 00 14 00 00 0E 00 00 00 EC 00 00 00 // ................
- 0120: 05 00 00 00 00 00 00 00 00 14 00 00 10 00 00 00 // ................
- 0130: D8 00 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // ................
- 0140: 0E 00 00 00 28 01 00 00 06 00 00 00 00 00 00 00 // ....(...........
- 0150: 00 14 00 00 0E 00 00 00 28 01 00 00 07 00 00 00 // ........(.......
- 0160: 00 00 00 00 // ....
+ 0120: 03 00 00 00 00 00 00 00 01 18 00 00 7F 00 00 00 // ................
+ 0130: 00 00 00 00 00 00 20 00 00 08 00 00 10 0F 40 00 // ...... .......@.
+ 0140: 01 18 00 00 7F 00 00 00 28 01 00 00 00 80 00 00 // ........(.......
+ 0150: 80 00 00 00 04 03 40 00 01 18 00 00 7F 00 00 00 // ......@.........
+ 0160: 28 01 00 00 00 C0 00 00 00 01 00 00 03 07 40 00 // (.............@.
+ 0170: 00 1C 00 00 10 00 00 00 38 00 00 00 01 00 00 00 // ........8.......
+ 0180: 02 00 00 00 58 01 00 00 40 01 00 00 00 14 00 00 // ....X...@.......
+ 0190: 10 00 00 00 70 01 00 00 00 00 00 00 00 00 00 00 // ....p...........
+ 01A0: 00 14 00 00 0E 00 00 00 8C 01 00 00 04 00 00 00 // ................
+ 01B0: 00 00 00 00 00 14 00 00 0E 00 00 00 8C 01 00 00 // ................
+ 01C0: 05 00 00 00 00 00 00 00 00 14 00 00 10 00 00 00 // ................
+ 01D0: 70 01 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // p...............
+ 01E0: 0E 00 00 00 C8 01 00 00 06 00 00 00 00 00 00 00 // ................
+ 01F0: 00 14 00 00 0E 00 00 00 C8 01 00 00 07 00 00 00 // ................
+ 0200: 00 00 00 00 // ....
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Message-id: 20260311160609.358-9-alireza.sanaee@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
tests/data/acpi/aarch64/virt/PPTT.topology | Bin 356 -> 516 bytes
tests/qtest/bios-tables-test-allowed-diff.h | 3 ---
2 files changed, 3 deletions(-)
diff --git a/tests/data/acpi/aarch64/virt/PPTT.topology b/tests/data/acpi/aarch64/virt/PPTT.topology
index 6b864f035c9f48845e9a3beb482c5171074864a5..4f9472c5f728f3068d1054d5042b85190bdb88da 100644
GIT binary patch
literal 516
zcmZvXy$!-Z4255QAXNNF6ciL!P%r{zlr$7bL?T57U;qX{A_Gt|2qk4ohG7Wa3wP0p
z#END6^S#(Ein5GDAbe%Ve19@oRpf>i08p-oC9qKR&9aThf)#M<Y6DDw`7DLw2leXq
zLmd6_hCL38k`!1|$8txPaXnn=XBC{Q-b1-FvMKYYs}()g-e8&2`b^pnU2|HqTCvC?
zcf+qVz1z0>Vcoy2<qdlSw@IRz6_Zp2=W4%;a%XmzJ6SxyMjmt8PHwetg0c5b_lhN!
FeE|+Z9RUCU
literal 356
zcmWFt2nk7HWME*L?&R<65v<@85#X!<1VAAM5F11@h%hh+f@ov_6;nYI69Dopu!#Af
ziSYsX2{^>Sc7o)9c7V(S=|vU;>74__Oh60<Ky@%NW+X9~TafjF#BRXUfM}@RH$Wx}
cOdLs!6-f-H7uh_Jy&6CPHY9a0F?OgJ00?&w0RR91
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
index e84d6c6955..dfb8523c8b 100644
--- a/tests/qtest/bios-tables-test-allowed-diff.h
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
@@ -1,4 +1 @@
/* List of comma-separated changed AML files to ignore */
-"tests/data/acpi/aarch64/virt/PPTT",
-"tests/data/acpi/aarch64/virt/PPTT.acpihmatvirt",
-"tests/data/acpi/aarch64/virt/PPTT.topology",
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 09/59] target/arm: Move OMAP CP15 register definitions to cpregs-omap.c
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (7 preceding siblings ...)
2026-04-23 10:01 ` [PULL 08/59] Update the ACPI tables based on new aml-build.c Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h Peter Maydell
` (51 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Alessandro Ratti <alessandro@0x65c.net>
The OMAP CP15 registers are only relevant to system-mode emulation
of OMAP SoCs. Move them out of the monolithic helper.c into a
dedicated file, following the pattern of cpregs-pmu.c and
cpregs-gcs.c. This reduces the size of helper.c and compiles
the OMAP-specific code out of CONFIG_USER_ONLY builds.
Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Alessandro Ratti <alessandro@0x65c.net>
Message-id: 20260405180826.729652-1-alessandro@0x65c.net
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/cpregs-omap-stub.c | 10 ++++
target/arm/cpregs-omap.c | 88 +++++++++++++++++++++++++++++++++++
target/arm/helper.c | 79 +------------------------------
target/arm/internals.h | 2 +
target/arm/meson.build | 2 +
5 files changed, 103 insertions(+), 78 deletions(-)
create mode 100644 target/arm/cpregs-omap-stub.c
create mode 100644 target/arm/cpregs-omap.c
diff --git a/target/arm/cpregs-omap-stub.c b/target/arm/cpregs-omap-stub.c
new file mode 100644
index 0000000000..39c511205c
--- /dev/null
+++ b/target/arm/cpregs-omap-stub.c
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "qemu/osdep.h"
+#include "target/arm/cpu-qom.h"
+#include "internals.h"
+
+void define_omap_cp_regs(ARMCPU *cpu)
+{
+ g_assert_not_reached();
+}
diff --git a/target/arm/cpregs-omap.c b/target/arm/cpregs-omap.c
new file mode 100644
index 0000000000..ac855baada
--- /dev/null
+++ b/target/arm/cpregs-omap.c
@@ -0,0 +1,88 @@
+/*
+ * QEMU ARM OMAP CP15 register definitions
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "target/arm/cpu.h"
+#include "target/arm/cpregs.h"
+#include "target/arm/internals.h"
+
+static void omap_ticonfig_write(CPUARMState *env, const ARMCPRegInfo *ri,
+ uint64_t value)
+{
+ env->cp15.c15_ticonfig = value & 0xe7;
+ /* The OS_TYPE bit in this register changes the reported CPUID! */
+ env->cp15.c0_cpuid = (value & (1 << 5)) ?
+ ARM_CPUID_TI915T : ARM_CPUID_TI925T;
+}
+
+static void omap_threadid_write(CPUARMState *env, const ARMCPRegInfo *ri,
+ uint64_t value)
+{
+ env->cp15.c15_threadid = value & 0xffff;
+}
+
+static void omap_wfi_write(CPUARMState *env, const ARMCPRegInfo *ri,
+ uint64_t value)
+{
+ /* Wait-for-interrupt (deprecated) */
+ cpu_interrupt(env_cpu(env), CPU_INTERRUPT_HALT);
+}
+
+static void omap_cachemaint_write(CPUARMState *env, const ARMCPRegInfo *ri,
+ uint64_t value)
+{
+ /*
+ * On OMAP there are registers indicating the max/min index of dcache lines
+ * containing a dirty line; cache flush operations have to reset these.
+ */
+ env->cp15.c15_i_max = 0x000;
+ env->cp15.c15_i_min = 0xff0;
+}
+
+static const ARMCPRegInfo omap_cp_reginfo[] = {
+ { .name = "DFSR", .cp = 15, .crn = 5, .crm = CP_ANY,
+ .opc1 = CP_ANY, .opc2 = CP_ANY, .access = PL1_RW, .type = ARM_CP_OVERRIDE,
+ .fieldoffset = offsetoflow32(CPUARMState, cp15.esr_el[1]),
+ .resetvalue = 0, },
+ { .name = "", .cp = 15, .crn = 15, .crm = 0, .opc1 = 0, .opc2 = 0,
+ .access = PL1_RW, .type = ARM_CP_NOP },
+ { .name = "TICONFIG", .cp = 15, .crn = 15, .crm = 1, .opc1 = 0, .opc2 = 0,
+ .access = PL1_RW,
+ .fieldoffset = offsetof(CPUARMState, cp15.c15_ticonfig), .resetvalue = 0,
+ .writefn = omap_ticonfig_write },
+ { .name = "IMAX", .cp = 15, .crn = 15, .crm = 2, .opc1 = 0, .opc2 = 0,
+ .access = PL1_RW,
+ .fieldoffset = offsetof(CPUARMState, cp15.c15_i_max), .resetvalue = 0, },
+ { .name = "IMIN", .cp = 15, .crn = 15, .crm = 3, .opc1 = 0, .opc2 = 0,
+ .access = PL1_RW, .resetvalue = 0xff0,
+ .fieldoffset = offsetof(CPUARMState, cp15.c15_i_min) },
+ { .name = "THREADID", .cp = 15, .crn = 15, .crm = 4, .opc1 = 0, .opc2 = 0,
+ .access = PL1_RW,
+ .fieldoffset = offsetof(CPUARMState, cp15.c15_threadid), .resetvalue = 0,
+ .writefn = omap_threadid_write },
+ { .name = "TI925T_STATUS", .cp = 15, .crn = 15,
+ .crm = 8, .opc1 = 0, .opc2 = 0, .access = PL1_RW,
+ .type = ARM_CP_NO_RAW,
+ .readfn = arm_cp_read_zero, .writefn = omap_wfi_write, },
+ /*
+ * TODO: Peripheral port remap register:
+ * On OMAP2 mcr p15, 0, rn, c15, c2, 4 sets up the interrupt controller
+ * base address at $rn & ~0xfff and map size of 0x200 << ($rn & 0xfff),
+ * when MMU is off.
+ */
+ { .name = "OMAP_CACHEMAINT", .cp = 15, .crn = 7, .crm = CP_ANY,
+ .opc1 = 0, .opc2 = CP_ANY, .access = PL1_W,
+ .type = ARM_CP_OVERRIDE | ARM_CP_NO_RAW,
+ .writefn = omap_cachemaint_write },
+ { .name = "C9", .cp = 15, .crn = 9,
+ .crm = CP_ANY, .opc1 = CP_ANY, .opc2 = CP_ANY, .access = PL1_RW,
+ .type = ARM_CP_CONST | ARM_CP_OVERRIDE, .resetvalue = 0 },
+};
+
+void define_omap_cp_regs(ARMCPU *cpu)
+{
+ define_arm_cp_regs(cpu, omap_cp_reginfo);
+}
diff --git a/target/arm/helper.c b/target/arm/helper.c
index 7389f2988c..3ac88078aa 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -2900,83 +2900,6 @@ static const ARMCPRegInfo ttbcr2_reginfo = {
},
};
-static void omap_ticonfig_write(CPUARMState *env, const ARMCPRegInfo *ri,
- uint64_t value)
-{
- env->cp15.c15_ticonfig = value & 0xe7;
- /* The OS_TYPE bit in this register changes the reported CPUID! */
- env->cp15.c0_cpuid = (value & (1 << 5)) ?
- ARM_CPUID_TI915T : ARM_CPUID_TI925T;
-}
-
-static void omap_threadid_write(CPUARMState *env, const ARMCPRegInfo *ri,
- uint64_t value)
-{
- env->cp15.c15_threadid = value & 0xffff;
-}
-
-static void omap_wfi_write(CPUARMState *env, const ARMCPRegInfo *ri,
- uint64_t value)
-{
-#ifdef CONFIG_USER_ONLY
- g_assert_not_reached();
-#else
- /* Wait-for-interrupt (deprecated) */
- cpu_interrupt(env_cpu(env), CPU_INTERRUPT_HALT);
-#endif
-}
-
-static void omap_cachemaint_write(CPUARMState *env, const ARMCPRegInfo *ri,
- uint64_t value)
-{
- /*
- * On OMAP there are registers indicating the max/min index of dcache lines
- * containing a dirty line; cache flush operations have to reset these.
- */
- env->cp15.c15_i_max = 0x000;
- env->cp15.c15_i_min = 0xff0;
-}
-
-static const ARMCPRegInfo omap_cp_reginfo[] = {
- { .name = "DFSR", .cp = 15, .crn = 5, .crm = CP_ANY,
- .opc1 = CP_ANY, .opc2 = CP_ANY, .access = PL1_RW, .type = ARM_CP_OVERRIDE,
- .fieldoffset = offsetoflow32(CPUARMState, cp15.esr_el[1]),
- .resetvalue = 0, },
- { .name = "", .cp = 15, .crn = 15, .crm = 0, .opc1 = 0, .opc2 = 0,
- .access = PL1_RW, .type = ARM_CP_NOP },
- { .name = "TICONFIG", .cp = 15, .crn = 15, .crm = 1, .opc1 = 0, .opc2 = 0,
- .access = PL1_RW,
- .fieldoffset = offsetof(CPUARMState, cp15.c15_ticonfig), .resetvalue = 0,
- .writefn = omap_ticonfig_write },
- { .name = "IMAX", .cp = 15, .crn = 15, .crm = 2, .opc1 = 0, .opc2 = 0,
- .access = PL1_RW,
- .fieldoffset = offsetof(CPUARMState, cp15.c15_i_max), .resetvalue = 0, },
- { .name = "IMIN", .cp = 15, .crn = 15, .crm = 3, .opc1 = 0, .opc2 = 0,
- .access = PL1_RW, .resetvalue = 0xff0,
- .fieldoffset = offsetof(CPUARMState, cp15.c15_i_min) },
- { .name = "THREADID", .cp = 15, .crn = 15, .crm = 4, .opc1 = 0, .opc2 = 0,
- .access = PL1_RW,
- .fieldoffset = offsetof(CPUARMState, cp15.c15_threadid), .resetvalue = 0,
- .writefn = omap_threadid_write },
- { .name = "TI925T_STATUS", .cp = 15, .crn = 15,
- .crm = 8, .opc1 = 0, .opc2 = 0, .access = PL1_RW,
- .type = ARM_CP_NO_RAW,
- .readfn = arm_cp_read_zero, .writefn = omap_wfi_write, },
- /*
- * TODO: Peripheral port remap register:
- * On OMAP2 mcr p15, 0, rn, c15, c2, 4 sets up the interrupt controller
- * base address at $rn & ~0xfff and map size of 0x200 << ($rn & 0xfff),
- * when MMU is off.
- */
- { .name = "OMAP_CACHEMAINT", .cp = 15, .crn = 7, .crm = CP_ANY,
- .opc1 = 0, .opc2 = CP_ANY, .access = PL1_W,
- .type = ARM_CP_OVERRIDE | ARM_CP_NO_RAW,
- .writefn = omap_cachemaint_write },
- { .name = "C9", .cp = 15, .crn = 9,
- .crm = CP_ANY, .opc1 = CP_ANY, .opc2 = CP_ANY, .access = PL1_RW,
- .type = ARM_CP_CONST | ARM_CP_OVERRIDE, .resetvalue = 0 },
-};
-
static const ARMCPRegInfo dummy_c15_cp_reginfo[] = {
/*
* RAZ/WI the whole crn=15 space, when we don't have a more specific
@@ -7043,7 +6966,7 @@ void register_cp_regs_for_features(ARMCPU *cpu)
define_arm_cp_regs(cpu, cache_block_ops_cp_reginfo);
}
if (arm_feature(env, ARM_FEATURE_OMAPCP)) {
- define_arm_cp_regs(cpu, omap_cp_reginfo);
+ define_omap_cp_regs(cpu);
}
if (arm_feature(env, ARM_FEATURE_STRONGARM)) {
define_arm_cp_regs(cpu, strongarm_cp_reginfo);
diff --git a/target/arm/internals.h b/target/arm/internals.h
index 85980f0e69..6b16f1a560 100644
--- a/target/arm/internals.h
+++ b/target/arm/internals.h
@@ -1799,6 +1799,8 @@ void define_at_insn_regs(ARMCPU *cpu);
void define_pm_cpregs(ARMCPU *cpu);
/* Add the cpreg definitions for GCS cpregs */
void define_gcs_cpregs(ARMCPU *cpu);
+/* Add the cpreg definitions for OMAP CP15 regs */
+void define_omap_cp_regs(ARMCPU *cpu);
/* Effective value of MDCR_EL2 */
static inline uint64_t arm_mdcr_el2_eff(CPUARMState *env)
diff --git a/target/arm/meson.build b/target/arm/meson.build
index 6e0e504a40..192ac7c31e 100644
--- a/target/arm/meson.build
+++ b/target/arm/meson.build
@@ -33,6 +33,7 @@ arm_user_ss.add(files(
'helper.c',
'vfp_fpscr.c',
'el2-stubs.c',
+ 'cpregs-omap-stub.c',
))
arm_user_ss.add(when: 'CONFIG_ARM_COMPATIBLE_SEMIHOSTING',
if_true: files('common-semi-target.c'))
@@ -48,6 +49,7 @@ arm_common_system_ss.add(files(
'arm-powerctl.c',
'cortex-regs.c',
'cpregs-gcs.c',
+ 'cpregs-omap.c',
'cpregs-pmu.c',
'cpu-irq.c',
'debug_helper.c',
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (8 preceding siblings ...)
2026-04-23 10:01 ` [PULL 09/59] target/arm: Move OMAP CP15 register definitions to cpregs-omap.c Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 12:35 ` Philippe Mathieu-Daudé
2026-04-23 10:01 ` [PULL 11/59] target/arm/translate.h: remove tcg-op.h include Peter Maydell
` (50 subsequent siblings)
60 siblings, 1 reply; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
This new header defines a new type for target virtual address,
independent from TCGv and is parameterized by a new define
TCG_ADDRESS_BITS (name was suggested by Paolo instead of
TARGET_ADDRESS_BITS).
By default, tcg-op.h include set this define to TARGET_LONG_BITS, but
it's also possible to include only tcg-op-common.h and tcg-op-mem.h and
set TCG_ADDRESS_BITS manually, which is what next commits will do.
We preserve existing MIT license when extracting this new header.
Implemented from:
https://lore.kernel.org/qemu-devel/a68321f0-3d54-4909-864c-9793cda05b2a@linaro.org/
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-2-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
include/tcg/tcg-op-mem.h | 126 +++++++++++++++++++++++++++++++++++++++
include/tcg/tcg-op.h | 100 +------------------------------
2 files changed, 129 insertions(+), 97 deletions(-)
create mode 100644 include/tcg/tcg-op-mem.h
diff --git a/include/tcg/tcg-op-mem.h b/include/tcg/tcg-op-mem.h
new file mode 100644
index 0000000000..36931d1dd5
--- /dev/null
+++ b/include/tcg/tcg-op-mem.h
@@ -0,0 +1,126 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Target dependent memory related functions.
+ *
+ * Copyright (c) 2008 Fabrice Bellard
+ */
+
+#ifndef TCG_TCG_OP_MEM_H
+#define TCG_TCG_OP_MEM_H
+
+#ifndef TCG_ADDRESS_BITS
+#error TCG_ADDRESS_BITS must be defined
+#endif
+
+#if TCG_ADDRESS_BITS == 32
+typedef TCGv_i32 TCGv_va;
+#define TCG_TYPE_VA TCG_TYPE_I32
+#define tcgv_va_temp tcgv_i32_temp
+#define tcgv_va_temp_new tcg_temp_new_i32
+#elif TCG_ADDRESS_BITS == 64
+typedef TCGv_i64 TCGv_va;
+#define TCG_TYPE_VA TCG_TYPE_I64
+#define tcgv_va_temp tcgv_i64_temp
+#define tcgv_va_temp_new tcg_temp_new_i64
+#else
+#error
+#endif
+
+static inline void
+tcg_gen_qemu_ld_i32(TCGv_i32 v, TCGv_va a, TCGArg i, MemOp m)
+{
+ tcg_gen_qemu_ld_i32_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
+}
+
+static inline void
+tcg_gen_qemu_st_i32(TCGv_i32 v, TCGv_va a, TCGArg i, MemOp m)
+{
+ tcg_gen_qemu_st_i32_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
+}
+
+static inline void
+tcg_gen_qemu_ld_i64(TCGv_i64 v, TCGv_va a, TCGArg i, MemOp m)
+{
+ tcg_gen_qemu_ld_i64_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
+}
+
+static inline void
+tcg_gen_qemu_st_i64(TCGv_i64 v, TCGv_va a, TCGArg i, MemOp m)
+{
+ tcg_gen_qemu_st_i64_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
+}
+
+static inline void
+tcg_gen_qemu_ld_i128(TCGv_i128 v, TCGv_va a, TCGArg i, MemOp m)
+{
+ tcg_gen_qemu_ld_i128_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
+}
+
+static inline void
+tcg_gen_qemu_st_i128(TCGv_i128 v, TCGv_va a, TCGArg i, MemOp m)
+{
+ tcg_gen_qemu_st_i128_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
+}
+
+#define DEF_ATOMIC2(N, S) \
+ static inline void N##_##S(TCGv_##S r, TCGv_va a, TCGv_##S v, \
+ TCGArg i, MemOp m) \
+ { N##_##S##_chk(r, tcgv_va_temp(a), v, i, m, TCG_TYPE_VA); }
+
+#define DEF_ATOMIC3(N, S) \
+ static inline void N##_##S(TCGv_##S r, TCGv_va a, TCGv_##S o, \
+ TCGv_##S n, TCGArg i, MemOp m) \
+ { N##_##S##_chk(r, tcgv_va_temp(a), o, n, i, m, TCG_TYPE_VA); }
+
+DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i32)
+DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i64)
+DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i128)
+
+DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i32)
+DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i64)
+DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i128)
+
+DEF_ATOMIC2(tcg_gen_atomic_xchg, i32)
+DEF_ATOMIC2(tcg_gen_atomic_xchg, i64)
+DEF_ATOMIC2(tcg_gen_atomic_xchg, i128)
+
+DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i128)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i128)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umin, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umin, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smax, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smax, i64)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umax, i32)
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umax, i64)
+
+DEF_ATOMIC2(tcg_gen_atomic_add_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_add_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_and_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_and_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_or_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_or_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_xor_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_xor_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_smin_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_smin_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_umin_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_umin_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_smax_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_smax_fetch, i64)
+DEF_ATOMIC2(tcg_gen_atomic_umax_fetch, i32)
+DEF_ATOMIC2(tcg_gen_atomic_umax_fetch, i64)
+
+#undef DEF_ATOMIC2
+#undef DEF_ATOMIC3
+
+#endif /* TCG_TCG_OP_MEM_H */
diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h
index 7024be938e..96a5af1a29 100644
--- a/include/tcg/tcg-op.h
+++ b/include/tcg/tcg-op.h
@@ -16,6 +16,9 @@
#error must include QEMU headers
#endif
+#define TCG_ADDRESS_BITS TARGET_LONG_BITS
+#include "tcg/tcg-op-mem.h"
+
#if TARGET_LONG_BITS == 32
# define TCG_TYPE_TL TCG_TYPE_I32
#elif TARGET_LONG_BITS == 64
@@ -46,103 +49,6 @@ typedef TCGv_i64 TCGv;
#error Unhandled TARGET_LONG_BITS value
#endif
-static inline void
-tcg_gen_qemu_ld_i32(TCGv_i32 v, TCGv a, TCGArg i, MemOp m)
-{
- tcg_gen_qemu_ld_i32_chk(v, tcgv_tl_temp(a), i, m, TCG_TYPE_TL);
-}
-
-static inline void
-tcg_gen_qemu_st_i32(TCGv_i32 v, TCGv a, TCGArg i, MemOp m)
-{
- tcg_gen_qemu_st_i32_chk(v, tcgv_tl_temp(a), i, m, TCG_TYPE_TL);
-}
-
-static inline void
-tcg_gen_qemu_ld_i64(TCGv_i64 v, TCGv a, TCGArg i, MemOp m)
-{
- tcg_gen_qemu_ld_i64_chk(v, tcgv_tl_temp(a), i, m, TCG_TYPE_TL);
-}
-
-static inline void
-tcg_gen_qemu_st_i64(TCGv_i64 v, TCGv a, TCGArg i, MemOp m)
-{
- tcg_gen_qemu_st_i64_chk(v, tcgv_tl_temp(a), i, m, TCG_TYPE_TL);
-}
-
-static inline void
-tcg_gen_qemu_ld_i128(TCGv_i128 v, TCGv a, TCGArg i, MemOp m)
-{
- tcg_gen_qemu_ld_i128_chk(v, tcgv_tl_temp(a), i, m, TCG_TYPE_TL);
-}
-
-static inline void
-tcg_gen_qemu_st_i128(TCGv_i128 v, TCGv a, TCGArg i, MemOp m)
-{
- tcg_gen_qemu_st_i128_chk(v, tcgv_tl_temp(a), i, m, TCG_TYPE_TL);
-}
-
-#define DEF_ATOMIC2(N, S) \
- static inline void N##_##S(TCGv_##S r, TCGv a, TCGv_##S v, \
- TCGArg i, MemOp m) \
- { N##_##S##_chk(r, tcgv_tl_temp(a), v, i, m, TCG_TYPE_TL); }
-
-#define DEF_ATOMIC3(N, S) \
- static inline void N##_##S(TCGv_##S r, TCGv a, TCGv_##S o, \
- TCGv_##S n, TCGArg i, MemOp m) \
- { N##_##S##_chk(r, tcgv_tl_temp(a), o, n, i, m, TCG_TYPE_TL); }
-
-DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i32)
-DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i64)
-DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i128)
-
-DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i32)
-DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i64)
-DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i128)
-
-DEF_ATOMIC2(tcg_gen_atomic_xchg, i32)
-DEF_ATOMIC2(tcg_gen_atomic_xchg, i64)
-DEF_ATOMIC2(tcg_gen_atomic_xchg, i128)
-
-DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i128)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i128)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_umin, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_umin, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_smax, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_smax, i64)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_umax, i32)
-DEF_ATOMIC2(tcg_gen_atomic_fetch_umax, i64)
-
-DEF_ATOMIC2(tcg_gen_atomic_add_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_add_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_and_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_and_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_or_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_or_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_xor_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_xor_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_smin_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_smin_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_umin_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_umin_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_smax_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_smax_fetch, i64)
-DEF_ATOMIC2(tcg_gen_atomic_umax_fetch, i32)
-DEF_ATOMIC2(tcg_gen_atomic_umax_fetch, i64)
-
-#undef DEF_ATOMIC2
-#undef DEF_ATOMIC3
-
#if TARGET_LONG_BITS == 64
#define tcg_gen_movi_tl tcg_gen_movi_i64
#define tcg_gen_mov_tl tcg_gen_mov_i64
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* Re: [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h
2026-04-23 10:01 ` [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h Peter Maydell
@ 2026-04-23 12:35 ` Philippe Mathieu-Daudé
2026-04-23 12:52 ` Peter Maydell
0 siblings, 1 reply; 68+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-04-23 12:35 UTC (permalink / raw)
To: Peter Maydell, qemu-devel
On 23/4/26 12:01, Peter Maydell wrote:
> From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>
> This new header defines a new type for target virtual address,
> independent from TCGv and is parameterized by a new define
> TCG_ADDRESS_BITS (name was suggested by Paolo instead of
> TARGET_ADDRESS_BITS).
>
> By default, tcg-op.h include set this define to TARGET_LONG_BITS, but
> it's also possible to include only tcg-op-common.h and tcg-op-mem.h and
> set TCG_ADDRESS_BITS manually, which is what next commits will do.
>
> We preserve existing MIT license when extracting this new header.
>
> Implemented from:
> https://lore.kernel.org/qemu-devel/a68321f0-3d54-4909-864c-9793cda05b2a@linaro.org/
>
> Suggested-by: Richard Henderson <richard.henderson@linaro.org>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Message-id: 20260407222208.271838-2-pierrick.bouvier@linaro.org
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> include/tcg/tcg-op-mem.h | 126 +++++++++++++++++++++++++++++++++++++++
> include/tcg/tcg-op.h | 100 +------------------------------
> 2 files changed, 129 insertions(+), 97 deletions(-)
> create mode 100644 include/tcg/tcg-op-mem.h
>
> diff --git a/include/tcg/tcg-op-mem.h b/include/tcg/tcg-op-mem.h
> new file mode 100644
> index 0000000000..36931d1dd5
> --- /dev/null
> +++ b/include/tcg/tcg-op-mem.h
> @@ -0,0 +1,126 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Target dependent memory related functions.
> + *
> + * Copyright (c) 2008 Fabrice Bellard
> + */
> +
> +#ifndef TCG_TCG_OP_MEM_H
> +#define TCG_TCG_OP_MEM_H
> +
> +#ifndef TCG_ADDRESS_BITS
> +#error TCG_ADDRESS_BITS must be defined
> +#endif
> +
> +#if TCG_ADDRESS_BITS == 32
> +typedef TCGv_i32 TCGv_va;
> +#define TCG_TYPE_VA TCG_TYPE_I32
> +#define tcgv_va_temp tcgv_i32_temp
> +#define tcgv_va_temp_new tcg_temp_new_i32
> +#elif TCG_ADDRESS_BITS == 64
> +typedef TCGv_i64 TCGv_va;
> +#define TCG_TYPE_VA TCG_TYPE_I64
> +#define tcgv_va_temp tcgv_i64_temp
> +#define tcgv_va_temp_new tcg_temp_new_i64
> +#else
> +#error
> +#endif
> +
> +static inline void
> +tcg_gen_qemu_ld_i32(TCGv_i32 v, TCGv_va a, TCGArg i, MemOp m)
> +{
> + tcg_gen_qemu_ld_i32_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
> +}
Missing:
-- >8 --
diff --git a/include/tcg/tcg-op-mem.h b/include/tcg/tcg-op-mem.h
index 36931d1dd57..ea35a02fb40 100644
--- a/include/tcg/tcg-op-mem.h
+++ b/include/tcg/tcg-op-mem.h
@@ -12,6 +12,8 @@
#error TCG_ADDRESS_BITS must be defined
#endif
+#include "tcg/tcg-op-common.h"
+
#if TCG_ADDRESS_BITS == 32
typedef TCGv_i32 TCGv_va;
#define TCG_TYPE_VA TCG_TYPE_I32
---
"tcg-op-mem.h" uses methods declared in "tcg/tcg-op-common.h":
include/tcg/tcg-op-mem.h:34:5: error: call to undeclared function
'tcg_gen_qemu_ld_i32_chk'
34 | tcg_gen_qemu_ld_i32_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
| ^
$ git grep -w tcg_gen_qemu_ld_i32_chk
include/tcg/tcg-op-common.h:328:void
tcg_gen_qemu_ld_i32_chk(TCGv_i32, TCGTemp *, TCGArg, MemOp, TCGType);
include/tcg/tcg-op-mem.h:35: tcg_gen_qemu_ld_i32_chk(v,
tcgv_va_temp(a), i, m, TCG_TYPE_VA);
tcg/tcg-op-ldst.c:286:void tcg_gen_qemu_ld_i32_chk(TCGv_i32 val,
TCGTemp *addr, TCGArg idx,
^ permalink raw reply related [flat|nested] 68+ messages in thread* Re: [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h
2026-04-23 12:35 ` Philippe Mathieu-Daudé
@ 2026-04-23 12:52 ` Peter Maydell
2026-04-23 13:25 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 12:52 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel
On Thu, 23 Apr 2026 at 13:35, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> On 23/4/26 12:01, Peter Maydell wrote:
> > From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> >
> > This new header defines a new type for target virtual address,
> > independent from TCGv and is parameterized by a new define
> > TCG_ADDRESS_BITS (name was suggested by Paolo instead of
> > TARGET_ADDRESS_BITS).
> >
> > By default, tcg-op.h include set this define to TARGET_LONG_BITS, but
> > it's also possible to include only tcg-op-common.h and tcg-op-mem.h and
> > set TCG_ADDRESS_BITS manually, which is what next commits will do.
>
> Missing:
>
> -- >8 --
> diff --git a/include/tcg/tcg-op-mem.h b/include/tcg/tcg-op-mem.h
> index 36931d1dd57..ea35a02fb40 100644
> --- a/include/tcg/tcg-op-mem.h
> +++ b/include/tcg/tcg-op-mem.h
> @@ -12,6 +12,8 @@
> #error TCG_ADDRESS_BITS must be defined
> #endif
>
> +#include "tcg/tcg-op-common.h"
> +
> #if TCG_ADDRESS_BITS == 32
> typedef TCGv_i32 TCGv_va;
> #define TCG_TYPE_VA TCG_TYPE_I32
> ---
>
> "tcg-op-mem.h" uses methods declared in "tcg/tcg-op-common.h"
Yes, but all two of the places that include tcg-op-mem.h
include tcg-op-common.h (directly or indirectly) first.
I agree that it would be nicer for the header to explicitly
include what it uses, but do we really need to mess around
re-rolling the pullreq just for this? I would rather not...
-- PMM
^ permalink raw reply [flat|nested] 68+ messages in thread
* Re: [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h
2026-04-23 12:52 ` Peter Maydell
@ 2026-04-23 13:25 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 68+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-04-23 13:25 UTC (permalink / raw)
To: Peter Maydell, Richard Henderson; +Cc: qemu-devel
On 23/4/26 14:52, Peter Maydell wrote:
> On Thu, 23 Apr 2026 at 13:35, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>
>> On 23/4/26 12:01, Peter Maydell wrote:
>>> From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>>>
>>> This new header defines a new type for target virtual address,
>>> independent from TCGv and is parameterized by a new define
>>> TCG_ADDRESS_BITS (name was suggested by Paolo instead of
>>> TARGET_ADDRESS_BITS).
>>>
>>> By default, tcg-op.h include set this define to TARGET_LONG_BITS, but
>>> it's also possible to include only tcg-op-common.h and tcg-op-mem.h and
>>> set TCG_ADDRESS_BITS manually, which is what next commits will do.
>
>>
>> Missing:
>>
>> -- >8 --
>> diff --git a/include/tcg/tcg-op-mem.h b/include/tcg/tcg-op-mem.h
>> index 36931d1dd57..ea35a02fb40 100644
>> --- a/include/tcg/tcg-op-mem.h
>> +++ b/include/tcg/tcg-op-mem.h
>> @@ -12,6 +12,8 @@
>> #error TCG_ADDRESS_BITS must be defined
>> #endif
>>
>> +#include "tcg/tcg-op-common.h"
>> +
>> #if TCG_ADDRESS_BITS == 32
>> typedef TCGv_i32 TCGv_va;
>> #define TCG_TYPE_VA TCG_TYPE_I32
>> ---
>>
>> "tcg-op-mem.h" uses methods declared in "tcg/tcg-op-common.h"
>
> Yes, but all two of the places that include tcg-op-mem.h
> include tcg-op-common.h (directly or indirectly) first.
>
> I agree that it would be nicer for the header to explicitly
> include what it uses, but do we really need to mess around
> re-rolling the pullreq just for this? I would rather not...
Right, there is no build issue as of this commit, no objection
on my side!
^ permalink raw reply [flat|nested] 68+ messages in thread
* [PULL 11/59] target/arm/translate.h: remove tcg-op.h include
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (9 preceding siblings ...)
2026-04-23 10:01 ` [PULL 10/59] include/tcg/tcg-op: extract memory operations to tcg-op-mem.h Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 12/59] target/arm/tcg/translate.h: remove tcg-op-gvec.h include Peter Maydell
` (49 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Include tcg-op-common.h instead, and include target specific tcg-op.h in
files needing it. This intermediate step allows to clean up every file
(TCGv, tcg_gen.*_tl.*) in separate commits.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-3-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate-a64.c | 1 +
target/arm/tcg/translate-sme.c | 1 +
target/arm/tcg/translate-sve.c | 1 +
target/arm/tcg/translate.c | 1 +
target/arm/tcg/translate.h | 2 +-
5 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 5d261a5e32..35ad7530c4 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -23,6 +23,7 @@
#include "helper-sve.h"
#include "translate.h"
#include "translate-a64.h"
+#include "tcg/tcg-op.h"
#include "qemu/log.h"
#include "arm_ldst.h"
#include "semihosting/semihost.h"
diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c
index 7d25ac5a51..08254b088e 100644
--- a/target/arm/tcg/translate-sme.c
+++ b/target/arm/tcg/translate-sme.c
@@ -23,6 +23,7 @@
#include "helper-sve.h"
#include "translate.h"
#include "translate-a64.h"
+#include "tcg/tcg-op.h"
/*
* Include the generated decoder.
diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c
index 5bace3fda1..aa7d72a35e 100644
--- a/target/arm/tcg/translate-sve.c
+++ b/target/arm/tcg/translate-sve.c
@@ -23,6 +23,7 @@
#include "helper-sve.h"
#include "translate.h"
#include "translate-a64.h"
+#include "tcg/tcg-op.h"
#include "fpu/softfloat.h"
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index f9d1b8897d..56ef1e0eb5 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -22,6 +22,7 @@
#include "translate.h"
#include "translate-a32.h"
+#include "tcg/tcg-op.h"
#include "qemu/log.h"
#include "arm_ldst.h"
#include "semihosting/semihost.h"
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
index 3e3094a463..6d52606f9b 100644
--- a/target/arm/tcg/translate.h
+++ b/target/arm/tcg/translate.h
@@ -2,7 +2,7 @@
#define TARGET_ARM_TRANSLATE_H
#include "cpu.h"
-#include "tcg/tcg-op.h"
+#include "tcg/tcg-op-common.h"
#include "tcg/tcg-op-gvec.h"
#include "exec/translator.h"
#include "exec/translation-block.h"
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 12/59] target/arm/tcg/translate.h: remove tcg-op-gvec.h include
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (10 preceding siblings ...)
2026-04-23 10:01 ` [PULL 11/59] target/arm/translate.h: remove tcg-op.h include Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 13/59] target/arm/tcg/translate.h: remove TARGET_AARCH64 Peter Maydell
` (48 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Include tcg-op-gvec-common.h instead.
No target/arm code rely on target specifics for gvec ops.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-4-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
index 6d52606f9b..e28eac54af 100644
--- a/target/arm/tcg/translate.h
+++ b/target/arm/tcg/translate.h
@@ -3,7 +3,7 @@
#include "cpu.h"
#include "tcg/tcg-op-common.h"
-#include "tcg/tcg-op-gvec.h"
+#include "tcg/tcg-op-gvec-common.h"
#include "exec/translator.h"
#include "exec/translation-block.h"
#include "helper.h"
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 13/59] target/arm/tcg/translate.h: remove TARGET_AARCH64
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (11 preceding siblings ...)
2026-04-23 10:01 ` [PULL 12/59] target/arm/tcg/translate.h: remove tcg-op-gvec.h include Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 14/59] target/arm/tcg/translate-vfp.c: make compilation unit common Peter Maydell
` (47 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
We need to stub a64_translate_init and gen_a64_update_pc.
At this point, we don't need to do anything for aarch64_translator_ops
since it's just an external symbol.
We can now include target/arm/tcg/translate.h from common code, since
all target specific bits have been removed, or can be specialized with
specific defines.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-5-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 1 +
target/arm/tcg/stubs32.c | 17 +++++++++++++++++
target/arm/tcg/translate.h | 10 ----------
3 files changed, 18 insertions(+), 10 deletions(-)
create mode 100644 target/arm/tcg/stubs32.c
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 5f59156055..3e96c77df7 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -21,6 +21,7 @@ gen_a32 = [
arm_ss.add(gen_a32)
arm_ss.add(when: 'TARGET_AARCH64', if_true: gen_a64)
+arm_ss.add(when: 'TARGET_AARCH64', if_false: files('stubs32.c'))
arm_ss.add(files(
'cpu32.c',
diff --git a/target/arm/tcg/stubs32.c b/target/arm/tcg/stubs32.c
new file mode 100644
index 0000000000..c5a0bc61f4
--- /dev/null
+++ b/target/arm/tcg/stubs32.c
@@ -0,0 +1,17 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "target/arm/tcg/translate.h"
+
+
+void gen_a64_update_pc(DisasContext *s, int64_t diff)
+{
+ g_assert_not_reached();
+}
+
+void a64_translate_init(void)
+{
+ /* Don't initialize for 32 bits. Call site will be fixed later. */
+}
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
index e28eac54af..77fdc5f3a1 100644
--- a/target/arm/tcg/translate.h
+++ b/target/arm/tcg/translate.h
@@ -357,19 +357,9 @@ static inline int curr_insn_len(DisasContext *s)
/* CPU state was modified dynamically; no need to exit, but do not chain. */
#define DISAS_UPDATE_NOCHAIN DISAS_TARGET_10
-#ifdef TARGET_AARCH64
void a64_translate_init(void);
void gen_a64_update_pc(DisasContext *s, int64_t diff);
extern const TranslatorOps aarch64_translator_ops;
-#else
-static inline void a64_translate_init(void)
-{
-}
-
-static inline void gen_a64_update_pc(DisasContext *s, int64_t diff)
-{
-}
-#endif
void arm_test_cc(DisasCompare *cmp, int cc);
void arm_jump_cc(DisasCompare *cmp, TCGLabel *label);
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 14/59] target/arm/tcg/translate-vfp.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (12 preceding siblings ...)
2026-04-23 10:01 ` [PULL 13/59] target/arm/tcg/translate.h: remove TARGET_AARCH64 Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 15/59] target/arm/tcg/translate-neon.c: " Peter Maydell
` (46 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Generated decode files must be duplicated between user and system, as
they are generated in private folders per libs, and can't be included
otherwise, as meson does not give control on output folder.
Indeed, meson generator is a different approach than custom_target, and
this is a limitation by design.
They were already duplicated between arch variants anyway, so nothing
new here. They will now be compiled once for system binaries, and still
per target for user binaries.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Tested-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-6-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 3e96c77df7..5f33ecd76e 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -5,12 +5,15 @@ gen_a64 = [
decodetree.process('sme-fa64.decode', extra_args: '--static-decode=disas_sme_fa64'),
]
+vfp_d = [
+ decodetree.process('vfp.decode', extra_args: '--decode=disas_vfp'),
+ decodetree.process('vfp-uncond.decode', extra_args: '--decode=disas_vfp_uncond'),
+]
+
gen_a32 = [
decodetree.process('neon-shared.decode', extra_args: '--decode=disas_neon_shared'),
decodetree.process('neon-dp.decode', extra_args: '--decode=disas_neon_dp'),
decodetree.process('neon-ls.decode', extra_args: '--decode=disas_neon_ls'),
- decodetree.process('vfp.decode', extra_args: '--decode=disas_vfp'),
- decodetree.process('vfp-uncond.decode', extra_args: '--decode=disas_vfp_uncond'),
decodetree.process('m-nocp.decode', extra_args: '--decode=disas_m_nocp'),
decodetree.process('mve.decode', extra_args: '--decode=disas_mve'),
decodetree.process('a32.decode', extra_args: '--static-decode=disas_a32'),
@@ -30,7 +33,6 @@ arm_ss.add(files(
'translate-m-nocp.c',
'translate-mve.c',
'translate-neon.c',
- 'translate-vfp.c',
'm_helper.c',
'mve_helper.c',
'op_helper.c',
@@ -60,7 +62,9 @@ arm_common_ss.add(files(
'crypto_helper.c',
))
-arm_common_system_ss.add(files(
+arm_common_system_ss.add(
+ vfp_d,
+ files(
'cpregs-at.c',
'debug.c',
'hflags.c',
@@ -68,14 +72,18 @@ arm_common_system_ss.add(files(
'psci.c',
'tlb_helper.c',
'tlb-insns.c',
+ 'translate-vfp.c',
'vec_helper.c',
'vfp_helper.c',
))
-arm_user_ss.add(files(
+arm_user_ss.add(
+ vfp_d,
+ files(
'debug.c',
'hflags.c',
'neon_helper.c',
'tlb_helper.c',
+ 'translate-vfp.c',
'vec_helper.c',
'vfp_helper.c',
))
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 15/59] target/arm/tcg/translate-neon.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (13 preceding siblings ...)
2026-04-23 10:01 ` [PULL 14/59] target/arm/tcg/translate-vfp.c: make compilation unit common Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 16/59] target/arm/tcg/translate-mve.c: " Peter Maydell
` (45 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-7-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 5f33ecd76e..8d9112f6da 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -10,10 +10,13 @@ vfp_d = [
decodetree.process('vfp-uncond.decode', extra_args: '--decode=disas_vfp_uncond'),
]
-gen_a32 = [
+neon_d = [
decodetree.process('neon-shared.decode', extra_args: '--decode=disas_neon_shared'),
decodetree.process('neon-dp.decode', extra_args: '--decode=disas_neon_dp'),
decodetree.process('neon-ls.decode', extra_args: '--decode=disas_neon_ls'),
+]
+
+gen_a32 = [
decodetree.process('m-nocp.decode', extra_args: '--decode=disas_m_nocp'),
decodetree.process('mve.decode', extra_args: '--decode=disas_mve'),
decodetree.process('a32.decode', extra_args: '--static-decode=disas_a32'),
@@ -32,7 +35,6 @@ arm_ss.add(files(
'translate.c',
'translate-m-nocp.c',
'translate-mve.c',
- 'translate-neon.c',
'm_helper.c',
'mve_helper.c',
'op_helper.c',
@@ -63,6 +65,7 @@ arm_common_ss.add(files(
))
arm_common_system_ss.add(
+ neon_d,
vfp_d,
files(
'cpregs-at.c',
@@ -72,17 +75,20 @@ arm_common_system_ss.add(
'psci.c',
'tlb_helper.c',
'tlb-insns.c',
+ 'translate-neon.c',
'translate-vfp.c',
'vec_helper.c',
'vfp_helper.c',
))
arm_user_ss.add(
+ neon_d,
vfp_d,
files(
'debug.c',
'hflags.c',
'neon_helper.c',
'tlb_helper.c',
+ 'translate-neon.c',
'translate-vfp.c',
'vec_helper.c',
'vfp_helper.c',
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 16/59] target/arm/tcg/translate-mve.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (14 preceding siblings ...)
2026-04-23 10:01 ` [PULL 15/59] target/arm/tcg/translate-neon.c: " Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 17/59] target/arm/tcg/translate-m-nocp.c: " Peter Maydell
` (44 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-8-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 8d9112f6da..89c3b47682 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -16,9 +16,10 @@ neon_d = [
decodetree.process('neon-ls.decode', extra_args: '--decode=disas_neon_ls'),
]
+mve_d = decodetree.process('mve.decode', extra_args: '--decode=disas_mve')
+
gen_a32 = [
decodetree.process('m-nocp.decode', extra_args: '--decode=disas_m_nocp'),
- decodetree.process('mve.decode', extra_args: '--decode=disas_mve'),
decodetree.process('a32.decode', extra_args: '--static-decode=disas_a32'),
decodetree.process('a32-uncond.decode', extra_args: '--static-decode=disas_a32_uncond'),
decodetree.process('t32.decode', extra_args: '--static-decode=disas_t32'),
@@ -34,7 +35,6 @@ arm_ss.add(files(
'gengvec.c',
'translate.c',
'translate-m-nocp.c',
- 'translate-mve.c',
'm_helper.c',
'mve_helper.c',
'op_helper.c',
@@ -65,6 +65,7 @@ arm_common_ss.add(files(
))
arm_common_system_ss.add(
+ mve_d,
neon_d,
vfp_d,
files(
@@ -75,12 +76,14 @@ arm_common_system_ss.add(
'psci.c',
'tlb_helper.c',
'tlb-insns.c',
+ 'translate-mve.c',
'translate-neon.c',
'translate-vfp.c',
'vec_helper.c',
'vfp_helper.c',
))
arm_user_ss.add(
+ mve_d,
neon_d,
vfp_d,
files(
@@ -88,6 +91,7 @@ arm_user_ss.add(
'hflags.c',
'neon_helper.c',
'tlb_helper.c',
+ 'translate-mve.c',
'translate-neon.c',
'translate-vfp.c',
'vec_helper.c',
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 17/59] target/arm/tcg/translate-m-nocp.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (15 preceding siblings ...)
2026-04-23 10:01 ` [PULL 16/59] target/arm/tcg/translate-mve.c: " Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 18/59] target/arm/tcg/op_helper.c: " Peter Maydell
` (43 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-9-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 89c3b47682..70beec7a6c 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -18,8 +18,9 @@ neon_d = [
mve_d = decodetree.process('mve.decode', extra_args: '--decode=disas_mve')
+m_nocp_d = decodetree.process('m-nocp.decode', extra_args: '--decode=disas_m_nocp')
+
gen_a32 = [
- decodetree.process('m-nocp.decode', extra_args: '--decode=disas_m_nocp'),
decodetree.process('a32.decode', extra_args: '--static-decode=disas_a32'),
decodetree.process('a32-uncond.decode', extra_args: '--static-decode=disas_a32_uncond'),
decodetree.process('t32.decode', extra_args: '--static-decode=disas_t32'),
@@ -34,7 +35,6 @@ arm_ss.add(files(
'cpu32.c',
'gengvec.c',
'translate.c',
- 'translate-m-nocp.c',
'm_helper.c',
'mve_helper.c',
'op_helper.c',
@@ -65,6 +65,7 @@ arm_common_ss.add(files(
))
arm_common_system_ss.add(
+ m_nocp_d,
mve_d,
neon_d,
vfp_d,
@@ -76,6 +77,7 @@ arm_common_system_ss.add(
'psci.c',
'tlb_helper.c',
'tlb-insns.c',
+ 'translate-m-nocp.c',
'translate-mve.c',
'translate-neon.c',
'translate-vfp.c',
@@ -83,6 +85,7 @@ arm_common_system_ss.add(
'vfp_helper.c',
))
arm_user_ss.add(
+ m_nocp_d,
mve_d,
neon_d,
vfp_d,
@@ -91,6 +94,7 @@ arm_user_ss.add(
'hflags.c',
'neon_helper.c',
'tlb_helper.c',
+ 'translate-m-nocp.c',
'translate-mve.c',
'translate-neon.c',
'translate-vfp.c',
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 18/59] target/arm/tcg/op_helper.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (16 preceding siblings ...)
2026-04-23 10:01 ` [PULL 17/59] target/arm/tcg/translate-m-nocp.c: " Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 19/59] target/arm/tcg/gengvec.c: " Peter Maydell
` (42 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Remove unused header accel/tcg/cpu-ldst.h that has target specifics.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-10-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 3 ++-
target/arm/tcg/op_helper.c | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 70beec7a6c..1fa2667058 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -37,7 +37,6 @@ arm_ss.add(files(
'translate.c',
'm_helper.c',
'mve_helper.c',
- 'op_helper.c',
))
arm_ss.add(when: 'TARGET_AARCH64', if_true: files(
@@ -74,6 +73,7 @@ arm_common_system_ss.add(
'debug.c',
'hflags.c',
'neon_helper.c',
+ 'op_helper.c',
'psci.c',
'tlb_helper.c',
'tlb-insns.c',
@@ -93,6 +93,7 @@ arm_user_ss.add(
'debug.c',
'hflags.c',
'neon_helper.c',
+ 'op_helper.c',
'tlb_helper.c',
'translate-m-nocp.c',
'translate-mve.c',
diff --git a/target/arm/tcg/op_helper.c b/target/arm/tcg/op_helper.c
index aa14f15eb6..75ad53ec6c 100644
--- a/target/arm/tcg/op_helper.c
+++ b/target/arm/tcg/op_helper.c
@@ -23,7 +23,6 @@
#include "helper.h"
#include "internals.h"
#include "cpu-features.h"
-#include "accel/tcg/cpu-ldst.h"
#include "accel/tcg/probe.h"
#include "cpregs.h"
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 19/59] target/arm/tcg/gengvec.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (17 preceding siblings ...)
2026-04-23 10:01 ` [PULL 18/59] target/arm/tcg/op_helper.c: " Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 20/59] target/arm/tcg/translate.c: remove MO_TE usage Peter Maydell
` (41 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-11-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 1fa2667058..0740de92c1 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -33,7 +33,6 @@ arm_ss.add(when: 'TARGET_AARCH64', if_false: files('stubs32.c'))
arm_ss.add(files(
'cpu32.c',
- 'gengvec.c',
'translate.c',
'm_helper.c',
'mve_helper.c',
@@ -72,6 +71,7 @@ arm_common_system_ss.add(
'cpregs-at.c',
'debug.c',
'hflags.c',
+ 'gengvec.c',
'neon_helper.c',
'op_helper.c',
'psci.c',
@@ -91,6 +91,7 @@ arm_user_ss.add(
vfp_d,
files(
'debug.c',
+ 'gengvec.c',
'hflags.c',
'neon_helper.c',
'op_helper.c',
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 20/59] target/arm/tcg/translate.c: remove MO_TE usage
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (18 preceding siblings ...)
2026-04-23 10:01 ` [PULL 19/59] target/arm/tcg/gengvec.c: " Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 21/59] target/arm/tcg/translate.c: replace target_ulong with uint32_t Peter Maydell
` (40 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
dc->be_data is already set just above in the same function:
```
dc->be_data = EX_TBFLAG_ANY(tb_flags, BE_DATA) ? MO_BE : MO_LE;
```
Cc: qemu-stable@nongnu.org
Fixes: a729a46b05a ("target/arm: Add wrapper macros for accessing tbflags")
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-12-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index 56ef1e0eb5..4546bbeeef 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -6344,7 +6344,6 @@ static void arm_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
if (arm_feature(env, ARM_FEATURE_M)) {
dc->vfp_enabled = 1;
- dc->be_data = MO_TE;
dc->v7m_handler_mode = EX_TBFLAG_M32(tb_flags, HANDLER);
dc->v8m_secure = EX_TBFLAG_M32(tb_flags, SECURE);
dc->v8m_stackcheck = EX_TBFLAG_M32(tb_flags, STACKCHECK);
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 21/59] target/arm/tcg/translate.c: replace target_ulong with uint32_t
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (19 preceding siblings ...)
2026-04-23 10:01 ` [PULL 20/59] target/arm/tcg/translate.c: remove MO_TE usage Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 22/59] target/arm/tcg/translate.c: extract aarch64_translate_code() Peter Maydell
` (39 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-13-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index 4546bbeeef..204f965799 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -6450,7 +6450,7 @@ static void arm_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
* fields here.
*/
uint32_t condexec_bits;
- target_ulong pc_arg = dc->base.pc_next;
+ uint32_t pc_arg = dc->base.pc_next;
if (tb_cflags(dcbase->tb) & CF_PCREL) {
pc_arg &= ~TARGET_PAGE_MASK;
@@ -6612,7 +6612,7 @@ static void thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
bool is_16bit;
/* TCG op to rewind to if this turns out to be an invalid ECI state */
TCGOp *insn_eci_rewind = NULL;
- target_ulong insn_eci_pc_save = -1;
+ uint32_t insn_eci_pc_save = -1;
/* Misaligned thumb PC is architecturally impossible. */
assert((dc->base.pc_next & 1) == 0);
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 22/59] target/arm/tcg/translate.c: extract aarch64_translate_code()
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (20 preceding siblings ...)
2026-04-23 10:01 ` [PULL 21/59] target/arm/tcg/translate.c: replace target_ulong with uint32_t Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 23/59] tcg/translator: add parameter to translator_loop for current addr type Peter Maydell
` (38 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
This allows to get rid of TARGET_AARCH64, and helps with next patch
which will define at runtime tcg address type, by adding a second entry
point in a different source file.
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-14-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/internals.h | 2 ++
target/arm/tcg/stubs32.c | 7 +++++++
target/arm/tcg/translate-a64.c | 9 +++++++++
target/arm/tcg/translate.c | 19 +++++++++----------
4 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/target/arm/internals.h b/target/arm/internals.h
index 6b16f1a560..af5e9a1acf 100644
--- a/target/arm/internals.h
+++ b/target/arm/internals.h
@@ -381,6 +381,8 @@ void arm_init_cpreg_list(ARMCPU *cpu);
void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu);
void arm_translate_init(void);
+void aarch64_translate_code(CPUState *cs, TranslationBlock *tb,
+ int *max_insns, vaddr pc, void *host_pc);
void arm_translate_code(CPUState *cs, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc);
diff --git a/target/arm/tcg/stubs32.c b/target/arm/tcg/stubs32.c
index c5a0bc61f4..3945dc49e5 100644
--- a/target/arm/tcg/stubs32.c
+++ b/target/arm/tcg/stubs32.c
@@ -3,6 +3,7 @@
*/
#include "qemu/osdep.h"
+#include "target/arm/internals.h"
#include "target/arm/tcg/translate.h"
@@ -15,3 +16,9 @@ void a64_translate_init(void)
{
/* Don't initialize for 32 bits. Call site will be fixed later. */
}
+
+void aarch64_translate_code(CPUState *cs, TranslationBlock *tb,
+ int *max_insns, vaddr pc, void *host_pc)
+{
+ g_assert_not_reached();
+}
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 35ad7530c4..7533a4d01b 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -18,6 +18,7 @@
*/
#include "qemu/osdep.h"
#include "exec/target_page.h"
+#include "exec/translator.h"
#include "helper-a64.h"
#include "helper-sme.h"
#include "helper-sve.h"
@@ -10949,3 +10950,11 @@ const TranslatorOps aarch64_translator_ops = {
.translate_insn = aarch64_tr_translate_insn,
.tb_stop = aarch64_tr_tb_stop,
};
+
+void aarch64_translate_code(CPUState *cpu, TranslationBlock *tb,
+ int *max_insns, vaddr pc, void *host_pc)
+{
+ DisasContext dc = {};
+ translator_loop(cpu, tb, max_insns, pc, host_pc,
+ &aarch64_translator_ops, &dc.base);
+}
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index 204f965799..9ab926b118 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -28,6 +28,7 @@
#include "semihosting/semihost.h"
#include "cpregs.h"
#include "exec/target_page.h"
+#include "exec/translator.h"
#include "helper.h"
#include "helper-mve.h"
@@ -6878,18 +6879,16 @@ static const TranslatorOps thumb_translator_ops = {
void arm_translate_code(CPUState *cpu, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc)
{
- DisasContext dc = { };
- const TranslatorOps *ops = &arm_translator_ops;
CPUARMTBFlags tb_flags = arm_tbflags_from_tb(tb);
- if (EX_TBFLAG_AM32(tb_flags, THUMB)) {
- ops = &thumb_translator_ops;
- }
-#ifdef TARGET_AARCH64
if (EX_TBFLAG_ANY(tb_flags, AARCH64_STATE)) {
- ops = &aarch64_translator_ops;
+ aarch64_translate_code(cpu, tb, max_insns, pc, host_pc);
+ } else {
+ DisasContext dc = { };
+ translator_loop(cpu, tb, max_insns, pc, host_pc,
+ (EX_TBFLAG_AM32(tb_flags, THUMB)
+ ? &thumb_translator_ops
+ : &arm_translator_ops),
+ &dc.base);
}
-#endif
-
- translator_loop(cpu, tb, max_insns, pc, host_pc, ops, &dc.base);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 23/59] tcg/translator: add parameter to translator_loop for current addr type
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (21 preceding siblings ...)
2026-04-23 10:01 ` [PULL 22/59] target/arm/tcg/translate.c: extract aarch64_translate_code() Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 24/59] target/arm/tcg/translate.c: replace TCGv with TCGv_va Peter Maydell
` (37 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
With TCG_ADDRESS_BITS mechanism, it's now possible to specify which
variant every source file is written for. Compared to before, it means
that addr_type will now vary per tb translation, where it was constant
for a given target previously.
Thus, we add new a parameter to translator_loop().
This will allow us to convert targets one by one.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20260407222208.271838-15-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
accel/tcg/translate-all.c | 1 -
accel/tcg/translator.c | 4 +++-
include/exec/translator.h | 4 +++-
target/alpha/translate.c | 3 ++-
target/arm/tcg/translate-a64.c | 3 ++-
target/arm/tcg/translate.c | 2 +-
target/avr/translate.c | 3 ++-
target/hexagon/translate.c | 3 ++-
target/hppa/translate.c | 3 ++-
target/i386/tcg/translate.c | 3 ++-
target/loongarch/tcg/translate.c | 3 ++-
target/m68k/translate.c | 3 ++-
target/microblaze/translate.c | 3 ++-
target/mips/tcg/translate.c | 3 ++-
target/or1k/translate.c | 3 ++-
target/ppc/translate.c | 3 ++-
target/riscv/translate.c | 3 ++-
target/rx/translate.c | 3 ++-
target/s390x/tcg/translate.c | 3 ++-
target/sh4/translate.c | 3 ++-
target/sparc/translate.c | 3 ++-
target/tricore/translate.c | 3 ++-
target/xtensa/translate.c | 3 ++-
23 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index fba4e9dc21..05d9ce512a 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -316,7 +316,6 @@ TranslationBlock *tb_gen_code(CPUState *cpu, TCGTBCPUState s)
}
tcg_ctx->gen_tb = tb;
- tcg_ctx->addr_type = target_long_bits() == 32 ? TCG_TYPE_I32 : TCG_TYPE_I64;
tcg_ctx->guest_mo = cpu->cc->tcg_ops->guest_default_memory_order;
restart_translate:
diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
index f3eddcbb2e..cd7d079fe0 100644
--- a/accel/tcg/translator.c
+++ b/accel/tcg/translator.c
@@ -121,13 +121,15 @@ bool translator_use_goto_tb(DisasContextBase *db, vaddr dest)
void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns,
vaddr pc, void *host_pc, const TranslatorOps *ops,
- DisasContextBase *db)
+ DisasContextBase *db, TCGType addr_type)
{
uint32_t cflags = tb_cflags(tb);
TCGOp *icount_start_insn;
TCGOp *first_insn_start = NULL;
bool plugin_enabled;
+ tcg_ctx->addr_type = addr_type;
+
/* Initialize DisasContext */
db->tb = tb;
db->pc_first = pc;
diff --git a/include/exec/translator.h b/include/exec/translator.h
index 8d343627bd..978dee25ad 100644
--- a/include/exec/translator.h
+++ b/include/exec/translator.h
@@ -20,6 +20,7 @@
#include "exec/memop.h"
#include "exec/vaddr.h"
+#include "tcg/tcg.h"
/**
* DisasJumpType:
@@ -132,6 +133,7 @@ typedef struct TranslatorOps {
* @host_pc: host physical program counter address
* @ops: Target-specific operations.
* @db: Disassembly context.
+ * @addr_type: TCG Type for addresses (TCG_TYPE_VA).
*
* Generic translator loop.
*
@@ -147,7 +149,7 @@ typedef struct TranslatorOps {
*/
void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns,
vaddr pc, void *host_pc, const TranslatorOps *ops,
- DisasContextBase *db);
+ DisasContextBase *db, TCGType addr_type);
/**
* translator_use_goto_tb
diff --git a/target/alpha/translate.c b/target/alpha/translate.c
index 4d22d7d5a4..d2d1467a81 100644
--- a/target/alpha/translate.c
+++ b/target/alpha/translate.c
@@ -2953,5 +2953,6 @@ void alpha_translate_code(CPUState *cpu, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc)
{
DisasContext dc;
- translator_loop(cpu, tb, max_insns, pc, host_pc, &alpha_tr_ops, &dc.base);
+ translator_loop(cpu, tb, max_insns, pc, host_pc, &alpha_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 7533a4d01b..df2cbd66b3 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -10956,5 +10956,6 @@ void aarch64_translate_code(CPUState *cpu, TranslationBlock *tb,
{
DisasContext dc = {};
translator_loop(cpu, tb, max_insns, pc, host_pc,
- &aarch64_translator_ops, &dc.base);
+ &aarch64_translator_ops, &dc.base,
+ TCG_TYPE_VA);
}
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index 9ab926b118..fa4c7907dc 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -6889,6 +6889,6 @@ void arm_translate_code(CPUState *cpu, TranslationBlock *tb,
(EX_TBFLAG_AM32(tb_flags, THUMB)
? &thumb_translator_ops
: &arm_translator_ops),
- &dc.base);
+ &dc.base, TCG_TYPE_VA);
}
}
diff --git a/target/avr/translate.c b/target/avr/translate.c
index 649dd4b011..3c57606097 100644
--- a/target/avr/translate.c
+++ b/target/avr/translate.c
@@ -2802,5 +2802,6 @@ void avr_cpu_translate_code(CPUState *cs, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc)
{
DisasContext dc = { };
- translator_loop(cs, tb, max_insns, pc, host_pc, &avr_tr_ops, &dc.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &avr_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c
index 633401451d..6ae2adabc0 100644
--- a/target/hexagon/translate.c
+++ b/target/hexagon/translate.c
@@ -1077,7 +1077,8 @@ void hexagon_translate_code(CPUState *cs, TranslationBlock *tb,
DisasContext ctx;
translator_loop(cs, tb, max_insns, pc, host_pc,
- &hexagon_tr_ops, &ctx.base);
+ &hexagon_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
#define NAME_LEN 64
diff --git a/target/hppa/translate.c b/target/hppa/translate.c
index 70c20c0037..cf57ec518d 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -4899,5 +4899,6 @@ void hppa_translate_code(CPUState *cs, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc)
{
DisasContext ctx = { };
- translator_loop(cs, tb, max_insns, pc, host_pc, &hppa_tr_ops, &ctx.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &hppa_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index 14210d569f..2115c5cd24 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -3615,5 +3615,6 @@ void x86_translate_code(CPUState *cpu, TranslationBlock *tb,
{
DisasContext dc;
- translator_loop(cpu, tb, max_insns, pc, host_pc, &i386_tr_ops, &dc.base);
+ translator_loop(cpu, tb, max_insns, pc, host_pc, &i386_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
diff --git a/target/loongarch/tcg/translate.c b/target/loongarch/tcg/translate.c
index b9ed13d19c..202b80e047 100644
--- a/target/loongarch/tcg/translate.c
+++ b/target/loongarch/tcg/translate.c
@@ -342,7 +342,8 @@ void loongarch_translate_code(CPUState *cs, TranslationBlock *tb,
DisasContext ctx;
translator_loop(cs, tb, max_insns, pc, host_pc,
- &loongarch_tr_ops, &ctx.base);
+ &loongarch_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
void loongarch_translate_init(void)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index abc1c79f3c..138c89d3e5 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -6126,7 +6126,8 @@ void m68k_translate_code(CPUState *cpu, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc)
{
DisasContext dc;
- translator_loop(cpu, tb, max_insns, pc, host_pc, &m68k_tr_ops, &dc.base);
+ translator_loop(cpu, tb, max_insns, pc, host_pc, &m68k_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
static double floatx80_to_double(CPUM68KState *env, uint16_t high, uint64_t low)
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
index 2af67beece..5e8bb4ed77 100644
--- a/target/microblaze/translate.c
+++ b/target/microblaze/translate.c
@@ -1788,7 +1788,8 @@ void mb_translate_code(CPUState *cpu, TranslationBlock *tb,
int *max_insns, vaddr pc, void *host_pc)
{
DisasContext dc;
- translator_loop(cpu, tb, max_insns, pc, host_pc, &mb_tr_ops, &dc.base);
+ translator_loop(cpu, tb, max_insns, pc, host_pc, &mb_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
void mb_cpu_dump_state(CPUState *cs, FILE *f, int flags)
diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c
index 54849e9ff1..3426acd37b 100644
--- a/target/mips/tcg/translate.c
+++ b/target/mips/tcg/translate.c
@@ -15242,7 +15242,8 @@ void mips_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext ctx;
- translator_loop(cs, tb, max_insns, pc, host_pc, &mips_tr_ops, &ctx.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &mips_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
void mips_tcg_init(void)
diff --git a/target/or1k/translate.c b/target/or1k/translate.c
index de81dc6ef8..eb4485312f 100644
--- a/target/or1k/translate.c
+++ b/target/or1k/translate.c
@@ -1647,7 +1647,8 @@ void openrisc_translate_code(CPUState *cs, TranslationBlock *tb,
DisasContext ctx;
translator_loop(cs, tb, max_insns, pc, host_pc,
- &openrisc_tr_ops, &ctx.base);
+ &openrisc_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
void openrisc_cpu_dump_state(CPUState *cs, FILE *f, int flags)
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index a09a6df93f..3f6d326cef 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -6719,5 +6719,6 @@ void ppc_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext ctx;
- translator_loop(cs, tb, max_insns, pc, host_pc, &ppc_tr_ops, &ctx.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &ppc_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
index cb4f443601..f42e53df88 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c
@@ -1440,7 +1440,8 @@ void riscv_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext ctx;
- translator_loop(cs, tb, max_insns, pc, host_pc, &riscv_tr_ops, &ctx.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &riscv_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
void riscv_translate_init(void)
diff --git a/target/rx/translate.c b/target/rx/translate.c
index a245b9db8f..132d495710 100644
--- a/target/rx/translate.c
+++ b/target/rx/translate.c
@@ -2270,7 +2270,8 @@ void rx_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext dc;
- translator_loop(cs, tb, max_insns, pc, host_pc, &rx_tr_ops, &dc.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &rx_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
#define ALLOC_REGISTER(sym, name) \
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
index 9234444187..0f274621e5 100644
--- a/target/s390x/tcg/translate.c
+++ b/target/s390x/tcg/translate.c
@@ -6509,7 +6509,8 @@ void s390x_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext dc;
- translator_loop(cs, tb, max_insns, pc, host_pc, &s390x_tr_ops, &dc.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &s390x_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
void s390x_restore_state_to_opc(CPUState *cs,
diff --git a/target/sh4/translate.c b/target/sh4/translate.c
index b1057727c5..5adf650744 100644
--- a/target/sh4/translate.c
+++ b/target/sh4/translate.c
@@ -2316,5 +2316,6 @@ void sh4_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext ctx;
- translator_loop(cs, tb, max_insns, pc, host_pc, &sh4_tr_ops, &ctx.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &sh4_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
index 7e8558dbbd..3156be6a94 100644
--- a/target/sparc/translate.c
+++ b/target/sparc/translate.c
@@ -5853,7 +5853,8 @@ void sparc_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext dc = {};
- translator_loop(cs, tb, max_insns, pc, host_pc, &sparc_tr_ops, &dc.base);
+ translator_loop(cs, tb, max_insns, pc, host_pc, &sparc_tr_ops, &dc.base,
+ TCG_TYPE_VA);
}
void sparc_tcg_init(void)
diff --git a/target/tricore/translate.c b/target/tricore/translate.c
index 0eaf7a82f8..8cd6b58f66 100644
--- a/target/tricore/translate.c
+++ b/target/tricore/translate.c
@@ -8500,7 +8500,8 @@ void tricore_translate_code(CPUState *cs, TranslationBlock *tb,
{
DisasContext ctx;
translator_loop(cs, tb, max_insns, pc, host_pc,
- &tricore_tr_ops, &ctx.base);
+ &tricore_tr_ops, &ctx.base,
+ TCG_TYPE_VA);
}
/*
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
index 5e3707d3fd..6f9dd9fb5c 100644
--- a/target/xtensa/translate.c
+++ b/target/xtensa/translate.c
@@ -1233,7 +1233,8 @@ void xtensa_translate_code(CPUState *cpu, TranslationBlock *tb,
{
DisasContext dc = {};
translator_loop(cpu, tb, max_insns, pc, host_pc,
- &xtensa_translator_ops, &dc.base);
+ &xtensa_translator_ops, &dc.base,
+ TCG_TYPE_VA);
}
void xtensa_cpu_dump_state(CPUState *cs, FILE *f, int flags)
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 24/59] target/arm/tcg/translate.c: replace TCGv with TCGv_va
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (22 preceding siblings ...)
2026-04-23 10:01 ` [PULL 23/59] tcg/translator: add parameter to translator_loop for current addr type Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 25/59] target/arm/tcg/translate-a64.c: use translator_ldl_end instead of arm_ldl_code Peter Maydell
` (36 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
We know this file is for 32-bit runtime target, so we can set
TCG_ADDRESS_BITS. TCG_TYPE_VA is derived accordingly and is already
passed to translator_loop.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20260407222208.271838-16-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate.c | 29 +++++++++++++++--------------
1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index fa4c7907dc..0b3b4ab86b 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -22,7 +22,8 @@
#include "translate.h"
#include "translate-a32.h"
-#include "tcg/tcg-op.h"
+#define TCG_ADDRESS_BITS 32
+#include "tcg/tcg-op-mem.h"
#include "qemu/log.h"
#include "arm_ldst.h"
#include "semihosting/semihost.h"
@@ -910,14 +911,14 @@ MemOp pow2_align(unsigned i)
* that the address argument is TCGv_i32 rather than TCGv.
*/
-static TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, MemOp op)
+static TCGv_va gen_aa32_addr(DisasContext *s, TCGv_i32 a32, MemOp op)
{
- TCGv addr = tcg_temp_new();
- tcg_gen_extu_i32_tl(addr, a32);
+ TCGv_va addr = tcgv_va_temp_new();
+ tcg_gen_mov_i32(addr, a32);
/* Not needed for user-mode BE32, where we use MO_BE instead. */
if (!IS_USER_ONLY && s->sctlr_b && (op & MO_SIZE) < MO_32) {
- tcg_gen_xori_tl(addr, addr, 4 - (1 << (op & MO_SIZE)));
+ tcg_gen_xori_i32(addr, addr, 4 - (1 << (op & MO_SIZE)));
}
return addr;
}
@@ -929,21 +930,21 @@ static TCGv gen_aa32_addr(DisasContext *s, TCGv_i32 a32, MemOp op)
void gen_aa32_ld_internal_i32(DisasContext *s, TCGv_i32 val,
TCGv_i32 a32, int index, MemOp opc)
{
- TCGv addr = gen_aa32_addr(s, a32, opc);
+ TCGv_va addr = gen_aa32_addr(s, a32, opc);
tcg_gen_qemu_ld_i32(val, addr, index, opc);
}
void gen_aa32_st_internal_i32(DisasContext *s, TCGv_i32 val,
TCGv_i32 a32, int index, MemOp opc)
{
- TCGv addr = gen_aa32_addr(s, a32, opc);
+ TCGv_va addr = gen_aa32_addr(s, a32, opc);
tcg_gen_qemu_st_i32(val, addr, index, opc);
}
void gen_aa32_ld_internal_i64(DisasContext *s, TCGv_i64 val,
TCGv_i32 a32, int index, MemOp opc)
{
- TCGv addr = gen_aa32_addr(s, a32, opc);
+ TCGv_va addr = gen_aa32_addr(s, a32, opc);
tcg_gen_qemu_ld_i64(val, addr, index, opc);
@@ -956,7 +957,7 @@ void gen_aa32_ld_internal_i64(DisasContext *s, TCGv_i64 val,
void gen_aa32_st_internal_i64(DisasContext *s, TCGv_i64 val,
TCGv_i32 a32, int index, MemOp opc)
{
- TCGv addr = gen_aa32_addr(s, a32, opc);
+ TCGv_va addr = gen_aa32_addr(s, a32, opc);
/* Not needed for user-mode BE32, where we use MO_BE instead. */
if (!IS_USER_ONLY && s->sctlr_b && (opc & MO_SIZE) == MO_64) {
@@ -2036,7 +2037,7 @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
* architecturally 64-bit access, but instead do a 64-bit access
* using MO_BE if appropriate and then split the two halves.
*/
- TCGv taddr = gen_aa32_addr(s, addr, opc);
+ TCGv_va taddr = gen_aa32_addr(s, addr, opc);
tcg_gen_qemu_ld_i64(t64, taddr, get_mem_index(s), opc);
tcg_gen_mov_i64(cpu_exclusive_val, t64);
@@ -2065,7 +2066,7 @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
{
TCGv_i32 t0, t1, t2;
TCGv_i64 extaddr;
- TCGv taddr;
+ TCGv_va taddr;
TCGLabel *done_label;
TCGLabel *fail_label;
MemOp opc = size | MO_ALIGN | s->be_data;
@@ -3792,7 +3793,7 @@ static void do_ldrd_load(DisasContext *s, TCGv_i32 addr, int rt, int rt2)
*/
int mem_idx = get_mem_index(s);
MemOp opc = MO_64 | MO_ALIGN_4 | MO_ATOM_SUBALIGN | s->be_data;
- TCGv taddr = gen_aa32_addr(s, addr, opc);
+ TCGv_va taddr = gen_aa32_addr(s, addr, opc);
TCGv_i64 t64 = tcg_temp_new_i64();
TCGv_i32 tmp = tcg_temp_new_i32();
TCGv_i32 tmp2 = tcg_temp_new_i32();
@@ -3847,7 +3848,7 @@ static void do_strd_store(DisasContext *s, TCGv_i32 addr, int rt, int rt2)
*/
int mem_idx = get_mem_index(s);
MemOp opc = MO_64 | MO_ALIGN_4 | MO_ATOM_SUBALIGN | s->be_data;
- TCGv taddr = gen_aa32_addr(s, addr, opc);
+ TCGv_va taddr = gen_aa32_addr(s, addr, opc);
TCGv_i32 t1 = load_reg(s, rt);
TCGv_i32 t2 = load_reg(s, rt2);
TCGv_i64 t64 = tcg_temp_new_i64();
@@ -4068,7 +4069,7 @@ DO_LDST(STRH, store, MO_UW)
static bool op_swp(DisasContext *s, arg_SWP *a, MemOp opc)
{
TCGv_i32 addr, tmp;
- TCGv taddr;
+ TCGv_va taddr;
opc |= s->be_data;
addr = load_reg(s, a->rn);
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 25/59] target/arm/tcg/translate-a64.c: use translator_ldl_end instead of arm_ldl_code
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (23 preceding siblings ...)
2026-04-23 10:01 ` [PULL 24/59] target/arm/tcg/translate.c: replace TCGv with TCGv_va Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 26/59] target/arm/tcg/arm_ldst.h: merge in translate.c Peter Maydell
` (35 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Allows to reduce scope of target/arm/tcg/arm_ldst.h to aarch32 only.
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-17-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate-a64.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index df2cbd66b3..48b5c57255 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -26,7 +26,6 @@
#include "translate-a64.h"
#include "tcg/tcg-op.h"
#include "qemu/log.h"
-#include "arm_ldst.h"
#include "semihosting/semihost.h"
#include "cpregs.h"
@@ -10801,7 +10800,7 @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
if (pc & 3) {
/*
* PC alignment fault. This has priority over the instruction abort
- * that we would receive from a translation fault via arm_ldl_code.
+ * that we would receive from a translation fault via translator_ldl_end.
* This should only be possible after an indirect branch, at the
* start of the TB.
*/
@@ -10813,7 +10812,8 @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
}
s->pc_curr = pc;
- insn = arm_ldl_code(env, &s->base, pc, s->sctlr_b);
+ /* Code is always little-endian on Aarch64 */
+ insn = translator_ldl_end(env, &s->base, pc, MO_LE);
s->insn = insn;
s->base.pc_next = pc + 4;
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 26/59] target/arm/tcg/arm_ldst.h: merge in translate.c
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (24 preceding siblings ...)
2026-04-23 10:01 ` [PULL 25/59] target/arm/tcg/translate-a64.c: use translator_ldl_end instead of arm_ldl_code Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 27/59] target/arm/tcg/translate.c: replace translator_ldl_swap with translator_ldl_end Peter Maydell
` (34 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Only translate.c uses those functions, thus move them back to this file.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20260407222208.271838-18-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/arm_ldst.h | 47 --------------------------------------
target/arm/tcg/translate.c | 24 ++++++++++++++++++-
2 files changed, 23 insertions(+), 48 deletions(-)
diff --git a/target/arm/tcg/arm_ldst.h b/target/arm/tcg/arm_ldst.h
index cee0548a1c..e69de29bb2 100644
--- a/target/arm/tcg/arm_ldst.h
+++ b/target/arm/tcg/arm_ldst.h
@@ -1,47 +0,0 @@
-/*
- * ARM load/store instructions for code (armeb-user support)
- *
- * Copyright (c) 2012 CodeSourcery, LLC
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef ARM_LDST_H
-#define ARM_LDST_H
-
-#include "exec/translator.h"
-#include "qemu/bswap.h"
-
-/* Load an instruction and return it in the standard little-endian order */
-static inline uint32_t arm_ldl_code(CPUARMState *env, DisasContextBase *s,
- target_ulong addr, bool sctlr_b)
-{
- return translator_ldl_swap(env, s, addr, bswap_code(sctlr_b));
-}
-
-/* Ditto, for a halfword (Thumb) instruction */
-static inline uint16_t arm_lduw_code(CPUARMState *env, DisasContextBase* s,
- target_ulong addr, bool sctlr_b)
-{
-#ifndef CONFIG_USER_ONLY
- /* In big-endian (BE32) mode, adjacent Thumb instructions have been swapped
- within each word. Undo that now. */
- if (sctlr_b) {
- addr ^= 2;
- }
-#endif
- return translator_lduw_swap(env, s, addr, bswap_code(sctlr_b));
-}
-
-#endif
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index 0b3b4ab86b..b6abaff490 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -25,7 +25,6 @@
#define TCG_ADDRESS_BITS 32
#include "tcg/tcg-op-mem.h"
#include "qemu/log.h"
-#include "arm_ldst.h"
#include "semihosting/semihost.h"
#include "cpregs.h"
#include "exec/target_page.h"
@@ -6281,6 +6280,22 @@ static void disas_thumb_insn(DisasContext *s, uint32_t insn)
}
}
+/* Ditto, for a halfword (Thumb) instruction */
+static uint16_t arm_lduw_code(CPUARMState *env, DisasContextBase* s,
+ target_ulong addr, bool sctlr_b)
+{
+#ifndef CONFIG_USER_ONLY
+ /*
+ * In big-endian (BE32) mode, adjacent Thumb instructions have been swapped
+ * within each word. Undo that now.
+ */
+ if (sctlr_b) {
+ addr ^= 2;
+ }
+#endif
+ return translator_lduw_swap(env, s, addr, bswap_code(sctlr_b));
+}
+
static bool insn_crosses_page(CPUARMState *env, DisasContext *s)
{
/* Return true if the insn at dc->base.pc_next might cross a page boundary.
@@ -6515,6 +6530,13 @@ static void arm_post_translate_insn(DisasContext *dc)
}
}
+/* Load an instruction and return it in the standard little-endian order */
+static uint32_t arm_ldl_code(CPUARMState *env, DisasContextBase *s,
+ target_ulong addr, bool sctlr_b)
+{
+ return translator_ldl_swap(env, s, addr, bswap_code(sctlr_b));
+}
+
static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
{
DisasContext *dc = container_of(dcbase, DisasContext, base);
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 27/59] target/arm/tcg/translate.c: replace translator_ldl_swap with translator_ldl_end
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (25 preceding siblings ...)
2026-04-23 10:01 ` [PULL 26/59] target/arm/tcg/arm_ldst.h: merge in translate.c Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 28/59] target/arm/cpu.c: simplify endianness handling in arm_disas_set_info Peter Maydell
` (33 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20260407222208.271838-19-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index b6abaff490..c432de2a26 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -6284,16 +6284,13 @@ static void disas_thumb_insn(DisasContext *s, uint32_t insn)
static uint16_t arm_lduw_code(CPUARMState *env, DisasContextBase* s,
target_ulong addr, bool sctlr_b)
{
-#ifndef CONFIG_USER_ONLY
- /*
- * In big-endian (BE32) mode, adjacent Thumb instructions have been swapped
- * within each word. Undo that now.
- */
+ MemOp end = MO_LE;
if (sctlr_b) {
+ /* In BE32 mode, adjacent Thumb instructions are swapped. */
addr ^= 2;
+ end = MO_BE;
}
-#endif
- return translator_lduw_swap(env, s, addr, bswap_code(sctlr_b));
+ return translator_lduw_end(env, s, addr, end);
}
static bool insn_crosses_page(CPUARMState *env, DisasContext *s)
@@ -6534,7 +6531,7 @@ static void arm_post_translate_insn(DisasContext *dc)
static uint32_t arm_ldl_code(CPUARMState *env, DisasContextBase *s,
target_ulong addr, bool sctlr_b)
{
- return translator_ldl_swap(env, s, addr, bswap_code(sctlr_b));
+ return translator_ldl_end(env, s, addr, sctlr_b ? MO_BE : MO_LE);
}
static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 28/59] target/arm/cpu.c: simplify endianness handling in arm_disas_set_info
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (26 preceding siblings ...)
2026-04-23 10:01 ` [PULL 27/59] target/arm/tcg/translate.c: replace translator_ldl_swap with translator_ldl_end Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:01 ` [PULL 29/59] target/arm/tcg/translate.c: remove target_ulong Peter Maydell
` (32 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20260407222208.271838-20-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/cpu.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index ccc47c8a9a..b62de8addf 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -828,15 +828,11 @@ static void arm_disas_set_info(const CPUState *cpu, disassemble_info *info)
}
info->endian = BFD_ENDIAN_LITTLE;
- if (bswap_code(sctlr_b)) {
- info->endian = target_big_endian() ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
- }
info->flags &= ~INSN_ARM_BE32;
-#ifndef CONFIG_USER_ONLY
if (sctlr_b) {
+ info->endian |= BFD_ENDIAN_BIG;
info->flags |= INSN_ARM_BE32;
}
-#endif
}
static void aarch64_cpu_dump_state(CPUState *cs, FILE *f, int flags)
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 29/59] target/arm/tcg/translate.c: remove target_ulong
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (27 preceding siblings ...)
2026-04-23 10:01 ` [PULL 28/59] target/arm/cpu.c: simplify endianness handling in arm_disas_set_info Peter Maydell
@ 2026-04-23 10:01 ` Peter Maydell
2026-04-23 10:02 ` [PULL 30/59] target/arm/tcg/translate.c: make compilation unit common Peter Maydell
` (31 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:01 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
We can replace it with uint32_t, because we know it's limited to 32-bit
target.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-21-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index c432de2a26..ce427c5a3c 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -6282,7 +6282,7 @@ static void disas_thumb_insn(DisasContext *s, uint32_t insn)
/* Ditto, for a halfword (Thumb) instruction */
static uint16_t arm_lduw_code(CPUARMState *env, DisasContextBase* s,
- target_ulong addr, bool sctlr_b)
+ uint32_t addr, bool sctlr_b)
{
MemOp end = MO_LE;
if (sctlr_b) {
@@ -6529,7 +6529,7 @@ static void arm_post_translate_insn(DisasContext *dc)
/* Load an instruction and return it in the standard little-endian order */
static uint32_t arm_ldl_code(CPUARMState *env, DisasContextBase *s,
- target_ulong addr, bool sctlr_b)
+ uint32_t addr, bool sctlr_b)
{
return translator_ldl_end(env, s, addr, sctlr_b ? MO_BE : MO_LE);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 30/59] target/arm/tcg/translate.c: make compilation unit common
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (28 preceding siblings ...)
2026-04-23 10:01 ` [PULL 29/59] target/arm/tcg/translate.c: remove target_ulong Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 31/59] target/arm: Replace target_ulong -> vaddr in guarded_page_br() Peter Maydell
` (30 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
We removed all target specifics, and can finally compile this file only
once.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260407222208.271838-22-pierrick.bouvier@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/meson.build | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/target/arm/tcg/meson.build b/target/arm/tcg/meson.build
index 0740de92c1..506f031f1a 100644
--- a/target/arm/tcg/meson.build
+++ b/target/arm/tcg/meson.build
@@ -20,20 +20,18 @@ mve_d = decodetree.process('mve.decode', extra_args: '--decode=disas_mve')
m_nocp_d = decodetree.process('m-nocp.decode', extra_args: '--decode=disas_m_nocp')
-gen_a32 = [
+translate32_d = [
decodetree.process('a32.decode', extra_args: '--static-decode=disas_a32'),
decodetree.process('a32-uncond.decode', extra_args: '--static-decode=disas_a32_uncond'),
decodetree.process('t32.decode', extra_args: '--static-decode=disas_t32'),
decodetree.process('t16.decode', extra_args: ['-w', '16', '--static-decode=disas_t16']),
]
-arm_ss.add(gen_a32)
arm_ss.add(when: 'TARGET_AARCH64', if_true: gen_a64)
arm_ss.add(when: 'TARGET_AARCH64', if_false: files('stubs32.c'))
arm_ss.add(files(
'cpu32.c',
- 'translate.c',
'm_helper.c',
'mve_helper.c',
))
@@ -66,6 +64,7 @@ arm_common_system_ss.add(
m_nocp_d,
mve_d,
neon_d,
+ translate32_d,
vfp_d,
files(
'cpregs-at.c',
@@ -77,6 +76,7 @@ arm_common_system_ss.add(
'psci.c',
'tlb_helper.c',
'tlb-insns.c',
+ 'translate.c',
'translate-m-nocp.c',
'translate-mve.c',
'translate-neon.c',
@@ -88,6 +88,7 @@ arm_user_ss.add(
m_nocp_d,
mve_d,
neon_d,
+ translate32_d,
vfp_d,
files(
'debug.c',
@@ -96,6 +97,7 @@ arm_user_ss.add(
'neon_helper.c',
'op_helper.c',
'tlb_helper.c',
+ 'translate.c',
'translate-m-nocp.c',
'translate-mve.c',
'translate-neon.c',
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 31/59] target/arm: Replace target_ulong -> vaddr in guarded_page_br()
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (29 preceding siblings ...)
2026-04-23 10:02 ` [PULL 30/59] target/arm/tcg/translate.c: make compilation unit common Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 32/59] target/arm: Remove target_ulong use in hvf_handle_psci_call() Peter Maydell
` (29 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
From: Philippe Mathieu-Daudé <philmd@linaro.org>
Following commit 15500df3b3b ("target/arm/tcg/translate.h: replace
target_ulong with vaddr") change, adapt guarded_page_br().
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20260401143456.79843-1-philmd@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/helper-a64-defs.h | 2 +-
target/arm/tcg/helper-a64.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/target/arm/tcg/helper-a64-defs.h b/target/arm/tcg/helper-a64-defs.h
index b6008b5a3a..3c3c5dddb7 100644
--- a/target/arm/tcg/helper-a64-defs.h
+++ b/target/arm/tcg/helper-a64-defs.h
@@ -131,7 +131,7 @@ DEF_HELPER_4(cpyfm, void, env, i32, i32, i32)
DEF_HELPER_4(cpyfe, void, env, i32, i32, i32)
DEF_HELPER_FLAGS_1(guarded_page_check, TCG_CALL_NO_WG, void, env)
-DEF_HELPER_FLAGS_2(guarded_page_br, TCG_CALL_NO_RWG, void, env, tl)
+DEF_HELPER_FLAGS_2(guarded_page_br, TCG_CALL_NO_RWG, void, env, vaddr)
DEF_HELPER_FLAGS_5(gvec_fdiv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32)
DEF_HELPER_FLAGS_5(gvec_fdiv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32)
diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c
index 2dec587d38..a7372aa6bb 100644
--- a/target/arm/tcg/helper-a64.c
+++ b/target/arm/tcg/helper-a64.c
@@ -1735,7 +1735,7 @@ void HELPER(cpyfe)(CPUARMState *env, uint32_t syndrome, uint32_t wdesc,
do_cpye(env, syndrome, wdesc, rdesc, false, GETPC());
}
-static bool is_guarded_page(CPUARMState *env, target_ulong addr, uintptr_t ra)
+static bool is_guarded_page(CPUARMState *env, vaddr addr, uintptr_t ra)
{
#ifdef CONFIG_USER_ONLY
return page_get_flags(addr) & PAGE_BTI;
@@ -1765,7 +1765,7 @@ void HELPER(guarded_page_check)(CPUARMState *env)
}
}
-void HELPER(guarded_page_br)(CPUARMState *env, target_ulong pc)
+void HELPER(guarded_page_br)(CPUARMState *env, vaddr pc)
{
/*
* We have already checked for branch via x16 and x17.
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 32/59] target/arm: Remove target_ulong use in hvf_handle_psci_call()
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (30 preceding siblings ...)
2026-04-23 10:02 ` [PULL 31/59] target/arm: Replace target_ulong -> vaddr in guarded_page_br() Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 33/59] MAINTAINERS: Remove Ahmed Karaman Peter Maydell
` (28 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
From: Philippe Mathieu-Daudé <philmd@linaro.org>
Similarly to commit 3580aa03547 ("target/arm/tcg/psci.c: make
compilation unit common") which replaced the target_ulong use in
arm_handle_psci_call(), replace the one in hvf_handle_psci_call.
This could be vaddr, because entry is the start pc for the on-lining
cpu, but we prefer uint64_t because this is what we get in param[]
and pass to arm_set_cpu_on().
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20260410194227.16357-1-philmd@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/hvf/hvf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index 5fc8f6bbbd..678afe5c8e 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -1418,7 +1418,7 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *excp_ret)
bool target_aarch64 = true;
CPUState *target_cpu_state;
ARMCPU *target_cpu;
- target_ulong entry;
+ uint64_t entry;
int target_el = 1;
int32_t ret = 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 33/59] MAINTAINERS: Remove Ahmed Karaman
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (31 preceding siblings ...)
2026-04-23 10:02 ` [PULL 32/59] target/arm: Remove target_ulong use in hvf_handle_psci_call() Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 34/59] MAINTAINERS: Remove Anup Patel Peter Maydell
` (27 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Ahmed Karaman has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the "Performance Tools and Tests" orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-2-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 0a90204ae9..2fd2a5ebd2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4634,8 +4634,7 @@ F: rust/wrapper.h
Miscellaneous
-------------
Performance Tools and Tests
-M: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
-S: Maintained
+S: Orphan
F: scripts/performance/
Code Coverage Tools
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 34/59] MAINTAINERS: Remove Anup Patel
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (32 preceding siblings ...)
2026-04-23 10:02 ` [PULL 33/59] MAINTAINERS: Remove Ahmed Karaman Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 35/59] MAINTAINERS: Remove Beniamino Galvani Peter Maydell
` (26 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Anup Patel has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-3-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 2fd2a5ebd2..5b5b686e76 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -842,7 +842,6 @@ F: tests/functional/arm/test_canona1100.py
F: docs/system/arm/digic.rst
Goldfish RTC
-M: Anup Patel <anup.patel@wdc.com>
M: Alistair Francis <Alistair.Francis@wdc.com>
L: qemu-riscv@nongnu.org
S: Maintained
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 35/59] MAINTAINERS: Remove Beniamino Galvani
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (33 preceding siblings ...)
2026-04-23 10:02 ` [PULL 34/59] MAINTAINERS: Remove Anup Patel Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 36/59] MAINTAINERS: Remove Jeff Cody Peter Maydell
` (25 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Beniamino Galvani has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-4-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 5b5b686e76..567b918a70 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -720,7 +720,6 @@ F: tests/functional/alpha/test_clipper.py
ARM Machines
------------
Allwinner-a10
-M: Beniamino Galvani <b.galvani@gmail.com>
M: Peter Maydell <peter.maydell@linaro.org>
R: Strahinja Jankovic <strahinja.p.jankovic@gmail.com>
L: qemu-arm@nongnu.org
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 36/59] MAINTAINERS: Remove Jeff Cody
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (34 preceding siblings ...)
2026-04-23 10:02 ` [PULL 35/59] MAINTAINERS: Remove Beniamino Galvani Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 37/59] MAINTAINERS: Remove Coiby Xu Peter Maydell
` (24 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Jeff Cody has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the "VHDX" block driver orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-5-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 567b918a70..d86d7536e6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4179,9 +4179,8 @@ S: Supported
F: block/rbd.c
VHDX
-M: Jeff Cody <codyprime@gmail.com>
L: qemu-block@nongnu.org
-S: Odd Fixes
+S: Orphan
F: block/vhdx*
VDI
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 37/59] MAINTAINERS: Remove Coiby Xu
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (35 preceding siblings ...)
2026-04-23 10:02 ` [PULL 36/59] MAINTAINERS: Remove Jeff Cody Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 38/59] MAINTAINERS: Remove Damien Hedde Peter Maydell
` (23 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Coiby Xu has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the "Vhost-user block device backend server" orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-6-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index d86d7536e6..db894223ca 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4381,8 +4381,7 @@ S: Supported
F: tests/image-fuzzer/
Vhost-user block device backend server
-M: Coiby Xu <Coiby.Xu@gmail.com>
-S: Maintained
+S: Orphan
F: block/export/vhost-user-blk-server.c
F: block/export/vhost-user-blk-server.h
F: block/export/virtio-blk-handler.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 38/59] MAINTAINERS: Remove Damien Hedde
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (36 preceding siblings ...)
2026-04-23 10:02 ` [PULL 37/59] MAINTAINERS: Remove Coiby Xu Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 39/59] MAINTAINERS: Remove Ed Maste Peter Maydell
` (22 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Damien Hedde has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-7-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index db894223ca..855b6dee70 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4035,7 +4035,6 @@ F: .gitlab-ci.d/opensbi/
Clock framework
M: Luc Michel <luc@lmichel.fr>
-R: Damien Hedde <damien.hedde@dahe.fr>
S: Maintained
F: include/hw/core/clock.h
F: include/hw/core/qdev-clock.h
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 39/59] MAINTAINERS: Remove Ed Maste
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (37 preceding siblings ...)
2026-04-23 10:02 ` [PULL 38/59] MAINTAINERS: Remove Damien Hedde Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 40/59] MAINTAINERS: Remove Dongjiu Geng Peter Maydell
` (21 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Ed Maste has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-8-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 855b6dee70..34944c3948 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4495,7 +4495,6 @@ W: https://gitlab.com/qemu-project/qemu/pipelines
W: https://travis-ci.org/qemu/qemu
FreeBSD Hosted Continuous Integration
-M: Ed Maste <emaste@freebsd.org>
M: Li-Wen Hsu <lwhsu@freebsd.org>
S: Maintained
F: .gitlab-ci.d/cirrus/freebsd*
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 40/59] MAINTAINERS: Remove Dongjiu Geng
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (38 preceding siblings ...)
2026-04-23 10:02 ` [PULL 39/59] MAINTAINERS: Remove Ed Maste Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 41/59] MAINTAINERS: Remove Huai-Cheng Kuo Peter Maydell
` (20 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Dongjiu Geng has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the "ACPI/HEST/GHES" section orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-9-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 34944c3948..db29b267ee 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2220,9 +2220,8 @@ F: tests/functional/x86_64/test_acpi_bits.py
F: docs/devel/testing/acpi-bits.rst
ACPI/HEST/GHES
-R: Dongjiu Geng <gengdongjiu1@gmail.com>
L: qemu-arm@nongnu.org
-S: Maintained
+S: Orphan
F: hw/acpi/ghes.c
F: include/hw/acpi/ghes.h
F: docs/specs/acpi_hest_ghes.rst
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 41/59] MAINTAINERS: Remove Huai-Cheng Kuo
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (39 preceding siblings ...)
2026-04-23 10:02 ` [PULL 40/59] MAINTAINERS: Remove Dongjiu Geng Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 42/59] MAINTAINERS: Remove Bastian Koppelmann Peter Maydell
` (19 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Huai-Cheng Kuo has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes "PCIE DOE" orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-11-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index db29b267ee..38958254be 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2161,8 +2161,7 @@ F: docs/specs/*pci*
F: docs/system/sriov.rst
PCIE DOE
-M: Huai-Cheng Kuo <hchkuo@avery-design.com.tw>
-S: Supported
+S: Orphan
F: include/hw/pci/pcie_doe.h
F: hw/pci/pcie_doe.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 42/59] MAINTAINERS: Remove Bastian Koppelmann
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (40 preceding siblings ...)
2026-04-23 10:02 ` [PULL 41/59] MAINTAINERS: Remove Huai-Cheng Kuo Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 43/59] MAINTAINERS: Remove Mahmoud Mandour Peter Maydell
` (18 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Bastian Koppelmann has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the Tricore TCG CPUs orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-12-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 38958254be..11ae4829fd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -447,8 +447,7 @@ F: include/hw/xtensa/xtensa-isa.h
F: configs/devices/xtensa*/default.mak
TriCore TCG CPUs
-M: Bastian Koppelmann <kbastian@rumtueddeln.de>
-S: Odd Fixes
+S: Orphan
F: target/tricore/
F: hw/tricore/
F: include/hw/tricore/
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 43/59] MAINTAINERS: Remove Mahmoud Mandour
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (41 preceding siblings ...)
2026-04-23 10:02 ` [PULL 42/59] MAINTAINERS: Remove Bastian Koppelmann Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 44/59] MAINTAINERS: Remove Magnus Damm Peter Maydell
` (17 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Mahmoud Mandour has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-13-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 11ae4829fd..206ff228d3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4092,7 +4092,6 @@ M: Alex Bennée <alex.bennee@linaro.org>
M: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
T: git https://gitlab.com/stsquad/qemu plugins/next
R: Alexandre Iooss <erdnaxe@crans.org>
-R: Mahmoud Mandour <ma.mandourr@gmail.com>
S: Maintained
F: docs/devel/tcg-plugins.rst
F: plugins/
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 44/59] MAINTAINERS: Remove Magnus Damm
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (42 preceding siblings ...)
2026-04-23 10:02 ` [PULL 43/59] MAINTAINERS: Remove Mahmoud Mandour Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 45/59] MAINTAINERS: Remove Marcel Apfelbaum Peter Maydell
` (16 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Magnus Damm has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-14-peter.maydell@linaro.org
---
MAINTAINERS | 2 --
1 file changed, 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 206ff228d3..065a18986c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1781,7 +1781,6 @@ SH4 Machines
------------
R2D
R: Yoshinori Sato <yoshinori.sato@nifty.com>
-R: Magnus Damm <magnus.damm@gmail.com>
S: Odd Fixes
F: hw/char/sh_serial.c
F: hw/sh4/r2d.c
@@ -2880,7 +2879,6 @@ F: docs/*/*xive*
Renesas peripherals
R: Yoshinori Sato <yoshinori.sato@nifty.com>
-R: Magnus Damm <magnus.damm@gmail.com>
S: Odd Fixes
F: hw/char/renesas_sci.c
F: hw/char/sh_serial.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 45/59] MAINTAINERS: Remove Marcel Apfelbaum
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (43 preceding siblings ...)
2026-04-23 10:02 ` [PULL 44/59] MAINTAINERS: Remove Magnus Damm Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 46/59] MAINTAINERS: Remove Aarushi Mehta Peter Maydell
` (15 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Marcel Apfelbaum has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-15-peter.maydell@linaro.org
---
MAINTAINERS | 3 ---
1 file changed, 3 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 065a18986c..48bfa032e3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1928,7 +1928,6 @@ X86 Machines
------------
PC
M: Michael S. Tsirkin <mst@redhat.com>
-M: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
S: Supported
F: include/hw/i386/
F: hw/i386/
@@ -2011,7 +2010,6 @@ F: include/hw/i386/nitro_enclave.h
F: docs/system/i386/nitro-enclave.rst
Machine core
-M: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
R: Philippe Mathieu-Daudé <philmd@linaro.org>
R: Yanan Wang <wangyanan55@huawei.com>
R: Zhao Liu <zhao1.liu@intel.com>
@@ -2147,7 +2145,6 @@ F: hw/ipack/
PCI
M: Michael S. Tsirkin <mst@redhat.com>
-M: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
S: Supported
F: include/hw/pci/*
F: hw/misc/pci-testdev.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 46/59] MAINTAINERS: Remove Aarushi Mehta
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (44 preceding siblings ...)
2026-04-23 10:02 ` [PULL 45/59] MAINTAINERS: Remove Marcel Apfelbaum Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 47/59] MAINTAINERS: Remove Paul Burton Peter Maydell
` (14 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Aarushi Mehta has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-16-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 48bfa032e3..75cc6704f4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4321,7 +4321,6 @@ F: block/file-win32.c
F: block/win32-aio.c
Linux io_uring
-M: Aarushi Mehta <mehta.aaru20@gmail.com>
M: Julia Suvorova <jusual@redhat.com>
M: Stefan Hajnoczi <stefanha@redhat.com>
R: Stefano Garzarella <sgarzare@redhat.com>
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 47/59] MAINTAINERS: Remove Paul Burton
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (45 preceding siblings ...)
2026-04-23 10:02 ` [PULL 46/59] MAINTAINERS: Remove Aarushi Mehta Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 48/59] MAINTAINERS: Remove Jia Liu Peter Maydell
` (13 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Paul Burton has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-17-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 75cc6704f4..07a08b1a65 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1487,7 +1487,6 @@ F: include/hw/intc/loongson_liointc.h
F: tests/functional/mips64el/test_loongson3v.py
Boston
-M: Paul Burton <paulburton@kernel.org>
R: Aleksandar Rikalo <arikalo@gmail.com>
S: Odd Fixes
F: hw/core/loader-fit.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 48/59] MAINTAINERS: Remove Jia Liu
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (46 preceding siblings ...)
2026-04-23 10:02 ` [PULL 47/59] MAINTAINERS: Remove Paul Burton Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 49/59] MAINTAINERS: Remove Qiuhao Li Peter Maydell
` (12 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Jia Liu has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the or1k-sim OpenRISC machine orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-18-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 07a08b1a65..c58200cf37 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1497,8 +1497,7 @@ F: include/hw/pci-host/xilinx-pcie.h
OpenRISC Machines
-----------------
or1k-sim
-M: Jia Liu <proljc@gmail.com>
-S: Maintained
+S: Orphan
F: docs/system/or1k/or1k-sim.rst
F: hw/intc/ompic.c
F: hw/or1k/or1k-sim.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 49/59] MAINTAINERS: Remove Qiuhao Li
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (47 preceding siblings ...)
2026-04-23 10:02 ` [PULL 48/59] MAINTAINERS: Remove Jia Liu Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 50/59] MAINTAINERS: Remove Luigi Rizzo Peter Maydell
` (11 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Qiuhao Li has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-19-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index c58200cf37..abe7b5f920 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3607,7 +3607,6 @@ R: Paolo Bonzini <pbonzini@redhat.com>
R: Stefan Hajnoczi <stefanha@redhat.com>
R: Fabiano Rosas <farosas@suse.de>
R: Darren Kenny <darren.kenny@oracle.com>
-R: Qiuhao Li <Qiuhao.Li@outlook.com>
S: Maintained
F: tests/qtest/fuzz/
F: tests/qtest/fuzz-*test.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 50/59] MAINTAINERS: Remove Luigi Rizzo
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (48 preceding siblings ...)
2026-04-23 10:02 ` [PULL 49/59] MAINTAINERS: Remove Qiuhao Li Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 51/59] MAINTAINERS: Remove Ronnie Sahlberg Peter Maydell
` (10 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Luigi Rizzo has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-20-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index abe7b5f920..c1537b0db2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3413,7 +3413,6 @@ T: git https://github.com/jasowang/qemu.git net
F: qapi/net.json
Netmap network backend
-M: Luigi Rizzo <rizzo@iet.unipi.it>
M: Giuseppe Lettieri <g.lettieri@iet.unipi.it>
M: Vincenzo Maffione <v.maffione@gmail.com>
W: http://info.iet.unipi.it/~luigi/netmap/
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 51/59] MAINTAINERS: Remove Ronnie Sahlberg
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (49 preceding siblings ...)
2026-04-23 10:02 ` [PULL 50/59] MAINTAINERS: Remove Luigi Rizzo Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 52/59] MAINTAINERS: Remove Ryo ONODERA Peter Maydell
` (9 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Ronnie Sahlberg has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-21-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index c1537b0db2..bb05deefbf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4182,7 +4182,6 @@ S: Maintained
F: block/blkio.c
iSCSI
-M: Ronnie Sahlberg <ronniesahlberg@gmail.com>
M: Paolo Bonzini <pbonzini@redhat.com>
M: Peter Lieven <pl@dlhnet.de>
L: qemu-block@nongnu.org
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 52/59] MAINTAINERS: Remove Ryo ONODERA
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (50 preceding siblings ...)
2026-04-23 10:02 ` [PULL 51/59] MAINTAINERS: Remove Ronnie Sahlberg Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 53/59] MAINTAINERS: Remove Shannon Zhao Peter Maydell
` (8 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Ryo ONODERA has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-22-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index bb05deefbf..ddb2633ebd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -671,7 +671,6 @@ F: include/qemu/*posix*.h
NETBSD
M: Reinoud Zandijk <reinoud@netbsd.org>
-M: Ryo ONODERA <ryoon@netbsd.org>
S: Maintained
K: ^Subject:.*(?i)NetBSD
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 53/59] MAINTAINERS: Remove Shannon Zhao
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (51 preceding siblings ...)
2026-04-23 10:02 ` [PULL 52/59] MAINTAINERS: Remove Ryo ONODERA Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 54/59] MAINTAINERS: Remove Su Hang Peter Maydell
` (7 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Shannon Zhao has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the "ARM ACPI Subsystem" orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-23-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index ddb2633ebd..b5d5f74099 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2185,9 +2185,8 @@ F: docs/specs/acpi_pci_hotplug.rst
F: docs/specs/acpi_hw_reduced_hotplug.rst
ARM ACPI Subsystem
-M: Shannon Zhao <shannon.zhaosl@gmail.com>
L: qemu-arm@nongnu.org
-S: Maintained
+S: Orphan
F: hw/arm/virt-acpi-build.c
RISC-V ACPI Subsystem
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 54/59] MAINTAINERS: Remove Su Hang
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (52 preceding siblings ...)
2026-04-23 10:02 ` [PULL 53/59] MAINTAINERS: Remove Shannon Zhao Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 55/59] MAINTAINERS: Remove Vijai Kumar K Peter Maydell
` (6 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Su Hang has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the Intel Hexadecimal Object File Loader orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-24-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index b5d5f74099..02696f46f2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2717,8 +2717,7 @@ F: docs/system/guest-loader.rst
F: tests/functional/aarch64/test_xen.py
Intel Hexadecimal Object File Loader
-M: Su Hang <suhang16@mails.ucas.ac.cn>
-S: Maintained
+S: Orphan
F: tests/qtest/hexloader-test.c
F: tests/data/hex-loader/test.hex
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 55/59] MAINTAINERS: Remove Vijai Kumar K
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (53 preceding siblings ...)
2026-04-23 10:02 ` [PULL 54/59] MAINTAINERS: Remove Su Hang Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 56/59] MAINTAINERS: Remove Yanan Wang Peter Maydell
` (5 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Vijai Kumar K has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the Shakti C class RISC-V SoC orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-25-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 02696f46f2..f1577e6c5c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1733,9 +1733,8 @@ F: include/hw/misc/mchp_pfsoc_ioscb.h
F: include/hw/misc/mchp_pfsoc_sysreg.h
Shakti C class SoC
-M: Vijai Kumar K <vijai@behindbytes.com>
L: qemu-riscv@nongnu.org
-S: Supported
+S: Orphan
F: docs/system/riscv/shakti-c.rst
F: hw/riscv/shakti_c.c
F: hw/char/shakti_uart.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 56/59] MAINTAINERS: Remove Yanan Wang
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (54 preceding siblings ...)
2026-04-23 10:02 ` [PULL 55/59] MAINTAINERS: Remove Vijai Kumar K Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 57/59] MAINTAINERS: Remove Wen Congyang Peter Maydell
` (4 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Yanan Wang has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-id: 20260416091654.316158-26-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index f1577e6c5c..9b3da13653 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2007,7 +2007,6 @@ F: docs/system/i386/nitro-enclave.rst
Machine core
R: Philippe Mathieu-Daudé <philmd@linaro.org>
-R: Yanan Wang <wangyanan55@huawei.com>
R: Zhao Liu <zhao1.liu@intel.com>
S: Supported
F: hw/core/cpu-common.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 57/59] MAINTAINERS: Remove Wen Congyang
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (55 preceding siblings ...)
2026-04-23 10:02 ` [PULL 56/59] MAINTAINERS: Remove Yanan Wang Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 58/59] MAINTAINERS: Remove Xiao Guangrong Peter Maydell
` (3 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Wen Congyang has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Lukas Straub <lukasstraub2@web.de>
Message-id: 20260416091654.316158-27-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 9b3da13653..55fc63d298 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4385,7 +4385,6 @@ F: block/export/vduse-blk.c
F: block/export/vduse-blk.h
Replication
-M: Wen Congyang <wencongyang2@huawei.com>
M: Xie Changlong <xiechanglong.d@gmail.com>
S: Supported
F: replication*
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 58/59] MAINTAINERS: Remove Xiao Guangrong
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (56 preceding siblings ...)
2026-04-23 10:02 ` [PULL 57/59] MAINTAINERS: Remove Wen Congyang Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 10:02 ` [PULL 59/59] MAINTAINERS: Remove Xie Changlong Peter Maydell
` (2 subsequent siblings)
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Xiao Guangrong has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260416091654.316158-28-peter.maydell@linaro.org
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 55fc63d298..ed77b28c2a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3319,7 +3319,6 @@ F: scripts/coccinelle/memory-region-housekeeping.cocci
Memory devices
M: David Hildenbrand <david@kernel.org>
M: Igor Mammedov <imammedo@redhat.com>
-R: Xiao Guangrong <xiaoguangrong.eric@gmail.com>
S: Supported
F: hw/mem/memory-device*.c
F: hw/mem/nvdimm.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* [PULL 59/59] MAINTAINERS: Remove Xie Changlong
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (57 preceding siblings ...)
2026-04-23 10:02 ` [PULL 58/59] MAINTAINERS: Remove Xiao Guangrong Peter Maydell
@ 2026-04-23 10:02 ` Peter Maydell
2026-04-23 12:37 ` [PULL 00/59] target-arm queue Philippe Mathieu-Daudé
2026-04-25 12:30 ` Stefan Hajnoczi
60 siblings, 0 replies; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 10:02 UTC (permalink / raw)
To: qemu-devel
Xie Changlong has not posted to qemu-devel in some years and did not
respond to a query about whether they still wished to be listed in
our MAINTAINERS file. Remove them, on the assumption that they are
no longer active in QEMU.
This makes the "Replication" block filter orphan.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Lukas Straub <lukasstraub2@web.de>
Message-id: 20260416091654.316158-29-peter.maydell@linaro.org
---
MAINTAINERS | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index ed77b28c2a..facc4b499a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4384,8 +4384,7 @@ F: block/export/vduse-blk.c
F: block/export/vduse-blk.h
Replication
-M: Xie Changlong <xiechanglong.d@gmail.com>
-S: Supported
+S: Orphan
F: replication*
F: block/replication.c
F: tests/unit/test-replication.c
--
2.43.0
^ permalink raw reply related [flat|nested] 68+ messages in thread* Re: [PULL 00/59] target-arm queue
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (58 preceding siblings ...)
2026-04-23 10:02 ` [PULL 59/59] MAINTAINERS: Remove Xie Changlong Peter Maydell
@ 2026-04-23 12:37 ` Philippe Mathieu-Daudé
2026-04-23 12:53 ` Peter Maydell
2026-04-25 12:30 ` Stefan Hajnoczi
60 siblings, 1 reply; 68+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-04-23 12:37 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: qemu-devel, Peter Maydell, Richard Henderson
Stefan, there is a comment on #10 (a8af0fb24da) Richard'd rather
to be addressed.
On 23/4/26 12:01, Peter Maydell wrote:
> Hi; here's the first arm pullreq for the 11.1 cycle. One feature,
> quite a bit of refactoring in target/arm, and also I have included
> the patches to MAINTAINERS to remove people who aren't active
> in the project any more.
>
> thanks
> -- PMM
>
> The following changes since commit bb230769b4d01de714bed686161ad39a8f4f3fd1:
>
> Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-04-22 14:30:04 -0400)
>
> are available in the Git repository at:
>
> https://gitlab.com/pm215/qemu.git tags/pull-target-arm-20260423
>
> for you to fetch changes up to 250c9de780448fd447056ea42c7ebfdb0b32ab92:
>
> MAINTAINERS: Remove Xie Changlong (2026-04-23 10:39:06 +0100)
>
> ----------------------------------------------------------------
> target-arm queue:
> * virt: Allow user to specify cache topology
> * target/arm: Move OMAP CP15 register definitions to cpregs-omap.c
> * target/arm: cleanups for single-binary work
> * MAINTAINERS: remove people who are no longer active in the project
>
> ----------------------------------------------------------------
^ permalink raw reply [flat|nested] 68+ messages in thread* Re: [PULL 00/59] target-arm queue
2026-04-23 12:37 ` [PULL 00/59] target-arm queue Philippe Mathieu-Daudé
@ 2026-04-23 12:53 ` Peter Maydell
2026-04-23 17:49 ` Stefan Hajnoczi
0 siblings, 1 reply; 68+ messages in thread
From: Peter Maydell @ 2026-04-23 12:53 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Stefan Hajnoczi, qemu-devel, Richard Henderson
On Thu, 23 Apr 2026 at 13:37, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> Stefan, there is a comment on #10 (a8af0fb24da) Richard'd rather
> to be addressed.
I would prefer not to reroll the pullreq just for that -- it's a cleanup,
that's all. Compilation is not broken by that #include line being missing.
-- PMM
^ permalink raw reply [flat|nested] 68+ messages in thread
* Re: [PULL 00/59] target-arm queue
2026-04-23 12:53 ` Peter Maydell
@ 2026-04-23 17:49 ` Stefan Hajnoczi
2026-04-23 21:34 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 68+ messages in thread
From: Stefan Hajnoczi @ 2026-04-23 17:49 UTC (permalink / raw)
To: Peter Maydell; +Cc: Philippe Mathieu-Daudé, qemu-devel, Richard Henderson
[-- Attachment #1: Type: text/plain, Size: 590 bytes --]
On Thu, Apr 23, 2026 at 01:53:01PM +0100, Peter Maydell wrote:
> On Thu, 23 Apr 2026 at 13:37, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
> >
> > Stefan, there is a comment on #10 (a8af0fb24da) Richard'd rather
> > to be addressed.
>
> I would prefer not to reroll the pullreq just for that -- it's a cleanup,
> that's all. Compilation is not broken by that #include line being missing.
Based on Phil's response in the #10 sub-thread there is agreement to
merge this pull request as-is.
Peter: Please send a follow-up to fix the missing #includes.
Thanks,
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 68+ messages in thread
* Re: [PULL 00/59] target-arm queue
2026-04-23 17:49 ` Stefan Hajnoczi
@ 2026-04-23 21:34 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 68+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-04-23 21:34 UTC (permalink / raw)
To: Stefan Hajnoczi, Peter Maydell; +Cc: qemu-devel, Richard Henderson
On 23/4/26 19:49, Stefan Hajnoczi wrote:
> On Thu, Apr 23, 2026 at 01:53:01PM +0100, Peter Maydell wrote:
>> On Thu, 23 Apr 2026 at 13:37, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>>
>>> Stefan, there is a comment on #10 (a8af0fb24da) Richard'd rather
>>> to be addressed.
>>
>> I would prefer not to reroll the pullreq just for that -- it's a cleanup,
>> that's all. Compilation is not broken by that #include line being missing.
>
> Based on Phil's response in the #10 sub-thread there is agreement to
> merge this pull request as-is.
>
> Peter: Please send a follow-up to fix the missing #includes.
I'm waiting Alistair's RISCV PR to get merged then will post my
single-binary PR with the fix (unfortunately it is based on
RISCV patches). But no objection if Peter has another PR ready
before that :)
>
> Thanks,
> Stefan
^ permalink raw reply [flat|nested] 68+ messages in thread
* Re: [PULL 00/59] target-arm queue
2026-04-23 10:01 [PULL 00/59] target-arm queue Peter Maydell
` (59 preceding siblings ...)
2026-04-23 12:37 ` [PULL 00/59] target-arm queue Philippe Mathieu-Daudé
@ 2026-04-25 12:30 ` Stefan Hajnoczi
60 siblings, 0 replies; 68+ messages in thread
From: Stefan Hajnoczi @ 2026-04-25 12:30 UTC (permalink / raw)
To: Peter Maydell; +Cc: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/11.1 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 68+ messages in thread