Merge branch 'pci/resource'
- Always write Intel I210 ROM BAR on update to work around device defect (Bjorn Helgaas) * pci/resource: PCI: Work around Intel I210 ROM BAR overlap defect
This commit is contained in:
@@ -5857,3 +5857,13 @@ static void nvidia_ion_ahci_fixup(struct pci_dev *pdev)
|
|||||||
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
|
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
|
||||||
}
|
}
|
||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);
|
||||||
|
|
||||||
|
static void rom_bar_overlap_defect(struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
pci_info(dev, "working around ROM BAR overlap defect\n");
|
||||||
|
dev->rom_bar_overlap = 1;
|
||||||
|
}
|
||||||
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1533, rom_bar_overlap_defect);
|
||||||
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1536, rom_bar_overlap_defect);
|
||||||
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1537, rom_bar_overlap_defect);
|
||||||
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1538, rom_bar_overlap_defect);
|
||||||
|
|||||||
@@ -75,11 +75,15 @@ static void pci_std_update_resource(struct pci_dev *dev, int resno)
|
|||||||
* as zero when disabled, so don't update ROM BARs unless
|
* as zero when disabled, so don't update ROM BARs unless
|
||||||
* they're enabled. See
|
* they're enabled. See
|
||||||
* https://lore.kernel.org/r/43147B3D.1030309@vc.cvut.cz/
|
* https://lore.kernel.org/r/43147B3D.1030309@vc.cvut.cz/
|
||||||
|
* But we must update ROM BAR for buggy devices where even a
|
||||||
|
* disabled ROM can conflict with other BARs.
|
||||||
*/
|
*/
|
||||||
if (!(res->flags & IORESOURCE_ROM_ENABLE))
|
if (!(res->flags & IORESOURCE_ROM_ENABLE) &&
|
||||||
|
!dev->rom_bar_overlap)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
reg = dev->rom_base_reg;
|
reg = dev->rom_base_reg;
|
||||||
|
if (res->flags & IORESOURCE_ROM_ENABLE)
|
||||||
new |= PCI_ROM_ADDRESS_ENABLE;
|
new |= PCI_ROM_ADDRESS_ENABLE;
|
||||||
} else
|
} else
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -455,6 +455,7 @@ struct pci_dev {
|
|||||||
unsigned int link_active_reporting:1;/* Device capable of reporting link active */
|
unsigned int link_active_reporting:1;/* Device capable of reporting link active */
|
||||||
unsigned int no_vf_scan:1; /* Don't scan for VFs after IOV enablement */
|
unsigned int no_vf_scan:1; /* Don't scan for VFs after IOV enablement */
|
||||||
unsigned int no_command_memory:1; /* No PCI_COMMAND_MEMORY */
|
unsigned int no_command_memory:1; /* No PCI_COMMAND_MEMORY */
|
||||||
|
unsigned int rom_bar_overlap:1; /* ROM BAR disable broken */
|
||||||
pci_dev_flags_t dev_flags;
|
pci_dev_flags_t dev_flags;
|
||||||
atomic_t enable_cnt; /* pci_enable_device has been called */
|
atomic_t enable_cnt; /* pci_enable_device has been called */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user