Commit c2b955e0 authored by Kumar Sanghvi's avatar Kumar Sanghvi Committed by David S. Miller

cxgb4: Updates for T5 SGE's Egress Congestion Threshold

Based on original work by Casey Leedom <leedom@chelsio.com>
Signed-off-by: default avatarKumar Sanghvi <kumaras@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0f4d201f
...@@ -2776,8 +2776,8 @@ static int t4_sge_init_hard(struct adapter *adap) ...@@ -2776,8 +2776,8 @@ static int t4_sge_init_hard(struct adapter *adap)
int t4_sge_init(struct adapter *adap) int t4_sge_init(struct adapter *adap)
{ {
struct sge *s = &adap->sge; struct sge *s = &adap->sge;
u32 sge_control; u32 sge_control, sge_conm_ctrl;
int ret; int ret, egress_threshold;
/* /*
* Ingress Padding Boundary and Egress Status Page Size are set up by * Ingress Padding Boundary and Egress Status Page Size are set up by
...@@ -2802,10 +2802,18 @@ int t4_sge_init(struct adapter *adap) ...@@ -2802,10 +2802,18 @@ int t4_sge_init(struct adapter *adap)
* SGE's Egress Congestion Threshold. If it isn't, then we can get * SGE's Egress Congestion Threshold. If it isn't, then we can get
* stuck waiting for new packets while the SGE is waiting for us to * stuck waiting for new packets while the SGE is waiting for us to
* give it more Free List entries. (Note that the SGE's Egress * give it more Free List entries. (Note that the SGE's Egress
* Congestion Threshold is in units of 2 Free List pointers.) * Congestion Threshold is in units of 2 Free List pointers.) For T4,
* there was only a single field to control this. For T5 there's the
* original field which now only applies to Unpacked Mode Free List
* buffers and a new field which only applies to Packed Mode Free List
* buffers.
*/ */
s->fl_starve_thres sge_conm_ctrl = t4_read_reg(adap, SGE_CONM_CTRL);
= EGRTHRESHOLD_GET(t4_read_reg(adap, SGE_CONM_CTRL))*2 + 1; if (is_t4(adap->params.chip))
egress_threshold = EGRTHRESHOLD_GET(sge_conm_ctrl);
else
egress_threshold = EGRTHRESHOLDPACKING_GET(sge_conm_ctrl);
s->fl_starve_thres = 2*egress_threshold + 1;
setup_timer(&s->rx_timer, sge_rx_timer_cb, (unsigned long)adap); setup_timer(&s->rx_timer, sge_rx_timer_cb, (unsigned long)adap);
setup_timer(&s->tx_timer, sge_tx_timer_cb, (unsigned long)adap); setup_timer(&s->tx_timer, sge_tx_timer_cb, (unsigned long)adap);
......
...@@ -230,6 +230,12 @@ ...@@ -230,6 +230,12 @@
#define EGRTHRESHOLD(x) ((x) << EGRTHRESHOLDshift) #define EGRTHRESHOLD(x) ((x) << EGRTHRESHOLDshift)
#define EGRTHRESHOLD_GET(x) (((x) & EGRTHRESHOLD_MASK) >> EGRTHRESHOLDshift) #define EGRTHRESHOLD_GET(x) (((x) & EGRTHRESHOLD_MASK) >> EGRTHRESHOLDshift)
#define EGRTHRESHOLDPACKING_MASK 0x3fU
#define EGRTHRESHOLDPACKING_SHIFT 14
#define EGRTHRESHOLDPACKING(x) ((x) << EGRTHRESHOLDPACKING_SHIFT)
#define EGRTHRESHOLDPACKING_GET(x) (((x) >> EGRTHRESHOLDPACKING_SHIFT) & \
EGRTHRESHOLDPACKING_MASK)
#define SGE_DBFIFO_STATUS 0x10a4 #define SGE_DBFIFO_STATUS 0x10a4
#define HP_INT_THRESH_SHIFT 28 #define HP_INT_THRESH_SHIFT 28
#define HP_INT_THRESH_MASK 0xfU #define HP_INT_THRESH_MASK 0xfU
......
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