qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] pci: add standard bridge device


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH] pci: add standard bridge device
Date: Thu, 8 Sep 2011 13:42:42 +0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Thu, Sep 08, 2011 at 05:58:12PM +0800, Wen Congyang wrote:
> At 09/08/2011 05:43 PM, Gerd Hoffmann Write:
> >   Hi,
> > 
> >> I modify the code like this, and the PCI_INTERRUPT_LINE register is
> >> set, and I can bind
> >> it to uio_pci_generic:
> > 
> >> --- a/src/pciinit.c
> >> +++ b/src/pciinit.c
> >> @@ -575,6 +575,8 @@ static int pci_bios_init_root_regions(u32 start,
> >> u32 end)
> > 
> >>       pci_bios_init_bus_bases(&busses[0]);
> >> -    pci_bios_map_device_in_bus(0 /* host bus */);
> >> +    for (bus = 0; bus<= MaxPCIBus; bus++) {
> >> +        pci_bios_map_device_in_bus(bus /* host bus */);
> > 
> > No.  pci_bios_map_device_in_bus goes down recursively when it finds a
> > bridge, so it should cover all devices already.
> 
> Yes, pci_bios_map_device() goes down recursively.

The value seems to be wrong though, I think.
It seems to simply use the interrupt pin as array index.
Instead, each bridge should interrupts as follows:

/* Mapping mandated by PCI-to-PCI Bridge architecture specification,
 * revision 1.2 */
/* Table 9-1: Interrupt Binding for Devices Behind a Bridge */
static int pci_bridge_dev_map_irq_fn(PCIDevice *dev, int irq_num)
{
    return (irq_num + PCI_SLOT(dev->devfn)) % PCI_NUM_PINS;
}

until we get to the host bridge.


> > 
> >> -    pci_bios_init_device_in_bus(0 /* host bus */);
> >> +        pci_bios_init_device_in_bus(bus /* host bus */);
> >> +    }
> > 
> > That is correct.  Can be done easier though by just not limiting device
> > initialization to a specific bus like in the attached patch.  Does that
> > one work for you?
> 
> I test it, and it works for me.
> 
> Thanks
> Wen Congyang
> 
> > 
> > cheers,
> >   Gerd



reply via email to

[Prev in Thread] Current Thread [Next in Thread]