remoteproc/mtk_scp: Use readl_poll_timeout_atomic() for polling
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Wed, 4 Jan 2023 11:53:40 +0000 (12:53 +0100)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Wed, 4 Jan 2023 22:43:38 +0000 (15:43 -0700)
Convert the usage of an open-coded custom tight poll while loop
with the provided readl_poll_timeout_atomic() macro.

This cleanup brings no functional change.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20230104115341.320951-2-angelogioacchino.delregno@collabora.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
drivers/remoteproc/mtk_scp_ipi.c

index 4c0d121..af47504 100644 (file)
@@ -6,13 +6,17 @@
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <linux/io.h>
+#include <linux/iopoll.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/time64.h>
 #include <linux/remoteproc/mtk_scp.h>
 
 #include "mtk_common.h"
 
+#define SCP_TIMEOUT_US         (2000 * USEC_PER_MSEC)
+
 /**
  * scp_ipi_register() - register an ipi function
  *
@@ -157,6 +161,7 @@ int scp_ipi_send(struct mtk_scp *scp, u32 id, void *buf, unsigned int len,
 {
        struct mtk_share_obj __iomem *send_obj = scp->send_buf;
        unsigned long timeout;
+       u32 val;
        int ret;
 
        if (WARN_ON(id <= SCP_IPI_INIT) || WARN_ON(id >= SCP_IPI_MAX) ||
@@ -173,14 +178,12 @@ int scp_ipi_send(struct mtk_scp *scp, u32 id, void *buf, unsigned int len,
        mutex_lock(&scp->send_lock);
 
         /* Wait until SCP receives the last command */
-       timeout = jiffies + msecs_to_jiffies(2000);
-       do {
-               if (time_after(jiffies, timeout)) {
-                       dev_err(scp->dev, "%s: IPI timeout!\n", __func__);
-                       ret = -ETIMEDOUT;
-                       goto unlock_mutex;
-               }
-       } while (readl(scp->reg_base + scp->data->host_to_scp_reg));
+       ret = readl_poll_timeout_atomic(scp->reg_base + scp->data->host_to_scp_reg,
+                                       val, !val, 0, SCP_TIMEOUT_US);
+       if (ret) {
+               dev_err(scp->dev, "%s: IPI timeout!\n", __func__);
+               goto unlock_mutex;
+       }
 
        scp_memcpy_aligned(send_obj->share_buf, buf, len);