[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PATCH v5 04/17] spapr/pci: Generate FDT fragment at config
From: |
Greg Kurz |
Subject: |
[qemu-s390x] [PATCH v5 04/17] spapr/pci: Generate FDT fragment at configure connector time |
Date: |
Tue, 19 Feb 2019 18:17:53 +0100 |
User-agent: |
StGit/unknown-version |
Signed-off-by: Greg Kurz <address@hidden>
---
hw/ppc/spapr_drc.c | 1 +
hw/ppc/spapr_pci.c | 19 ++++++++++++-------
include/hw/pci-host/spapr.h | 4 +++-
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index aa26aa40be39..248eb8a93d6d 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -691,6 +691,7 @@ static void spapr_drc_pci_class_init(ObjectClass *k, void
*data)
drck->typename = "28";
drck->drc_name_prefix = "C";
drck->release = spapr_phb_remove_pci_device_cb;
+ drck->dt_populate = spapr_pci_dt_populate;
}
static void spapr_drc_lmb_class_init(ObjectClass *k, void *data)
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 60777b2355db..b22c9f57b2dd 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -1408,6 +1408,17 @@ static uint32_t
spapr_phb_get_pci_drc_index(sPAPRPHBState *phb,
return spapr_drc_index(drc);
}
+int spapr_pci_dt_populate(sPAPRDRConnector *drc, sPAPRMachineState *spapr,
+ void *fdt, int *fdt_start_offset, Error **errp)
+{
+ HotplugHandler *plug_handler = qdev_get_hotplug_handler(drc->dev);
+ sPAPRPHBState *sphb = SPAPR_PCI_HOST_BRIDGE(plug_handler);
+ PCIDevice *pdev = PCI_DEVICE(drc->dev);
+
+ *fdt_start_offset = spapr_create_pci_child_dt(sphb, pdev, fdt, 0);
+ return 0;
+}
+
static void spapr_pci_plug(HotplugHandler *plug_handler,
DeviceState *plugged_dev, Error **errp)
{
@@ -1417,8 +1428,6 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
Error *local_err = NULL;
PCIBus *bus = PCI_BUS(qdev_get_parent_bus(DEVICE(pdev)));
uint32_t slotnr = PCI_SLOT(pdev->devfn);
- void *fdt = NULL;
- int fdt_start_offset, fdt_size;
/* if DR is disabled we don't need to do anything in the case of
* hotplug or coldplug callbacks
@@ -1448,10 +1457,7 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
goto out;
}
- fdt = create_device_tree(&fdt_size);
- fdt_start_offset = spapr_create_pci_child_dt(phb, pdev, fdt, 0);
-
- spapr_drc_attach(drc, DEVICE(pdev), fdt, fdt_start_offset, &local_err);
+ spapr_drc_attach(drc, DEVICE(pdev), NULL, 0, &local_err);
if (local_err) {
goto out;
}
@@ -1483,7 +1489,6 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
out:
if (local_err) {
error_propagate(errp, local_err);
- g_free(fdt);
}
}
diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h
index 51d81c4b7ce8..f6e43f48fefa 100644
--- a/include/hw/pci-host/spapr.h
+++ b/include/hw/pci-host/spapr.h
@@ -121,8 +121,10 @@ sPAPRPHBState *spapr_pci_find_phb(sPAPRMachineState
*spapr, uint64_t buid);
PCIDevice *spapr_pci_find_dev(sPAPRMachineState *spapr, uint64_t buid,
uint32_t config_addr);
-/* PCI release callback. */
+/* DRC callbacks */
void spapr_phb_remove_pci_device_cb(DeviceState *dev);
+int spapr_pci_dt_populate(sPAPRDRConnector *drc, sPAPRMachineState *spapr,
+ void *fdt, int *fdt_start_offset, Error **errp);
/* VFIO EEH hooks */
#ifdef CONFIG_LINUX
- [qemu-s390x] [PATCH v5 01/17] spapr_drc: Allow FDT fragment to be added later, (continued)
- [qemu-s390x] [PATCH v5 06/17] xics: Write source state to KVM at claim time, Greg Kurz, 2019/02/19
- [qemu-s390x] [PATCH v5 04/17] spapr/pci: Generate FDT fragment at configure connector time,
Greg Kurz <=
- [qemu-s390x] [PATCH v5 07/17] spapr: Expose the name of the interrupt controller node, Greg Kurz, 2019/02/19
- [qemu-s390x] [PATCH v5 08/17] spapr_irq: Expose the phandle of the interrupt controller, Greg Kurz, 2019/02/19
- [qemu-s390x] [PATCH v5 11/17] spapr: populate PHB DRC entries for root DT node, Greg Kurz, 2019/02/19
- [qemu-s390x] [PATCH v5 09/17] spapr_pci: add PHB unrealize, Greg Kurz, 2019/02/19
- [qemu-s390x] [PATCH v5 12/17] spapr_events: add support for phb hotplug events, Greg Kurz, 2019/02/19