pnv_phb4_pec: Keep track of instantiated PHBs
Add an array on the PEC object to keep track of the PHBs which are instantiated. The array can be sparsely populated when using user-created PHBs. It will be useful for the next patch to only export instantiated PHBs in the device tree. Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> Message-Id: <20230302163715.129635-2-fbarrat@linux.ibm.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
e64645ba80
commit
1068ebb606
@ -112,9 +112,9 @@ static const MemoryRegionOps pnv_pec_pci_xscom_ops = {
|
|||||||
.endianness = DEVICE_BIG_ENDIAN,
|
.endianness = DEVICE_BIG_ENDIAN,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pnv_pec_default_phb_realize(PnvPhb4PecState *pec,
|
static PnvPHB *pnv_pec_default_phb_realize(PnvPhb4PecState *pec,
|
||||||
int stack_no,
|
int stack_no,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
PnvPHB *phb = PNV_PHB(qdev_new(TYPE_PNV_PHB));
|
PnvPHB *phb = PNV_PHB(qdev_new(TYPE_PNV_PHB));
|
||||||
int phb_id = pnv_phb4_pec_get_phb_id(pec, stack_no);
|
int phb_id = pnv_phb4_pec_get_phb_id(pec, stack_no);
|
||||||
@ -128,8 +128,9 @@ static void pnv_pec_default_phb_realize(PnvPhb4PecState *pec,
|
|||||||
&error_fatal);
|
&error_fatal);
|
||||||
|
|
||||||
if (!sysbus_realize(SYS_BUS_DEVICE(phb), errp)) {
|
if (!sysbus_realize(SYS_BUS_DEVICE(phb), errp)) {
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
return phb;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pnv_pec_realize(DeviceState *dev, Error **errp)
|
static void pnv_pec_realize(DeviceState *dev, Error **errp)
|
||||||
@ -148,8 +149,9 @@ static void pnv_pec_realize(DeviceState *dev, Error **errp)
|
|||||||
|
|
||||||
/* Create PHBs if running with defaults */
|
/* Create PHBs if running with defaults */
|
||||||
if (defaults_enabled()) {
|
if (defaults_enabled()) {
|
||||||
|
g_assert(pec->num_phbs <= MAX_PHBS_PER_PEC);
|
||||||
for (i = 0; i < pec->num_phbs; i++) {
|
for (i = 0; i < pec->num_phbs; i++) {
|
||||||
pnv_pec_default_phb_realize(pec, i, errp);
|
pec->phbs[i] = pnv_pec_default_phb_realize(pec, i, errp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,6 +314,7 @@ static PnvPhb4PecState *pnv_phb4_get_pec(PnvChip *chip, PnvPHB4 *phb,
|
|||||||
|
|
||||||
for (j = 0; j < pec->num_phbs; j++) {
|
for (j = 0; j < pec->num_phbs; j++) {
|
||||||
if (index == pnv_phb4_pec_get_phb_id(pec, j)) {
|
if (index == pnv_phb4_pec_get_phb_id(pec, j)) {
|
||||||
|
pec->phbs[j] = phb->phb_base;
|
||||||
return pec;
|
return pec;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -185,6 +185,8 @@ struct PnvPhb4PecState {
|
|||||||
|
|
||||||
/* PHBs */
|
/* PHBs */
|
||||||
uint32_t num_phbs;
|
uint32_t num_phbs;
|
||||||
|
#define MAX_PHBS_PER_PEC 3
|
||||||
|
PnvPHB *phbs[MAX_PHBS_PER_PEC];
|
||||||
|
|
||||||
PnvChip *chip;
|
PnvChip *chip;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user