net: stmmac: Don't modify the global ptp ops directly
authorMaxime Chevallier <maxime.chevallier@bootlin.com>
Tue, 12 Nov 2024 17:06:49 +0000 (18:06 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 14 Nov 2024 02:52:12 +0000 (18:52 -0800)
The stmmac_ptp_clock_ops are copied into the stmmac_priv structure
before being registered to the PTP core. Some adjustments are made prior
to that, such as the number of snapshots or max adjustment parameters.

Instead of modifying the global definition, then copying into the local
private data, let's first copy then modify the local parameters.

Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20241112170658.2388529-2-maxime.chevallier@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c

index a6b1de9..11ab1d6 100644 (file)
@@ -298,20 +298,21 @@ void stmmac_ptp_register(struct stmmac_priv *priv)
                priv->pps[i].available = true;
        }
 
-       if (priv->plat->ptp_max_adj)
-               stmmac_ptp_clock_ops.max_adj = priv->plat->ptp_max_adj;
-
        /* Calculate the clock domain crossing (CDC) error if necessary */
        priv->plat->cdc_error_adj = 0;
        if (priv->plat->has_gmac4 && priv->plat->clk_ptp_rate)
                priv->plat->cdc_error_adj = (2 * NSEC_PER_SEC) / priv->plat->clk_ptp_rate;
 
-       stmmac_ptp_clock_ops.n_per_out = priv->dma_cap.pps_out_num;
-       stmmac_ptp_clock_ops.n_ext_ts = priv->dma_cap.aux_snapshot_n;
+       priv->ptp_clock_ops = stmmac_ptp_clock_ops;
+
+       priv->ptp_clock_ops.n_per_out = priv->dma_cap.pps_out_num;
+       priv->ptp_clock_ops.n_ext_ts = priv->dma_cap.aux_snapshot_n;
+
+       if (priv->plat->ptp_max_adj)
+               priv->ptp_clock_ops.max_adj = priv->plat->ptp_max_adj;
 
        rwlock_init(&priv->ptp_lock);
        mutex_init(&priv->aux_ts_lock);
-       priv->ptp_clock_ops = stmmac_ptp_clock_ops;
 
        priv->ptp_clock = ptp_clock_register(&priv->ptp_clock_ops,
                                             priv->device);