net/ixgbe/base: add debug traces
Add some traces in the reset_hw logic and semaphore acquisition logic to help debugging. Signed-off-by: Wei Dai <wei.dai@intel.com>
This commit is contained in:
parent
96dae4644a
commit
a85e378cc6
@ -410,8 +410,10 @@ s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
|
||||
|
||||
/* Setup flow control */
|
||||
ret_val = ixgbe_setup_fc(hw);
|
||||
if (ret_val != IXGBE_SUCCESS && ret_val != IXGBE_NOT_IMPLEMENTED)
|
||||
if (ret_val != IXGBE_SUCCESS && ret_val != IXGBE_NOT_IMPLEMENTED) {
|
||||
DEBUGOUT1("Flow control setup failed, returning %d\n", ret_val);
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/* Cache bit indicating need for crosstalk fix */
|
||||
switch (hw->mac.type) {
|
||||
@ -501,6 +503,9 @@ s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw)
|
||||
/* Initialize the LED link active for LED blink support */
|
||||
hw->mac.ops.init_led_link_act(hw);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
DEBUGOUT1("Failed to initialize HW, STATUS = %d\n", status);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -291,8 +291,11 @@ static bool ixgbe_probe_phy(struct ixgbe_hw *hw, u16 phy_addr)
|
||||
{
|
||||
u16 ext_ability = 0;
|
||||
|
||||
if (!ixgbe_validate_phy_addr(hw, phy_addr))
|
||||
if (!ixgbe_validate_phy_addr(hw, phy_addr)) {
|
||||
DEBUGOUT1("Unable to validate PHY address 0x%04X\n",
|
||||
phy_addr);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ixgbe_get_phy_id(hw))
|
||||
return false;
|
||||
@ -411,6 +414,8 @@ bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
|
||||
if (phy_id != 0xFFFF && phy_id != 0x0)
|
||||
valid = true;
|
||||
|
||||
DEBUGOUT1("PHY ID HIGH is 0x%04X\n", phy_id);
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
@ -439,6 +444,9 @@ s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
|
||||
hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
|
||||
hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
|
||||
}
|
||||
DEBUGOUT2("PHY_ID_HIGH 0x%04X, PHY_ID_LOW 0x%04X\n",
|
||||
phy_id_high, phy_id_low);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -570,7 +578,7 @@ out:
|
||||
* @phy_data: Pointer to read data from PHY register
|
||||
**/
|
||||
s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
|
||||
u16 *phy_data)
|
||||
u16 *phy_data)
|
||||
{
|
||||
u32 i, data, command;
|
||||
|
||||
@ -592,12 +600,13 @@ s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
|
||||
|
||||
command = IXGBE_READ_REG(hw, IXGBE_MSCA);
|
||||
if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
|
||||
ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY address command did not complete.\n");
|
||||
DEBUGOUT("PHY address command did not complete, returning IXGBE_ERR_PHY\n");
|
||||
return IXGBE_ERR_PHY;
|
||||
}
|
||||
|
||||
@ -627,6 +636,7 @@ s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
|
||||
|
||||
if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
|
||||
ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY read command didn't complete\n");
|
||||
DEBUGOUT("PHY read command didn't complete, returning IXGBE_ERR_PHY\n");
|
||||
return IXGBE_ERR_PHY;
|
||||
}
|
||||
|
||||
|
@ -775,8 +775,10 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask)
|
||||
/* SW NVM semaphore bit is used for access to all
|
||||
* SW_FW_SYNC bits (not just NVM)
|
||||
*/
|
||||
if (ixgbe_get_swfw_sync_semaphore(hw))
|
||||
if (ixgbe_get_swfw_sync_semaphore(hw)) {
|
||||
DEBUGOUT("Failed to get NVM access and register semaphore, returning IXGBE_ERR_SWFW_SYNC\n");
|
||||
return IXGBE_ERR_SWFW_SYNC;
|
||||
}
|
||||
|
||||
swfw_sync = IXGBE_READ_REG(hw, IXGBE_SWFW_SYNC_BY_MAC(hw));
|
||||
if (!(swfw_sync & (fwmask | swmask | hwmask))) {
|
||||
@ -798,6 +800,7 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask)
|
||||
if (swmask == IXGBE_GSSR_SW_MNG_SM) {
|
||||
ERROR_REPORT1(IXGBE_ERROR_POLLING,
|
||||
"Failed to get SW only semaphore");
|
||||
DEBUGOUT("Failed to get SW only semaphore, returning IXGBE_ERR_SWFW_SYNC\n");
|
||||
return IXGBE_ERR_SWFW_SYNC;
|
||||
}
|
||||
|
||||
@ -806,8 +809,10 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask)
|
||||
* of the requested resource(s) while ignoring the corresponding FW/HW
|
||||
* bits in the SW_FW_SYNC register.
|
||||
*/
|
||||
if (ixgbe_get_swfw_sync_semaphore(hw))
|
||||
if (ixgbe_get_swfw_sync_semaphore(hw)) {
|
||||
DEBUGOUT("Failed to get NVM sempahore and register semaphore while forcefully ignoring FW sempahore bit(s) and setting SW semaphore bit(s), returning IXGBE_ERR_SWFW_SYNC\n");
|
||||
return IXGBE_ERR_SWFW_SYNC;
|
||||
}
|
||||
swfw_sync = IXGBE_READ_REG(hw, IXGBE_SWFW_SYNC_BY_MAC(hw));
|
||||
if (swfw_sync & (fwmask | hwmask)) {
|
||||
swfw_sync |= swmask;
|
||||
@ -829,9 +834,11 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask)
|
||||
rmask |= IXGBE_GSSR_I2C_MASK;
|
||||
ixgbe_release_swfw_sync_X540(hw, rmask);
|
||||
ixgbe_release_swfw_sync_semaphore(hw);
|
||||
DEBUGOUT("Resource not released by other SW, returning IXGBE_ERR_SWFW_SYNC\n");
|
||||
return IXGBE_ERR_SWFW_SYNC;
|
||||
}
|
||||
ixgbe_release_swfw_sync_semaphore(hw);
|
||||
DEBUGOUT("Returning error IXGBE_ERR_SWFW_SYNC\n");
|
||||
|
||||
return IXGBE_ERR_SWFW_SYNC;
|
||||
}
|
||||
|
@ -1311,13 +1311,20 @@ s32 ixgbe_get_phy_token(struct ixgbe_hw *hw)
|
||||
sizeof(token_cmd),
|
||||
IXGBE_HI_COMMAND_TIMEOUT,
|
||||
true);
|
||||
if (status)
|
||||
if (status) {
|
||||
DEBUGOUT1("Issuing host interface command failed with Status = %d\n",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
if (token_cmd.hdr.cmd_or_resp.ret_status == FW_PHY_TOKEN_OK)
|
||||
return IXGBE_SUCCESS;
|
||||
if (token_cmd.hdr.cmd_or_resp.ret_status != FW_PHY_TOKEN_RETRY)
|
||||
if (token_cmd.hdr.cmd_or_resp.ret_status != FW_PHY_TOKEN_RETRY) {
|
||||
DEBUGOUT1("Host interface command returned 0x%08x , returning IXGBE_ERR_FW_RESP_INVALID\n",
|
||||
token_cmd.hdr.cmd_or_resp.ret_status);
|
||||
return IXGBE_ERR_FW_RESP_INVALID;
|
||||
}
|
||||
|
||||
DEBUGOUT("Returning IXGBE_ERR_TOKEN_RETRY\n");
|
||||
return IXGBE_ERR_TOKEN_RETRY;
|
||||
}
|
||||
|
||||
@ -2495,9 +2502,10 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
|
||||
|
||||
/* Call adapter stop to disable Tx/Rx and clear interrupts */
|
||||
status = hw->mac.ops.stop_adapter(hw);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
if (status != IXGBE_SUCCESS) {
|
||||
DEBUGOUT1("Failed to stop adapter, STATUS = %d\n", status);
|
||||
return status;
|
||||
|
||||
}
|
||||
/* flush pending Tx transactions */
|
||||
ixgbe_clear_tx_pending(hw);
|
||||
|
||||
@ -2506,14 +2514,23 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
|
||||
/* PHY ops must be identified and initialized prior to reset */
|
||||
status = hw->phy.ops.init(hw);
|
||||
|
||||
if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
|
||||
if (status)
|
||||
DEBUGOUT1("Failed to initialize PHY ops, STATUS = %d\n",
|
||||
status);
|
||||
|
||||
if (status == IXGBE_ERR_SFP_NOT_SUPPORTED) {
|
||||
DEBUGOUT("Returning from reset HW since PHY ops init returned IXGBE_ERR_SFP_NOT_SUPPORTED\n");
|
||||
return status;
|
||||
}
|
||||
|
||||
/* start the external PHY */
|
||||
if (hw->phy.type == ixgbe_phy_x550em_ext_t) {
|
||||
status = ixgbe_init_ext_t_x550em(hw);
|
||||
if (status)
|
||||
if (status) {
|
||||
DEBUGOUT1("Failed to start the external PHY, STATUS = %d\n",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
/* Setup SFP module if there is one present. */
|
||||
@ -2587,6 +2604,9 @@ mac_reset_top:
|
||||
if (hw->device_id == IXGBE_DEV_ID_X550EM_X_SFP)
|
||||
ixgbe_setup_mux_ctl(hw);
|
||||
|
||||
if (status != IXGBE_SUCCESS)
|
||||
DEBUGOUT1("Reset HW failed, STATUS = %d\n", status);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -4336,21 +4356,34 @@ STATIC s32 ixgbe_acquire_swfw_sync_X550a(struct ixgbe_hw *hw, u32 mask)
|
||||
status = IXGBE_SUCCESS;
|
||||
if (hmask)
|
||||
status = ixgbe_acquire_swfw_sync_X540(hw, hmask);
|
||||
if (status)
|
||||
if (status) {
|
||||
DEBUGOUT1("Could not acquire SWFW semaphore, Status = %d\n",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
if (!(mask & IXGBE_GSSR_TOKEN_SM))
|
||||
return IXGBE_SUCCESS;
|
||||
|
||||
status = ixgbe_get_phy_token(hw);
|
||||
if (status == IXGBE_ERR_TOKEN_RETRY)
|
||||
DEBUGOUT1("Could not acquire PHY token, Status = %d\n",
|
||||
status);
|
||||
|
||||
if (status == IXGBE_SUCCESS)
|
||||
return IXGBE_SUCCESS;
|
||||
|
||||
if (hmask)
|
||||
ixgbe_release_swfw_sync_X540(hw, hmask);
|
||||
if (status != IXGBE_ERR_TOKEN_RETRY)
|
||||
|
||||
if (status != IXGBE_ERR_TOKEN_RETRY) {
|
||||
DEBUGOUT1("Unable to retry acquiring the PHY token, Status = %d\n",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
DEBUGOUT1("Semaphore acquisition retries failed!: PHY ID = 0x%08X\n",
|
||||
hw->phy.id);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user