|
@@ -1,7 +1,7 @@
|
|
|
/*******************************************************************************
|
|
|
|
|
|
Intel 10 Gigabit PCI Express Linux driver
|
|
|
- Copyright(c) 1999 - 2014 Intel Corporation.
|
|
|
+ Copyright(c) 1999 - 2015 Intel Corporation.
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it
|
|
|
under the terms and conditions of the GNU General Public License,
|
|
@@ -2454,6 +2454,17 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
|
|
|
/* Always set this bit to ensure any future transactions are blocked */
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_CTRL, IXGBE_CTRL_GIO_DIS);
|
|
|
|
|
|
+ /* Poll for bit to read as set */
|
|
|
+ for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
|
|
|
+ if (IXGBE_READ_REG(hw, IXGBE_CTRL) & IXGBE_CTRL_GIO_DIS)
|
|
|
+ break;
|
|
|
+ usleep_range(100, 120);
|
|
|
+ }
|
|
|
+ if (i >= IXGBE_PCI_MASTER_DISABLE_TIMEOUT) {
|
|
|
+ hw_dbg(hw, "GIO disable did not set - requesting resets\n");
|
|
|
+ goto gio_disable_fail;
|
|
|
+ }
|
|
|
+
|
|
|
/* Exit if master requests are blocked */
|
|
|
if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO) ||
|
|
|
ixgbe_removed(hw->hw_addr))
|
|
@@ -2475,6 +2486,7 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
|
|
|
* again to clear out any effects they may have had on our device.
|
|
|
*/
|
|
|
hw_dbg(hw, "GIO Master Disable bit didn't clear - requesting resets\n");
|
|
|
+gio_disable_fail:
|
|
|
hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
|
|
|
|
|
|
if (hw->mac.type >= ixgbe_mac_X550)
|