Commit 5f08e46b authored by Luca Tettamanti's avatar Luca Tettamanti Committed by Jeff Garzik

atl1: disable broken 64-bit DMA

64-bit DMA causes data corruption with atl1.  We don't know why, and Atheros
is working on it.  For now, just use 32-bit DMA.  This is a big hack that is
probably wrong, but it stops the bleeding.
Signed-off-by: default avatarLuca Tettamanti <kronos.it@gmail.com>
Acked-by: default avatarChris Snook <csnook@redhat.com>
Acked-by: default avatarJay Cliburn <jacliburn@bellsouth.net>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent c87ce658
...@@ -2203,21 +2203,20 @@ static int __devinit atl1_probe(struct pci_dev *pdev, ...@@ -2203,21 +2203,20 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
struct net_device *netdev; struct net_device *netdev;
struct atl1_adapter *adapter; struct atl1_adapter *adapter;
static int cards_found = 0; static int cards_found = 0;
bool pci_using_64 = true;
int err; int err;
err = pci_enable_device(pdev); err = pci_enable_device(pdev);
if (err) if (err)
return err; return err;
err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); /*
* 64-bit DMA currently has data corruption problems, so let's just
* use 32-bit DMA for now. This is a big hack that is probably wrong.
*/
err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
if (err) { if (err) {
err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); dev_err(&pdev->dev, "no usable DMA configuration\n");
if (err) { goto err_dma;
dev_err(&pdev->dev, "no usable DMA configuration\n");
goto err_dma;
}
pci_using_64 = false;
} }
/* Mark all PCI regions associated with PCI device /* Mark all PCI regions associated with PCI device
* pdev as being reserved by owner atl1_driver_name * pdev as being reserved by owner atl1_driver_name
...@@ -2282,7 +2281,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev, ...@@ -2282,7 +2281,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
netdev->ethtool_ops = &atl1_ethtool_ops; netdev->ethtool_ops = &atl1_ethtool_ops;
adapter->bd_number = cards_found; adapter->bd_number = cards_found;
adapter->pci_using_64 = pci_using_64;
/* setup the private structure */ /* setup the private structure */
err = atl1_sw_init(adapter); err = atl1_sw_init(adapter);
...@@ -2299,9 +2297,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev, ...@@ -2299,9 +2297,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
*/ */
/* netdev->features |= NETIF_F_TSO; */ /* netdev->features |= NETIF_F_TSO; */
if (pci_using_64)
netdev->features |= NETIF_F_HIGHDMA;
netdev->features |= NETIF_F_LLTX; netdev->features |= NETIF_F_LLTX;
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment