diff options
Diffstat (limited to 'drivers/net/ethernet/chelsio')
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 19 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 39 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 6 | 
4 files changed, 32 insertions, 35 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h index a4da893ac1e..378988b5709 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h @@ -251,6 +251,8 @@ struct adapter_params {  	unsigned char rev;                /* chip revision */  	unsigned char offload; +	unsigned char bypass; +  	unsigned int ofldq_wr_cred;  }; @@ -642,6 +644,23 @@ extern int dbfifo_int_thresh;  #define for_each_port(adapter, iter) \  	for (iter = 0; iter < (adapter)->params.nports; ++iter) +static inline int is_bypass(struct adapter *adap) +{ +	return adap->params.bypass; +} + +static inline int is_bypass_device(int device) +{ +	/* this should be set based upon device capabilities */ +	switch (device) { +	case 0x440b: +	case 0x440c: +		return 1; +	default: +		return 0; +	} +} +  static inline unsigned int core_ticks_per_usec(const struct adapter *adap)  {  	return adap->params.vpd.cclk / 1000; diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index 604f4f87f55..0df1284df49 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c @@ -3416,16 +3416,6 @@ static int adap_init0_config(struct adapter *adapter, int reset)  			 finicsum, cfcsum);  	/* -	 * If we're a pure NIC driver then disable all offloading facilities. -	 * This will allow the firmware to optimize aspects of the hardware -	 * configuration which will result in improved performance. -	 */ -	caps_cmd.ofldcaps = 0; -	caps_cmd.iscsicaps = 0; -	caps_cmd.rdmacaps = 0; -	caps_cmd.fcoecaps = 0; - -	/*  	 * And now tell the firmware to use the configuration we just loaded.  	 */  	caps_cmd.op_to_write = @@ -3513,18 +3503,6 @@ static int adap_init0_no_config(struct adapter *adapter, int reset)  	if (ret < 0)  		goto bye; -#ifndef CONFIG_CHELSIO_T4_OFFLOAD -	/* -	 * If we're a pure NIC driver then disable all offloading facilities. -	 * This will allow the firmware to optimize aspects of the hardware -	 * configuration which will result in improved performance. -	 */ -	caps_cmd.ofldcaps = 0; -	caps_cmd.iscsicaps = 0; -	caps_cmd.rdmacaps = 0; -	caps_cmd.fcoecaps = 0; -#endif -  	if (caps_cmd.niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {  		if (!vf_acls)  			caps_cmd.niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM); @@ -3745,6 +3723,7 @@ static int adap_init0(struct adapter *adap)  	u32 v, port_vec;  	enum dev_state state;  	u32 params[7], val[7]; +	struct fw_caps_config_cmd caps_cmd;  	int reset = 1, j;  	/* @@ -3898,6 +3877,9 @@ static int adap_init0(struct adapter *adap)  			goto bye;  	} +	if (is_bypass_device(adap->pdev->device)) +		adap->params.bypass = 1; +  	/*  	 * Grab some of our basic fundamental operating parameters.  	 */ @@ -3940,13 +3922,12 @@ static int adap_init0(struct adapter *adap)  		adap->tids.aftid_end = val[1];  	} -#ifdef CONFIG_CHELSIO_T4_OFFLOAD  	/*  	 * Get device capabilities so we can determine what resources we need  	 * to manage.  	 */  	memset(&caps_cmd, 0, sizeof(caps_cmd)); -	caps_cmd.op_to_write = htonl(V_FW_CMD_OP(FW_CAPS_CONFIG_CMD) | +	caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |  				     FW_CMD_REQUEST | FW_CMD_READ);  	caps_cmd.retval_len16 = htonl(FW_LEN16(caps_cmd));  	ret = t4_wr_mbox(adap, adap->mbox, &caps_cmd, sizeof(caps_cmd), @@ -3991,15 +3972,6 @@ static int adap_init0(struct adapter *adap)  		adap->vres.ddp.size = val[4] - val[3] + 1;  		adap->params.ofldq_wr_cred = val[5]; -		params[0] = FW_PARAM_PFVF(ETHOFLD_START); -		params[1] = FW_PARAM_PFVF(ETHOFLD_END); -		ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 2, -				      params, val); -		if ((val[0] != val[1]) && (ret >= 0)) { -			adap->tids.uotid_base = val[0]; -			adap->tids.nuotids = val[1] - val[0] + 1; -		} -  		adap->params.offload = 1;  	}  	if (caps_cmd.rdmacaps) { @@ -4048,7 +4020,6 @@ static int adap_init0(struct adapter *adap)  	}  #undef FW_PARAM_PFVF  #undef FW_PARAM_DEV -#endif /* CONFIG_CHELSIO_T4_OFFLOAD */  	/*  	 * These are finalized by FW initialization, load their values now. diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h index 1b899fea1a9..39bec73ff87 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h @@ -102,6 +102,9 @@ struct tid_info {  	unsigned int ftid_base;  	unsigned int aftid_base;  	unsigned int aftid_end; +	/* Server filter region */ +	unsigned int sftid_base; +	unsigned int nsftids;  	spinlock_t atid_lock ____cacheline_aligned_in_smp;  	union aopen_entry *afree; diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index 32eec15fe4c..730ae2cfa49 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c @@ -2519,6 +2519,7 @@ int t4_fw_bye(struct adapter *adap, unsigned int mbox)  {  	struct fw_bye_cmd c; +	memset(&c, 0, sizeof(c));  	INIT_CMD(c, BYE, WRITE);  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);  } @@ -2535,6 +2536,7 @@ int t4_early_init(struct adapter *adap, unsigned int mbox)  {  	struct fw_initialize_cmd c; +	memset(&c, 0, sizeof(c));  	INIT_CMD(c, INITIALIZE, WRITE);  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);  } @@ -2551,6 +2553,7 @@ int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset)  {  	struct fw_reset_cmd c; +	memset(&c, 0, sizeof(c));  	INIT_CMD(c, RESET, WRITE);  	c.val = htonl(reset);  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); @@ -2828,7 +2831,7 @@ int t4_fixup_host_params(struct adapter *adap, unsigned int page_size,  		     HOSTPAGESIZEPF7(sge_hps));  	t4_set_reg_field(adap, SGE_CONTROL, -			 INGPADBOUNDARY(INGPADBOUNDARY_MASK) | +			 INGPADBOUNDARY_MASK |  			 EGRSTATUSPAGESIZE_MASK,  			 INGPADBOUNDARY(fl_align_log - 5) |  			 EGRSTATUSPAGESIZE(stat_len != 64)); @@ -3278,6 +3281,7 @@ int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid,  {  	struct fw_vi_enable_cmd c; +	memset(&c, 0, sizeof(c));  	c.op_to_viid = htonl(FW_CMD_OP(FW_VI_ENABLE_CMD) | FW_CMD_REQUEST |  			     FW_CMD_EXEC | FW_VI_ENABLE_CMD_VIID(viid));  	c.ien_to_len16 = htonl(FW_VI_ENABLE_CMD_LED | FW_LEN16(c));  |