The upcoming code that allows for user creatable pnv-phb4 devices relies on finding the correct pnv-phb4-pec controller to associate with. At this moment the code that added support for user creatable pnv-phb4-pec devices does not update chip9->pecs[] and pec->chip->num_pecs after pnv_pec_realize(). This is not trivial to do because chip9-pecs[] is an array of PEC devices, not an array of pointers to PEC devices.
All of this wasn't a problem back when this commit was introduced because the pnv-phb4 devices of each pnv-phb4-pec were being created automatically. We had a change of heart since then, realizing that dealing with pnv-phb4-pec is too complicated from the user standpoint. In theory we could work the code to change chip9->pecs[] to be an array of pointers and go from there, but in reality this will be a wasted effort since we're going to backtrack on the user-creatable pnv-phb4-pec. All PCI Express controllers of all chips will be created by default. When running with default settings all pnv-phb4 PHBs will be created, as usual. When running with '-nodefaults' the PECs will be created without the PHBs, and then the user will be responsible for adding them by hand in the command line. Instead of fixing this situation with chip9->pecs[] not being up to date with each user created pnv-phb4-pec, then work on user creatable pnv-phb4 support, then removing the support for user pnv-phb4-pec, let's remove user-creatable pnv-phb4-pec right now and spare the extra code. This reverts commit 7a221a8f6eb04d3e03081b06a89896803554e37d. Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com> --- hw/pci-host/pnv_phb4_pec.c | 19 +------------------ hw/ppc/pnv.c | 5 ++--- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index 3797696e8f..aa93ad3f10 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -382,17 +382,6 @@ static void pnv_pec_realize(DeviceState *dev, Error **errp) char name[64]; int i; - /* User created devices */ - if (!pec->chip) { - PnvMachineState *pnv = PNV_MACHINE(qdev_get_machine()); - - pec->chip = pnv_get_chip(pnv, pec->chip_id); - if (!pec->chip) { - error_setg(errp, "invalid chip id: %d", pec->chip_id); - return; - } - } - if (pec->index >= PNV_CHIP_GET_CLASS(pec->chip)->num_pecs) { error_setg(errp, "invalid PEC index: %d", pec->index); return; @@ -400,12 +389,6 @@ static void pnv_pec_realize(DeviceState *dev, Error **errp) pec->num_stacks = pecc->num_stacks[pec->index]; - /* - * Reparent user created devices to the chip to build correctly - * the device tree. - */ - pnv_chip_parent_fixup(pec->chip, OBJECT(pec), pec->index); - /* Create stacks */ for (i = 0; i < pec->num_stacks; i++) { PnvPhb4PecStack *stack = &pec->stacks[i]; @@ -538,7 +521,7 @@ static void pnv_pec_class_init(ObjectClass *klass, void *data) dc->realize = pnv_pec_realize; device_class_set_props(dc, pnv_pec_properties); - dc->user_creatable = true; + dc->user_creatable = false; pecc->xscom_nest_base = pnv_pec_xscom_nest_base; pecc->xscom_pci_base = pnv_pec_xscom_pci_base; diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index c88fef26cf..bf2607446a 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1426,9 +1426,8 @@ static void pnv_chip_power9_instance_init(Object *obj) object_initialize_child(obj, "homer", &chip9->homer, TYPE_PNV9_HOMER); - if (defaults_enabled()) { - chip->num_pecs = pcc->num_pecs; - } + /* Number of PECs is the chip default */ + chip->num_pecs = pcc->num_pecs; for (i = 0; i < chip->num_pecs; i++) { object_initialize_child(obj, "pec[*]", &chip9->pecs[i], -- 2.33.1