|
@@ -60,6 +60,15 @@ s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
|
|
|
u32 phy_addr;
|
|
|
u16 ext_ability = 0;
|
|
|
|
|
|
+ if (!hw->phy.phy_semaphore_mask) {
|
|
|
+ hw->phy.lan_id = IXGBE_READ_REG(hw, IXGBE_STATUS) &
|
|
|
+ IXGBE_STATUS_LAN_ID_1;
|
|
|
+ if (hw->phy.lan_id)
|
|
|
+ hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY1_SM;
|
|
|
+ else
|
|
|
+ hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY0_SM;
|
|
|
+ }
|
|
|
+
|
|
|
if (hw->phy.type == ixgbe_phy_unknown) {
|
|
|
for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
|
|
|
hw->phy.mdio.prtad = phy_addr;
|
|
@@ -315,12 +324,7 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
|
|
|
u32 device_type, u16 *phy_data)
|
|
|
{
|
|
|
s32 status;
|
|
|
- u16 gssr;
|
|
|
-
|
|
|
- if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
|
|
|
- gssr = IXGBE_GSSR_PHY1_SM;
|
|
|
- else
|
|
|
- gssr = IXGBE_GSSR_PHY0_SM;
|
|
|
+ u32 gssr = hw->phy.phy_semaphore_mask;
|
|
|
|
|
|
if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
|
|
|
status = ixgbe_read_phy_reg_mdi(hw, reg_addr, device_type,
|
|
@@ -418,7 +422,7 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
|
|
|
u32 device_type, u16 phy_data)
|
|
|
{
|
|
|
s32 status;
|
|
|
- u16 gssr;
|
|
|
+ u32 gssr;
|
|
|
|
|
|
if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
|
|
|
gssr = IXGBE_GSSR_PHY1_SM;
|
|
@@ -1469,15 +1473,10 @@ s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
|
|
|
s32 status;
|
|
|
u32 max_retry = 10;
|
|
|
u32 retry = 0;
|
|
|
- u16 swfw_mask = 0;
|
|
|
+ u32 swfw_mask = hw->phy.phy_semaphore_mask;
|
|
|
bool nack = true;
|
|
|
*data = 0;
|
|
|
|
|
|
- if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
|
|
|
- swfw_mask = IXGBE_GSSR_PHY1_SM;
|
|
|
- else
|
|
|
- swfw_mask = IXGBE_GSSR_PHY0_SM;
|
|
|
-
|
|
|
do {
|
|
|
if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
|
|
|
return IXGBE_ERR_SWFW_SYNC;
|
|
@@ -1555,12 +1554,7 @@ s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
|
|
|
s32 status;
|
|
|
u32 max_retry = 1;
|
|
|
u32 retry = 0;
|
|
|
- u16 swfw_mask = 0;
|
|
|
-
|
|
|
- if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
|
|
|
- swfw_mask = IXGBE_GSSR_PHY1_SM;
|
|
|
- else
|
|
|
- swfw_mask = IXGBE_GSSR_PHY0_SM;
|
|
|
+ u32 swfw_mask = hw->phy.phy_semaphore_mask;
|
|
|
|
|
|
if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
|
|
|
return IXGBE_ERR_SWFW_SYNC;
|