qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v7 14/14] sdhci: add a 'dma' property to the sysbus


From: Philippe Mathieu-Daudé
Subject: [Qemu-devel] [PATCH v7 14/14] sdhci: add a 'dma' property to the sysbus devices
Date: Sat, 13 Jan 2018 02:07:17 -0300

Add a 'dma' property allowing machine creation to provide the address-space
SDHCI DMA operates on.

[based on a patch from Alistair Francis <address@hidden>
 from qemu/xilinx tag xilinx-v2016.1]
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
---
 include/hw/sd/sdhci.h |  1 +
 hw/sd/sdhci.c         | 17 ++++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h
index 4a102b86ce..cb37182536 100644
--- a/include/hw/sd/sdhci.h
+++ b/include/hw/sd/sdhci.h
@@ -42,6 +42,7 @@ typedef struct SDHCIState {
     SDBus sdbus;
     MemoryRegion iomem;
     AddressSpace *dma_as;
+    MemoryRegion *dma_mr;
 
     QEMUTimer *insert_timer;       /* timer for 'changing' sd card. */
     QEMUTimer *transfer_timer;
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index 024b559f14..cfb4320509 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -1354,6 +1354,10 @@ static Property 
sdhci_sysbus_pending_insert_quirk_property =
      DEFINE_PROP_BOOL("pending-insert-quirk", SDHCIState,
                       pending_insert_quirk, false);
 
+static Property sdhci_sysbus_dma_mr_property =
+    DEFINE_PROP_LINK("dma", SDHCIState,
+                     dma_mr, TYPE_MEMORY_REGION, MemoryRegion *);
+
 static void sdhci_sysbus_init(Object *obj)
 {
     SDHCIState *s = SYSBUS_SDHCI(obj);
@@ -1363,11 +1367,19 @@ static void sdhci_sysbus_init(Object *obj)
     qdev_property_add_static(DEVICE(obj),
                              &sdhci_sysbus_pending_insert_quirk_property,
                              &error_abort);
+    qdev_property_add_static(DEVICE(obj),
+                             &sdhci_sysbus_dma_mr_property,
+                             &error_abort);
 }
 
 static void sdhci_sysbus_finalize(Object *obj)
 {
     SDHCIState *s = SYSBUS_SDHCI(obj);
+
+    if (s->dma_mr) {
+        object_unparent(OBJECT(s->dma_mr));
+    }
+
     sdhci_uninitfn(s);
 }
 
@@ -1382,7 +1394,10 @@ static void sdhci_sysbus_realize(DeviceState *dev, Error 
** errp)
     }
 
     s->dma_as = g_new0(AddressSpace, 1);
-    address_space_init(s->dma_as, get_system_memory(), "sdhci-dma");
+    /* use system_memory() if property "dma" not set */
+    address_space_init(s->dma_as,
+                       s->dma_mr ? s->dma_mr : get_system_memory(),
+                       "sdhci-dma");
 
     sysbus_init_irq(sbd, &s->irq);
     sysbus_init_mmio(sbd, &s->iomem);
-- 
2.15.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]