diff options
author | Barak Witkowski <barak@broadcom.com> | 2012-12-01 23:05:47 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-12-02 20:22:59 -0500 |
commit | 4c704899328bcb448d9c7fa709777b3e28e05f6a (patch) | |
tree | 853fd359986c0169e9852113e4d9a2fe60e7e975 /drivers/net | |
parent | c55e771b7e6274f7e12d5bcaa8e7dec8a1e41c42 (diff) |
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: Barak Witkowski <barak@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c | 21 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | 7 |
3 files changed, 24 insertions, 6 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 8779ac1f89a2..e95174d451a5 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | |||
@@ -2426,7 +2426,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode) | |||
2426 | } | 2426 | } |
2427 | 2427 | ||
2428 | if (bp->port.pmf) | 2428 | if (bp->port.pmf) |
2429 | bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_DCB_CONFIGURED, 0); | 2429 | bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_PORT_MASK, 0); |
2430 | else | 2430 | else |
2431 | bnx2x__link_status_update(bp); | 2431 | bnx2x__link_status_update(bp); |
2432 | 2432 | ||
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c index cba4a16ab86a..c0d9b6947d97 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c | |||
@@ -413,8 +413,11 @@ static int bnx2x_dcbx_read_mib(struct bnx2x *bp, | |||
413 | 413 | ||
414 | static void bnx2x_pfc_set_pfc(struct bnx2x *bp) | 414 | static void bnx2x_pfc_set_pfc(struct bnx2x *bp) |
415 | { | 415 | { |
416 | int mfw_configured = SHMEM2_HAS(bp, drv_flags) && | ||
417 | GET_FLAGS(SHMEM2_RD(bp, drv_flags), | ||
418 | 1 << DRV_FLAGS_DCB_MFW_CONFIGURED); | ||
416 | if (bp->dcbx_port_params.pfc.enabled && | 419 | if (bp->dcbx_port_params.pfc.enabled && |
417 | !(bp->dcbx_error & DCBX_REMOTE_MIB_ERROR)) | 420 | (!(bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) || mfw_configured)) |
418 | /* | 421 | /* |
419 | * 1. Fills up common PFC structures if required | 422 | * 1. Fills up common PFC structures if required |
420 | * 2. Configure NIG, MAC and BRB via the elink | 423 | * 2. Configure NIG, MAC and BRB via the elink |
@@ -552,10 +555,13 @@ static void bnx2x_dcbx_update_ets_config(struct bnx2x *bp) | |||
552 | 555 | ||
553 | static void bnx2x_dcbx_update_ets_params(struct bnx2x *bp) | 556 | static void bnx2x_dcbx_update_ets_params(struct bnx2x *bp) |
554 | { | 557 | { |
558 | int mfw_configured = SHMEM2_HAS(bp, drv_flags) && | ||
559 | GET_FLAGS(SHMEM2_RD(bp, drv_flags), | ||
560 | 1 << DRV_FLAGS_DCB_MFW_CONFIGURED); | ||
555 | bnx2x_ets_disabled(&bp->link_params, &bp->link_vars); | 561 | bnx2x_ets_disabled(&bp->link_params, &bp->link_vars); |
556 | 562 | ||
557 | if (!bp->dcbx_port_params.ets.enabled || | 563 | if (!bp->dcbx_port_params.ets.enabled || |
558 | (bp->dcbx_error & DCBX_REMOTE_MIB_ERROR)) | 564 | ((bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) && !mfw_configured)) |
559 | return; | 565 | return; |
560 | 566 | ||
561 | if (CHIP_IS_E3B0(bp)) | 567 | if (CHIP_IS_E3B0(bp)) |
@@ -1802,11 +1808,14 @@ static void bnx2x_dcbx_fw_struct(struct bnx2x *bp, | |||
1802 | u8 cos = 0, pri = 0; | 1808 | u8 cos = 0, pri = 0; |
1803 | struct priority_cos *tt2cos; | 1809 | struct priority_cos *tt2cos; |
1804 | u32 *ttp = bp->dcbx_port_params.app.traffic_type_priority; | 1810 | u32 *ttp = bp->dcbx_port_params.app.traffic_type_priority; |
1811 | int mfw_configured = SHMEM2_HAS(bp, drv_flags) && | ||
1812 | GET_FLAGS(SHMEM2_RD(bp, drv_flags), | ||
1813 | 1 << DRV_FLAGS_DCB_MFW_CONFIGURED); | ||
1805 | 1814 | ||
1806 | memset(pfc_fw_cfg, 0, sizeof(*pfc_fw_cfg)); | 1815 | memset(pfc_fw_cfg, 0, sizeof(*pfc_fw_cfg)); |
1807 | 1816 | ||
1808 | /* to disable DCB - the structure must be zeroed */ | 1817 | /* to disable DCB - the structure must be zeroed */ |
1809 | if (bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) | 1818 | if ((bp->dcbx_error & DCBX_REMOTE_MIB_ERROR) && !mfw_configured) |
1810 | return; | 1819 | return; |
1811 | 1820 | ||
1812 | /*shortcut*/ | 1821 | /*shortcut*/ |
@@ -2073,8 +2082,12 @@ static u8 bnx2x_dcbnl_set_all(struct net_device *netdev) | |||
2073 | "Handling parity error recovery. Try again later\n"); | 2082 | "Handling parity error recovery. Try again later\n"); |
2074 | return 1; | 2083 | return 1; |
2075 | } | 2084 | } |
2076 | if (netif_running(bp->dev)) | 2085 | if (netif_running(bp->dev)) { |
2086 | bnx2x_update_drv_flags(bp, | ||
2087 | 1 << DRV_FLAGS_DCB_MFW_CONFIGURED, | ||
2088 | 1); | ||
2077 | bnx2x_dcbx_init(bp, true); | 2089 | bnx2x_dcbx_init(bp, true); |
2090 | } | ||
2078 | DP(BNX2X_MSG_DCB, "set_dcbx_params done (%d)\n", rc); | 2091 | DP(BNX2X_MSG_DCB, "set_dcbx_params done (%d)\n", rc); |
2079 | if (rc) | 2092 | if (rc) |
2080 | return 1; | 2093 | return 1; |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h index 1504e0a0f12a..9a51d4970ad5 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | |||
@@ -2088,8 +2088,13 @@ struct shmem2_region { | |||
2088 | 2088 | ||
2089 | /* generic flags controlled by the driver */ | 2089 | /* generic flags controlled by the driver */ |
2090 | u32 drv_flags; | 2090 | u32 drv_flags; |
2091 | #define DRV_FLAGS_DCB_CONFIGURED 0x1 | 2091 | #define DRV_FLAGS_DCB_CONFIGURED 0x0 |
2092 | #define DRV_FLAGS_DCB_CONFIGURATION_ABORTED 0x1 | ||
2093 | #define DRV_FLAGS_DCB_MFW_CONFIGURED 0x2 | ||
2092 | 2094 | ||
2095 | #define DRV_FLAGS_PORT_MASK ((1 << DRV_FLAGS_DCB_CONFIGURED) | \ | ||
2096 | (1 << DRV_FLAGS_DCB_CONFIGURATION_ABORTED) | \ | ||
2097 | (1 << DRV_FLAGS_DCB_MFW_CONFIGURED)) | ||
2093 | /* pointer to extended dev_info shared data copied from nvm image */ | 2098 | /* pointer to extended dev_info shared data copied from nvm image */ |
2094 | u32 extended_dev_info_shared_addr; | 2099 | u32 extended_dev_info_shared_addr; |
2095 | u32 ncsi_oem_data_addr; | 2100 | u32 ncsi_oem_data_addr; |