diff mbox

PCI: disable MSI on SiS 761

Message ID 1442005937-21938-1-git-send-email-linux@rainbow-software.org (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Ondrej Zary Sept. 11, 2015, 9:12 p.m. UTC
MSI is broken on SiS 761 chipset at least on PC Chips A31G board.
No interrupts are delivered once MSI is enabled for a device. This causes
hang on X11 start with a nVidia card installed (with nouveau driver).

Disable MSI completely for this chipset.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/pci/quirks.c |    1 +
 1 file changed, 1 insertion(+)

Comments

Bjorn Helgaas Sept. 24, 2015, 6:21 p.m. UTC | #1
Hi Ondrej,

On Fri, Sep 11, 2015 at 11:12:17PM +0200, Ondrej Zary wrote:
> MSI is broken on SiS 761 chipset at least on PC Chips A31G board.
> No interrupts are delivered once MSI is enabled for a device. This causes
> hang on X11 start with a nVidia card installed (with nouveau driver).
> 
> Disable MSI completely for this chipset.
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

This is a pretty old chipset, isn't it?  Google finds a reference to
SiS 761GX from 2005.  I wonder why we're only finding this problem
now.  Is there a problem report?  I wonder if the problem is really
elsewhere, and turning off MSI just avoids the real problem.

Bjorn

> ---
>  drivers/pci/quirks.c |    1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index e9fd0e9..6caffc3 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -2204,6 +2204,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disab
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, 0x0761, quirk_disable_all_msi);
>  
>  /* Disable MSI on chipsets that are known to not support it */
>  static void quirk_disable_msi(struct pci_dev *dev)
> -- 
> Ondrej Zary
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ondrej Zary Sept. 24, 2015, 7:21 p.m. UTC | #2
On Thursday 24 September 2015 20:21:16 Bjorn Helgaas wrote:
> Hi Ondrej,
>
> On Fri, Sep 11, 2015 at 11:12:17PM +0200, Ondrej Zary wrote:
> > MSI is broken on SiS 761 chipset at least on PC Chips A31G board.
> > No interrupts are delivered once MSI is enabled for a device. This causes
> > hang on X11 start with a nVidia card installed (with nouveau driver).
> >
> > Disable MSI completely for this chipset.
> >
> > Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
>
> This is a pretty old chipset, isn't it?  Google finds a reference to
> SiS 761GX from 2005.  I wonder why we're only finding this problem
> now.  Is there a problem report?  I wonder if the problem is really
> elsewhere, and turning off MSI just avoids the real problem.

Yes, it's an old chipset and board (Socket 754) and not very common. Nouveau 
was not usable back then, MSI support was added to Nouveau in 2010 and 
enabled by default only in 2013. Maybe I'm the only one who tested MSI on 
this board/chipset...

The facts are:
 - zero interrupts in /proc/interrupts with MSI enabled and X11 hangs
 - everything works fine with MSI disabled
 - tested with two different nVidia cards (don't have any other PCIe card to 
test)

I guess that either the MSI support in the chipset is broken or the BIOS does 
not set up some secret chipset register(s) correctly.
Bjorn Helgaas Sept. 24, 2015, 8:40 p.m. UTC | #3
On Fri, Sep 11, 2015 at 11:12:17PM +0200, Ondrej Zary wrote:
> MSI is broken on SiS 761 chipset at least on PC Chips A31G board.
> No interrupts are delivered once MSI is enabled for a device. This causes
> hang on X11 start with a nVidia card installed (with nouveau driver).
> 
> Disable MSI completely for this chipset.
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

Applied to pci/misc for v4.4, thanks!

> ---
>  drivers/pci/quirks.c |    1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index e9fd0e9..6caffc3 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -2204,6 +2204,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disab
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, 0x0761, quirk_disable_all_msi);
>  
>  /* Disable MSI on chipsets that are known to not support it */
>  static void quirk_disable_msi(struct pci_dev *dev)
> -- 
> Ondrej Zary
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index e9fd0e9..6caffc3 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2204,6 +2204,7 @@  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disab
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, 0x0761, quirk_disable_all_msi);
 
 /* Disable MSI on chipsets that are known to not support it */
 static void quirk_disable_msi(struct pci_dev *dev)