[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [Qemu-devel] [PATCH] 40p: fix PCI interrupt routing
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [Qemu-devel] [PATCH] 40p: fix PCI interrupt routing |
Date: |
Mon, 10 Sep 2018 10:49:07 +1000 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Sat, Sep 08, 2018 at 09:47:55AM +0100, Mark Cave-Ayland wrote:
> On 27/08/18 18:12, BALATON Zoltan wrote:
>
> > On Mon, 27 Aug 2018, Mark Cave-Ayland wrote:
> >> According to the PReP specification section 6.1.6 "System Interrupt
> >> Assignments", all PCI interrupts are routed via IRQ 15.
> >>
> >> With this patch applied it is now possible to boot the sandalfoot
> >> zImage all the way through to a working userspace when using
> >> OpenBIOS.
> >>
> >> Signed-off-by: Mark Cave-Ayland <address@hidden>
> >> ---
> >> hw/ppc/prep.c | 9 +++++----
> >> 1 file changed, 5 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
> >> index 162b27a3b8..e82c1355d9 100644
> >> --- a/hw/ppc/prep.c
> >> +++ b/hw/ppc/prep.c
> >> @@ -668,10 +668,11 @@ static void ibm_40p_init(MachineState *machine)
> >> dev = DEVICE(pci_create_simple(pci_bus, PCI_DEVFN(11, 0), "i82378"));
> >> qdev_connect_gpio_out(dev, 0,
> >> cpu->env.irq_inputs[PPC6xx_INPUT_INT]);
> >> - sysbus_connect_irq(pcihost, 0, qdev_get_gpio_in(dev, 15));
> >> - sysbus_connect_irq(pcihost, 1, qdev_get_gpio_in(dev, 13));
> >> - sysbus_connect_irq(pcihost, 2, qdev_get_gpio_in(dev, 15));
> >> - sysbus_connect_irq(pcihost, 3, qdev_get_gpio_in(dev, 13));
> >> + /* According to PReP specification section 6.1.6 "System Interrupt
> >> + * Assignments", all PCI interrupts are routed via IRQ 15 */
> >> + for (i = 0; i < PCI_NUM_PINS; i++) {
> >> + sysbus_connect_irq(pcihost, i, qdev_get_gpio_in(dev, 15));
> >> + }
> >
> > I'm not sure but this looks similar to what we had with sam460ex:
> >
> > http://lists.nongnu.org/archive/html/qemu-ppc/2018-07/msg00359.html
> >
> > I think you may not connect multiple interrupts to the same host irq
> > line this way but you either need an OR gate or handle it within the
> > mapping in the PCI host model (which is what we ended up with for the
> > sam460ex). Peter's suggestion was to do whichever matches real hardware
> > the most if you can find out that (as noted here also with more
> > explanation that could be useful):
> >
> > http://lists.nongnu.org/archive/html/qemu-ppc/2018-07/msg00360.html
> >
> > But I could be mistaken in this case, haven't checked it in detail.
>
> Thanks for the pointer. I now have a follow-up patchset that implements
> this, however it seems the real 40p machine has a routing quirk: the LSI
> SCSI device is separately routed to IRQ 13. So while it's not quite a
> pure OR of the 4 PCI IRQs, it's fairly close...
That's very common on pre-Express PCI machines: on-board PCI devices
have their LSIs wired directly to the system interrupt controller
rather than through the PCI interrupt pins. I think that's a separate
issue from the routing of the PCI irq pins.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature