|
@@ -92,6 +92,7 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid)
|
|
|
struct ixgbe_fcoe *fcoe;
|
|
|
struct ixgbe_adapter *adapter;
|
|
|
struct ixgbe_fcoe_ddp *ddp;
|
|
|
+ u32 fcbuff;
|
|
|
|
|
|
if (!netdev)
|
|
|
goto out_ddp_put;
|
|
@@ -115,7 +116,14 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid)
|
|
|
IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCBUFF, 0);
|
|
|
IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCDMARW,
|
|
|
(xid | IXGBE_FCDMARW_WE));
|
|
|
+
|
|
|
+ /* guaranteed to be invalidated after 100us */
|
|
|
+ IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCDMARW,
|
|
|
+ (xid | IXGBE_FCDMARW_RE));
|
|
|
+ fcbuff = IXGBE_READ_REG(&adapter->hw, IXGBE_FCBUFF);
|
|
|
spin_unlock_bh(&fcoe->lock);
|
|
|
+ if (fcbuff & IXGBE_FCBUFF_VALID)
|
|
|
+ udelay(100);
|
|
|
}
|
|
|
if (ddp->sgl)
|
|
|
pci_unmap_sg(adapter->pdev, ddp->sgl, ddp->sgc,
|