]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: enetc: move sync packet modification before dma_map_single()
authorWei Fang <wei.fang@nxp.com>
Fri, 29 Aug 2025 05:06:13 +0000 (13:06 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 2 Sep 2025 11:13:34 +0000 (13:13 +0200)
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: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20250829050615.1247468-13-wei.fang@nxp.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/freescale/enetc/enetc.c

index 4325eb3d9481807940db7520bb7ccc889c5255ff..25379ac7d69d63b1285b8750ec543aa5aed34c0e 100644 (file)
@@ -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;