bnx2x: Count number of link changes
Number of link changes are now being stored in shared memory [by all possible link owners], for management use [as well as possible debug information for dumps]. Signed-off-by: Yaniv Rosner <Yaniv.Rosner@qlogic.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: Ariel Elior <Ariel.Elior@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
30fd9ff0d9
commit
fcd02d27b5
@ -2258,8 +2258,8 @@ struct shmem2_region {
|
|||||||
#define LINK_SFP_EEPROM_COMP_CODE_LRM 0x00004000
|
#define LINK_SFP_EEPROM_COMP_CODE_LRM 0x00004000
|
||||||
|
|
||||||
u32 reserved5[2];
|
u32 reserved5[2];
|
||||||
u32 reserved6[PORT_MAX];
|
u32 link_change_count[PORT_MAX]; /* Offset 0x160-0x164 */
|
||||||
|
#define LINK_CHANGE_COUNT_MASK 0xff /* Offset 0x168 */
|
||||||
/* driver version for each personality */
|
/* driver version for each personality */
|
||||||
struct os_drv_ver func_os_drv_ver[E2_FUNC_MAX]; /* Offset 0x16c */
|
struct os_drv_ver func_os_drv_ver[E2_FUNC_MAX]; /* Offset 0x16c */
|
||||||
|
|
||||||
|
@ -6758,6 +6758,25 @@ static int bnx2x_update_link_up(struct link_params *params,
|
|||||||
msleep(20);
|
msleep(20);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void bnx2x_chng_link_count(struct link_params *params, bool clear)
|
||||||
|
{
|
||||||
|
struct bnx2x *bp = params->bp;
|
||||||
|
u32 addr, val;
|
||||||
|
|
||||||
|
/* Verify the link_change_count is supported by the MFW */
|
||||||
|
if (!(SHMEM2_HAS(bp, link_change_count)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
addr = params->shmem2_base +
|
||||||
|
offsetof(struct shmem2_region, link_change_count[params->port]);
|
||||||
|
if (clear)
|
||||||
|
val = 0;
|
||||||
|
else
|
||||||
|
val = REG_RD(bp, addr) + 1;
|
||||||
|
REG_WR(bp, addr, val);
|
||||||
|
}
|
||||||
|
|
||||||
/* The bnx2x_link_update function should be called upon link
|
/* The bnx2x_link_update function should be called upon link
|
||||||
* interrupt.
|
* interrupt.
|
||||||
* Link is considered up as follows:
|
* Link is considered up as follows:
|
||||||
@ -6776,6 +6795,7 @@ int bnx2x_link_update(struct link_params *params, struct link_vars *vars)
|
|||||||
struct link_vars phy_vars[MAX_PHYS];
|
struct link_vars phy_vars[MAX_PHYS];
|
||||||
u8 port = params->port;
|
u8 port = params->port;
|
||||||
u8 link_10g_plus, phy_index;
|
u8 link_10g_plus, phy_index;
|
||||||
|
u32 prev_link_status = vars->link_status;
|
||||||
u8 ext_phy_link_up = 0, cur_link_up;
|
u8 ext_phy_link_up = 0, cur_link_up;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
u8 is_mi_int = 0;
|
u8 is_mi_int = 0;
|
||||||
@ -7015,6 +7035,9 @@ int bnx2x_link_update(struct link_params *params, struct link_vars *vars)
|
|||||||
else
|
else
|
||||||
rc = bnx2x_update_link_down(params, vars);
|
rc = bnx2x_update_link_down(params, vars);
|
||||||
|
|
||||||
|
if ((prev_link_status ^ vars->link_status) & LINK_STATUS_LINK_UP)
|
||||||
|
bnx2x_chng_link_count(params, false);
|
||||||
|
|
||||||
/* Update MCP link status was changed */
|
/* Update MCP link status was changed */
|
||||||
if (params->feature_config_flags & FEATURE_CONFIG_BC_SUPPORTS_AFEX)
|
if (params->feature_config_flags & FEATURE_CONFIG_BC_SUPPORTS_AFEX)
|
||||||
bnx2x_fw_command(bp, DRV_MSG_CODE_LINK_STATUS_CHANGED, 0);
|
bnx2x_fw_command(bp, DRV_MSG_CODE_LINK_STATUS_CHANGED, 0);
|
||||||
@ -12658,6 +12681,7 @@ int bnx2x_phy_init(struct link_params *params, struct link_vars *vars)
|
|||||||
params->link_flags = PHY_INITIALIZED;
|
params->link_flags = PHY_INITIALIZED;
|
||||||
/* Driver opens NIG-BRB filters */
|
/* Driver opens NIG-BRB filters */
|
||||||
bnx2x_set_rx_filter(params, 1);
|
bnx2x_set_rx_filter(params, 1);
|
||||||
|
bnx2x_chng_link_count(params, true);
|
||||||
/* Check if link flap can be avoided */
|
/* Check if link flap can be avoided */
|
||||||
lfa_status = bnx2x_check_lfa(params);
|
lfa_status = bnx2x_check_lfa(params);
|
||||||
|
|
||||||
@ -12732,6 +12756,7 @@ int bnx2x_link_reset(struct link_params *params, struct link_vars *vars,
|
|||||||
DP(NETIF_MSG_LINK, "Resetting the link of port %d\n", port);
|
DP(NETIF_MSG_LINK, "Resetting the link of port %d\n", port);
|
||||||
/* Disable attentions */
|
/* Disable attentions */
|
||||||
vars->link_status = 0;
|
vars->link_status = 0;
|
||||||
|
bnx2x_chng_link_count(params, true);
|
||||||
bnx2x_update_mng(params, vars->link_status);
|
bnx2x_update_mng(params, vars->link_status);
|
||||||
vars->eee_status &= ~(SHMEM_EEE_LP_ADV_STATUS_MASK |
|
vars->eee_status &= ~(SHMEM_EEE_LP_ADV_STATUS_MASK |
|
||||||
SHMEM_EEE_ACTIVE_BIT);
|
SHMEM_EEE_ACTIVE_BIT);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user