From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41013) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V1SZi-0008Hu-QZ for qemu-devel@nongnu.org; Mon, 22 Jul 2013 22:43:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V1SZh-0000ud-0s for qemu-devel@nongnu.org; Mon, 22 Jul 2013 22:43:42 -0400 Received: from cantor2.suse.de ([195.135.220.15]:49496 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V1SZg-0000u0-Mo for qemu-devel@nongnu.org; Mon, 22 Jul 2013 22:43:40 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Tue, 23 Jul 2013 04:43:22 +0200 Message-Id: <1374547404-11700-15-git-send-email-afaerber@suse.de> In-Reply-To: <1374547404-11700-1-git-send-email-afaerber@suse.de> References: <1374547404-11700-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v2 14/16] cpu/a15mpcore: Embed GICState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Paul Brook From: Andreas F=C3=A4rber This covers both emulated and KVM GIC. Prepares for QOM realize. Signed-off-by: Andreas F=C3=A4rber --- hw/cpu/a15mpcore.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/hw/cpu/a15mpcore.c b/hw/cpu/a15mpcore.c index c261cea..3f8b07b 100644 --- a/hw/cpu/a15mpcore.c +++ b/hw/cpu/a15mpcore.c @@ -20,6 +20,7 @@ =20 #include "hw/sysbus.h" #include "sysemu/kvm.h" +#include "hw/intc/arm_gic.h" =20 /* A15MP private memory region. */ =20 @@ -35,40 +36,48 @@ typedef struct A15MPPrivState { uint32_t num_cpu; uint32_t num_irq; MemoryRegion container; - DeviceState *gic; + + GICState gic; } A15MPPrivState; =20 static void a15mp_priv_set_irq(void *opaque, int irq, int level) { A15MPPrivState *s =3D (A15MPPrivState *)opaque; - qemu_set_irq(qdev_get_gpio_in(s->gic, irq), level); + + qemu_set_irq(qdev_get_gpio_in(DEVICE(&s->gic), irq), level); } =20 static void a15mp_priv_initfn(Object *obj) { SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); A15MPPrivState *s =3D A15MPCORE_PRIV(obj); + DeviceState *gicdev; + const char *gictype =3D "arm_gic"; + + if (kvm_irqchip_in_kernel()) { + gictype =3D "kvm-arm-gic"; + } =20 memory_region_init(&s->container, obj, "a15mp-priv-container", 0x800= 0); sysbus_init_mmio(sbd, &s->container); + + object_initialize(&s->gic, gictype); + gicdev =3D DEVICE(&s->gic); + qdev_set_parent_bus(gicdev, sysbus_get_default()); + qdev_prop_set_uint32(gicdev, "revision", 2); } =20 static int a15mp_priv_init(SysBusDevice *dev) { A15MPPrivState *s =3D A15MPCORE_PRIV(dev); + DeviceState *gicdev; SysBusDevice *busdev; - const char *gictype =3D "arm_gic"; - - if (kvm_irqchip_in_kernel()) { - gictype =3D "kvm-arm-gic"; - } =20 - s->gic =3D qdev_create(NULL, gictype); - qdev_prop_set_uint32(s->gic, "num-cpu", s->num_cpu); - qdev_prop_set_uint32(s->gic, "num-irq", s->num_irq); - qdev_prop_set_uint32(s->gic, "revision", 2); - qdev_init_nofail(s->gic); - busdev =3D SYS_BUS_DEVICE(s->gic); + gicdev =3D DEVICE(&s->gic); + qdev_prop_set_uint32(gicdev, "num-cpu", s->num_cpu); + qdev_prop_set_uint32(gicdev, "num-irq", s->num_irq); + qdev_init_nofail(gicdev); + busdev =3D SYS_BUS_DEVICE(&s->gic); =20 /* Pass through outbound IRQ lines from the GIC */ sysbus_pass_irq(dev, busdev); --=20 1.8.1.4