lkml.org 
[lkml]   [2010]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
SubjectRe: [Regression, post-rc2] Commit a5ee4eb7541 breaks OpenGL on RS780 (was: Re: Linux 2.6.34-rc3)
Date
On Thursday 01 April 2010, Alex Deucher wrote:
> On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <clemens@ladisch.de> wrote:
> >> >> > Alex Deucher wrote:
> >> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> >> >> >>> On Tuesday 30 March 2010, Rafael J. Wysocki wrote:
> >> >> >>>> > PCI quirk: RS780/RS880: work around missing MSI initialization
> >> >> >>>>
> >> >> >>>> This one (commit a5ee4eb7541) broke OpenGL acceleration on my new test box
> >> >> >>>> which happens to have a RS780.
> >> >> >
> >> >> > So it's better to disable MSI unconditionally.
> >> >> >
> >> >> > Rafael, can you check if MSI works for the HDMI audio device?
> >> >> > (I'd guess it doesn't.)
> >> >> >
> >> >> >> I also have the attached patch queued in via Dave's tree to disable
> >> >> >> MSI on all IGP chips for the time being.
> >> >> >
> >> >> > This disables MSI only for the graphics device. I'd prefer to have
> >> >> > the quirk on its bridge so that MSI gets disabled for the HDMI audio
> >> >> > device too, to avoid having to duplicate this quirk in the snd-hda-intel
> >> >> > driver.
> >> >> >
> >> >> > ==========
> >> >> >
> >> >> > PCI quirk: RS780/RS880: disable MSI completely
> >> >> >
> >> >> > The missing initialization of the nb_cntl.strap_msi_enable does not seem
> >> >> > to be the only problem that prevents MSI, so that quirk is not
> >> >> > sufficient to enable MSI on all machines. To be safe, unconditionally
> >> >> > disable MSI for the internal graphics and HDMI audio on these chipsets.
> >> >> >
> >> >> > Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
> >> >>
> >> >> Works fine here.
> >> >>
> >> >> Tested-by: Alex Deucher <alexdeucher@gmail.com>
> >> >
> >> > Unfortunately it doesn't work for me without the
> >> >
> >> > if ((rdev->family >= CHIP_RV380) &&
> >> > (!(rdev->flags & RADEON_IS_IGP)))
> >> >
> >> > radeon quirk.
> >>
> >> what are your pci ids?
> >
> > 1022:960b
> >
> > I guess 1022 is AMD.
> >
> > OK, I'll try to add that.
>
> It's possible your oem has the wrong vendor id for the 0x9602 bridge.

Yes, the patch below works.

Thanks,
Rafael


---
drivers/gpu/drm/radeon/radeon_irq_kms.c | 3 --
drivers/pci/quirks.c | 36 ++------------------------------
2 files changed, 4 insertions(+), 35 deletions(-)

Index: linux-2.6/drivers/pci/quirks.c
===================================================================
--- linux-2.6.orig/drivers/pci/quirks.c
+++ linux-2.6/drivers/pci/quirks.c
@@ -2123,6 +2123,9 @@ static void __devinit quirk_disable_msi(
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9602, quirk_disable_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK, 0x9602, quirk_disable_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AI, 0x9602, quirk_disable_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi);

/* Go through the list of Hypertransport capabilities and
@@ -2495,39 +2498,6 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AT
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
Index: linux-2.6/drivers/gpu/drm/radeon/radeon_irq_kms.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/radeon/radeon_irq_kms.c
+++ linux-2.6/drivers/gpu/drm/radeon/radeon_irq_kms.c
@@ -117,8 +117,7 @@ int radeon_irq_kms_init(struct radeon_de
/* MSIs don't seem to work reliably on all IGP
* chips. Disable MSI on them for now.
*/
- if ((rdev->family >= CHIP_RV380) &&
- (!(rdev->flags & RADEON_IS_IGP))) {
+ if (rdev->family >= CHIP_RV380) {
int ret = pci_enable_msi(rdev->pdev);
if (!ret) {
rdev->msi_enabled = 1;

\
 
 \ /
  Last update: 2010-04-01 23:07    [W:0.159 / U:0.496 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site