From: Kim Wooseok <5mghybrid@khu.ac.kr> Switching from HWTSTAMP_TX_ONESTEP_SYNC to HWTSTAMP_TX_OFF turns off descriptor timestamping, but leaves NCR.OSSMODE set, so one-step mode remains enabled. Update OSSMODE for every accepted TX mode and set it only for HWTSTAMP_TX_ONESTEP_SYNC. This also clears the previous one-step setting when switching to OFF. Since the update mask now always includes OSSMODE, drop the check for an empty mask. Fixes: ab91f0a9b5f4 ("net: macb: Add hardware PTP support") Assisted-by: GPT-6 Astra Signed-off-by: Kim Wooseok <5mghybrid@khu.ac.kr> --- drivers/net/ethernet/cadence/macb_ptp.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/cadence/macb_ptp.c b/drivers/net/ethernet/cadence/macb_ptp.c index b6d17fef4..6376b6631 100644 --- a/drivers/net/ethernet/cadence/macb_ptp.c +++ b/drivers/net/ethernet/cadence/macb_ptp.c @@ -390,7 +390,7 @@ int gem_set_hwtst(struct net_device *netdev, struct kernel_hwtstamp_config *tstamp_config, struct netlink_ext_ack *extack) { - u32 ncr_mask = 0; + u32 ncr_mask = MACB_BIT(OSSMODE); enum macb_bd_control tx_bd_control = TSTAMP_DISABLED; enum macb_bd_control rx_bd_control = TSTAMP_DISABLED; int rx_filter = tstamp_config->rx_filter; @@ -409,7 +409,6 @@ int gem_set_hwtst(struct net_device *netdev, ncr_bits |= MACB_BIT(OSSMODE); fallthrough; case HWTSTAMP_TX_ON: - ncr_mask |= MACB_BIT(OSSMODE); tx_bd_control = TSTAMP_ALL_FRAMES; break; default: @@ -445,11 +444,9 @@ int gem_set_hwtst(struct net_device *netdev, } spin_lock_irqsave(&bp->lock, flags); - if (ncr_mask) { - regval = macb_readl(bp, NCR); - regval = (regval & ~ncr_mask) | ncr_bits; - macb_writel(bp, NCR, regval); - } + regval = macb_readl(bp, NCR); + regval = (regval & ~ncr_mask) | ncr_bits; + macb_writel(bp, NCR, regval); gem_writel(bp, TXBDCTRL, GEM_BF(TXTSMODE, tx_bd_control)); gem_writel(bp, RXBDCTRL, GEM_BF(RXTSMODE, rx_bd_control)); -- 2.53.0