From patchwork Tue Feb 24 07:03:48 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 442813 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4E244140111 for ; Tue, 24 Feb 2015 18:04:17 +1100 (AEDT) Received: from localhost ([::1]:47057 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YQ9XT-00088h-9c for incoming@patchwork.ozlabs.org; Tue, 24 Feb 2015 02:04:15 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51074) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YQ9XA-0007qF-PZ for qemu-devel@nongnu.org; Tue, 24 Feb 2015 02:03:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YQ9X5-0003ez-Q9 for qemu-devel@nongnu.org; Tue, 24 Feb 2015 02:03:56 -0500 Received: from david.siemens.de ([192.35.17.14]:44416) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YQ9X5-0003eh-Gy for qemu-devel@nongnu.org; Tue, 24 Feb 2015 02:03:51 -0500 Received: from mail1.siemens.de (localhost [127.0.0.1]) by david.siemens.de (8.14.3/8.14.3) with ESMTP id t1O73nZS011048; Tue, 24 Feb 2015 08:03:49 +0100 Received: from md1f2u6c.ww002.siemens.net (md1641zc.ww300.siemens.net [139.22.34.185]) by mail1.siemens.de (8.14.3/8.14.3) with SMTP id t1O73mhI025740; Tue, 24 Feb 2015 08:03:49 +0100 Message-ID: <54EC2254.1050404@siemens.com> Date: Tue, 24 Feb 2015 08:03:48 +0100 From: Jan Kiszka User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: qemu-devel , Peter Maydell References: <204ed3a318d3d1164374f575970dae3badd20d40.1424694115.git.jan.kiszka@siemens.com> In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 192.35.17.14 Cc: Peter Crosthwaite Subject: [Qemu-devel] [PATCH v4 1/2] integrator/cp: Model CP control registers as sysbus device X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org No new features yet, just encapsulation. Signed-off-by: Jan Kiszka Reviewed-by: Peter Crosthwaite --- Changes in v4: - fixed up type name as Peter suggested hw/arm/integratorcp.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index 8c48b68..5c44c34 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -406,6 +406,18 @@ static int icp_pic_init(SysBusDevice *sbd) /* CP control registers. */ +#define TYPE_ICP_CONTROL_REGS "icp-ctrl-regs" +#define ICP_CONTROL_REGS(obj) \ + OBJECT_CHECK(ICPCtrlRegsState, (obj), TYPE_ICP_CONTROL_REGS) + +typedef struct ICPCtrlRegsState { + /*< private >*/ + SysBusDevice parent_obj; + /*< public >*/ + + MemoryRegion iomem; +} ICPCtrlRegsState; + static uint64_t icp_control_read(void *opaque, hwaddr offset, unsigned size) { @@ -444,15 +456,14 @@ static const MemoryRegionOps icp_control_ops = { .endianness = DEVICE_NATIVE_ENDIAN, }; -static void icp_control_init(hwaddr base) +static void icp_control_init(Object *obj) { - MemoryRegion *io; + SysBusDevice *sbd = SYS_BUS_DEVICE(obj); + ICPCtrlRegsState *s = ICP_CONTROL_REGS(obj); - io = (MemoryRegion *)g_malloc0(sizeof(MemoryRegion)); - memory_region_init_io(io, NULL, &icp_control_ops, NULL, - "control", 0x00800000); - memory_region_add_subregion(get_system_memory(), base, io); - /* ??? Save/restore. */ + memory_region_init_io(&s->iomem, OBJECT(s), &icp_control_ops, s, + "icp_ctrl_regs", 0x00800000); + sysbus_init_mmio(sbd, &s->iomem); } @@ -541,7 +552,7 @@ static void integratorcp_init(MachineState *machine) sysbus_create_simple("pl031", 0x15000000, pic[8]); sysbus_create_simple("pl011", 0x16000000, pic[1]); sysbus_create_simple("pl011", 0x17000000, pic[2]); - icp_control_init(0xcb000000); + sysbus_create_simple(TYPE_ICP_CONTROL_REGS, 0xcb000000, NULL); sysbus_create_simple("pl050_keyboard", 0x18000000, pic[3]); sysbus_create_simple("pl050_mouse", 0x19000000, pic[4]); sysbus_create_simple(TYPE_INTEGRATOR_DEBUG, 0x1a000000, 0); @@ -606,10 +617,18 @@ static const TypeInfo icp_pic_info = { .class_init = icp_pic_class_init, }; +static const TypeInfo icp_ctrl_regs_info = { + .name = TYPE_ICP_CONTROL_REGS, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(ICPCtrlRegsState), + .instance_init = icp_control_init, +}; + static void integratorcp_register_types(void) { type_register_static(&icp_pic_info); type_register_static(&core_info); + type_register_static(&icp_ctrl_regs_info); } type_init(integratorcp_register_types)