aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x_main.c
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2011-08-29 20:08:39 -0400
committerDavid S. Miller <davem@davemloft.net>2011-09-15 14:49:29 -0400
commitdfacf1387ceb6d7d6df614b18016fd1f347a1996 (patch)
tree59d234bafb337ff407851b96b5592abf61ee5da4 /drivers/net/bnx2x/bnx2x_main.c
parente9278a475f845833b569ca47171e64fe48c616e0 (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.c33
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;