On Mon, 2014-04-07 at 14:44 +0200, Gerd Hoffmann wrote:
> Hi,
>
> > > + u8 shpc_cap = pci_find_capability(s->bus_dev, PCI_CAP_ID_SHPC);
>
> > One thing I'd do is maybe check that the relevant memory type is
> > enabled in the bridge (probably just by writing fff to base and reading
> > it back).
>
> > This will give hypervisors an option to avoid wasting resources:
> > e.g. it's uncommon for express devices to claim IO.
>
> I don't think we'll need that for the SHPC bridge.
I agree. This is why I chose to check shpc capability, because
PCIe ports do not use it (as far as I know).
>
> For express it indeed makes sense to avoid claiming IO address space.
> I'd try to find something more automatic though, where you don't need
> some kind of "disable io for this express port" config option.
>
> For express ports which can only have a single device underneath we can
> check whenever we have a device and if one is present already don't
> bother claiming extra resources for hotplug.
>
> > > + for (cap = pci_config_readb(pci->bdf, PCI_CAPABILITY_LIST); cap;
> > > + cap = pci_config_readb(pci->bdf, cap +
> > > PCI_CAP_LIST_NEXT))
> > > + if (pci_config_readb(pci->bdf, cap + PCI_CAP_LIST_ID) == cap_id)
> > > + return cap;
> >
> > I would also limit this to 256 iterations, to make sure
> > we dont' get into an infinite loop with a broken device.
>
> Good point.
Yes, thanks! sending v2.
Marcel
>
> cheers,
> Gerd
>
>