On 3/2/23 13:37, Frederic Barrat wrote:
> So far, we were always exporting all possible PHBs to the device
> tree. It works well when using the default config but it potentially
> adds non-existing devices when using '-nodefaults' and user-created
> PHBs, causing the firmware (skiboot) to report errors when probing
> those PHBs. This patch only exports PHBs which have been realized to
> the device tree.
>
> Fixes: d786be3fe746 ("ppc/pnv: enable user created pnv-phb for powernv9")
> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
> ---
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
> hw/pci-host/pnv_phb4_pec.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c
> index 97c06bb0a0..6c9b386069 100644
> --- a/hw/pci-host/pnv_phb4_pec.c
> +++ b/hw/pci-host/pnv_phb4_pec.c
> @@ -199,9 +199,12 @@ static int pnv_pec_dt_xscom(PnvXScomInterface *dev, void *fdt,
> pecc->compat_size)));
>
> for (i = 0; i < pec->num_phbs; i++) {
> - int phb_id = pnv_phb4_pec_get_phb_id(pec, i);
> int stk_offset;
>
> + if (!pec->phbs[i]) {
> + continue;
> + }
> +
> name = g_strdup_printf("stack@%x", i);
> stk_offset = fdt_add_subnode(fdt, offset, name);
> _FDT(stk_offset);
> @@ -209,7 +212,8 @@ static int pnv_pec_dt_xscom(PnvXScomInterface *dev, void *fdt,
> _FDT((fdt_setprop(fdt, stk_offset, "compatible", pecc->stk_compat,
> pecc->stk_compat_size)));
> _FDT((fdt_setprop_cell(fdt, stk_offset, "reg", i)));
> - _FDT((fdt_setprop_cell(fdt, stk_offset, "ibm,phb-index", phb_id)));
> + _FDT((fdt_setprop_cell(fdt, stk_offset, "ibm,phb-index",
> + pec->phbs[i]->phb_id)));
> }
>
> return 0;