Commit 3bf263ee authored by Dave Jones's avatar Dave Jones Committed by Dave Jones

[AGPGART] Various Intel/EM64T AGP fixes.

From Andi Kleen.

- Add full PCI IDs to the module table for intel-agp and intel-mch-agp.
Don't use PCI_ANY_ID for device, since the drivers cannot handle unknown
devices anyways.
This fixes the problems with them loading both when compiled in and
also helps external tools that use the module PCI table to find the
correct driver.
- Remove wrong hack in intel-mch-agp that checked for long mode.
EM64T capability has nothing to do with the MCH version.
To avoid double probing the fix above is better.
- Handle the case of no AGP capability (unlikely, but better to handle it)
parent 9e3a7662
...@@ -1264,6 +1264,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, ...@@ -1264,6 +1264,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
struct resource *r; struct resource *r;
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
if (!cap_ptr)
return -ENODEV;
bridge = agp_alloc_bridge(); bridge = agp_alloc_bridge();
if (!bridge) if (!bridge)
...@@ -1462,14 +1464,36 @@ static int agp_intel_resume(struct pci_dev *pdev) ...@@ -1462,14 +1464,36 @@ static int agp_intel_resume(struct pci_dev *pdev)
} }
static struct pci_device_id agp_intel_pci_table[] = { static struct pci_device_id agp_intel_pci_table[] = {
{ #define ID(x) \
.class = (PCI_CLASS_BRIDGE_HOST << 8), { \
.class_mask = ~0, .class = (PCI_CLASS_BRIDGE_HOST << 8), \
.vendor = PCI_VENDOR_ID_INTEL, .class_mask = ~0, \
.device = PCI_ANY_ID, .vendor = PCI_VENDOR_ID_INTEL, \
.subvendor = PCI_ANY_ID, .device = x, \
.subdevice = PCI_ANY_ID, .subvendor = PCI_ANY_ID, \
}, .subdevice = PCI_ANY_ID, \
}
ID(PCI_DEVICE_ID_INTEL_82443LX_0),
ID(PCI_DEVICE_ID_INTEL_82443BX_0),
ID(PCI_DEVICE_ID_INTEL_82443GX_0),
ID(PCI_DEVICE_ID_INTEL_82810_MC1),
ID(PCI_DEVICE_ID_INTEL_82810_MC3),
ID(PCI_DEVICE_ID_INTEL_82810E_MC),
ID(PCI_DEVICE_ID_INTEL_82815_MC),
ID(PCI_DEVICE_ID_INTEL_82820_HB),
ID(PCI_DEVICE_ID_INTEL_82820_UP_HB),
ID(PCI_DEVICE_ID_INTEL_82830_HB),
ID(PCI_DEVICE_ID_INTEL_82840_HB),
ID(PCI_DEVICE_ID_INTEL_82845_HB),
ID(PCI_DEVICE_ID_INTEL_82845G_HB),
ID(PCI_DEVICE_ID_INTEL_82850_HB),
ID(PCI_DEVICE_ID_INTEL_82855PM_HB),
ID(PCI_DEVICE_ID_INTEL_82855GM_HB),
ID(PCI_DEVICE_ID_INTEL_82860_HB),
ID(PCI_DEVICE_ID_INTEL_82865_HB),
ID(PCI_DEVICE_ID_INTEL_82875_HB),
ID(PCI_DEVICE_ID_INTEL_7505_0),
ID(PCI_DEVICE_ID_INTEL_7205_0),
{ } { }
}; };
......
...@@ -491,10 +491,9 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev, ...@@ -491,10 +491,9 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
char *name = "(unknown)"; char *name = "(unknown)";
u8 cap_ptr = 0; u8 cap_ptr = 0;
if (!boot_cpu_has(X86_FEATURE_LM))
return -ENODEV;
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
if (!cap_ptr)
return -ENODEV;
bridge = agp_alloc_bridge(); bridge = agp_alloc_bridge();
if (!bridge) if (!bridge)
...@@ -590,7 +589,15 @@ static struct pci_device_id agp_intelmch_pci_table[] = { ...@@ -590,7 +589,15 @@ static struct pci_device_id agp_intelmch_pci_table[] = {
.class = (PCI_CLASS_BRIDGE_HOST << 8), .class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0, .class_mask = ~0,
.vendor = PCI_VENDOR_ID_INTEL, .vendor = PCI_VENDOR_ID_INTEL,
.device = PCI_ANY_ID, .device = PCI_DEVICE_ID_INTEL_82865_HB,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
},
{
.class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_INTEL,
.device = PCI_DEVICE_ID_INTEL_82875_HB,
.subvendor = PCI_ANY_ID, .subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID, .subdevice = PCI_ANY_ID,
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment