Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -2203,22 +2203,21 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
	struct net_device *netdev;
	struct atl1_adapter *adapter;
	static int cards_found = 0;
	bool pci_using_64 = true;
	int err;

	err = pci_enable_device(pdev);
	if (err)
		return err;

	err = pci_set_dma_mask(pdev, DMA_64BIT_MASK);
	if (err) {
	/*
	 * 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) {
		dev_err(&pdev->dev, "no usable DMA configuration\n");
		goto err_dma;
	}
		pci_using_64 = false;
	}
	/* Mark all PCI regions associated with PCI device
	 * pdev as being reserved by owner atl1_driver_name
	 */
@@ -2282,7 +2281,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev,

	netdev->ethtool_ops = &atl1_ethtool_ops;
	adapter->bd_number = cards_found;
	adapter->pci_using_64 = pci_using_64;

	/* setup the private structure */
	err = atl1_sw_init(adapter);
@@ -2299,9 +2297,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
	 */
	/* netdev->features |= NETIF_F_TSO; */

	if (pci_using_64)
		netdev->features |= NETIF_F_HIGHDMA;

	netdev->features |= NETIF_F_LLTX;

	/*