]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: phy: microchip_rds_ptp: improve HW ts config logic
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Tue, 6 Jan 2026 16:07:22 +0000 (16:07 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 9 Jan 2026 02:13:12 +0000 (18:13 -0800)
The driver stores new HW timestamping configuration values
unconditionally and may create inconsistency with what is actually
configured in case of error. Improve the logic to store new values only
once everything is configured.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
Link: https://patch.msgid.link/20260106160723.3925872-4-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/microchip_rds_ptp.c

index 4c6326b0ceaf80331d8172543a2a9c71f142dfaf..5f6e7cd11622dcdd71c3e54e139cb7992d4eea6e 100644 (file)
@@ -488,9 +488,6 @@ static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
        unsigned long flags;
        int rc;
 
-       clock->hwts_tx_type = config->tx_type;
-       clock->rx_filter = config->rx_filter;
-
        switch (config->rx_filter) {
        case HWTSTAMP_FILTER_NONE:
                clock->layer = 0;
@@ -518,6 +515,15 @@ static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
                return -ERANGE;
        }
 
+       switch (config->tx_type) {
+       case HWTSTAMP_TX_ONESTEP_SYNC:
+       case HWTSTAMP_TX_ON:
+       case HWTSTAMP_TX_OFF:
+               break;
+       default:
+               return -ERANGE;
+       }
+
        /* Setup parsing of the frames and enable the timestamping for ptp
         * frames
         */
@@ -553,7 +559,7 @@ static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
        if (rc < 0)
                return rc;
 
-       if (clock->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC)
+       if (config->tx_type == HWTSTAMP_TX_ONESTEP_SYNC)
                /* Enable / disable of the TX timestamp in the SYNC frames */
                rc = mchp_rds_phy_modify_mmd(clock, MCHP_RDS_PTP_TX_MOD,
                                             MCHP_RDS_PTP_PORT,
@@ -587,8 +593,13 @@ static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
        /* Now enable the timestamping interrupts */
        rc = mchp_rds_ptp_config_intr(clock,
                                      config->rx_filter != HWTSTAMP_FILTER_NONE);
+       if (rc < 0)
+               return rc;
 
-       return rc < 0 ? rc : 0;
+       clock->hwts_tx_type = config->tx_type;
+       clock->rx_filter = config->rx_filter;
+
+       return 0;
 }
 
 static int mchp_rds_ptp_ts_info(struct mii_timestamper *mii_ts,