diff options
author | Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> | 2009-05-19 05:18:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-05-19 18:36:13 -0400 |
commit | aa5aec888585fedcda7cfffc20f75240ad1cb42d (patch) | |
tree | 38028b9825b90ab8caef718f169cef2f69b00e77 /drivers/net/ixgbe/ixgbe_82599.c | |
parent | 3577aa1bd7efc9c474f59738d2fb89c168168d55 (diff) |
ixgbe: Add semaphore access for PHY initialization for 82599
The SFP+ NIC (device id 0x10fb) needs a semaphore to serialize
PHY access, so our PHY init code must honor that same semaphore.
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_82599.c')
-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 39d7b64aced7..fef7397accda 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: |