[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH qemu v15 09/17] spapr_pci: Reset DMA config on PHB res
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-ppc] [PATCH qemu v15 09/17] spapr_pci: Reset DMA config on PHB reset |
Date: |
Mon, 4 Apr 2016 19:33:38 +1000 |
LoPAPR dictates that during system reset all DMA windows must be removed
and the default DMA32 window must be created so does the patch.
At the moment there is just one window supported so no change in
behaviour is expected.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
Reviewed-by: David Gibson <address@hidden>
---
hw/ppc/spapr_iommu.c | 2 +-
hw/ppc/spapr_pci.c | 17 +++++++++++------
include/hw/ppc/spapr.h | 1 +
3 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
index 740836f..5ce2f5e 100644
--- a/hw/ppc/spapr_iommu.c
+++ b/hw/ppc/spapr_iommu.c
@@ -358,7 +358,7 @@ static void spapr_tce_table_do_disable(sPAPRTCETable *tcet)
tcet->nb_table = 0;
}
-static void spapr_tce_table_disable(sPAPRTCETable *tcet)
+void spapr_tce_table_disable(sPAPRTCETable *tcet)
{
if (!tcet->enabled) {
error_report("Warning: trying to disable already disabled TCE table");
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index bc1d549..f55efd7 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -1308,7 +1308,6 @@ static void spapr_phb_realize(DeviceState *dev, Error
**errp)
PCIBus *bus;
uint64_t msi_window_size = 4096;
sPAPRTCETable *tcet;
- uint32_t nb_table;
if (sphb->index != (uint32_t)-1) {
hwaddr windows_base;
@@ -1460,7 +1459,6 @@ static void spapr_phb_realize(DeviceState *dev, Error
**errp)
}
}
- nb_table = sphb->dma_win_size >> SPAPR_TCE_PAGE_SHIFT;
tcet = spapr_tce_new_table(DEVICE(sphb), sphb->dma_liobn);
if (!tcet) {
error_setg(errp, "Unable to create TCE table for %s",
@@ -1471,10 +1469,6 @@ static void spapr_phb_realize(DeviceState *dev, Error
**errp)
memory_region_add_subregion_overlap(&sphb->iommu_root, 0,
spapr_tce_get_iommu(tcet), 0);
- /* Register default 32bit DMA window */
- spapr_tce_table_enable(tcet, SPAPR_TCE_PAGE_SHIFT, sphb->dma_win_addr,
- nb_table);
-
sphb->msi = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_free);
}
@@ -1491,6 +1485,17 @@ static int spapr_phb_children_reset(Object *child, void
*opaque)
static void spapr_phb_reset(DeviceState *qdev)
{
+ sPAPRPHBState *sphb = SPAPR_PCI_HOST_BRIDGE(qdev);
+ sPAPRTCETable *tcet = spapr_tce_find_by_liobn(sphb->dma_liobn);
+
+ if (tcet && tcet->enabled) {
+ spapr_tce_table_disable(tcet);
+ }
+
+ /* Register default 32bit DMA window */
+ spapr_tce_table_enable(tcet, SPAPR_TCE_PAGE_SHIFT, sphb->dma_win_addr,
+ sphb->dma_win_size >> SPAPR_TCE_PAGE_SHIFT);
+
/* Reset the IOMMU state */
object_child_foreach(OBJECT(qdev), spapr_phb_children_reset, NULL);
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index e9cdfe3..471eb4a 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -573,6 +573,7 @@ sPAPRTCETable *spapr_tce_new_table(DeviceState *owner,
uint32_t liobn);
void spapr_tce_table_enable(sPAPRTCETable *tcet,
uint32_t page_shift, uint64_t bus_offset,
uint32_t nb_table);
+void spapr_tce_table_disable(sPAPRTCETable *tcet);
void spapr_tce_set_need_vfio(sPAPRTCETable *tcet, bool need_vfio);
MemoryRegion *spapr_tce_get_iommu(sPAPRTCETable *tcet);
--
2.5.0.rc3
- [Qemu-ppc] [PATCH qemu v15 02/17] vmstate: Define VARRAY with VMS_ALLOC, (continued)
- [Qemu-ppc] [PATCH qemu v15 02/17] vmstate: Define VARRAY with VMS_ALLOC, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 10/17] memory: Add reporting of supported page sizes, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 06/17] spapr_iommu: Finish renaming vfio_accel to need_vfio, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 12/17] spapr_pci: Add and export DMA resetting helper, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 15/17] spapr_pci: Get rid of dma_loibn, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 05/17] spapr_iommu: Introduce "enabled" state for TCE table, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 09/17] spapr_pci: Reset DMA config on PHB reset,
Alexey Kardashevskiy <=
- [Qemu-ppc] [PATCH qemu v15 07/17] spapr_iommu: Migrate full state, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 04/17] spapr_iommu: Move table allocation to helpers, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 13/17] vfio: Add host side DMA window capabilities, Alexey Kardashevskiy, 2016/04/04
- [Qemu-ppc] [PATCH qemu v15 14/17] spapr_iommu, vfio, memory: Notify IOMMU about starting/stopping being used by VFIO, Alexey Kardashevskiy, 2016/04/04
- Re: [Qemu-ppc] [PATCH qemu v15 14/17] spapr_iommu, vfio, memory: Notify IOMMU about starting/stopping being used by VFIO, David Gibson, 2016/04/06
- Re: [Qemu-ppc] [PATCH qemu v15 14/17] spapr_iommu, vfio, memory: Notify IOMMU about starting/stopping being used by VFIO, Alexey Kardashevskiy, 2016/04/20
- Re: [Qemu-ppc] [PATCH qemu v15 14/17] spapr_iommu, vfio, memory: Notify IOMMU about starting/stopping being used by VFIO, David Gibson, 2016/04/21
- Re: [Qemu-ppc] [PATCH qemu v15 14/17] spapr_iommu, vfio, memory: Notify IOMMU about starting/stopping being used by VFIO, Alexey Kardashevskiy, 2016/04/21