From nobody Wed Feb 11 07:26:24 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1508005113888475.29269170950784; Sat, 14 Oct 2017 11:18:33 -0700 (PDT) Received: from localhost ([::1]:54823 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e3R0z-0007j4-Qn for importer@patchew.org; Sat, 14 Oct 2017 14:18:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51880) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e3QsL-0001So-IE for qemu-devel@nongnu.org; Sat, 14 Oct 2017 14:09:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e3QsK-000315-EW for qemu-devel@nongnu.org; Sat, 14 Oct 2017 14:09:29 -0400 Received: from chuckie.co.uk ([82.165.15.123]:36828 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e3QsK-00030X-80 for qemu-devel@nongnu.org; Sat, 14 Oct 2017 14:09:28 -0400 Received: from host86-191-119-84.range86-191.btcentralplus.com ([86.191.119.84] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1e3QsO-0002Gl-7G; Sat, 14 Oct 2017 19:09:33 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, atar4qemu@gmail.com Date: Sat, 14 Oct 2017 19:09:00 +0100 Message-Id: <1508004545-28578-9-git-send-email-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1508004545-28578-1-git-send-email-mark.cave-ayland@ilande.co.uk> References: <1508004545-28578-1-git-send-email-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.191.119.84 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCHv2 08/13] sparc32_dma: make esp device child of espdma device X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This makes it possible to reference the esp device from the espdma device as required, and by wiring up the device ourselves in sun4m.c we can drop use of the esp_init() function. Signed-off-by: Mark Cave-Ayland --- hw/dma/sparc32_dma.c | 26 ++++++++++++++++++++++++++ hw/sparc/sun4m.c | 19 ++++++++----------- include/hw/sparc/sparc32_dma.h | 3 +++ 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c index c56a2ba..6009b94 100644 --- a/hw/dma/sparc32_dma.c +++ b/hw/dma/sparc32_dma.c @@ -298,11 +298,37 @@ static void sparc32_espdma_device_init(Object *obj) s->is_ledma =3D 0; } =20 +static void sparc32_espdma_device_realize(DeviceState *dev, Error **errp) +{ + DeviceState *d; + SysBusESPState *sysbus; + ESPState *esp; + + d =3D qdev_create(NULL, TYPE_ESP); + object_property_add_child(OBJECT(dev), "esp", OBJECT(d), errp); + sysbus =3D ESP_STATE(d); + esp =3D &sysbus->esp; + esp->dma_memory_read =3D espdma_memory_read; + esp->dma_memory_write =3D espdma_memory_write; + esp->dma_opaque =3D SPARC32_DMA_DEVICE(dev); + sysbus->it_shift =3D 2; + esp->dma_enabled =3D 1; + qdev_init_nofail(d); +} + +static void sparc32_espdma_device_class_init(ObjectClass *klass, void *dat= a) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D sparc32_espdma_device_realize; +} + static const TypeInfo sparc32_espdma_device_info =3D { .name =3D TYPE_SPARC32_ESPDMA_DEVICE, .parent =3D TYPE_SPARC32_DMA_DEVICE, .instance_size =3D sizeof(ESPDMADeviceState), .instance_init =3D sparc32_espdma_device_init, + .class_init =3D sparc32_espdma_device_class_init, }; =20 static void sparc32_ledma_device_init(Object *obj) diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 12d36b5..4626c85 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -819,10 +819,9 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hw= def, const char *cpu_model =3D machine->cpu_model; unsigned int i; void *iommu, *nvram; - DeviceState *espdma, *ledma; + DeviceState *espdma, *esp, *ledma; SysBusDevice *sbd; qemu_irq *cpu_irqs[MAX_CPUS], slavio_irq[32], slavio_cpu_irq[MAX_CPUS]; - qemu_irq esp_reset, dma_enable; qemu_irq fdc_tc; unsigned long kernel_size; DriveInfo *fd[MAX_FD]; @@ -884,6 +883,13 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hw= def, sbd =3D SYS_BUS_DEVICE(espdma); sysbus_connect_irq(sbd, 0, slavio_irq[18]); =20 + esp =3D DEVICE(object_resolve_path_component(OBJECT(espdma), "esp")); + sbd =3D SYS_BUS_DEVICE(esp); + sysbus_mmio_map(sbd, 0, hwdef->esp_base); + sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(espdma, 0)); + qdev_connect_gpio_out(espdma, 0, qdev_get_gpio_in(esp, 0)); + qdev_connect_gpio_out(espdma, 1, qdev_get_gpio_in(esp, 1)); + ledma =3D sparc32_dma_init(hwdef->dma_base + 16ULL, iommu, 1); sbd =3D SYS_BUS_DEVICE(ledma); sysbus_connect_irq(sbd, 0, slavio_irq[16]); @@ -970,15 +976,6 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hw= def, slavio_misc_init(hwdef->slavio_base, hwdef->aux1_base, hwdef->aux2_bas= e, slavio_irq[30], fdc_tc); =20 - esp_init(hwdef->esp_base, 2, - espdma_memory_read, espdma_memory_write, - espdma, - qdev_get_gpio_in(espdma, 0), - &esp_reset, &dma_enable); - - qdev_connect_gpio_out(espdma, 0, esp_reset); - qdev_connect_gpio_out(espdma, 1, dma_enable); - if (hwdef->cs_base) { sysbus_create_simple("SUNW,CS4231", hwdef->cs_base, slavio_irq[5]); diff --git a/include/hw/sparc/sparc32_dma.h b/include/hw/sparc/sparc32_dma.h index df7491d..365160f 100644 --- a/include/hw/sparc/sparc32_dma.h +++ b/include/hw/sparc/sparc32_dma.h @@ -2,6 +2,7 @@ #define SPARC32_DMA_H =20 #include "hw/sysbus.h" +#include "hw/scsi/esp.h" =20 #define DMA_REGS 4 =20 @@ -28,6 +29,8 @@ struct DMADeviceState { =20 typedef struct ESPDMADeviceState { DMADeviceState parent_obj; + + SysBusESPState *esp; } ESPDMADeviceState; =20 #define TYPE_SPARC32_LEDMA_DEVICE "sparc32-ledma" --=20 1.7.10.4