diff options
Diffstat (limited to 'drivers/pci/quirks.c')
| -rw-r--r-- | drivers/pci/quirks.c | 29 | 
1 files changed, 24 insertions, 5 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 81d19d5683a..27c0e6eb713 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -368,8 +368,9 @@ static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region,  		bus_region.end = res->end;  		pcibios_bus_to_resource(dev, res, &bus_region); -		pci_claim_resource(dev, nr); -		dev_info(&dev->dev, "quirk: %pR claimed by %s\n", res, name); +		if (pci_claim_resource(dev, nr) == 0) +			dev_info(&dev->dev, "quirk: %pR claimed by %s\n", +				 res, name);  	}  }	 @@ -1977,11 +1978,25 @@ static void __devinit quirk_via_cx700_pci_parking_caching(struct pci_dev *dev)  	/*  	 * Disable PCI Bus Parking and PCI Master read caching on CX700  	 * which causes unspecified timing errors with a VT6212L on the PCI -	 * bus leading to USB2.0 packet loss. The defaults are that these -	 * features are turned off but some BIOSes turn them on. +	 * bus leading to USB2.0 packet loss. +	 * +	 * This quirk is only enabled if a second (on the external PCI bus) +	 * VT6212L is found -- the CX700 core itself also contains a USB +	 * host controller with the same PCI ID as the VT6212L.  	 */ +	/* Count VT6212L instances */ +	struct pci_dev *p = pci_get_device(PCI_VENDOR_ID_VIA, +		PCI_DEVICE_ID_VIA_8235_USB_2, NULL);  	uint8_t b; + +	/* p should contain the first (internal) VT6212L -- see if we have +	   an external one by searching again */ +	p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235_USB_2, p); +	if (!p) +		return; +	pci_dev_put(p); +  	if (pci_read_config_byte(dev, 0x76, &b) == 0) {  		if (b & 0x40) {  			/* Turn off PCI Bus Parking */ @@ -2008,7 +2023,7 @@ static void __devinit quirk_via_cx700_pci_parking_caching(struct pci_dev *dev)  		}  	}  } -DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching);  /*   * For Broadcom 5706, 5708, 5709 rev. A nics, any read beyond the @@ -2108,6 +2123,10 @@ static void __devinit quirk_disable_msi(struct pci_dev *dev)  	}  }  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9602, quirk_disable_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK, 0x9602, quirk_disable_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AI, 0x9602, quirk_disable_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi);  /* Go through the list of Hypertransport capabilities and   * return 1 if a HT MSI capability is found and enabled */  |