Clarifies current CPU model names, assuming 32-bit HPPA runs a PA-7300LC
whereas 64-bit runs a PA-8700. The PA-8500 model is added, which will
later be used by the A400 machine. All CPU models are made into children
of the now abstract TYPE_HPPA_CPU base class.
References to "hppa/hppa64" models in test cases are also updated.
Signed-off-by: Anton Johansson <anjo@rev.ng>
---
target/hppa/cpu-qom.h | 8 +++++++-
hw/hppa/machine.c | 21 +++++++++++++--------
linux-user/hppa/elfload.c | 2 +-
target/hppa/cpu.c | 25 ++++++++++++++++++++-----
tests/qtest/machine-none-test.c | 2 +-
5 files changed, 42 insertions(+), 16 deletions(-)
diff --git a/target/hppa/cpu-qom.h b/target/hppa/cpu-qom.h
index 5c454bf543..7541c25b3d 100644
--- a/target/hppa/cpu-qom.h
+++ b/target/hppa/cpu-qom.h
@@ -23,7 +23,13 @@
#include "hw/core/cpu.h"
#define TYPE_HPPA_CPU "hppa-cpu"
-#define TYPE_HPPA64_CPU "hppa64-cpu"
+
+#define HPPA_CPU_TYPE_SUFFIX "-" TYPE_HPPA_CPU
+#define HPPA_CPU_TYPE_NAME(name) (name HPPA_CPU_TYPE_SUFFIX)
+
+#define TYPE_HPPA_CPU_PA_7300LC HPPA_CPU_TYPE_NAME("pa-7300lc")
+#define TYPE_HPPA_CPU_PA_8500 HPPA_CPU_TYPE_NAME("pa-8500")
+#define TYPE_HPPA_CPU_PA_8700 HPPA_CPU_TYPE_NAME("pa-8700")
OBJECT_DECLARE_CPU_TYPE(HPPACPU, HPPACPUClass, HPPA_CPU)
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index f55e84529f..5d0d4de09e 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -801,13 +801,13 @@ static void hppa_machine_common_class_init(ObjectClass *oc, const void *data)
static void HP_B160L_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA_CPU,
+ TYPE_HPPA_CPU_PA_7300LC,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP B160L workstation";
- mc->default_cpu_type = TYPE_HPPA_CPU;
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_7300LC;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_B160L_init;
mc->is_default = true;
@@ -817,13 +817,13 @@ static void HP_B160L_machine_init_class_init(ObjectClass *oc, const void *data)
static void HP_C3700_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA64_CPU,
+ TYPE_HPPA_CPU_PA_8700,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP C3700 workstation";
- mc->default_cpu_type = TYPE_HPPA64_CPU;
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_8700;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_C3700_init;
mc->max_cpus = HPPA_MAX_CPUS;
@@ -833,13 +833,13 @@ static void HP_C3700_machine_init_class_init(ObjectClass *oc, const void *data)
static void HP_A400_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA64_CPU,
+ TYPE_HPPA_CPU_PA_8500,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP A400-44 workstation";
- mc->default_cpu_type = TYPE_HPPA64_CPU;
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_8500;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_A400_init;
mc->max_cpus = HPPA_MAX_CPUS;
@@ -849,13 +849,18 @@ static void HP_A400_machine_init_class_init(ObjectClass *oc, const void *data)
static void HP_715_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA_CPU,
+ TYPE_HPPA_CPU_PA_7300LC,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP 715/64 workstation";
- mc->default_cpu_type = TYPE_HPPA_CPU;
+ /*
+ * Although the 715 workstation should use a 7100LC, it can be safely
+ * modeled as a 7300LC as the difference is a moving of the L1 data cache
+ * to on-chip.
+ */
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_7300LC;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_715_init;
/* can only support up to max. 8 CPUs due inventory major numbers */
diff --git a/linux-user/hppa/elfload.c b/linux-user/hppa/elfload.c
index 4600708702..7f7ece6dc1 100644
--- a/linux-user/hppa/elfload.c
+++ b/linux-user/hppa/elfload.c
@@ -8,7 +8,7 @@
const char *get_elf_cpu_model(uint32_t eflags)
{
- return "hppa";
+ return "pa-7300lc";
}
const char *get_elf_platform(CPUState *cs)
diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c
index 714f3bbdaf..910a919923 100644
--- a/target/hppa/cpu.c
+++ b/target/hppa/cpu.c
@@ -207,7 +207,9 @@ static void hppa_cpu_initfn(Object *obj)
{
CPUHPPAState *env = cpu_env(CPU(obj));
- env->is_pa20 = !!object_dynamic_cast(obj, TYPE_HPPA64_CPU);
+ env->is_pa20 = !!object_dynamic_cast(obj, TYPE_HPPA_CPU_PA_8500) ||
+ !!object_dynamic_cast(obj, TYPE_HPPA_CPU_PA_8700);
+
}
static void hppa_cpu_reset_hold(Object *obj, ResetType type)
@@ -236,9 +238,14 @@ static void hppa_cpu_reset_hold(Object *obj, ResetType type)
static ObjectClass *hppa_cpu_class_by_name(const char *cpu_model)
{
- g_autofree char *typename = g_strconcat(cpu_model, "-cpu", NULL);
+ ObjectClass *oc;
+ char *typename;
+
+ typename = g_strdup_printf(HPPA_CPU_TYPE_NAME("%s"), cpu_model);
+ oc = object_class_by_name(typename);
+ g_free(typename);
- return object_class_by_name(typename);
+ return oc;
}
#ifndef CONFIG_USER_ONLY
@@ -314,12 +321,20 @@ static const TypeInfo hppa_cpu_type_infos[] = {
.instance_size = sizeof(HPPACPU),
.instance_align = __alignof(HPPACPU),
.instance_init = hppa_cpu_initfn,
- .abstract = false,
+ .abstract = true,
.class_size = sizeof(HPPACPUClass),
.class_init = hppa_cpu_class_init,
},
{
- .name = TYPE_HPPA64_CPU,
+ .name = TYPE_HPPA_CPU_PA_7300LC,
+ .parent = TYPE_HPPA_CPU,
+ },
+ {
+ .name = TYPE_HPPA_CPU_PA_8500,
+ .parent = TYPE_HPPA_CPU,
+ },
+ {
+ .name = TYPE_HPPA_CPU_PA_8700,
.parent = TYPE_HPPA_CPU,
},
};
diff --git a/tests/qtest/machine-none-test.c b/tests/qtest/machine-none-test.c
index b6a87d27ed..f871056fa4 100644
--- a/tests/qtest/machine-none-test.c
+++ b/tests/qtest/machine-none-test.c
@@ -48,7 +48,7 @@ static struct arch2cpu cpus_map[] = {
{ "tricore", "tc1796" },
{ "xtensa", "dc233c" },
{ "xtensaeb", "fsf" },
- { "hppa", "hppa" },
+ { "hppa", "pa-7300lc" },
{ "riscv64", "rv64" },
{ "riscv32", "rv32" },
{ "rx", "rx62n" },
--
2.52.0
On 3/2/26 12:56, Anton Johansson wrote: > Clarifies current CPU model names, assuming 32-bit HPPA runs a PA-7300LC > whereas 64-bit runs a PA-8700. The PA-8500 model is added, which will > later be used by the A400 machine. All CPU models are made into children > of the now abstract TYPE_HPPA_CPU base class. > > References to "hppa/hppa64" models in test cases are also updated. > > Signed-off-by: Anton Johansson <anjo@rev.ng> > --- > target/hppa/cpu-qom.h | 8 +++++++- > hw/hppa/machine.c | 21 +++++++++++++-------- > linux-user/hppa/elfload.c | 2 +- > target/hppa/cpu.c | 25 ++++++++++++++++++++----- > tests/qtest/machine-none-test.c | 2 +- > 5 files changed, 42 insertions(+), 16 deletions(-) Reviewed-by: Helge Deller <deller@gmx.de>
© 2016 - 2026 Red Hat, Inc.