linus nak'ed the pci quirks patch
svn path=/dists/sid/linux-2.6/; revision=15463
This commit is contained in:
parent
240c86ae0b
commit
1604b212fe
|
@ -1,56 +0,0 @@
|
|||
From a5ee4eb75413c145334c30e43f1af9875dad6fd7 Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Ladisch <clemens@ladisch.de>
|
||||
Date: Mon, 22 Mar 2010 09:52:16 +0100
|
||||
Subject: PCI quirk: RS780/RS880: work around missing MSI initialization
|
||||
|
||||
From: Clemens Ladisch <clemens@ladisch.de>
|
||||
|
||||
commit a5ee4eb75413c145334c30e43f1af9875dad6fd7 upstream.
|
||||
|
||||
AMD says in section 2.5.4 (GFX MSI Enable) of #43291 (AMD 780G Family
|
||||
Register Programming Requirements):
|
||||
|
||||
The SBIOS must enable internal graphics MSI capability in GCCFG by
|
||||
setting the following: NBCFG.NB_CNTL.STRAP_MSI_ENABLE='1'
|
||||
|
||||
Quite a few BIOS writers misinterpret this sentence and think that
|
||||
enabling MSI is an optional feature. However, clearing that bit just
|
||||
prevents delivery of MSI messages but does not remove the MSI PCI
|
||||
capabilities registers, and so leaves these devices unusable for any
|
||||
driver that attempts to use MSI.
|
||||
|
||||
Setting that bit is not possible after the BIOS has locked down the
|
||||
configuration registers, so we have to manually disable MSI for the
|
||||
affected devices.
|
||||
|
||||
This fixes the codec communication errors in the HDA driver when
|
||||
accessing the HDMI audio device, and allows us to get rid of the
|
||||
overcautious quirk in radeon_irq_kms.c.
|
||||
|
||||
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
|
||||
Tested-by: Alex Deucher <alexdeucher@gamil.com>
|
||||
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_irq_kms.c | 8 -------
|
||||
drivers/pci/quirks.c | 33 ++++++++++++++++++++++++++++++++
|
||||
2 files changed, 34 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
|
||||
@@ -116,13 +116,7 @@ int radeon_irq_kms_init(struct radeon_de
|
||||
}
|
||||
/* enable msi */
|
||||
rdev->msi_enabled = 0;
|
||||
- /* MSIs don't seem to work on my rs780;
|
||||
- * not sure about rs880 or other rs780s.
|
||||
- * Needs more investigation.
|
||||
- */
|
||||
- if ((rdev->family >= CHIP_RV380) &&
|
||||
- (rdev->family != CHIP_RS780) &&
|
||||
- (rdev->family != CHIP_RS880)) {
|
||||
+ if (rdev->family >= CHIP_RV380) {
|
||||
int ret = pci_enable_msi(rdev->pdev);
|
||||
if (!ret) {
|
||||
rdev->msi_enabled = 1;
|
|
@ -1913,58 +1913,6 @@ index 9f5ccbe..72fa87c 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 245d2cd..525c3a3 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -2463,6 +2463,39 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4374,
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4375,
|
||||
quirk_msi_intx_disable_bug);
|
||||
|
||||
+/*
|
||||
+ * MSI does not work with the AMD RS780/RS880 internal graphics and HDMI audio
|
||||
+ * devices unless the BIOS has initialized the nb_cntl.strap_msi_enable bit.
|
||||
+ */
|
||||
+static void __init rs780_int_gfx_disable_msi(struct pci_dev *int_gfx_bridge)
|
||||
+{
|
||||
+ u32 nb_cntl;
|
||||
+
|
||||
+ if (!int_gfx_bridge->subordinate)
|
||||
+ return;
|
||||
+
|
||||
+ pci_bus_write_config_dword(int_gfx_bridge->bus, PCI_DEVFN(0, 0),
|
||||
+ 0x60, 0);
|
||||
+ pci_bus_read_config_dword(int_gfx_bridge->bus, PCI_DEVFN(0, 0),
|
||||
+ 0x64, &nb_cntl);
|
||||
+
|
||||
+ if (!(nb_cntl & BIT(10))) {
|
||||
+ dev_warn(&int_gfx_bridge->dev,
|
||||
+ FW_WARN "RS780: MSI for internal graphics disabled\n");
|
||||
+ int_gfx_bridge->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#define PCI_DEVICE_ID_AMD_RS780_P2P_INT_GFX 0x9602
|
||||
+
|
||||
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD,
|
||||
+ PCI_DEVICE_ID_AMD_RS780_P2P_INT_GFX,
|
||||
+ rs780_int_gfx_disable_msi);
|
||||
+/* wrong vendor ID on M4A785TD motherboard: */
|
||||
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK,
|
||||
+ PCI_DEVICE_ID_AMD_RS780_P2P_INT_GFX,
|
||||
+ rs780_int_gfx_disable_msi);
|
||||
+
|
||||
#endif /* CONFIG_PCI_MSI */
|
||||
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
@@ -2513,6 +2546,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x10e7, quirk_i82576_sriov);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x10e8, quirk_i82576_sriov);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150a, quirk_i82576_sriov);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150d, quirk_i82576_sriov);
|
||||
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1518, quirk_i82576_sriov);
|
||||
|
||||
#endif /* CONFIG_PCI_IOV */
|
||||
|
||||
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
|
||||
index c790d45..cae6b2c 100644
|
||||
--- a/drivers/scsi/mvsas/mv_init.c
|
||||
|
|
|
@ -16,4 +16,3 @@
|
|||
+ bugfix/all/drm-i915-avoid-null-deref-in-get_pages-unwind-after-error.patch
|
||||
+ bugfix/all/drm-i915-fix-small-leak-on-overlay-error-path.patch
|
||||
+ bugfix/all/drm-nouveau-report-unknown-connector-state-if-lid-closed.patch
|
||||
+ bugfix/all/pci-quirk-rs780-rs880-work-around-missing-msi-initialization.patch
|
||||
|
|
Loading…
Reference in New Issue