summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorYoshihiro Shimoda <[email protected]>2026-01-03 01:22:29 +0100
committerMarek Vasut <[email protected]>2026-01-27 21:46:44 +0100
commit4e27f441844c3933b380409db6a83d126351e87d (patch)
tree298009f56d7219b80836c5d99109045263d61b0e /drivers
parenta7bec98ef80e22ecbe0b28b3254a99799eb91d02 (diff)
scsi: ufs: renesas: Remove register control helper function
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+renesas@glider.be Signed-off-by: Martin K. Petersen <[email protected]> Signed-off-by: Marek Vasut <[email protected]> Reviewed-by: Neil Armstrong <[email protected]>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ufs/ufs-renesas.c101
1 files 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);