In order to remove the TARGET_BIG_ENDIAN use in "cpu.h",
introduce the xtensa_default_cpu_model() helper which
returns the current XTENSA_DEFAULT_CPU_MODEL but evaluating
endianness at runtime. Update the machines using it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/xtensa/cpu-qom.h | 2 ++
target/xtensa/cpu.h | 4 ----
hw/xtensa/sim.c | 10 ++++++++--
hw/xtensa/virt.c | 11 +++++++++--
hw/xtensa/xtfpga.c | 17 +++++++++--------
linux-user/xtensa/elfload.c | 4 ++--
target/xtensa/cpu.c | 5 +++++
7 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/target/xtensa/cpu-qom.h b/target/xtensa/cpu-qom.h
index d932346b5fe..66992d08c2e 100644
--- a/target/xtensa/cpu-qom.h
+++ b/target/xtensa/cpu-qom.h
@@ -38,4 +38,6 @@ OBJECT_DECLARE_CPU_TYPE(XtensaCPU, XtensaCPUClass, XTENSA_CPU)
#define XTENSA_CPU_TYPE_SUFFIX "-" TYPE_XTENSA_CPU
#define XTENSA_CPU_TYPE_NAME(model) model XTENSA_CPU_TYPE_SUFFIX
+const char *xtensa_default_cpu_model(void);
+
#endif
diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h
index 22192924841..fe2f25e527c 100644
--- a/target/xtensa/cpu.h
+++ b/target/xtensa/cpu.h
@@ -606,14 +606,10 @@ G_NORETURN void xtensa_cpu_do_unaligned_access(CPUState *cpu, vaddr addr,
#define CPU_RESOLVING_TYPE TYPE_XTENSA_CPU
#if TARGET_BIG_ENDIAN
-#define XTENSA_DEFAULT_CPU_MODEL "fsf"
#define XTENSA_DEFAULT_CPU_NOMMU_MODEL "fsf"
#else
-#define XTENSA_DEFAULT_CPU_MODEL "dc232b"
#define XTENSA_DEFAULT_CPU_NOMMU_MODEL "de212"
#endif
-#define XTENSA_DEFAULT_CPU_TYPE \
- XTENSA_CPU_TYPE_NAME(XTENSA_DEFAULT_CPU_MODEL)
#define XTENSA_DEFAULT_CPU_NOMMU_TYPE \
XTENSA_CPU_TYPE_NAME(XTENSA_DEFAULT_CPU_NOMMU_MODEL)
diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c
index 994460d0414..03dbe69c2d4 100644
--- a/hw/xtensa/sim.c
+++ b/hw/xtensa/sim.c
@@ -36,6 +36,7 @@
#include "qemu/error-report.h"
#include "xtensa_memory.h"
#include "xtensa_sim.h"
+#include "target/xtensa/cpu-qom.h"
static uint64_t translate_phys_addr(void *opaque, uint64_t addr)
{
@@ -119,12 +120,17 @@ static void xtensa_sim_init(MachineState *machine)
static void xtensa_sim_machine_init(MachineClass *mc)
{
- mc->desc = "sim machine (" XTENSA_DEFAULT_CPU_MODEL ")";
+ if (target_big_endian()) {
+ mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("fsf");
+ mc->desc = "sim machine (fsf)";
+ } else {
+ mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("dc232b");
+ mc->desc = "sim machine (dc232b)";
+ }
mc->is_default = true;
mc->init = xtensa_sim_init;
mc->max_cpus = 4;
mc->no_serial = 1;
- mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
}
DEFINE_MACHINE("sim", xtensa_sim_machine_init)
diff --git a/hw/xtensa/virt.c b/hw/xtensa/virt.c
index 271f06e0953..2275953ce67 100644
--- a/hw/xtensa/virt.c
+++ b/hw/xtensa/virt.c
@@ -35,8 +35,10 @@
#include "elf.h"
#include "system/memory.h"
#include "qemu/error-report.h"
+#include "qemu/target-info.h"
#include "xtensa_memory.h"
#include "xtensa_sim.h"
+#include "target/xtensa/cpu-qom.h"
static void create_pcie(MachineState *ms, CPUXtensaState *env, int irq_base,
hwaddr addr_base)
@@ -117,10 +119,15 @@ static void xtensa_virt_init(MachineState *machine)
static void xtensa_virt_machine_init(MachineClass *mc)
{
- mc->desc = "virt machine (" XTENSA_DEFAULT_CPU_MODEL ")";
+ if (target_big_endian()) {
+ mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("fsf");
+ mc->desc = "virt machine (fsf)";
+ } else {
+ mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("dc232b");
+ mc->desc = "virt machine (dc232b)";
+ }
mc->init = xtensa_virt_init;
mc->max_cpus = 32;
- mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
mc->default_nic = "virtio-net-pci";
}
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index d427d68e505..5fd4d655557 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -51,6 +51,7 @@
#include "hw/xtensa/mx_pic.h"
#include "exec/cpu-common.h"
#include "migration/vmstate.h"
+#include "target/xtensa/cpu-qom.h"
typedef struct XtfpgaFlashDesc {
hwaddr base;
@@ -591,10 +592,10 @@ static void xtfpga_lx60_class_init(ObjectClass *oc, const void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->desc = g_strdup_printf("lx60 EVB (%s)", xtensa_default_cpu_model());
mc->init = xtfpga_lx60_init;
mc->max_cpus = 32;
- mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
+ mc->default_cpu_type = xtensa_default_cpu_model();
mc->default_ram_size = 64 * MiB;
}
@@ -625,10 +626,10 @@ static void xtfpga_lx200_class_init(ObjectClass *oc, const void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->desc = g_strdup_printf("lx200 EVB (%s)", xtensa_default_cpu_model());
mc->init = xtfpga_lx200_init;
mc->max_cpus = 32;
- mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
+ mc->default_cpu_type = xtensa_default_cpu_model();
mc->default_ram_size = 96 * MiB;
}
@@ -659,10 +660,10 @@ static void xtfpga_ml605_class_init(ObjectClass *oc, const void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->desc = g_strdup_printf("ml605 EVB (%s)", xtensa_default_cpu_model());
mc->init = xtfpga_ml605_init;
mc->max_cpus = 32;
- mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
+ mc->default_cpu_type = xtensa_default_cpu_model();
mc->default_ram_size = 512 * MiB - XTFPGA_MMU_RESERVED_MEMORY_SIZE;
}
@@ -693,10 +694,10 @@ static void xtfpga_kc705_class_init(ObjectClass *oc, const void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->desc = g_strdup_printf("kc705 EVB (%s)", xtensa_default_cpu_model());
mc->init = xtfpga_kc705_init;
mc->max_cpus = 32;
- mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
+ mc->default_cpu_type = xtensa_default_cpu_model();
mc->default_ram_size = 1 * GiB - XTFPGA_MMU_RESERVED_MEMORY_SIZE;
}
diff --git a/linux-user/xtensa/elfload.c b/linux-user/xtensa/elfload.c
index 68aeed855f9..9bb740d357e 100644
--- a/linux-user/xtensa/elfload.c
+++ b/linux-user/xtensa/elfload.c
@@ -4,11 +4,11 @@
#include "qemu.h"
#include "loader.h"
#include "target_elf.h"
-
+#include "target/xtensa/cpu-qom.h"
const char *get_elf_cpu_model(uint32_t eflags)
{
- return XTENSA_DEFAULT_CPU_MODEL;
+ return xtensa_default_cpu_model();
}
void elf_core_copy_regs(target_elf_gregset_t *r, const CPUXtensaState *env)
diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
index ecc5e093a40..6220edda976 100644
--- a/target/xtensa/cpu.c
+++ b/target/xtensa/cpu.c
@@ -29,6 +29,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/target-info.h"
#include "qapi/error.h"
#include "cpu.h"
#include "fpu/softfloat.h"
@@ -40,6 +41,10 @@
#include "system/memory.h"
#endif
+const char *xtensa_default_cpu_model(void)
+{
+ return target_big_endian() ? "fsf" : "dc232b";
+}
static void xtensa_cpu_set_pc(CPUState *cs, vaddr value)
{
--
2.52.0
On Wed, Jan 7, 2026 at 12:26 PM Philippe Mathieu-Daudé
<philmd@linaro.org> wrote:
>
> In order to remove the TARGET_BIG_ENDIAN use in "cpu.h",
> introduce the xtensa_default_cpu_model() helper which
> returns the current XTENSA_DEFAULT_CPU_MODEL but evaluating
> endianness at runtime. Update the machines using it.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> target/xtensa/cpu-qom.h | 2 ++
> target/xtensa/cpu.h | 4 ----
> hw/xtensa/sim.c | 10 ++++++++--
> hw/xtensa/virt.c | 11 +++++++++--
> hw/xtensa/xtfpga.c | 17 +++++++++--------
> linux-user/xtensa/elfload.c | 4 ++--
> target/xtensa/cpu.c | 5 +++++
> 7 files changed, 35 insertions(+), 18 deletions(-)
>
> diff --git a/target/xtensa/cpu-qom.h b/target/xtensa/cpu-qom.h
> index d932346b5fe..66992d08c2e 100644
> --- a/target/xtensa/cpu-qom.h
> +++ b/target/xtensa/cpu-qom.h
> @@ -38,4 +38,6 @@ OBJECT_DECLARE_CPU_TYPE(XtensaCPU, XtensaCPUClass, XTENSA_CPU)
> #define XTENSA_CPU_TYPE_SUFFIX "-" TYPE_XTENSA_CPU
> #define XTENSA_CPU_TYPE_NAME(model) model XTENSA_CPU_TYPE_SUFFIX
>
> +const char *xtensa_default_cpu_model(void);
> +
> #endif
> diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h
> index 22192924841..fe2f25e527c 100644
> --- a/target/xtensa/cpu.h
> +++ b/target/xtensa/cpu.h
> @@ -606,14 +606,10 @@ G_NORETURN void xtensa_cpu_do_unaligned_access(CPUState *cpu, vaddr addr,
> #define CPU_RESOLVING_TYPE TYPE_XTENSA_CPU
>
> #if TARGET_BIG_ENDIAN
> -#define XTENSA_DEFAULT_CPU_MODEL "fsf"
> #define XTENSA_DEFAULT_CPU_NOMMU_MODEL "fsf"
> #else
> -#define XTENSA_DEFAULT_CPU_MODEL "dc232b"
> #define XTENSA_DEFAULT_CPU_NOMMU_MODEL "de212"
> #endif
> -#define XTENSA_DEFAULT_CPU_TYPE \
> - XTENSA_CPU_TYPE_NAME(XTENSA_DEFAULT_CPU_MODEL)
> #define XTENSA_DEFAULT_CPU_NOMMU_TYPE \
> XTENSA_CPU_TYPE_NAME(XTENSA_DEFAULT_CPU_NOMMU_MODEL)
>
> diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c
> index 994460d0414..03dbe69c2d4 100644
> --- a/hw/xtensa/sim.c
> +++ b/hw/xtensa/sim.c
> @@ -36,6 +36,7 @@
> #include "qemu/error-report.h"
> #include "xtensa_memory.h"
> #include "xtensa_sim.h"
> +#include "target/xtensa/cpu-qom.h"
>
> static uint64_t translate_phys_addr(void *opaque, uint64_t addr)
> {
> @@ -119,12 +120,17 @@ static void xtensa_sim_init(MachineState *machine)
>
> static void xtensa_sim_machine_init(MachineClass *mc)
> {
> - mc->desc = "sim machine (" XTENSA_DEFAULT_CPU_MODEL ")";
> + if (target_big_endian()) {
> + mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("fsf");
> + mc->desc = "sim machine (fsf)";
> + } else {
> + mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("dc232b");
> + mc->desc = "sim machine (dc232b)";
> + }
> mc->is_default = true;
> mc->init = xtensa_sim_init;
> mc->max_cpus = 4;
> mc->no_serial = 1;
> - mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
> }
>
> DEFINE_MACHINE("sim", xtensa_sim_machine_init)
> diff --git a/hw/xtensa/virt.c b/hw/xtensa/virt.c
> index 271f06e0953..2275953ce67 100644
> --- a/hw/xtensa/virt.c
> +++ b/hw/xtensa/virt.c
> @@ -35,8 +35,10 @@
> #include "elf.h"
> #include "system/memory.h"
> #include "qemu/error-report.h"
> +#include "qemu/target-info.h"
> #include "xtensa_memory.h"
> #include "xtensa_sim.h"
> +#include "target/xtensa/cpu-qom.h"
>
> static void create_pcie(MachineState *ms, CPUXtensaState *env, int irq_base,
> hwaddr addr_base)
> @@ -117,10 +119,15 @@ static void xtensa_virt_init(MachineState *machine)
>
> static void xtensa_virt_machine_init(MachineClass *mc)
> {
> - mc->desc = "virt machine (" XTENSA_DEFAULT_CPU_MODEL ")";
> + if (target_big_endian()) {
> + mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("fsf");
> + mc->desc = "virt machine (fsf)";
> + } else {
> + mc->default_cpu_type = XTENSA_CPU_TYPE_NAME("dc232b");
> + mc->desc = "virt machine (dc232b)";
> + }
> mc->init = xtensa_virt_init;
> mc->max_cpus = 32;
> - mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
> mc->default_nic = "virtio-net-pci";
> }
>
> diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
> index d427d68e505..5fd4d655557 100644
> --- a/hw/xtensa/xtfpga.c
> +++ b/hw/xtensa/xtfpga.c
> @@ -51,6 +51,7 @@
> #include "hw/xtensa/mx_pic.h"
> #include "exec/cpu-common.h"
> #include "migration/vmstate.h"
> +#include "target/xtensa/cpu-qom.h"
>
> typedef struct XtfpgaFlashDesc {
> hwaddr base;
> @@ -591,10 +592,10 @@ static void xtfpga_lx60_class_init(ObjectClass *oc, const void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
>
> - mc->desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
> + mc->desc = g_strdup_printf("lx60 EVB (%s)", xtensa_default_cpu_model());
> mc->init = xtfpga_lx60_init;
> mc->max_cpus = 32;
> - mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
> + mc->default_cpu_type = xtensa_default_cpu_model();
Type was expected here, but model is supplied instead.
I wonder why xtfpga and sim/virt are done differently?
> mc->default_ram_size = 64 * MiB;
> }
>
> @@ -625,10 +626,10 @@ static void xtfpga_lx200_class_init(ObjectClass *oc, const void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
>
> - mc->desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
> + mc->desc = g_strdup_printf("lx200 EVB (%s)", xtensa_default_cpu_model());
> mc->init = xtfpga_lx200_init;
> mc->max_cpus = 32;
> - mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
> + mc->default_cpu_type = xtensa_default_cpu_model();
Same here.
> mc->default_ram_size = 96 * MiB;
> }
>
> @@ -659,10 +660,10 @@ static void xtfpga_ml605_class_init(ObjectClass *oc, const void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
>
> - mc->desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
> + mc->desc = g_strdup_printf("ml605 EVB (%s)", xtensa_default_cpu_model());
> mc->init = xtfpga_ml605_init;
> mc->max_cpus = 32;
> - mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
> + mc->default_cpu_type = xtensa_default_cpu_model();
And here.
> mc->default_ram_size = 512 * MiB - XTFPGA_MMU_RESERVED_MEMORY_SIZE;
> }
>
> @@ -693,10 +694,10 @@ static void xtfpga_kc705_class_init(ObjectClass *oc, const void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
>
> - mc->desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
> + mc->desc = g_strdup_printf("kc705 EVB (%s)", xtensa_default_cpu_model());
> mc->init = xtfpga_kc705_init;
> mc->max_cpus = 32;
> - mc->default_cpu_type = XTENSA_DEFAULT_CPU_TYPE;
> + mc->default_cpu_type = xtensa_default_cpu_model();
And here.
--
Thanks.
-- Max
© 2016 - 2026 Red Hat, Inc.