[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 08/29] sparc: convert cpu features to qdev properties
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL 08/29] sparc: convert cpu features to qdev properties |
Date: |
Fri, 1 Sep 2017 12:02:56 -0300 |
From: Igor Mammedov <address@hidden>
SPARC is the last target that uses legacy way of parsing
and initializing cpu features, drop legacy approach and
convert features to properties so that SPARC could as minimum
benefit from generic cpu_generic_init(), common with
x86 +-feat parser
PS:
the main purpose is to remove legacy way of cpu creation as
a blocker for unifying cpu creation code across targets.
Signed-off-by: Igor Mammedov <address@hidden>
Reviewed-by: Eduardo Habkost <address@hidden>
Tested-by: Philippe Mathieu-Daudé <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
target/sparc/cpu.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 281a99f8dd..82ab5ad8d9 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -22,6 +22,8 @@
#include "cpu.h"
#include "qemu/error-report.h"
#include "exec/exec-all.h"
+#include "hw/qdev-properties.h"
+#include "qapi/visitor.h"
//#define DEBUG_FEATURES
@@ -852,6 +854,69 @@ static void sparc_cpu_initfn(Object *obj)
}
}
+static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ SPARCCPU *cpu = SPARC_CPU(obj);
+ int64_t value = cpu->env.def.nwindows;
+
+ visit_type_int(v, name, &value, errp);
+}
+
+static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ const int64_t min = MIN_NWINDOWS;
+ const int64_t max = MAX_NWINDOWS;
+ SPARCCPU *cpu = SPARC_CPU(obj);
+ Error *err = NULL;
+ int64_t value;
+
+ visit_type_int(v, name, &value, &err);
+ if (err) {
+ error_propagate(errp, err);
+ return;
+ }
+
+ if (value < min || value > max) {
+ error_setg(errp, "Property %s.%s doesn't take value %" PRId64
+ " (minimum: %" PRId64 ", maximum: %" PRId64 ")",
+ object_get_typename(obj), name ? name : "null",
+ value, min, max);
+ return;
+ }
+ cpu->env.def.nwindows = value;
+}
+
+static PropertyInfo qdev_prop_nwindows = {
+ .name = "int",
+ .get = sparc_get_nwindows,
+ .set = sparc_set_nwindows,
+};
+
+static Property sparc_cpu_properties[] = {
+ DEFINE_PROP_BIT("float", SPARCCPU, env.def.features, 0, false),
+ DEFINE_PROP_BIT("float128", SPARCCPU, env.def.features, 1, false),
+ DEFINE_PROP_BIT("swap", SPARCCPU, env.def.features, 2, false),
+ DEFINE_PROP_BIT("mul", SPARCCPU, env.def.features, 3, false),
+ DEFINE_PROP_BIT("div", SPARCCPU, env.def.features, 4, false),
+ DEFINE_PROP_BIT("flush", SPARCCPU, env.def.features, 5, false),
+ DEFINE_PROP_BIT("fsqrt", SPARCCPU, env.def.features, 6, false),
+ DEFINE_PROP_BIT("fmul", SPARCCPU, env.def.features, 7, false),
+ DEFINE_PROP_BIT("vis1", SPARCCPU, env.def.features, 8, false),
+ DEFINE_PROP_BIT("vis2", SPARCCPU, env.def.features, 9, false),
+ DEFINE_PROP_BIT("fsmuld", SPARCCPU, env.def.features, 10, false),
+ DEFINE_PROP_BIT("hypv", SPARCCPU, env.def.features, 11, false),
+ DEFINE_PROP_BIT("cmt", SPARCCPU, env.def.features, 12, false),
+ DEFINE_PROP_BIT("gl", SPARCCPU, env.def.features, 13, false),
+ DEFINE_PROP_UNSIGNED("iu-version", SPARCCPU, env.def.iu_version, 0,
+ qdev_prop_uint64, target_ulong),
+ DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
+ DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
+ { .name = "nwindows", .info = &qdev_prop_nwindows },
+ DEFINE_PROP_END_OF_LIST()
+};
+
static void sparc_cpu_class_init(ObjectClass *oc, void *data)
{
SPARCCPUClass *scc = SPARC_CPU_CLASS(oc);
@@ -860,6 +925,7 @@ static void sparc_cpu_class_init(ObjectClass *oc, void
*data)
scc->parent_realize = dc->realize;
dc->realize = sparc_cpu_realizefn;
+ dc->props = sparc_cpu_properties;
scc->parent_reset = cc->reset;
cc->reset = sparc_cpu_reset;
--
2.13.5
- [Qemu-devel] [PULL 00/29] x86 & cpu queue, 2017-09-01, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 03/29] hmp: allow apic-id for "info lapic", Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 02/29] cpu: cpu_by_arch_id() helper, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 01/29] qom: Remove unused errp parameter from can_be_deleted(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 05/29] qom: cpu: fix parsed feature string length, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 04/29] target-i386/cpu: Add new EPYC CPU model, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 07/29] sparc: embed sparc_def_t into CPUSPARCState, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 06/29] sparc: convert cpu models to SPARC cpu subclasses, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 08/29] sparc: convert cpu features to qdev properties,
Eduardo Habkost <=
- [Qemu-devel] [PULL 09/29] sparc: move adhoc CPUSPARCState initialization to realize time, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 10/29] sparc: make cpu feature parsing property based, Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 11/29] sparc: replace cpu_sparc_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 14/29] hppa: replace cpu_hppa_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 12/29] s390x: replace cpu_s390x_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 13/29] alpha: replace cpu_alpha_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 15/29] m68k: replace cpu_m68k_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 16/29] microblaze: replace cpu_mb_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 17/29] nios2: replace cpu_nios2_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01
- [Qemu-devel] [PULL 19/29] xtensa: replace cpu_xtensa_init() with cpu_generic_init(), Eduardo Habkost, 2017/09/01