[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 07/18] ppc/pnv: Reparent user created PHB3 devices to the PnvC
From: |
Daniel Henrique Barboza |
Subject: |
[PATCH v2 07/18] ppc/pnv: Reparent user created PHB3 devices to the PnvChip |
Date: |
Wed, 5 Jan 2022 18:23:27 -0300 |
From: Cédric Le Goater <clg@kaod.org>
The powernv machine uses the object hierarchy to populate the device
tree and each device should be parented to the chip it belongs to.
This is not the case for user created devices which are parented to
the container "/unattached".
Make sure a PHB3 device is parented to its chip by reparenting the
object if necessary.
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
hw/pci-host/pnv_phb3.c | 6 ++++++
hw/ppc/pnv.c | 17 +++++++++++++++++
include/hw/ppc/pnv.h | 1 +
3 files changed, 24 insertions(+)
diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c
index 1ebe43df5d..a52aedcad3 100644
--- a/hw/pci-host/pnv_phb3.c
+++ b/hw/pci-host/pnv_phb3.c
@@ -998,6 +998,12 @@ static void pnv_phb3_realize(DeviceState *dev, Error
**errp)
error_setg(errp, "invalid chip id: %d", phb->chip_id);
return;
}
+
+ /*
+ * Reparent user created devices to the chip to build
+ * correctly the device tree.
+ */
+ pnv_chip_parent_fixup(phb->chip, OBJECT(phb), phb->phb_id);
}
if (phb->phb_id >= PNV_CHIP_GET_CLASS(phb->chip)->num_phbs) {
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index ad02d56aa7..fa5e7bc751 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -1814,6 +1814,23 @@ static ICSState *pnv_ics_get(XICSFabric *xi, int irq)
return NULL;
}
+void pnv_chip_parent_fixup(PnvChip *chip, Object *obj, int index)
+{
+ Object *parent = OBJECT(chip);
+ g_autofree char *default_id =
+ g_strdup_printf("%s[%d]", object_get_typename(obj), index);
+
+ if (obj->parent == parent) {
+ return;
+ }
+
+ object_ref(obj);
+ object_unparent(obj);
+ object_property_add_child(
+ parent, DEVICE(obj)->id ? DEVICE(obj)->id : default_id, obj);
+ object_unref(obj);
+}
+
PnvChip *pnv_get_chip(PnvMachineState *pnv, uint32_t chip_id)
{
int i;
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 64bab7112b..f4219da7c5 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -178,6 +178,7 @@ DECLARE_INSTANCE_CHECKER(PnvChip, PNV_CHIP_POWER10,
PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir);
void pnv_phb_attach_root_port(PCIHostState *pci, const char *name);
+void pnv_chip_parent_fixup(PnvChip *chip, Object *obj, int index);
#define TYPE_PNV_MACHINE MACHINE_TYPE_NAME("powernv")
typedef struct PnvMachineClass PnvMachineClass;
--
2.33.1
- [PATCH v2 01/18] pnv_phb3.c: add unique chassis and slot for pnv_phb3_root_port, (continued)
- [PATCH v2 01/18] pnv_phb3.c: add unique chassis and slot for pnv_phb3_root_port, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 02/18] pnv_phb4.c: add unique chassis and slot for pnv_phb4_root_port, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 03/18] ppc/pnv: Attach PHB3 root port device when defaults are enabled, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 04/18] pnv_phb4.c: make pnv-phb4-root-port user creatable, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 05/18] pnv_phb4.c: check if root port exists in rc_config functions, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 06/18] ppc/pnv: Introduce support for user created PHB3 devices, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 07/18] ppc/pnv: Reparent user created PHB3 devices to the PnvChip,
Daniel Henrique Barboza <=
- [PATCH v2 08/18] ppc/pnv: Complete user created PHB3 devices, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 09/18] ppc/pnv: Move num_phbs under Pnv8Chip, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 10/18] pnv_phb3.h: change TYPE_PNV_PHB3_ROOT_BUS name, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 11/18] pnv_phb4.c: introduce pnv_phb4_set_stack_phb_props(), Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 12/18] pnv_phb4_pec.c: move pnv_pec_phb_offset() to pnv_phb4.c, Daniel Henrique Barboza, 2022/01/05
- [PATCH v2 13/18] pnv_phb4_pec: use pnv_phb4_pec_get_phb_id() in pnv_pec_dt_xscom(), Daniel Henrique Barboza, 2022/01/05