static void write_tcs_reg_sync(const struct rsc_drv *drv, int reg, int tcs_id,
                               u32 data)
 {
-       u32 new_data;
+       int i;
 
        writel(data, tcs_reg_addr(drv, reg, tcs_id));
-       if (readl_poll_timeout_atomic(tcs_reg_addr(drv, reg, tcs_id), new_data,
-                                     new_data == data, 1, USEC_PER_SEC))
-               pr_err("%s: error writing %#x to %d:%#x\n", drv->name,
-                      data, tcs_id, reg);
+
+       /*
+        * Wait until we read back the same value.  Use a counter rather than
+        * ktime for timeout since this may be called after timekeeping stops.
+        */
+       for (i = 0; i < USEC_PER_SEC; i++) {
+               if (readl(tcs_reg_addr(drv, reg, tcs_id)) == data)
+                       return;
+               udelay(1);
+       }
+       pr_err("%s: error writing %#x to %d:%#x\n", drv->name,
+              data, tcs_id, reg);
 }
 
 /**