]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: stmmac: Convert open-coded register polling to helper macro
authorFurong Xu <0x1207@gmail.com>
Sat, 27 Sep 2025 08:10:36 +0000 (16:10 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 30 Sep 2025 01:27:45 +0000 (18:27 -0700)
Drop the open-coded register polling routines.
Use readl_poll_timeout_atomic() in atomic state.

Also adjust the delay time to 10us which seems more reasonable.

Tested on NXP i.MX8MP and ROCKCHIP RK3588 boards,
the break condition was met right after the first polling,
no delay involved at all.
So the 10us delay should be long enough for most cases.

Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Furong Xu <0x1207@gmail.com>
Link: https://patch.msgid.link/20250927081036.10611-1-0x1207@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c

index e2840fa241f29121c4f074872c4986906201cb57..bb110124f21e2d89493359374a33446178a80496 100644 (file)
@@ -135,7 +135,6 @@ static int init_systime(void __iomem *ioaddr, u32 sec, u32 nsec)
 static int config_addend(void __iomem *ioaddr, u32 addend)
 {
        u32 value;
-       int limit;
 
        writel(addend, ioaddr + PTP_TAR);
        /* issue command to update the addend value */
@@ -144,23 +143,15 @@ static int config_addend(void __iomem *ioaddr, u32 addend)
        writel(value, ioaddr + PTP_TCR);
 
        /* wait for present addend update to complete */
-       limit = 10;
-       while (limit--) {
-               if (!(readl(ioaddr + PTP_TCR) & PTP_TCR_TSADDREG))
-                       break;
-               mdelay(10);
-       }
-       if (limit < 0)
-               return -EBUSY;
-
-       return 0;
+       return readl_poll_timeout_atomic(ioaddr + PTP_TCR, value,
+                                        !(value & PTP_TCR_TSADDREG),
+                                        10, 100000);
 }
 
 static int adjust_systime(void __iomem *ioaddr, u32 sec, u32 nsec,
                int add_sub, int gmac4)
 {
        u32 value;
-       int limit;
 
        if (add_sub) {
                /* If the new sec value needs to be subtracted with
@@ -187,16 +178,9 @@ static int adjust_systime(void __iomem *ioaddr, u32 sec, u32 nsec,
        writel(value, ioaddr + PTP_TCR);
 
        /* wait for present system time adjust/update to complete */
-       limit = 10;
-       while (limit--) {
-               if (!(readl(ioaddr + PTP_TCR) & PTP_TCR_TSUPDT))
-                       break;
-               mdelay(10);
-       }
-       if (limit < 0)
-               return -EBUSY;
-
-       return 0;
+       return readl_poll_timeout_atomic(ioaddr + PTP_TCR, value,
+                                        !(value & PTP_TCR_TSUPDT),
+                                        10, 100000);
 }
 
 static void get_systime(void __iomem *ioaddr, u64 *systime)