diff options
Diffstat (limited to 'drivers/net/ethernet/cavium/thunder/nicvf_queues.c')
| -rw-r--r-- | drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c index a3d12dbde95b..d42704d07484 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c @@ -759,6 +759,7 @@ static void nicvf_rcv_queue_config(struct nicvf *nic, struct queue_set *qs,  	if (!rq->enable) {  		nicvf_reclaim_rcv_queue(nic, qs, qidx); +		xdp_rxq_info_unreg(&rq->xdp_rxq);  		return;  	} @@ -771,6 +772,9 @@ static void nicvf_rcv_queue_config(struct nicvf *nic, struct queue_set *qs,  	/* all writes of RBDR data to be loaded into L2 Cache as well*/  	rq->caching = 1; +	/* Driver have no proper error path for failed XDP RX-queue info reg */ +	WARN_ON(xdp_rxq_info_reg(&rq->xdp_rxq, nic->netdev, qidx) < 0); +  	/* Send a mailbox msg to PF to config RQ */  	mbx.rq.msg = NIC_MBOX_MSG_RQ_CFG;  	mbx.rq.qs_num = qs->vnic_id; @@ -977,6 +981,9 @@ void nicvf_qset_config(struct nicvf *nic, bool enable)  		qs_cfg->be = 1;  #endif  		qs_cfg->vnic = qs->vnic_id; +		/* Enable Tx timestamping capability */ +		if (nic->ptp_clock) +			qs_cfg->send_tstmp_ena = 1;  	}  	nicvf_send_msg_to_pf(nic, &mbx);  } @@ -1384,6 +1391,29 @@ nicvf_sq_add_hdr_subdesc(struct nicvf *nic, struct snd_queue *sq, int qentry,  		hdr->inner_l3_offset = skb_network_offset(skb) - 2;  		this_cpu_inc(nic->pnicvf->drv_stats->tx_tso);  	} + +	/* Check if timestamp is requested */ +	if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { +		skb_tx_timestamp(skb); +		return; +	} + +	/* Tx timestamping not supported along with TSO, so ignore request */ +	if (skb_shinfo(skb)->gso_size) +		return; + +	/* HW supports only a single outstanding packet to timestamp */ +	if (!atomic_add_unless(&nic->pnicvf->tx_ptp_skbs, 1, 1)) +		return; + +	/* Mark the SKB for later reference */ +	skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; + +	/* Finally enable timestamp generation +	 * Since 'post_cqe' is also set, two CQEs will be posted +	 * for this packet i.e CQE_TYPE_SEND and CQE_TYPE_SEND_PTP. +	 */ +	hdr->tstmp = 1;  }  /* SQ GATHER subdescriptor |