[Skiboot] [PATCH 16/33] pci: When restoring bus numbers after a reset, also restore device cache
Michael Neuling
mikey at neuling.org
Wed Jul 6 17:37:29 AEST 2016
On Wed, 2016-07-06 at 17:27 +1000, Benjamin Herrenschmidt wrote:
> On Wed, 2016-07-06 at 17:24 +1000, Michael Neuling wrote:
> >
> > On Sat, 2016-06-25 at 08:47 +1000, Benjamin Herrenschmidt wrote:
> > >
> > > PCIe devices cache the bus number on the first config write, make
> > > sure
> > > we restore them when at the same time
> > Is this a fix that needs to go into some stable builds?
> Yes probably, not a huge issue though.
Ok, Stewart?
>
> >
> > >
> > > Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
Since there is no race below...
Acked-by: Michael Neuling <mikey at neuling.org>
> > >
> > > ---
> > > core/pci.c | 8 +++++++-
> > > 1 file changed, 7 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/core/pci.c b/core/pci.c
> > > index 9b65a49..7ba5169 100644
> > > --- a/core/pci.c
> > > +++ b/core/pci.c
> > > @@ -1605,8 +1605,14 @@ static int __pci_restore_bridge_buses(struct
> > > phb *phb,
> > > struct pci_device *pd,
> > > void *data __unused)
> > > {
> > > - if (!pd->is_bridge)
> > > + if (!pd->is_bridge) {
> > > + uint32_t vdid;
> > > +
> > > + /* Make all devices below a bridge "re-capture"
> > > the bdfn */
> > > + if (pci_cfg_read32(phb, pd->bdfn, 0, &vdid) == 0)
> > > + pci_cfg_write32(phb, pd->bdfn, 0, vdid);
> > Do we have a lock held here to ensure there is no race?
> No no need. The register is read only, the write does nothing other
> than making the device capture it's own bus ID from the packet.
OK if you respin, a comment would be nice.
Mikey
>
> >
> > >
> > > return 0;
> > > + }
> > >
> > > pci_cfg_write8(phb, pd->bdfn, PCI_CFG_PRIMARY_BUS,
> > > pd->primary_bus);
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list