Skip to content

Commit 5129aa6

Browse files
shimodaymartinkpetersen
authored andcommitted
scsi: ufs: renesas: Add register read to remove save/set/restore
Add support for returning read register values from ufs_renesas_reg_control(), so ufs_renesas_set_phy() can use the existing ufs_renesas_write_phy() helper. Remove the now unused code to save to, set, and restore from a static array inside ufs_renesas_reg_control(). Signed-off-by: Yoshihiro Shimoda <[email protected]> Signed-off-by: Geert Uytterhoeven <[email protected]> Link: https://lore.kernel.org/r/9fa240a9dc0308d6675138f8434eccb77f051650.1741179611.git.geert+renesas@glider.be Signed-off-by: Martin K. Petersen <[email protected]>
1 parent c4e8357 commit 5129aa6

File tree

1 file changed

+23
-76
lines changed

1 file changed

+23
-76
lines changed

drivers/ufs/host/ufs-renesas.c

Lines changed: 23 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,9 @@ struct ufs_renesas_priv {
2323
bool initialized; /* The hardware needs initialization once */
2424
};
2525

26-
enum {
27-
SET_PHY_INDEX_LO = 0,
28-
SET_PHY_INDEX_HI,
29-
TIMER_INDEX,
30-
MAX_INDEX
31-
};
32-
3326
enum ufs_renesas_init_param_mode {
34-
MODE_RESTORE,
35-
MODE_SET,
36-
MODE_SAVE,
3727
MODE_POLL,
28+
MODE_READ,
3829
MODE_WAIT,
3930
MODE_WRITE,
4031
};
@@ -45,7 +36,6 @@ struct ufs_renesas_init_param {
4536
union {
4637
u32 expected;
4738
u32 delay_us;
48-
u32 set;
4939
u32 val;
5040
} u;
5141
u32 mask;
@@ -57,25 +47,13 @@ static void ufs_renesas_dbg_register_dump(struct ufs_hba *hba)
5747
ufshcd_dump_regs(hba, 0xc0, 0x40, "regs: 0xc0 + ");
5848
}
5949

60-
static void ufs_renesas_reg_control(struct ufs_hba *hba,
61-
const struct ufs_renesas_init_param *p)
50+
static u32 ufs_renesas_reg_control(struct ufs_hba *hba,
51+
const struct ufs_renesas_init_param *p)
6252
{
63-
static u32 save[MAX_INDEX];
53+
u32 val = 0;
6454
int ret;
65-
u32 val;
66-
67-
WARN_ON(p->index >= MAX_INDEX);
6855

6956
switch (p->mode) {
70-
case MODE_RESTORE:
71-
ufshcd_writel(hba, save[p->index], p->reg);
72-
break;
73-
case MODE_SET:
74-
save[p->index] |= p->u.set;
75-
break;
76-
case MODE_SAVE:
77-
save[p->index] = ufshcd_readl(hba, p->reg) & p->mask;
78-
break;
7957
case MODE_POLL:
8058
ret = readl_poll_timeout_atomic(hba->mmio_base + p->reg,
8159
val,
@@ -85,6 +63,9 @@ static void ufs_renesas_reg_control(struct ufs_hba *hba,
8563
dev_err(hba->dev, "%s: poll failed %d (%08x, %08x, %08x)\n",
8664
__func__, ret, val, p->mask, p->u.expected);
8765
break;
66+
case MODE_READ:
67+
val = ufshcd_readl(hba, p->reg);
68+
break;
8869
case MODE_WAIT:
8970
if (p->u.delay_us > 1000)
9071
mdelay(DIV_ROUND_UP(p->u.delay_us, 1000));
@@ -97,6 +78,8 @@ static void ufs_renesas_reg_control(struct ufs_hba *hba,
9778
default:
9879
break;
9980
}
81+
82+
return val;
10083
}
10184

10285
static void ufs_renesas_poll(struct ufs_hba *hba, u32 reg, u32 expected, u32 mask)
@@ -111,38 +94,14 @@ static void ufs_renesas_poll(struct ufs_hba *hba, u32 reg, u32 expected, u32 mas
11194
ufs_renesas_reg_control(hba, &param);
11295
}
11396

114-
static void ufs_renesas_restore(struct ufs_hba *hba, u32 reg, u32 index)
115-
{
116-
struct ufs_renesas_init_param param = {
117-
.mode = MODE_RESTORE,
118-
.reg = reg,
119-
.index = index,
120-
};
121-
122-
ufs_renesas_reg_control(hba, &param);
123-
}
124-
125-
static void ufs_renesas_save(struct ufs_hba *hba, u32 reg, u32 mask, u32 index)
97+
static u32 ufs_renesas_read(struct ufs_hba *hba, u32 reg)
12698
{
12799
struct ufs_renesas_init_param param = {
128-
.mode = MODE_SAVE,
100+
.mode = MODE_READ,
129101
.reg = reg,
130-
.mask = mask,
131-
.index = index,
132-
};
133-
134-
ufs_renesas_reg_control(hba, &param);
135-
}
136-
137-
static void ufs_renesas_set(struct ufs_hba *hba, u32 index, u32 set)
138-
{
139-
struct ufs_renesas_init_param param = {
140-
.mode = MODE_SAVE,
141-
.index = index,
142-
.u.set = set,
143102
};
144103

145-
ufs_renesas_reg_control(hba, &param);
104+
return ufs_renesas_reg_control(hba, &param);
146105
}
147106

148107
static void ufs_renesas_wait(struct ufs_hba *hba, u32 delay_us)
@@ -181,15 +140,6 @@ static void ufs_renesas_write_800_80c_poll(struct ufs_hba *hba, u32 addr,
181140
ufs_renesas_poll(hba, 0xd4, BIT(8), BIT(8));
182141
}
183142

184-
static void ufs_renesas_restore_800_80c_poll(struct ufs_hba *hba, u32 index)
185-
{
186-
ufs_renesas_write_d0_d4(hba, 0x0000080c, 0x00000100);
187-
ufs_renesas_write(hba, 0xd0, 0x00000800);
188-
ufs_renesas_restore(hba, 0xd4, index);
189-
ufs_renesas_write(hba, 0xd0, 0x0000080c);
190-
ufs_renesas_poll(hba, 0xd4, BIT(8), BIT(8));
191-
}
192-
193143
static void ufs_renesas_write_804_80c_poll(struct ufs_hba *hba, u32 addr, u32 data_804)
194144
{
195145
ufs_renesas_write_d0_d4(hba, 0x0000080c, 0x00000100);
@@ -220,29 +170,24 @@ static void ufs_renesas_write_phy(struct ufs_hba *hba, u32 addr16, u32 data16)
220170

221171
static void ufs_renesas_set_phy(struct ufs_hba *hba, u32 addr16, u32 data16)
222172
{
173+
u32 low, high;
174+
223175
ufs_renesas_write(hba, 0xf0, 1);
224176
ufs_renesas_write_800_80c_poll(hba, 0x16, addr16 & 0xff);
225177
ufs_renesas_write_800_80c_poll(hba, 0x17, (addr16 >> 8) & 0xff);
226178
ufs_renesas_write_800_80c_poll(hba, 0x1c, 0x01);
227179
ufs_renesas_write_828_82c_poll(hba, 0x0f000000);
228180
ufs_renesas_write_804_80c_poll(hba, 0x1a, 0);
229181
ufs_renesas_write(hba, 0xd0, 0x00000808);
230-
ufs_renesas_save(hba, 0xd4, 0xff, SET_PHY_INDEX_LO);
182+
low = ufs_renesas_read(hba, 0xd4) & 0xff;
231183
ufs_renesas_write_804_80c_poll(hba, 0x1b, 0);
232184
ufs_renesas_write(hba, 0xd0, 0x00000808);
233-
ufs_renesas_save(hba, 0xd4, 0xff, SET_PHY_INDEX_HI);
234-
ufs_renesas_write_828_82c_poll(hba, 0x0f000000);
235-
ufs_renesas_write(hba, 0xf0, 0);
236-
ufs_renesas_write(hba, 0xf0, 1);
237-
ufs_renesas_write_800_80c_poll(hba, 0x16, addr16 & 0xff);
238-
ufs_renesas_write_800_80c_poll(hba, 0x17, (addr16 >> 8) & 0xff);
239-
ufs_renesas_set(hba, SET_PHY_INDEX_LO, ((data16 & 0xff) << 16) | BIT(8) | 0x18);
240-
ufs_renesas_restore_800_80c_poll(hba, SET_PHY_INDEX_LO);
241-
ufs_renesas_set(hba, SET_PHY_INDEX_HI, (((data16 >> 8) & 0xff) << 16) | BIT(8) | 0x19);
242-
ufs_renesas_restore_800_80c_poll(hba, SET_PHY_INDEX_HI);
243-
ufs_renesas_write_800_80c_poll(hba, 0x1c, 0x01);
185+
high = ufs_renesas_read(hba, 0xd4) & 0xff;
244186
ufs_renesas_write_828_82c_poll(hba, 0x0f000000);
245187
ufs_renesas_write(hba, 0xf0, 0);
188+
189+
data16 |= (high << 8) | low;
190+
ufs_renesas_write_phy(hba, addr16, data16);
246191
}
247192

248193
static void ufs_renesas_indirect_write(struct ufs_hba *hba, u32 gpio, u32 addr,
@@ -266,6 +211,8 @@ static void ufs_renesas_indirect_poll(struct ufs_hba *hba, u32 gpio, u32 addr,
266211

267212
static void ufs_renesas_pre_init(struct ufs_hba *hba)
268213
{
214+
u32 timer_val;
215+
269216
/* This setting is for SERIES B */
270217
ufs_renesas_write(hba, 0xc0, 0x49425308);
271218
ufs_renesas_write_d0_d4(hba, 0x00000104, 0x00000002);
@@ -292,7 +239,7 @@ static void ufs_renesas_pre_init(struct ufs_hba *hba)
292239
ufs_renesas_poll(hba, 0xd4, BIT(8) | BIT(6) | BIT(0), BIT(8) | BIT(6) | BIT(0));
293240

294241
ufs_renesas_write(hba, 0xd0, 0x00000d00);
295-
ufs_renesas_save(hba, 0xd4, 0x0000ffff, TIMER_INDEX);
242+
timer_val = ufs_renesas_read(hba, 0xd4) & 0x0000ffff;
296243
ufs_renesas_write(hba, 0xd4, 0x00000000);
297244
ufs_renesas_write_d0_d4(hba, 0x0000082c, 0x0f000000);
298245
ufs_renesas_write_d0_d4(hba, 0x00000828, 0x08000000);
@@ -387,7 +334,7 @@ static void ufs_renesas_pre_init(struct ufs_hba *hba)
387334

388335
ufs_renesas_write(hba, 0xf0, 0);
389336
ufs_renesas_write(hba, 0xd0, 0x00000d00);
390-
ufs_renesas_restore(hba, 0xd4, TIMER_INDEX);
337+
ufs_renesas_write(hba, 0xd4, timer_val);
391338
}
392339

393340
static int ufs_renesas_hce_enable_notify(struct ufs_hba *hba,

0 commit comments

Comments
 (0)