Pcie issue with Broadcom Endpoint

Manish Raturi

New Member
Credits
0
When we try to remove and rescan the broadcom device from userspace , sometime we see that during BAR update we get the following error

if ((new ^ check) & mask) {
dev_err(&dev->dev, "BAR %d: error updating (%#08x != %#08x)\n",
resno, new, check);
}

Below is the code from this file (drivers/pci/setup-res.c) where we are seeing this error:
disable = (res->flags & IORESOURCE_MEM_64) && !dev->mmio_always_on;
if (disable) {
pci_read_config_word(dev, PCI_COMMAND, &cmd);
pci_write_config_word(dev, PCI_COMMAND,
cmd & ~PCI_COMMAND_MEMORY);
}

pci_write_config_dword(dev, reg, new);
pci_read_config_dword(dev, reg, &check);

if ((new ^ check) & mask) {
dev_err(&dev->dev, "BAR %d: error updating (%#08x != %#08x)\n",
resno, new, check);
}

But if we change this code to introduce the msleep of 120 ms then we dont see the failure, like below

disable = (res->flags & IORESOURCE_MEM_64) && !dev->mmio_always_on;
if (disable) {
pci_read_config_word(dev, PCI_COMMAND, &cmd);
pci_write_config_word(dev, PCI_COMMAND,
cmd & ~PCI_COMMAND_MEMORY);
}
msleep(120);=========================>
pci_write_config_dword(dev, reg, new);
pci_read_config_dword(dev, reg, &check);

if ((new ^ check) & mask) {
dev_err(&dev->dev, "BAR %d: error updating (%#08x != %#08x)\n",
resno, new, check);
}

Also the problem is solved if we set this boot parameter pcie_aspm=off. I am not able to understand why this problem might be happening.
 


Members online


Top