PCI: add PCI-X/PCI-Express read control interfaces
This patch introduces an interface to read and write PCI-X / PCI-Express maximum read byte count values from PCI config space. There is a second function that returns the maximum _designed_ read byte count, which marks the maximum value for a device, since some drivers try to set MMRBC to the highest allowed value and rely on such a function. Based on patch set by Stephen Hemminger <shemminger@linux-foundation.org> Cc: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: Peter Oruba <peter.oruba@amd.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e4585da22a
commit
d556ad4bbe
@@ -627,6 +627,22 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);
|
||||
#endif /* CONFIG_X86_IO_APIC */
|
||||
|
||||
/*
|
||||
* Some settings of MMRBC can lead to data corruption so block changes.
|
||||
* See AMD 8131 HyperTransport PCI-X Tunnel Revision Guide
|
||||
*/
|
||||
static void __init quirk_amd_8131_mmrbc(struct pci_dev *dev)
|
||||
{
|
||||
unsigned char revid;
|
||||
|
||||
pci_read_config_byte(dev, PCI_REVISION_ID, &revid);
|
||||
if (dev->subordinate && revid <= 0x12) {
|
||||
printk(KERN_INFO "AMD8131 rev %x detected, disabling PCI-X MMRBC\n",
|
||||
revid);
|
||||
dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MMRBC;
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_mmrbc);
|
||||
|
||||
/*
|
||||
* FIXME: it is questionable that quirk_via_acpi
|
||||
|
Reference in New Issue
Block a user