[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH v2 2/3] prep: Add Raven PCI host SysBus device
From: |
Alexander Graf |
Subject: |
Re: [Qemu-ppc] [PATCH v2 2/3] prep: Add Raven PCI host SysBus device |
Date: |
Wed, 11 Jan 2012 23:12:09 +0100 |
On 07.01.2012, at 01:06, Andreas Färber wrote:
> For now, focus on qdev'ification and leave PIC IRQs unchanged.
>
> Signed-off-by: Andreas Färber <address@hidden>
> Cc: Hervé Poussineau <address@hidden>
> Cc: Michael S. Tsirkin <address@hidden>
> Cc: Anthony Liguori <address@hidden>
> ---
> hw/prep_pci.c | 41 +++++++++++++++++++++++++++++++----------
> 1 files changed, 31 insertions(+), 10 deletions(-)
>
> diff --git a/hw/prep_pci.c b/hw/prep_pci.c
> index 741b273..2ff6b8c 100644
> --- a/hw/prep_pci.c
> +++ b/hw/prep_pci.c
> @@ -114,31 +114,43 @@ PCIBus *pci_prep_init(qemu_irq *pic,
> MemoryRegion *address_space_mem,
> MemoryRegion *address_space_io)
> {
I'm not sure this is the best way to do this. For e500, we just create the host
bridge explicitly in the board file:
/* PCI */
dev = sysbus_create_varargs("e500-pcihost", MPC8544_PCI_REGS_BASE,
mpic[pci_irq_nrs[0]], mpic[pci_irq_nrs[1]],
mpic[pci_irq_nrs[2]], mpic[pci_irq_nrs[3]],
NULL);
pci_bus = (PCIBus *)qdev_get_child_bus(dev, "pci.0");
if (!pci_bus)
printf("couldn't create PCI controller!\n");
and that's all the interaction there is between the pci host code and the board
code. No calling into functions. The way you're doing it now, the board still
needs to call into prep_pci.c which doesn't sound too appealing to me :).
> + DeviceState *dev;
> PREPPCIState *s;
>
> - s = g_malloc0(sizeof(PREPPCIState));
> - s->bus = pci_register_bus(NULL, "pci",
> + dev = qdev_create(NULL, "raven-pcihost");
> + s = FROM_SYSBUS(PREPPCIState, sysbus_from_qdev(dev));
> + s->address_space = address_space_mem;
> + s->bus = pci_register_bus(&s->busdev.qdev, "pci",
> prep_set_irq, prep_map_irq, pic,
> address_space_mem,
> address_space_io,
> 0, 4);
This should be happening in the host bridge init code. Take a look at
e500_pcihost_initfn() in hw/ppce500_pci.c.
Alex