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é <[email protected]> --- 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
