Patchwork skge: add quirk to limit DMA

login
register
mail settings
Submitter Stanislaw Gruszka
Date Sept. 29, 2010, 9:33 a.m.
Message ID <20100929092515.GA6804@redhat.com>
Download mbox | patch
Permalink /patch/66060/
State Accepted
Delegated to: David Miller
Headers show

Comments

Stanislaw Gruszka - Sept. 29, 2010, 9:33 a.m.
Skge devices installed on some Gigabyte motherboards are not able to
perform 64 dma correctly due to board PCI implementation, so limit
DMA to 32bit if such boards are detected.

Bug was reported here:
https://bugzilla.redhat.com/show_bug.cgi?id=447489

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Tested-by: Luya Tshimbalanga <luya@fedoraproject.org>
---
 drivers/net/skge.c |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)
David Miller - Oct. 5, 2010, 7:18 a.m.
From: Stanislaw Gruszka <sgruszka@redhat.com>
Date: Wed, 29 Sep 2010 11:33:23 +0200

> Skge devices installed on some Gigabyte motherboards are not able to
> perform 64 dma correctly due to board PCI implementation, so limit
> DMA to 32bit if such boards are detected.
> 
> Bug was reported here:
> https://bugzilla.redhat.com/show_bug.cgi?id=447489
> 
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> Tested-by: Luya Tshimbalanga <luya@fedoraproject.org>

Stephen?  Can I get an ACK or some kind of other status on this?
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
stephen hemminger - Oct. 5, 2010, 9:58 p.m.
On Tue, 05 Oct 2010 00:18:00 -0700 (PDT)
David Miller <davem@davemloft.net> wrote:

> From: Stanislaw Gruszka <sgruszka@redhat.com>
> Date: Wed, 29 Sep 2010 11:33:23 +0200
> 
> > Skge devices installed on some Gigabyte motherboards are not able to
> > perform 64 dma correctly due to board PCI implementation, so limit
> > DMA to 32bit if such boards are detected.
> > 
> > Bug was reported here:
> > https://bugzilla.redhat.com/show_bug.cgi?id=447489
> > 
> > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> > Tested-by: Luya Tshimbalanga <luya@fedoraproject.org>
> 
> Stephen?  Can I get an ACK or some kind of other status on this?

I was hoping to find the hardware somewhere to dig deeper into
this. But until I know more please apply the patch. There are
two possibilities that still exist, 1) it is true for all devices
on this motherboard (in which cases it should be a PCI quirk),
2) it is a driver bug. The test was going to be putting a skge
pci card in a slot on the MB.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Oct. 5, 2010, 10:09 p.m.
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Wed, 6 Oct 2010 06:58:45 +0900

> On Tue, 05 Oct 2010 00:18:00 -0700 (PDT)
> David Miller <davem@davemloft.net> wrote:
> 
>> From: Stanislaw Gruszka <sgruszka@redhat.com>
>> Date: Wed, 29 Sep 2010 11:33:23 +0200
>> 
>> > Skge devices installed on some Gigabyte motherboards are not able to
>> > perform 64 dma correctly due to board PCI implementation, so limit
>> > DMA to 32bit if such boards are detected.
>> > 
>> > Bug was reported here:
>> > https://bugzilla.redhat.com/show_bug.cgi?id=447489
>> > 
>> > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
>> > Tested-by: Luya Tshimbalanga <luya@fedoraproject.org>
>> 
>> Stephen?  Can I get an ACK or some kind of other status on this?
> 
> I was hoping to find the hardware somewhere to dig deeper into
> this. But until I know more please apply the patch. There are
> two possibilities that still exist, 1) it is true for all devices
> on this motherboard (in which cases it should be a PCI quirk),
> 2) it is a driver bug. The test was going to be putting a skge
> pci card in a slot on the MB.

Ok, thanks Stephen, I'll apply his patch for now.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index a8a6358..571d4c3 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -43,6 +43,7 @@ 
 #include <linux/seq_file.h>
 #include <linux/mii.h>
 #include <linux/slab.h>
+#include <linux/dmi.h>
 #include <asm/irq.h>
 
 #include "skge.h"
@@ -3869,6 +3870,8 @@  static void __devinit skge_show_addr(struct net_device *dev)
 	netif_info(skge, probe, skge->netdev, "addr %pM\n", dev->dev_addr);
 }
 
+static int only_32bit_dma;
+
 static int __devinit skge_probe(struct pci_dev *pdev,
 				const struct pci_device_id *ent)
 {
@@ -3890,7 +3893,7 @@  static int __devinit skge_probe(struct pci_dev *pdev,
 
 	pci_set_master(pdev);
 
-	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+	if (!only_32bit_dma && !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
 		using_dac = 1;
 		err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
 	} else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
@@ -4148,8 +4151,25 @@  static struct pci_driver skge_driver = {
 	.shutdown =	skge_shutdown,
 };
 
+#ifndef CONFIG_DMI
+#warning "DMA quirk for Gigabyte nForce boards will not be applied"
+#endif
+
+static struct dmi_system_id skge_32bit_dma_boards[] = {
+	{
+		.ident = "Gigabyte nForce boards",
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co"),
+			DMI_MATCH(DMI_BOARD_NAME, "nForce"),
+		},
+	},
+	{}
+};
+
 static int __init skge_init_module(void)
 {
+	if (dmi_check_system(skge_32bit_dma_boards))
+		only_32bit_dma = 1;
 	skge_debug_init();
 	return pci_register_driver(&skge_driver);
 }