Alex Deucher wrote:
> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2123,6 +2123,8 @@ static void __devinit quirk_disable_msi(struct pci_dev *dev)
}
}
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_VIA, 0xa238, quirk_disable_msi);
/* Go through the list of Hypertransport capabilities and
@@ -2495,39 +2497,6 @@ 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
On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
> Alex Deucher wrote:
>> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
Works fine here.
Tested-by: Alex Deucher <[email protected]>
>
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -2123,6 +2123,8 @@ static void __devinit quirk_disable_msi(struct pci_dev *dev)
> ? ? ? ?}
> ?}
> ?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_VIA, 0xa238, quirk_disable_msi);
>
> ?/* Go through the list of Hypertransport capabilities and
> @@ -2495,39 +2497,6 @@ 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
>
On Thursday 01 April 2010, Alex Deucher wrote:
> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
> > Alex Deucher wrote:
> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
>
> Works fine here.
>
> Tested-by: Alex Deucher <[email protected]>
Unfortunately it doesn't work for me without the
if ((rdev->family >= CHIP_RV380) &&
(!(rdev->flags & RADEON_IS_IGP)))
radeon quirk.
Thanks,
Rafael
On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
> On Thursday 01 April 2010, Alex Deucher wrote:
>> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
>> > Alex Deucher wrote:
>> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
>>
>> Works fine here.
>>
>> Tested-by: Alex Deucher <[email protected]>
>
> 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?
Alex
>
> Thanks,
> Rafael
>
On Thursday 01 April 2010, Alex Deucher wrote:
> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
> >> > Alex Deucher wrote:
> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
> >>
> >> Works fine here.
> >>
> >> Tested-by: Alex Deucher <[email protected]>
> >
> > 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.
Rafael
On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
> On Thursday 01 April 2010, Alex Deucher wrote:
>> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
>> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
>> >> > Alex Deucher wrote:
>> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
>> >>
>> >> Works fine here.
>> >>
>> >> Tested-by: Alex Deucher <[email protected]>
>> >
>> > 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.
0x960b won't affect the internal gfx. That bridge is for the pcie x16 gfx slot.
0x9600 Host bridge
0x9602 Internal GFX PCI-PCI bridge ID
0x9603 External GFX - port 0
0x960B External GFX - port 1
0x9604 PCI-PCI bridge - Port 0
0x9605 PCI-PCI bridge - Port 1
0x9606 PCI-PCI bridge - Port 2
0x9607 PCI-PCI bridge - Port 3
0x9608 PCI-PCI bridge - Port 4
0x9609 PCI-PCI bridge - Port 5
0x960A PCI-PCI bridge (SB)
0x960F HD Audio controller
0x791A HDMI Audio codec
Alex
>
> Rafael
>
On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
> On Thursday 01 April 2010, Alex Deucher wrote:
>> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
>> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
>> >> > Alex Deucher wrote:
>> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
>> >>
>> >> Works fine here.
>> >>
>> >> Tested-by: Alex Deucher <[email protected]>
>> >
>> > 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.
Alex
>
> Rafael
>
On Thursday 01 April 2010, Alex Deucher wrote:
> On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
> >> >> > Alex Deucher wrote:
> >> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
> >> >>
> >> >> Works fine here.
> >> >>
> >> >> Tested-by: Alex Deucher <[email protected]>
> >> >
> >> > 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;
On Thu, Apr 1, 2010 at 5:08 PM, Rafael J. Wysocki <[email protected]> wrote:
> On Thursday 01 April 2010, Alex Deucher wrote:
>> On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
>> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
>> >> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
>> >> >> > Alex Deucher wrote:
>> >> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
>> >> >>
>> >> >> Works fine here.
>> >> >>
>> >> >> Tested-by: Alex Deucher <[email protected]>
>> >> >
>> >> > 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;
>
Let's skip this second chunk for now as there are other non-RS780 IGP
chips that could be problematic, so I'd rather just leave MSIs
disabled for now.
Alex
On Thursday 01 April 2010, Alex Deucher wrote:
> On Thu, Apr 1, 2010 at 5:08 PM, Rafael J. Wysocki <[email protected]> wrote:
> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
> >> >> >> > Alex Deucher wrote:
> >> >> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
> >> >> >>
> >> >> >> Works fine here.
> >> >> >>
> >> >> >> Tested-by: Alex Deucher <[email protected]>
> >> >> >
> >> >> > 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;
> >
>
> Let's skip this second chunk for now as there are other non-RS780 IGP
> chips that could be problematic, so I'd rather just leave MSIs
> disabled for now.
Works for me.
So do you want me to resubmit?
Rafael
On Thu, Apr 1, 2010 at 5:46 PM, Rafael J. Wysocki <[email protected]> wrote:
> On Thursday 01 April 2010, Alex Deucher wrote:
>> On Thu, Apr 1, 2010 at 5:08 PM, Rafael J. Wysocki <[email protected]> wrote:
>> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
>> >> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> >> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
>> >> >> > On Thursday 01 April 2010, Alex Deucher wrote:
>> >> >> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
>> >> >> >> > Alex Deucher wrote:
>> >> >> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> 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 <[email protected]>
>> >> >> >>
>> >> >> >> Works fine here.
>> >> >> >>
>> >> >> >> Tested-by: Alex Deucher <[email protected]>
>> >> >> >
>> >> >> > 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;
>> >
>>
>> Let's skip this second chunk for now as there are other non-RS780 IGP
>> chips that could be problematic, so I'd rather just leave MSIs
>> disabled for now.
>
> Works for me.
>
> So do you want me to resubmit?
>
Please.
Thanks,
Alex
> Rafael
>
On Friday 02 April 2010, Alex Deucher wrote:
> On Thu, Apr 1, 2010 at 5:46 PM, Rafael J. Wysocki <[email protected]> wrote:
> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> On Thu, Apr 1, 2010 at 5:08 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> On Thu, Apr 1, 2010 at 4:48 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> >> On Thu, Apr 1, 2010 at 4:28 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> >> >> > On Thursday 01 April 2010, Alex Deucher wrote:
> >> >> >> >> On Thu, Apr 1, 2010 at 2:36 AM, Clemens Ladisch <[email protected]> wrote:
> >> >> >> >> > Alex Deucher wrote:
> >> >> >> >> >> On Wed, Mar 31, 2010 at 9:13 PM, Rafael J. Wysocki <[email protected]> wrote:
> >> >> >> >> >>> On Tuesday 30 March 2010, Rafael J. Wysocki wrote:
...
> > So do you want me to resubmit?
> >
>
> Please.
Appended, with sign-offs and changelog.
Thanks,
Rafael
---
Subject: 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, disable MSI
unconditionally for the internal graphics and HDMI audio on these
chipsets.
[rjw: Added the PCI_VENDOR_ID_AI quirk.]
Signed-off-by: Clemens Ladisch <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
---
drivers/pci/quirks.c | 36 +++---------------------------------
1 file changed, 3 insertions(+), 33 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
On Fri, 2 Apr 2010, Rafael J. Wysocki wrote:
>
> Appended, with sign-offs and changelog.
>
> ---
> Subject: PCI quirk: RS780/RS880: disable MSI completely
Hmm. Isn't this missing a
From: Clemens Ladisch <[email protected]>
too? Or was the original patch yours?
Linus
On Friday 02 April 2010, Linus Torvalds wrote:
>
> On Fri, 2 Apr 2010, Rafael J. Wysocki wrote:
> >
> > Appended, with sign-offs and changelog.
> >
> > ---
> > Subject: PCI quirk: RS780/RS880: disable MSI completely
>
> Hmm. Isn't this missing a
>
> From: Clemens Ladisch <[email protected]>
>
> too?
Ouch, yes it is, sorry.
This one should be complete.
---
From: Clemens Ladisch <[email protected]>
Subject: 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, disable MSI
unconditionally for the internal graphics and HDMI audio on these
chipsets.
[rjw: Added the PCI_VENDOR_ID_AI quirk.]
Signed-off-by: Clemens Ladisch <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
---
drivers/pci/quirks.c | 36 +++---------------------------------
1 file changed, 3 insertions(+), 33 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
Rafael J. Wysocki wrote:
> From: Clemens Ladisch <[email protected]>
> Subject: 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, disable MSI
> unconditionally for the internal graphics and HDMI audio on these
> chipsets.
>
> [rjw: Added the PCI_VENDOR_ID_AI quirk.]
> ...
> +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);
I fear I have to NACK this. The fact that two OEMs have changed the vendor
ID makes it likely that this is a bug in AMD's template BIOS code, and that
we will see the same problem on other systems using other vendor IDs.
So we should not use the vendor ID of device 0x9602 to declare the quirk, but
use some other device with an ID that is known to be correct. We already
access the configuration space of the host bridge, so we should use that.
Furthermore, the quirk in my first patch was never run at all on the ALi
system, so it is probable that the nb_cntl.strap_msi_enable detection
would actually work. Rafael, please test this patch; if it doesn't work
on your system, we can still remove the check for the strap_msi_enable bit.
==========
Subject: PCI quirk: RS780/RS880: work around wrong vendor IDs of RS780 bridge
On many RS780 systems, the vendor ID of the PCI/PCI bridge for the
internal graphics is set to that of the mainboard vendor, so the quirk
would not match and failed to notice the disabled MSI.
Since we do not know in advance all possible vendor IDs, we have to
declare the quirk on another device with an ID that is known to be
correct, and use that as a stepping stone to find the PCI/PCI bridge,
if present.
Signed-off-by: Clemens Ladisch <[email protected]>
Cc: <[email protected]>
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2483,34 +2483,38 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AT
* 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)
+static void __init rs780_int_gfx_disable_msi(struct pci_dev *host_bridge)
{
+ struct pci_dev *int_gfx_bridge;
u32 nb_cntl;
- if (!int_gfx_bridge->subordinate)
+ /*
+ * Many OEMs change the vendor ID of the internal graphics PCI/PCI
+ * bridge, so we use the possible vendor/device IDs of the host bridge
+ * for the declared quirk, and search for the PCI/PCI bridge by slot
+ * number.
+ */
+ int_gfx_bridge = pci_get_slot(host_bridge->bus, PCI_DEVFN(1, 0));
+ if (!int_gfx_bridge)
return;
+ if (int_gfx_bridge->device != 0x9602 || !int_gfx_bridge->subordinate)
+ goto out;
- 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);
+ pci_write_config_dword(host_bridge, 0x60, 0);
+ pci_read_config_dword(host_bridge, 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
+out:
+ pci_dev_put(int_gfx_bridge);
+}
-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);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9600, rs780_int_gfx_disable_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9601, rs780_int_gfx_disable_msi);
#endif /* CONFIG_PCI_MSI */
On Saturday 03 April 2010, Clemens Ladisch wrote:
> Rafael J. Wysocki wrote:
> > From: Clemens Ladisch <[email protected]>
> > Subject: 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, disable MSI
> > unconditionally for the internal graphics and HDMI audio on these
> > chipsets.
> >
> > [rjw: Added the PCI_VENDOR_ID_AI quirk.]
> > ...
> > +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);
>
> I fear I have to NACK this.
I'm afraid it's too late, the patch has been merged.
> The fact that two OEMs have changed the vendor
> ID makes it likely that this is a bug in AMD's template BIOS code, and that
> we will see the same problem on other systems using other vendor IDs.
>
> So we should not use the vendor ID of device 0x9602 to declare the quirk, but
> use some other device with an ID that is known to be correct. We already
> access the configuration space of the host bridge, so we should use that.
>
> Furthermore, the quirk in my first patch was never run at all on the ALi
> system, so it is probable that the nb_cntl.strap_msi_enable detection
> would actually work. Rafael, please test this patch; if it doesn't work
> on your system, we can still remove the check for the strap_msi_enable bit.
>
> ==========
>
> Subject: PCI quirk: RS780/RS880: work around wrong vendor IDs of RS780 bridge
>
> On many RS780 systems, the vendor ID of the PCI/PCI bridge for the
> internal graphics is set to that of the mainboard vendor, so the quirk
> would not match and failed to notice the disabled MSI.
>
> Since we do not know in advance all possible vendor IDs, we have to
> declare the quirk on another device with an ID that is known to be
> correct, and use that as a stepping stone to find the PCI/PCI bridge,
> if present.
>
> Signed-off-by: Clemens Ladisch <[email protected]>
> Cc: <[email protected]>
Yes, this works (after reverting commit
5193d7a7f500cfbbfc0de221e808208199723521 and removing the
(rdev->flags & RADEON_IS_IGP) test from radeon_irq_kms_init()).
Thanks,
Rafael