Commit 4c704899 authored by Barak Witkowski's avatar Barak Witkowski Committed by David S. Miller

bnx2x: Management can control PFC/ETS

If configured for PFC/ETS by management, configure chip regardless of the
presence of a remote peer which supports DCBX.
Signed-off-by: default avatarBarak Witkowski <barak@broadcom.com>
Signed-off-by: default avatarYuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c55e771b
...@@ -2426,7 +2426,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode) ...@@ -2426,7 +2426,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
} }
if (bp->port.pmf) if (bp->port.pmf)
bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_DCB_CONFIGURED, 0); bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_PORT_MASK, 0);
else else
bnx2x__link_status_update(bp); bnx2x__link_status_update(bp);
......
...@@ -413,8 +413,11 @@ static int bnx2x_dcbx_read_mib(struct bnx2x *bp, ...@@ -413,8 +413,11 @@ static int bnx2x_dcbx_read_mib(struct bnx2x *bp,
static void bnx2x_pfc_set_pfc(struct bnx2x *bp) static void bnx2x_pfc_set_pfc(struct bnx2x *bp)
{ {
int mfw_configured = SHMEM2_HAS(bp, drv_flags) &&
GET_FLAGS(SHMEM2_RD(bp, drv_flags),
1 << DRV_FLAGS_DCB_MFW_CONFIGURED);
if (bp->dcbx_port_params.pfc.enabled && if (bp->dcbx_port_params.pfc.enabled &&
!(bp->dcbx_error & DCBX_REMOTE_MIB_ERROR)) (!(bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) || mfw_configured))
/* /*
* 1. Fills up common PFC structures if required * 1. Fills up common PFC structures if required
* 2. Configure NIG, MAC and BRB via the elink * 2. Configure NIG, MAC and BRB via the elink
...@@ -552,10 +555,13 @@ static void bnx2x_dcbx_update_ets_config(struct bnx2x *bp) ...@@ -552,10 +555,13 @@ static void bnx2x_dcbx_update_ets_config(struct bnx2x *bp)
static void bnx2x_dcbx_update_ets_params(struct bnx2x *bp) static void bnx2x_dcbx_update_ets_params(struct bnx2x *bp)
{ {
int mfw_configured = SHMEM2_HAS(bp, drv_flags) &&
GET_FLAGS(SHMEM2_RD(bp, drv_flags),
1 << DRV_FLAGS_DCB_MFW_CONFIGURED);
bnx2x_ets_disabled(&bp->link_params, &bp->link_vars); bnx2x_ets_disabled(&bp->link_params, &bp->link_vars);
if (!bp->dcbx_port_params.ets.enabled || if (!bp->dcbx_port_params.ets.enabled ||
(bp->dcbx_error & DCBX_REMOTE_MIB_ERROR)) ((bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) && !mfw_configured))
return; return;
if (CHIP_IS_E3B0(bp)) if (CHIP_IS_E3B0(bp))
...@@ -1802,11 +1808,14 @@ static void bnx2x_dcbx_fw_struct(struct bnx2x *bp, ...@@ -1802,11 +1808,14 @@ static void bnx2x_dcbx_fw_struct(struct bnx2x *bp,
u8 cos = 0, pri = 0; u8 cos = 0, pri = 0;
struct priority_cos *tt2cos; struct priority_cos *tt2cos;
u32 *ttp = bp->dcbx_port_params.app.traffic_type_priority; u32 *ttp = bp->dcbx_port_params.app.traffic_type_priority;
int mfw_configured = SHMEM2_HAS(bp, drv_flags) &&
GET_FLAGS(SHMEM2_RD(bp, drv_flags),
1 << DRV_FLAGS_DCB_MFW_CONFIGURED);
memset(pfc_fw_cfg, 0, sizeof(*pfc_fw_cfg)); memset(pfc_fw_cfg, 0, sizeof(*pfc_fw_cfg));
/* to disable DCB - the structure must be zeroed */ /* to disable DCB - the structure must be zeroed */
if (bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) if ((bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) && !mfw_configured)
return; return;
/*shortcut*/ /*shortcut*/
...@@ -2073,8 +2082,12 @@ static u8 bnx2x_dcbnl_set_all(struct net_device *netdev) ...@@ -2073,8 +2082,12 @@ static u8 bnx2x_dcbnl_set_all(struct net_device *netdev)
"Handling parity error recovery. Try again later\n"); "Handling parity error recovery. Try again later\n");
return 1; return 1;
} }
if (netif_running(bp->dev)) if (netif_running(bp->dev)) {
bnx2x_update_drv_flags(bp,
1 << DRV_FLAGS_DCB_MFW_CONFIGURED,
1);
bnx2x_dcbx_init(bp, true); bnx2x_dcbx_init(bp, true);
}
DP(BNX2X_MSG_DCB, "set_dcbx_params done (%d)\n", rc); DP(BNX2X_MSG_DCB, "set_dcbx_params done (%d)\n", rc);
if (rc) if (rc)
return 1; return 1;
......
...@@ -2088,8 +2088,13 @@ struct shmem2_region { ...@@ -2088,8 +2088,13 @@ struct shmem2_region {
/* generic flags controlled by the driver */ /* generic flags controlled by the driver */
u32 drv_flags; u32 drv_flags;
#define DRV_FLAGS_DCB_CONFIGURED 0x1 #define DRV_FLAGS_DCB_CONFIGURED 0x0
#define DRV_FLAGS_DCB_CONFIGURATION_ABORTED 0x1
#define DRV_FLAGS_DCB_MFW_CONFIGURED 0x2
#define DRV_FLAGS_PORT_MASK ((1 << DRV_FLAGS_DCB_CONFIGURED) | \
(1 << DRV_FLAGS_DCB_CONFIGURATION_ABORTED) | \
(1 << DRV_FLAGS_DCB_MFW_CONFIGURED))
/* pointer to extended dev_info shared data copied from nvm image */ /* pointer to extended dev_info shared data copied from nvm image */
u32 extended_dev_info_shared_addr; u32 extended_dev_info_shared_addr;
u32 ncsi_oem_data_addr; u32 ncsi_oem_data_addr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment