summaryrefslogtreecommitdiffstats
path: root/hw/pci-host
diff options
context:
space:
mode:
authorDaniel Henrique Barboza2022-06-24 10:49:21 +0200
committerDaniel Henrique Barboza2022-08-31 19:08:05 +0200
commite5ea94360eba4818467283a259d8d681f0da799f (patch)
tree0d8c88de1e1fd471e6624fd56dfccee348ec905c /hw/pci-host
parentppc/pnv: remove PnvPHB4.version (diff)
downloadqemu-e5ea94360eba4818467283a259d8d681f0da799f.tar.gz
qemu-e5ea94360eba4818467283a259d8d681f0da799f.tar.xz
qemu-e5ea94360eba4818467283a259d8d681f0da799f.zip
ppc/pnv: move attach_root_port helper to pnv-phb.c
The helper is only used in this file. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com> Message-Id: <20220624084921.399219-13-danielhb413@gmail.com>
Diffstat (limited to 'hw/pci-host')
-rw-r--r--hw/pci-host/pnv_phb.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/hw/pci-host/pnv_phb.c b/hw/pci-host/pnv_phb.c
index cc15a949c9..c47ed92462 100644
--- a/hw/pci-host/pnv_phb.c
+++ b/hw/pci-host/pnv_phb.c
@@ -18,6 +18,30 @@
#include "hw/qdev-properties.h"
#include "qom/object.h"
+/*
+ * Attach a root port device.
+ *
+ * 'index' will be used both as a PCIE slot value and to calculate
+ * QOM id. 'chip_id' is going to be used as PCIE chassis for the
+ * root port.
+ */
+static void pnv_phb_attach_root_port(PCIHostState *pci, int index, int chip_id)
+{
+ PCIDevice *root = pci_new(PCI_DEVFN(0, 0), TYPE_PNV_PHB_ROOT_PORT);
+ g_autofree char *default_id = g_strdup_printf("%s[%d]",
+ TYPE_PNV_PHB_ROOT_PORT,
+ index);
+ const char *dev_id = DEVICE(root)->id;
+
+ object_property_add_child(OBJECT(pci->bus), dev_id ? dev_id : default_id,
+ OBJECT(root));
+
+ /* Set unique chassis/slot values for the root port */
+ qdev_prop_set_uint8(DEVICE(root), "chassis", chip_id);
+ qdev_prop_set_uint16(DEVICE(root), "slot", index);
+
+ pci_realize_and_unref(root, pci->bus, &error_fatal);
+}
static void pnv_phb_realize(DeviceState *dev, Error **errp)
{