|
@@ -338,6 +338,23 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev)
|
|
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M);
|
|
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M);
|
|
|
|
|
|
+/*
|
|
|
+ * Some CS5536 BIOSes (for example, the Soekris NET5501 board w/ comBIOS
|
|
|
+ * ver. 1.33 20070103) don't set the correct ISA PCI region header info.
|
|
|
+ * BAR0 should be 8 bytes; instead, it may be set to something like 8k
|
|
|
+ * (which conflicts w/ BAR1's memory range).
|
|
|
+ */
|
|
|
+static void __devinit quirk_cs5536_vsa(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ if (pci_resource_len(dev, 0) != 8) {
|
|
|
+ struct resource *res = &dev->resource[0];
|
|
|
+ res->end = res->start + 8 - 1;
|
|
|
+ dev_info(&dev->dev, "CS5536 ISA bridge bug detected "
|
|
|
+ "(incorrect header); workaround applied.\n");
|
|
|
+ }
|
|
|
+}
|
|
|
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, quirk_cs5536_vsa);
|
|
|
+
|
|
|
static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region,
|
|
|
unsigned size, int nr, const char *name)
|
|
|
{
|