From: Yoshihiro Shimoda <[email protected]>

After refactoring the code, ufs_renesas_reg_control() is no longer needed,
because all operations are simple and can be called directly.  Remove the
ufs_renesas_reg_control() helper function, and call udelay() directly.

Ported from Linux kernel commit
855bde8ce5bc ("scsi: ufs: renesas: Remove register control helper function")
with replaced readl_poll_timeout_atomic() with readl_poll_sleep_timeout().

Signed-off-by: Yoshihiro Shimoda <[email protected]>
Signed-off-by: Geert Uytterhoeven <[email protected]>
Link: 
https://lore.kernel.org/r/69500e4c18be1ca1de360f9e797e282ffef04004.1741179611.git.geert+rene...@glider.be
Signed-off-by: Martin K. Petersen <[email protected]>
Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Bhupesh Sharma <[email protected]>
Cc: Neil Armstrong <[email protected]>
Cc: Nobuhiro Iwamatsu <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Yoshihiro Shimoda <[email protected]>
Cc: [email protected]
---
 drivers/ufs/ufs-renesas.c | 101 ++++++--------------------------------
 1 file changed, 14 insertions(+), 87 deletions(-)

diff --git a/drivers/ufs/ufs-renesas.c b/drivers/ufs/ufs-renesas.c
index 8c9a9ec7695..c8fbe61901b 100644
--- a/drivers/ufs/ufs-renesas.c
+++ b/drivers/ufs/ufs-renesas.c
@@ -23,100 +23,27 @@ struct ufs_renesas_priv {
        bool initialized;       /* The hardware needs initialization once */
 };
 
-enum ufs_renesas_init_param_mode {
-       MODE_POLL,
-       MODE_READ,
-       MODE_WAIT,
-       MODE_WRITE,
-};
-
-struct ufs_renesas_init_param {
-       enum ufs_renesas_init_param_mode mode;
-       u32 reg;
-       union {
-               u32 expected;
-               u32 delay_us;
-               u32 val;
-       } u;
-       u32 mask;
-       u32 index;
-};
-
-static u32 ufs_renesas_reg_control(struct ufs_hba *hba,
-                                  const struct ufs_renesas_init_param *p)
-{
-       u32 val = 0;
-       int ret;
-
-       switch (p->mode) {
-       case MODE_POLL:
-               ret = readl_poll_timeout(hba->mmio_base + p->reg, val,
-                                        (val & p->mask) == p->u.expected,
-                                        10000);
-               if (ret)
-                       dev_err(hba->dev, "%s: poll failed %d (%08x, %08x, 
%08x)\n",
-                               __func__, ret, val, p->mask, p->u.expected);
-               break;
-       case MODE_READ:
-               val = ufshcd_readl(hba, p->reg);
-               break;
-       case MODE_WAIT:
-               if (p->u.delay_us > 1000)
-                       mdelay(DIV_ROUND_UP(p->u.delay_us, 1000));
-               else
-                       udelay(p->u.delay_us);
-               break;
-       case MODE_WRITE:
-               ufshcd_writel(hba, p->u.val, p->reg);
-               break;
-       default:
-               break;
-       }
-
-       return val;
-}
-
 static void ufs_renesas_poll(struct ufs_hba *hba, u32 reg, u32 expected, u32 
mask)
 {
-       struct ufs_renesas_init_param param = {
-               .mode = MODE_POLL,
-               .reg = reg,
-               .u.expected = expected,
-               .mask = mask,
-       };
-
-       ufs_renesas_reg_control(hba, &param);
+       int ret;
+       u32 val;
+
+       ret = readl_poll_sleep_timeout(hba->mmio_base + reg,
+                                      val, (val & mask) == expected,
+                                      10, 1000);
+       if (ret)
+               dev_err(hba->dev, "%s: poll failed %d (%08x, %08x, %08x)\n",
+                       __func__, ret, val, mask, expected);
 }
 
 static u32 ufs_renesas_read(struct ufs_hba *hba, u32 reg)
 {
-       struct ufs_renesas_init_param param = {
-               .mode = MODE_READ,
-               .reg = reg,
-       };
-
-       return ufs_renesas_reg_control(hba, &param);
-}
-
-static void ufs_renesas_wait(struct ufs_hba *hba, u32 delay_us)
-{
-       struct ufs_renesas_init_param param = {
-               .mode = MODE_WAIT,
-               .u.delay_us = delay_us,
-       };
-
-       ufs_renesas_reg_control(hba, &param);
+       return ufshcd_readl(hba, reg);
 }
 
 static void ufs_renesas_write(struct ufs_hba *hba, u32 reg, u32 value)
 {
-       struct ufs_renesas_init_param param = {
-               .mode = MODE_WRITE,
-               .reg = reg,
-               .u.val = value,
-       };
-
-       ufs_renesas_reg_control(hba, &param);
+       ufshcd_writel(hba, value, reg);
 }
 
 static void ufs_renesas_write_d0_d4(struct ufs_hba *hba, u32 data_d0, u32 
data_d4)
@@ -210,13 +137,13 @@ static void ufs_renesas_pre_init(struct ufs_hba *hba)
        /* This setting is for SERIES B */
        ufs_renesas_write(hba, 0xc0, 0x49425308);
        ufs_renesas_write_d0_d4(hba, 0x00000104, 0x00000002);
-       ufs_renesas_wait(hba, 1);
+       udelay(1);
        ufs_renesas_write_d0_d4(hba, 0x00000828, 0x00000200);
-       ufs_renesas_wait(hba, 1);
+       udelay(1);
        ufs_renesas_write_d0_d4(hba, 0x00000828, 0x00000000);
        ufs_renesas_write_d0_d4(hba, 0x00000104, 0x00000001);
        ufs_renesas_write_d0_d4(hba, 0x00000940, 0x00000001);
-       ufs_renesas_wait(hba, 1);
+       udelay(1);
        ufs_renesas_write_d0_d4(hba, 0x00000940, 0x00000000);
 
        ufs_renesas_write(hba, 0xc0, 0x49425308);
-- 
2.51.0

Reply via email to