aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2013-08-12 19:25:00 -0400
committerDavid S. Miller <davem@davemloft.net>2013-08-13 19:04:28 -0400
commit568e24260fdc33d8a172a4d8da799cace4111b6e (patch)
tree03ae6aa8bd2a9b9d71673966d357bd00a0c2e5a7
parent507393eb2909ddf39edf3f8f4cd0fd914b720006 (diff)
bnx2x: update fairness parameters following DCB negotiation
ETS can be enabled as a result of DCB negotiation, then fairness must be recalculated after each negotiation. Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x.h2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c4
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c30
3 files changed, 24 insertions, 12 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index 98be67f660f2..f07a7ffd7773 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -2453,4 +2453,6 @@ enum bnx2x_pci_bus_speed {
2453 BNX2X_PCI_LINK_SPEED_5000 = 5000, 2453 BNX2X_PCI_LINK_SPEED_5000 = 5000,
2454 BNX2X_PCI_LINK_SPEED_8000 = 8000 2454 BNX2X_PCI_LINK_SPEED_8000 = 8000
2455}; 2455};
2456
2457void bnx2x_set_local_cmng(struct bnx2x *bp);
2456#endif /* bnx2x.h */ 2458#endif /* bnx2x.h */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
index 0c94df47e0e8..f9122f2d6b65 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
@@ -753,6 +753,10 @@ void bnx2x_dcbx_set_params(struct bnx2x *bp, u32 state)
753 bnx2x_pfc_set_pfc(bp); 753 bnx2x_pfc_set_pfc(bp);
754 754
755 bnx2x_dcbx_update_ets_params(bp); 755 bnx2x_dcbx_update_ets_params(bp);
756
757 /* ets may affect cmng configuration: reinit it in hw */
758 bnx2x_set_local_cmng(bp);
759
756 bnx2x_dcbx_resume_hw_tx(bp); 760 bnx2x_dcbx_resume_hw_tx(bp);
757 761
758 return; 762 return;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 6e1e9e7d8201..78b719568145 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -2476,7 +2476,7 @@ static void bnx2x_cmng_fns_init(struct bnx2x *bp, u8 read_cfg, u8 cmng_type)
2476 2476
2477 input.port_rate = bp->link_vars.line_speed; 2477 input.port_rate = bp->link_vars.line_speed;
2478 2478
2479 if (cmng_type == CMNG_FNS_MINMAX) { 2479 if (cmng_type == CMNG_FNS_MINMAX && input.port_rate) {
2480 int vn; 2480 int vn;
2481 2481
2482 /* read mf conf from shmem */ 2482 /* read mf conf from shmem */
@@ -2533,6 +2533,21 @@ static void storm_memset_cmng(struct bnx2x *bp,
2533 } 2533 }
2534} 2534}
2535 2535
2536/* init cmng mode in HW according to local configuration */
2537void bnx2x_set_local_cmng(struct bnx2x *bp)
2538{
2539 int cmng_fns = bnx2x_get_cmng_fns_mode(bp);
2540
2541 if (cmng_fns != CMNG_FNS_NONE) {
2542 bnx2x_cmng_fns_init(bp, false, cmng_fns);
2543 storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
2544 } else {
2545 /* rate shaping and fairness are disabled */
2546 DP(NETIF_MSG_IFUP,
2547 "single function mode without fairness\n");
2548 }
2549}
2550
2536/* This function is called upon link interrupt */ 2551/* This function is called upon link interrupt */
2537static void bnx2x_link_attn(struct bnx2x *bp) 2552static void bnx2x_link_attn(struct bnx2x *bp)
2538{ 2553{
@@ -2568,17 +2583,8 @@ static void bnx2x_link_attn(struct bnx2x *bp)
2568 bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP); 2583 bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
2569 } 2584 }
2570 2585
2571 if (bp->link_vars.link_up && bp->link_vars.line_speed) { 2586 if (bp->link_vars.link_up && bp->link_vars.line_speed)
2572 int cmng_fns = bnx2x_get_cmng_fns_mode(bp); 2587 bnx2x_set_local_cmng(bp);
2573
2574 if (cmng_fns != CMNG_FNS_NONE) {
2575 bnx2x_cmng_fns_init(bp, false, cmng_fns);
2576 storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
2577 } else
2578 /* rate shaping and fairness are disabled */
2579 DP(NETIF_MSG_IFUP,
2580 "single function mode without fairness\n");
2581 }
2582 2588
2583 __bnx2x_link_report(bp); 2589 __bnx2x_link_report(bp);
2584 2590