Commit 7776d5e6 authored by Wei Fang's avatar Wei Fang Committed by Paolo Abeni
Browse files

net: enetc: move sync packet modification before dma_map_single()



Move sync packet content modification before dma_map_single() to follow
correct DMA usage process, even though the previous sequence worked due
to hardware DMA-coherence support (LS1028A). But for the upcoming i.MX95,
its ENETC (v4) does not support "dma-coherent", so this step is very
necessary. Otherwise, the originTimestamp and correction fields of the
sent packets will still be the values before the modification.

Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
Reviewed-by: default avatarFrank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20250829050615.1247468-13-wei.fang@nxp.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent d889abaa
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -303,6 +303,7 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring, struct sk_buff *skb)
	unsigned int f;
	dma_addr_t dma;
	u8 flags = 0;
	u32 tstamp;

	enetc_clear_tx_bd(&temp_bd);
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
@@ -327,6 +328,13 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring, struct sk_buff *skb)
		}
	}

	if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) {
		do_onestep_tstamp = true;
		tstamp = enetc_update_ptp_sync_msg(priv, skb);
	} else if (enetc_cb->flag & ENETC_F_TX_TSTAMP) {
		do_twostep_tstamp = true;
	}

	i = tx_ring->next_to_use;
	txbd = ENETC_TXBD(*tx_ring, i);
	prefetchw(txbd);
@@ -346,11 +354,6 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring, struct sk_buff *skb)
	count++;

	do_vlan = skb_vlan_tag_present(skb);
	if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP)
		do_onestep_tstamp = true;
	else if (enetc_cb->flag & ENETC_F_TX_TSTAMP)
		do_twostep_tstamp = true;

	tx_swbd->do_twostep_tstamp = do_twostep_tstamp;
	tx_swbd->qbv_en = !!(priv->active_offloads & ENETC_F_QBV);
	tx_swbd->check_wb = tx_swbd->do_twostep_tstamp || tx_swbd->qbv_en;
@@ -393,8 +396,6 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring, struct sk_buff *skb)
		}

		if (do_onestep_tstamp) {
			u32 tstamp = enetc_update_ptp_sync_msg(priv, skb);

			/* Configure extension BD */
			temp_bd.ext.tstamp = cpu_to_le32(tstamp);
			e_flags |= ENETC_TXBD_E_FLAGS_ONE_STEP_PTP;