[PATCH] PCI quirk for VIA ACPI device

From: Andrey Panin (pazke@orbita.don.sitek.net)
Date: Wed Apr 26 2000 - 03:28:55 EST


Hi all,

this patch (against 2.3.99-pre5) provides PCI quirk for VIA ACPI device (same as for Intel and ALI).
Also modified PIIX4 and VIA support in /linux/arch/i386/kernel/acpi.c to use ioport
base address from pci_dev structure.

Best wishes,
                    Andrey

diff -urN /mnt/d/linux/drivers/pci/quirks.c /linux/drivers/pci/quirks.c
--- /mnt/d/linux/drivers/pci/quirks.c Fri Apr 21 19:00:22 2000
+++ /linux/drivers/pci/quirks.c Tue Apr 4 00:47:22 2000
@@ -164,6 +164,23 @@
 }

 /*
+ * VIA ACPI: One IO region pointed to by longword at
+ * 0x48 or 0x20 (256 bytes of ACPI registers)
+ */
+static void __init quirk_via_acpi(struct pci_dev *dev)
+{
+ u8 rev;
+ u32 region;
+
+ pci_read_config_byte(dev, PCI_CLASS_REVISION, &rev);
+ rev = (rev & 0x10 ? 0x48 : 0x20);
+
+ pci_read_config_dword(dev, rev, &region);
+ region &= PCI_BASE_ADDRESS_IO_MASK;
+ quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES);
+}
+
+/*
  * The main table of quirks.
  */

@@ -192,6 +209,8 @@
        { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, quirk_natoma },
        { PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci },
        { PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_acpi },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_acpi },
        { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4acpi },
        { PCI_FIXUP_FINAL, PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101 },
        { 0 }
diff -urN /mnt/d/linux/arch/i386/kernel/acpi.c /linux/arch/i386/kernel/acpi.c
--- /mnt/d/linux/arch/i386/kernel/acpi.c Fri Apr 21 19:00:44 2000
+++ /linux/arch/i386/kernel/acpi.c Wed Apr 19 23:47:57 2000
@@ -629,11 +629,7 @@
        if (!(pmregmisc & ACPI_PIIX4_PMIOSE))
                return -ENODEV;

- pci_read_config_dword(dev, 0x40, &base);
- if (!(base & PCI_BASE_ADDRESS_SPACE_IO))
- return -ENODEV;
-
- base &= PCI_BASE_ADDRESS_IO_MASK;
+ base = dev->resource[PCI_BRIDGE_RESOURCES].start & PCI_BASE_ADDRESS_IO_MASK;
        if (!base)
                return -ENODEV;

@@ -686,14 +682,7 @@
        if (!(tmp & 0x80))
                return -ENODEV;

- pci_read_config_byte(dev, PCI_CLASS_REVISION, &tmp);
- tmp = (tmp & 0x10 ? 0x48 : 0x20);
-
- pci_read_config_dword(dev, tmp, &base);
- if (!(base & PCI_BASE_ADDRESS_SPACE_IO))
- return -ENODEV;
-
- base &= PCI_BASE_ADDRESS_IO_MASK;
+ base = dev->resource[PCI_BRIDGE_RESOURCES].start & PCI_BASE_ADDRESS_IO_MASK;
        if (!base)
                return -ENODEV;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 30 2000 - 21:00:10 EST