mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
ppc/pnv: Introduce user creatable pnv-phb4 devices
This patch introduces pnv-phb4 user creatable devices that are created in a similar manner as pnv-phb3 devices, allowing the user to interact with the PHBs directly instead of creating PCI Express Controllers that will create a certain amount of PHBs per controller index. We accomplish this by doing the following: - add a pnv_phb4_get_stack() helper to retrieve which stack an user created phb4 would occupy; - when dealing with an user created pnv-phb4 (detected by checking if phb->stack is NULL at the start of phb4_realize()), retrieve its stack and initialize its properties as done in stk_realize(); - use 'defaults_enabled()' in stk_realize() to avoid creating and initializing a 'stack->phb' qdev that might be overwritten by an user created pnv-phb4 device. This process is wrapped into a new helper called pnv_pec_stk_default_phb_realize(). Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <20220111131027.599784-5-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
dc8e2914ab
commit
5bc67b052b
3 changed files with 89 additions and 4 deletions
|
@ -19,6 +19,7 @@
|
|||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/ppc/pnv.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
#include <libfdt.h>
|
||||
|
||||
|
@ -275,9 +276,9 @@ static const TypeInfo pnv_pec_type_info = {
|
|||
}
|
||||
};
|
||||
|
||||
static void pnv_pec_stk_realize(DeviceState *dev, Error **errp)
|
||||
static void pnv_pec_stk_default_phb_realize(PnvPhb4PecStack *stack,
|
||||
Error **errp)
|
||||
{
|
||||
PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(dev);
|
||||
PnvPhb4PecState *pec = stack->pec;
|
||||
PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec);
|
||||
int phb_id = pnv_phb4_pec_get_phb_id(pec, stack->stack_no);
|
||||
|
@ -292,11 +293,23 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp)
|
|||
&error_fatal);
|
||||
object_property_set_link(OBJECT(stack->phb), "stack", OBJECT(stack),
|
||||
&error_abort);
|
||||
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(stack->phb), errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void pnv_pec_stk_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(dev);
|
||||
|
||||
if (!defaults_enabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
pnv_pec_stk_default_phb_realize(stack, errp);
|
||||
}
|
||||
|
||||
static Property pnv_pec_stk_properties[] = {
|
||||
DEFINE_PROP_UINT32("stack-no", PnvPhb4PecStack, stack_no, 0),
|
||||
DEFINE_PROP_LINK("pec", PnvPhb4PecStack, pec, TYPE_PNV_PHB4_PEC,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue