@@ -22,106 +22,32 @@ 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 void ufs_renesas_dbg_register_dump(struct ufs_hba *hba)
{
ufshcd_dump_regs(hba, 0xc0, 0x40, "regs: 0xc0 + ");
}
-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_atomic(hba->mmio_base + p->reg,
- val,
- (val & p->mask) == p->u.expected,
- 10, 1000);
- 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, ¶m);
+ int ret;
+ u32 val;
+
+ ret = readl_poll_timeout_atomic(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, ¶m);
-}
-
-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, ¶m);
+ 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, ¶m);
+ ufshcd_writel(hba, value, reg);
}
static void ufs_renesas_write_d0_d4(struct ufs_hba *hba, u32 d0, u32 d4)
@@ -215,13 +141,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);
After refactored the code, ufs_renesas_reg_control() was not needed anymore because a suitable function can be called directly. So, remove the helper function. Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> --- drivers/ufs/host/ufs-renesas.c | 102 +++++---------------------------- 1 file changed, 14 insertions(+), 88 deletions(-)