[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v3 4/9] spapr_pci: spapr_iommu: Make DMA window a subr
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-ppc] [PATCH v3 4/9] spapr_pci: spapr_iommu: Make DMA window a subregion |
Date: |
Tue, 27 May 2014 15:36:32 +1000 |
Currently the default DMA window is represented by a single MemoryRegion.
However there can be more than just one window so we need
a "root" memory region to be separated from the actual DMA window(s).
This introduces a "root" IOMMU memory region and adds a subregion for
the default DMA 32bit window. Following patches will add other
subregion(s).
This initializes a default DMA window subregion size to the guest RAM
size as this window can be switched into "bypass" mode which implements
direct DMA mapping.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
---
hw/ppc/spapr_iommu.c | 2 +-
hw/ppc/spapr_pci.c | 20 ++++++++++++++++++--
include/hw/pci-host/spapr.h | 1 +
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
index 7d537d3..5b7c141 100644
--- a/hw/ppc/spapr_iommu.c
+++ b/hw/ppc/spapr_iommu.c
@@ -136,7 +136,7 @@ static int spapr_tce_table_realize(DeviceState *dev)
trace_spapr_iommu_new_table(tcet->liobn, tcet, tcet->table, tcet->fd);
memory_region_init_iommu(&tcet->iommu, OBJECT(dev), &spapr_iommu_ops,
- "iommu-spapr", UINT64_MAX);
+ "iommu-spapr", ram_size);
QLIST_INSERT_HEAD(&spapr_tce_tables, tcet, list);
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index b141e83..f1684c2 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -610,6 +610,20 @@ static void spapr_phb_realize(DeviceState *dev, Error
**errp)
PCI_DEVFN(0, 0), PCI_NUM_PINS, TYPE_PCI_BUS);
phb->bus = bus;
+ /*
+ * Initialize PHB address space.
+ * By default there will be at least one subregion for default
+ * 32bit DMA window.
+ * Later the guest might want to create another DMA window
+ * which will become another memory subregion.
+ */
+ sprintf(namebuf, "%s.iommu-root", sphb->dtbusname);
+
+ memory_region_init(&sphb->iommu_root, OBJECT(sphb),
+ namebuf, UINT64_MAX);
+ address_space_init(&sphb->iommu_as, &sphb->iommu_root,
+ sphb->dtbusname);
+
pci_setup_iommu(bus, spapr_pci_dma_iommu, sphb);
pci_bus_set_route_irq_fn(bus, spapr_route_intx_pin_to_irq);
@@ -648,8 +662,10 @@ static void spapr_phb_finish_realize(sPAPRPHBState *sphb,
Error **errp)
sphb->dtbusname);
return ;
}
- address_space_init(&sphb->iommu_as, spapr_tce_get_iommu(sphb->tcet),
- sphb->dtbusname);
+
+ /* Register default 32bit DMA window */
+ memory_region_add_subregion(&sphb->iommu_root, 0,
+ spapr_tce_get_iommu(sphb->tcet));
}
static void spapr_phb_reset(DeviceState *qdev)
diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h
index ab29281..c98ebdf 100644
--- a/include/hw/pci-host/spapr.h
+++ b/include/hw/pci-host/spapr.h
@@ -64,6 +64,7 @@ typedef struct sPAPRPHBState {
uint64_t dma_window_size;
sPAPRTCETable *tcet;
AddressSpace iommu_as;
+ MemoryRegion iommu_root;
struct spapr_pci_lsi {
uint32_t irq;
--
1.8.4.rc4
- [Qemu-ppc] [PATCH v3 0/9] spapr_pci: Prepare for VFIO, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 3/9] spapr_pci: Introduce a finish_realize() callback, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 2/9] spapr_iommu: Enable multiple TCE requests, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 5/9] spapr_pci: Allow multiple TCE tables per PHB, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 6/9] spapr_iommu: Convert old qdev_init_nofail() to object_property_set_bool, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 8/9] spapr_iommu: Introduce page_shift in sPAPRTCETable, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 1/9] spapr: Enable dynamic change of the supported hypercalls list, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 4/9] spapr_pci: spapr_iommu: Make DMA window a subregion,
Alexey Kardashevskiy <=
- [Qemu-ppc] [PATCH v3 7/9] spapr_iommu: Get rid of window_size in sPAPRTCETable, Alexey Kardashevskiy, 2014/05/27
- [Qemu-ppc] [PATCH v3 9/9] spapr_iommu: Introduce bus_offset in sPAPRTCETable, Alexey Kardashevskiy, 2014/05/27
- Re: [Qemu-ppc] [PATCH v3 0/9] spapr_pci: Prepare for VFIO, Alexander Graf, 2014/05/28