lkml.org 
[lkml]   [2010]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[087/116] PCI quirk: RS780/RS880: work around missing MSI initialization
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    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/pci/quirks.c | 33 +++++++++++++++++++++++++++++++++
    1 file changed, 33 insertions(+)

    --- a/drivers/pci/quirks.c
    +++ b/drivers/pci/quirks.c
    @@ -2463,6 +2463,39 @@ 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



    \
     
     \ /
      Last update: 2010-03-31 02:05    [W:2.424 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site