summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zary <linux@rainbow-software.org>2015-09-14 21:19:57 +0200
committerBen Skeggs <bskeggs@redhat.com>2015-10-12 13:00:47 +1000
commitb85635aa9ba289d168f0440bd535d1cc336bf489 (patch)
tree87bba1758b4511994e48e15c67b0116605ddaef2
parent787338f77c2e047d26334cab9abc4e26a5c04f3e (diff)
downloadnouveau-b85635aa9ba289d168f0440bd535d1cc336bf489.tar.gz
nouveau: Disable AGP for SiS 761
SiS 761 chipset does not support AGP cards but has AGP capability (for the onboard video). At least PC Chips A31G board using this chipset has an AGP-like AGPro slot that's wired to the PCI bus. Enabling AGP will fail (GPU lockup and software fbcon, X11 hangs). Add support for matching just the host bridge in nvkm_device_agp_quirks and add entry for SiS 761 with mode 0 (AGP disabled). Signed-off-by: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drm/nouveau/nvkm/subdev/pci/agp.c8
-rw-r--r--lib/include/nvif/os.h3
2 files changed, 9 insertions, 2 deletions
diff --git a/drm/nouveau/nvkm/subdev/pci/agp.c b/drm/nouveau/nvkm/subdev/pci/agp.c
index 814cb51cc..385a90f91 100644
--- a/drm/nouveau/nvkm/subdev/pci/agp.c
+++ b/drm/nouveau/nvkm/subdev/pci/agp.c
@@ -35,6 +35,8 @@ static const struct nvkm_device_agp_quirk
nvkm_device_agp_quirks[] = {
/* VIA Apollo PRO133x / GeForce FX 5600 Ultra - fdo#20341 */
{ PCI_VENDOR_ID_VIA, 0x0691, PCI_VENDOR_ID_NVIDIA, 0x0311, 2 },
+ /* SiS 761 does not support AGP cards, use PCI mode */
+ { PCI_VENDOR_ID_SI, 0x0761, PCI_ANY_ID, PCI_ANY_ID, 0 },
{},
};
@@ -137,8 +139,10 @@ nvkm_agp_ctor(struct nvkm_pci *pci)
while (quirk->hostbridge_vendor) {
if (info.device->vendor == quirk->hostbridge_vendor &&
info.device->device == quirk->hostbridge_device &&
- pci->pdev->vendor == quirk->chip_vendor &&
- pci->pdev->device == quirk->chip_device) {
+ (quirk->chip_vendor == (u16)PCI_ANY_ID ||
+ pci->pdev->vendor == quirk->chip_vendor) &&
+ (quirk->chip_device == (u16)PCI_ANY_ID ||
+ pci->pdev->device == quirk->chip_device)) {
nvkm_info(subdev, "forcing default agp mode to %dX, "
"use NvAGP=<mode> to override\n",
quirk->mode);
diff --git a/lib/include/nvif/os.h b/lib/include/nvif/os.h
index 4757cd477..d3581ef04 100644
--- a/lib/include/nvif/os.h
+++ b/lib/include/nvif/os.h
@@ -1057,6 +1057,9 @@ pci_disable_msi(struct pci_dev *pdev)
#define pci_get_bus_and_slot(a, b) NULL
#define pci_read_config_dword(a,b,c) *(c) = 0
+#define PCI_ANY_ID (~0)
+
+#define PCI_VENDOR_ID_SI 0x1039
#define PCI_VENDOR_ID_NVIDIA 0x10de
#define PCI_VENDOR_ID_VIA 0x1106