diff options
author | Dmitry Kravkov <dmitry@broadcom.com> | 2011-08-29 20:08:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-15 14:49:29 -0400 |
commit | dfacf1387ceb6d7d6df614b18016fd1f347a1996 (patch) | |
tree | 59d234bafb337ff407851b96b5592abf61ee5da4 /drivers/net/bnx2x/bnx2x_main.c | |
parent | e9278a475f845833b569ca47171e64fe48c616e0 (diff) |
bnx2x: fix BRB thresholds for dropless_fc mode
Fix the thresholds according to 5778x HW and increase rx_ring size
to suit new thresholds in dropless_fc mode.
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x_main.c')
-rw-r--r-- | drivers/net/bnx2x/bnx2x_main.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index f74582a22c68..3f93e8666104 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c | |||
@@ -2756,8 +2756,14 @@ static void bnx2x_pf_rx_q_prep(struct bnx2x *bp, | |||
2756 | u16 tpa_agg_size = 0; | 2756 | u16 tpa_agg_size = 0; |
2757 | 2757 | ||
2758 | if (!fp->disable_tpa) { | 2758 | if (!fp->disable_tpa) { |
2759 | pause->sge_th_hi = 250; | 2759 | pause->sge_th_lo = SGE_TH_LO(bp); |
2760 | pause->sge_th_lo = 150; | 2760 | pause->sge_th_hi = SGE_TH_HI(bp); |
2761 | |||
2762 | /* validate SGE ring has enough to cross high threshold */ | ||
2763 | WARN_ON(bp->dropless_fc && | ||
2764 | pause->sge_th_hi + FW_PREFETCH_CNT > | ||
2765 | MAX_RX_SGE_CNT * NUM_RX_SGE_PAGES); | ||
2766 | |||
2761 | tpa_agg_size = min_t(u32, | 2767 | tpa_agg_size = min_t(u32, |
2762 | (min_t(u32, 8, MAX_SKB_FRAGS) * | 2768 | (min_t(u32, 8, MAX_SKB_FRAGS) * |
2763 | SGE_PAGE_SIZE * PAGES_PER_SGE), 0xffff); | 2769 | SGE_PAGE_SIZE * PAGES_PER_SGE), 0xffff); |
@@ -2771,10 +2777,21 @@ static void bnx2x_pf_rx_q_prep(struct bnx2x *bp, | |||
2771 | 2777 | ||
2772 | /* pause - not for e1 */ | 2778 | /* pause - not for e1 */ |
2773 | if (!CHIP_IS_E1(bp)) { | 2779 | if (!CHIP_IS_E1(bp)) { |
2774 | pause->bd_th_hi = 350; | 2780 | pause->bd_th_lo = BD_TH_LO(bp); |
2775 | pause->bd_th_lo = 250; | 2781 | pause->bd_th_hi = BD_TH_HI(bp); |
2776 | pause->rcq_th_hi = 350; | 2782 | |
2777 | pause->rcq_th_lo = 250; | 2783 | pause->rcq_th_lo = RCQ_TH_LO(bp); |
2784 | pause->rcq_th_hi = RCQ_TH_HI(bp); | ||
2785 | /* | ||
2786 | * validate that rings have enough entries to cross | ||
2787 | * high thresholds | ||
2788 | */ | ||
2789 | WARN_ON(bp->dropless_fc && | ||
2790 | pause->bd_th_hi + FW_PREFETCH_CNT > | ||
2791 | bp->rx_ring_size); | ||
2792 | WARN_ON(bp->dropless_fc && | ||
2793 | pause->rcq_th_hi + FW_PREFETCH_CNT > | ||
2794 | NUM_RCQ_RINGS * MAX_RCQ_DESC_CNT); | ||
2778 | 2795 | ||
2779 | pause->pri_map = 1; | 2796 | pause->pri_map = 1; |
2780 | } | 2797 | } |
@@ -2802,9 +2819,7 @@ static void bnx2x_pf_rx_q_prep(struct bnx2x *bp, | |||
2802 | * For PF Clients it should be the maximum avaliable number. | 2819 | * For PF Clients it should be the maximum avaliable number. |
2803 | * VF driver(s) may want to define it to a smaller value. | 2820 | * VF driver(s) may want to define it to a smaller value. |
2804 | */ | 2821 | */ |
2805 | rxq_init->max_tpa_queues = | 2822 | rxq_init->max_tpa_queues = MAX_AGG_QS(bp); |
2806 | (CHIP_IS_E1(bp) ? ETH_MAX_AGGREGATION_QUEUES_E1 : | ||
2807 | ETH_MAX_AGGREGATION_QUEUES_E1H_E2); | ||
2808 | 2823 | ||
2809 | rxq_init->cache_line_log = BNX2X_RX_ALIGN_SHIFT; | 2824 | rxq_init->cache_line_log = BNX2X_RX_ALIGN_SHIFT; |
2810 | rxq_init->fw_sb_id = fp->fw_sb_id; | 2825 | rxq_init->fw_sb_id = fp->fw_sb_id; |