[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:24:11 AEST 2016
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?
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.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?
> return 0;
> + }
>
> pci_cfg_write8(phb, pd->bdfn, PCI_CFG_PRIMARY_BUS,
> pd->primary_bus);
More information about the Skiboot
mailing list