From: Eduardo Habkost <ehabkost@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org, Igor Mammedov <imammedo@redhat.com>
Subject: [Qemu-devel] [PULL 08/29] sparc: convert cpu features to qdev properties
Date: Fri, 1 Sep 2017 12:02:56 -0300 [thread overview]
Message-ID: <20170901150317.10380-9-ehabkost@redhat.com> (raw)
In-Reply-To: <20170901150317.10380-1-ehabkost@redhat.com>
From: Igor Mammedov <imammedo@redhat.com>
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 <imammedo@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <1503592308-93913-5-git-send-email-imammedo@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
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
next prev parent reply other threads:[~2017-09-01 15:03 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-01 15:02 [Qemu-devel] [PULL 00/29] x86 & cpu queue, 2017-09-01 Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 01/29] qom: Remove unused errp parameter from can_be_deleted() Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 02/29] cpu: cpu_by_arch_id() helper Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 03/29] hmp: allow apic-id for "info lapic" Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 04/29] target-i386/cpu: Add new EPYC CPU model Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 05/29] qom: cpu: fix parsed feature string length Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 06/29] sparc: convert cpu models to SPARC cpu subclasses Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 07/29] sparc: embed sparc_def_t into CPUSPARCState Eduardo Habkost
2017-09-01 15:02 ` Eduardo Habkost [this message]
2017-09-01 15:02 ` [Qemu-devel] [PULL 09/29] sparc: move adhoc CPUSPARCState initialization to realize time Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 10/29] sparc: make cpu feature parsing property based Eduardo Habkost
2017-09-01 15:02 ` [Qemu-devel] [PULL 11/29] sparc: replace cpu_sparc_init() with cpu_generic_init() Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 12/29] s390x: replace cpu_s390x_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 13/29] alpha: replace cpu_alpha_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 14/29] hppa: replace cpu_hppa_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 15/29] m68k: replace cpu_m68k_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 16/29] microblaze: replace cpu_mb_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 17/29] nios2: replace cpu_nios2_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 18/29] tilegx: replace cpu_tilegx_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 19/29] xtensa: replace cpu_xtensa_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 20/29] tricore: replace cpu_tricore_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 21/29] sh4: replace cpu_sh4_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 22/29] arm: replace cpu_arm_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 23/29] cris: replace cpu_cris_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 24/29] x86: replace cpu_x86_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 25/29] lm32: replace cpu_lm32_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 26/29] moxie: replace cpu_moxie_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 27/29] openrisc: replace cpu_openrisc_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 28/29] unicore32: replace uc32_cpu_init() " Eduardo Habkost
2017-09-01 15:03 ` [Qemu-devel] [PULL 29/29] ppc: replace cpu_ppc_init() " Eduardo Habkost
2017-09-04 8:41 ` [Qemu-devel] [PULL 00/29] x86 & cpu queue, 2017-09-01 Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170901150317.10380-9-ehabkost@redhat.com \
--to=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).