diff options
Diffstat (limited to 'drivers/net/ethernet/intel')
| -rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 7 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_common.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_xsk.c | 15 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/iavf/iavf_main.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_sched.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/e1000_82575.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 12 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_ptp.c | 17 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_main.c | 7 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 10 | 
12 files changed, 43 insertions, 39 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c index 71d3d8854d8f..be56e631d693 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c +++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c @@ -607,6 +607,7 @@ static int e1000_set_ringparam(struct net_device *netdev,  	for (i = 0; i < adapter->num_rx_queues; i++)  		rxdr[i].count = rxdr->count; +	err = 0;  	if (netif_running(adapter->netdev)) {  		/* Try to get new resources before deleting old */  		err = e1000_setup_all_rx_resources(adapter); @@ -627,14 +628,13 @@ static int e1000_set_ringparam(struct net_device *netdev,  		adapter->rx_ring = rxdr;  		adapter->tx_ring = txdr;  		err = e1000_up(adapter); -		if (err) -			goto err_setup;  	}  	kfree(tx_old);  	kfree(rx_old);  	clear_bit(__E1000_RESETTING, &adapter->flags); -	return 0; +	return err; +  err_setup_tx:  	e1000_free_all_rx_resources(adapter);  err_setup_rx: @@ -646,7 +646,6 @@ err_alloc_rx:  err_alloc_tx:  	if (netif_running(adapter->netdev))  		e1000_up(adapter); -err_setup:  	clear_bit(__E1000_RESETTING, &adapter->flags);  	return err;  } diff --git a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h index 530613f31527..69a2daaca5c5 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h +++ b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h @@ -20,6 +20,8 @@  /* API version 1.7 implements additional link and PHY-specific APIs  */  #define I40E_MINOR_VER_GET_LINK_INFO_XL710 0x0007 +/* API version 1.9 for X722 implements additional link and PHY-specific APIs */ +#define I40E_MINOR_VER_GET_LINK_INFO_X722 0x0009  /* API version 1.6 for X722 devices adds ability to stop FW LLDP agent */  #define I40E_MINOR_VER_FW_LLDP_STOPPABLE_X722 0x0006 diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c index d37c6e0e5f08..7560f06768e0 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_common.c +++ b/drivers/net/ethernet/intel/i40e/i40e_common.c @@ -1876,7 +1876,8 @@ i40e_status i40e_aq_get_link_info(struct i40e_hw *hw,  	     hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE)  		hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU; -	if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) { +	if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE && +	    hw->mac.type != I40E_MAC_X722) {  		__le32 tmp;  		memcpy(&tmp, resp->link_type, sizeof(tmp)); diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c index b1c3227ae4ab..d07e1a890428 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c @@ -157,11 +157,6 @@ static int i40e_xsk_umem_disable(struct i40e_vsi *vsi, u16 qid)  		err = i40e_queue_pair_enable(vsi, qid);  		if (err)  			return err; - -		/* Kick start the NAPI context so that receiving will start */ -		err = i40e_xsk_wakeup(vsi->netdev, qid, XDP_WAKEUP_RX); -		if (err) -			return err;  	}  	return 0; @@ -694,8 +689,6 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)  		i40e_xdp_ring_update_tail(xdp_ring);  		xsk_umem_consume_tx_done(xdp_ring->xsk_umem); -		if (xsk_umem_uses_need_wakeup(xdp_ring->xsk_umem)) -			xsk_clear_tx_need_wakeup(xdp_ring->xsk_umem);  	}  	return !!budget && work_done; @@ -774,12 +767,8 @@ bool i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi,  	i40e_update_tx_stats(tx_ring, completed_frames, total_bytes);  out_xmit: -	if (xsk_umem_uses_need_wakeup(tx_ring->xsk_umem)) { -		if (tx_ring->next_to_clean == tx_ring->next_to_use) -			xsk_set_tx_need_wakeup(tx_ring->xsk_umem); -		else -			xsk_clear_tx_need_wakeup(tx_ring->xsk_umem); -	} +	if (xsk_umem_uses_need_wakeup(tx_ring->xsk_umem)) +		xsk_set_tx_need_wakeup(tx_ring->xsk_umem);  	xmit_done = i40e_xmit_zc(tx_ring, budget); diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index 8f310e520b06..821987da5698 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -314,7 +314,7 @@ iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx)  	q_vector->rx.target_itr = ITR_TO_REG(rx_ring->itr_setting);  	q_vector->ring_mask |= BIT(r_idx);  	wr32(hw, IAVF_VFINT_ITRN1(IAVF_RX_ITR, q_vector->reg_idx), -	     q_vector->rx.current_itr); +	     q_vector->rx.current_itr >> 1);  	q_vector->rx.current_itr = q_vector->rx.target_itr;  } @@ -340,7 +340,7 @@ iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx)  	q_vector->tx.target_itr = ITR_TO_REG(tx_ring->itr_setting);  	q_vector->num_ringpairs++;  	wr32(hw, IAVF_VFINT_ITRN1(IAVF_TX_ITR, q_vector->reg_idx), -	     q_vector->tx.target_itr); +	     q_vector->tx.target_itr >> 1);  	q_vector->tx.current_itr = q_vector->tx.target_itr;  } diff --git a/drivers/net/ethernet/intel/ice/ice_sched.c b/drivers/net/ethernet/intel/ice/ice_sched.c index fc624b73d05d..2fde9653a608 100644 --- a/drivers/net/ethernet/intel/ice/ice_sched.c +++ b/drivers/net/ethernet/intel/ice/ice_sched.c @@ -1036,7 +1036,7 @@ enum ice_status ice_sched_query_res_alloc(struct ice_hw *hw)  	struct ice_aqc_query_txsched_res_resp *buf;  	enum ice_status status = 0;  	__le16 max_sibl; -	u8 i; +	u16 i;  	if (hw->layer_info)  		return status; diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c index 3ec2ce0725d5..8a6ef3514129 100644 --- a/drivers/net/ethernet/intel/igb/e1000_82575.c +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c @@ -466,7 +466,7 @@ static s32 igb_init_mac_params_82575(struct e1000_hw *hw)  			? igb_setup_copper_link_82575  			: igb_setup_serdes_link_82575; -	if (mac->type == e1000_82580) { +	if (mac->type == e1000_82580 || mac->type == e1000_i350) {  		switch (hw->device_id) {  		/* feature not supported on these id's */  		case E1000_DEV_ID_DH89XXCC_SGMII: diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 105b0624081a..ed7e667d7eb2 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -753,7 +753,8 @@ u32 igb_rd32(struct e1000_hw *hw, u32 reg)  		struct net_device *netdev = igb->netdev;  		hw->hw_addr = NULL;  		netdev_err(netdev, "PCIe link lost\n"); -		WARN(1, "igb: Failed to read reg 0x%x!\n", reg); +		WARN(pci_device_is_present(igb->pdev), +		     "igb: Failed to read reg 0x%x!\n", reg);  	}  	return value; @@ -2064,7 +2065,8 @@ static void igb_check_swap_media(struct igb_adapter *adapter)  	if ((hw->phy.media_type == e1000_media_type_copper) &&  	    (!(connsw & E1000_CONNSW_AUTOSENSE_EN))) {  		swap_now = true; -	} else if (!(connsw & E1000_CONNSW_SERDESD)) { +	} else if ((hw->phy.media_type != e1000_media_type_copper) && +		   !(connsw & E1000_CONNSW_SERDESD)) {  		/* copper signal takes time to appear */  		if (adapter->copper_tries < 4) {  			adapter->copper_tries++; @@ -2370,7 +2372,7 @@ void igb_reset(struct igb_adapter *adapter)  		adapter->ei.get_invariants(hw);  		adapter->flags &= ~IGB_FLAG_MEDIA_RESET;  	} -	if ((mac->type == e1000_82575) && +	if ((mac->type == e1000_82575 || mac->type == e1000_i350) &&  	    (adapter->flags & IGB_FLAG_MAS_ENABLE)) {  		igb_enable_mas(adapter);  	} @@ -5673,8 +5675,8 @@ static void igb_tx_ctxtdesc(struct igb_ring *tx_ring,  	 * should have been handled by the upper layers.  	 */  	if (tx_ring->launchtime_enable) { -		ts = ns_to_timespec64(first->skb->tstamp); -		first->skb->tstamp = 0; +		ts = ktime_to_timespec64(first->skb->tstamp); +		first->skb->tstamp = ktime_set(0, 0);  		context_desc->seqnum_seed = cpu_to_le32(ts.tv_nsec / 32);  	} else {  		context_desc->seqnum_seed = 0; diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index fd3071f55bd3..c39e921757ba 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c @@ -521,6 +521,19 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp,  	switch (rq->type) {  	case PTP_CLK_REQ_EXTTS: +		/* Reject requests with unsupported flags */ +		if (rq->extts.flags & ~(PTP_ENABLE_FEATURE | +					PTP_RISING_EDGE | +					PTP_FALLING_EDGE | +					PTP_STRICT_FLAGS)) +			return -EOPNOTSUPP; + +		/* Reject requests failing to enable both edges. */ +		if ((rq->extts.flags & PTP_STRICT_FLAGS) && +		    (rq->extts.flags & PTP_ENABLE_FEATURE) && +		    (rq->extts.flags & PTP_EXTTS_EDGES) != PTP_EXTTS_EDGES) +			return -EOPNOTSUPP; +  		if (on) {  			pin = ptp_find_pin(igb->ptp_clock, PTP_PF_EXTTS,  					   rq->extts.index); @@ -551,6 +564,10 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp,  		return 0;  	case PTP_CLK_REQ_PEROUT: +		/* Reject requests with unsupported flags */ +		if (rq->perout.flags) +			return -EOPNOTSUPP; +  		if (on) {  			pin = ptp_find_pin(igb->ptp_clock, PTP_PF_PEROUT,  					   rq->perout.index); diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index 63b62d74f961..24888676f69b 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -824,8 +824,8 @@ static void igc_tx_ctxtdesc(struct igc_ring *tx_ring,  	 * should have been handled by the upper layers.  	 */  	if (tx_ring->launchtime_enable) { -		ts = ns_to_timespec64(first->skb->tstamp); -		first->skb->tstamp = 0; +		ts = ktime_to_timespec64(first->skb->tstamp); +		first->skb->tstamp = ktime_set(0, 0);  		context_desc->launch_time = cpu_to_le32(ts.tv_nsec / 32);  	} else {  		context_desc->launch_time = 0; @@ -4047,7 +4047,8 @@ u32 igc_rd32(struct igc_hw *hw, u32 reg)  		hw->hw_addr = NULL;  		netif_device_detach(netdev);  		netdev_err(netdev, "PCIe link lost, device now detached\n"); -		WARN(1, "igc: Failed to read reg 0x%x!\n", reg); +		WARN(pci_device_is_present(igc->pdev), +		     "igc: Failed to read reg 0x%x!\n", reg);  	}  	return value; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 1ce2397306b9..91b3780ddb04 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -4310,7 +4310,6 @@ static void ixgbe_set_rx_buffer_len(struct ixgbe_adapter *adapter)  		if (test_bit(__IXGBE_RX_FCOE, &rx_ring->state))  			set_bit(__IXGBE_RX_3K_BUFFER, &rx_ring->state); -		clear_bit(__IXGBE_RX_BUILD_SKB_ENABLED, &rx_ring->state);  		if (adapter->flags2 & IXGBE_FLAG2_RX_LEGACY)  			continue; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c index 100ac89b345d..d6feaacfbf89 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c @@ -622,8 +622,6 @@ static bool ixgbe_xmit_zc(struct ixgbe_ring *xdp_ring, unsigned int budget)  	if (tx_desc) {  		ixgbe_xdp_ring_update_tail(xdp_ring);  		xsk_umem_consume_tx_done(xdp_ring->xsk_umem); -		if (xsk_umem_uses_need_wakeup(xdp_ring->xsk_umem)) -			xsk_clear_tx_need_wakeup(xdp_ring->xsk_umem);  	}  	return !!budget && work_done; @@ -691,12 +689,8 @@ bool ixgbe_clean_xdp_tx_irq(struct ixgbe_q_vector *q_vector,  	if (xsk_frames)  		xsk_umem_complete_tx(umem, xsk_frames); -	if (xsk_umem_uses_need_wakeup(tx_ring->xsk_umem)) { -		if (tx_ring->next_to_clean == tx_ring->next_to_use) -			xsk_set_tx_need_wakeup(tx_ring->xsk_umem); -		else -			xsk_clear_tx_need_wakeup(tx_ring->xsk_umem); -	} +	if (xsk_umem_uses_need_wakeup(tx_ring->xsk_umem)) +		xsk_set_tx_need_wakeup(tx_ring->xsk_umem);  	return ixgbe_xmit_zc(tx_ring, q_vector->tx.work_limit);  }  | 

