diff options
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82599.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/ixgbe/ixgbe_82599.c index 39d7b64aced..fef7397accd 100644 --- a/drivers/net/ixgbe/ixgbe_82599.c +++ b/drivers/net/ixgbe/ixgbe_82599.c | |||
@@ -109,6 +109,13 @@ s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw) | |||
109 | if (ret_val != 0) | 109 | if (ret_val != 0) |
110 | goto setup_sfp_out; | 110 | goto setup_sfp_out; |
111 | 111 | ||
112 | /* PHY config will finish before releasing the semaphore */ | ||
113 | ret_val = ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM); | ||
114 | if (ret_val != 0) { | ||
115 | ret_val = IXGBE_ERR_SWFW_SYNC; | ||
116 | goto setup_sfp_out; | ||
117 | } | ||
118 | |||
112 | hw->eeprom.ops.read(hw, ++data_offset, &data_value); | 119 | hw->eeprom.ops.read(hw, ++data_offset, &data_value); |
113 | while (data_value != 0xffff) { | 120 | while (data_value != 0xffff) { |
114 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, data_value); | 121 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, data_value); |
@@ -119,6 +126,11 @@ s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw) | |||
119 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, 0x00000102); | 126 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, 0x00000102); |
120 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, 0x00000b1d); | 127 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, 0x00000b1d); |
121 | IXGBE_WRITE_FLUSH(hw); | 128 | IXGBE_WRITE_FLUSH(hw); |
129 | |||
130 | /* Release the semaphore */ | ||
131 | ixgbe_release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM); | ||
132 | /* Delay obtaining semaphore again to allow FW access */ | ||
133 | msleep(hw->eeprom.semaphore_delay); | ||
122 | } | 134 | } |
123 | 135 | ||
124 | setup_sfp_out: | 136 | setup_sfp_out: |