Skip to content

Commit 0ec70c5

Browse files
kettenisjannau
authored andcommitted
xhci-pci: asmedia: {read,write}_reg changes from u-boot review
Change asmedia_read_reg and asmedia_write_reg to return error codes. The read value for asmedia_read_reg is passed via pointer. Signed-off-by: Mark Kettenis <kettenis@openbsd.org> Signed-off-by: Janne Grunau <j@jannau.net>
1 parent 073e770 commit 0ec70c5

1 file changed

Lines changed: 47 additions & 22 deletions

File tree

drivers/usb/host/xhci-pci-asmedia.c

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ static int asmedia_wait_reset(struct pci_dev *pdev)
190190
return ret;
191191
}
192192

193-
static u8 asmedia_read_reg(struct usb_hcd *hcd, u16 addr) {
193+
static int asmedia_read_reg(struct usb_hcd *hcd, u16 addr, u8 *val) {
194194
void __iomem *regs = hcd->regs;
195195
u8 status;
196196
int ret;
@@ -202,7 +202,7 @@ static u8 asmedia_read_reg(struct usb_hcd *hcd, u16 addr) {
202202
if (ret) {
203203
dev_err(hcd->self.controller,
204204
"Read reg wait timed out ([%04x])\n", addr);
205-
return ~0;
205+
return ret;
206206
}
207207

208208
writew_relaxed(addr, regs + ASMT_REG_ADDR);
@@ -214,13 +214,14 @@ static u8 asmedia_read_reg(struct usb_hcd *hcd, u16 addr) {
214214
if (ret) {
215215
dev_err(hcd->self.controller,
216216
"Read reg addr timed out ([%04x])\n", addr);
217-
return ~0;
217+
return ret;
218218
}
219219

220-
return readb_relaxed(regs + ASMT_REG_RDATA);
220+
*val = readb_relaxed(regs + ASMT_REG_RDATA);
221+
return 0;
221222
}
222223

223-
static void asmedia_write_reg(struct usb_hcd *hcd, u16 addr, u8 data, bool wait) {
224+
static int asmedia_write_reg(struct usb_hcd *hcd, u16 addr, u8 data, bool wait) {
224225
void __iomem *regs = hcd->regs;
225226
u8 status;
226227
int ret, i;
@@ -231,35 +232,45 @@ static void asmedia_write_reg(struct usb_hcd *hcd, u16 addr, u8 data, bool wait)
231232
!(status & ASMT_REG_STATUS_BUSY),
232233
1000, TIMEOUT_USEC);
233234

234-
if (ret)
235+
if (ret) {
235236
dev_err(hcd->self.controller,
236237
"Write reg addr timed out ([%04x] = %02x)\n",
237238
addr, data);
239+
return ret;
240+
}
238241

239242
writeb_relaxed(data, regs + ASMT_REG_WDATA);
240243

241244
ret = readb_poll_timeout(regs + ASMT_REG_STATUS, status,
242245
!(status & ASMT_REG_STATUS_BUSY),
243246
1000, TIMEOUT_USEC);
244247

245-
if (ret)
248+
if (ret) {
246249
dev_err(hcd->self.controller,
247250
"Write reg data timed out ([%04x] = %02x)\n",
248251
addr, data);
252+
return ret;
253+
}
249254

250255
if (!wait)
251-
return;
256+
return 0;
252257

253258
for (i = 0; i < TIMEOUT_USEC; i++) {
254-
if (asmedia_read_reg(hcd, addr) == data)
259+
ret = asmedia_read_reg(hcd, addr, &status);
260+
if (ret)
261+
return ret;
262+
if (status == data)
255263
break;
256264
}
257265

258266
if (i >= TIMEOUT_USEC) {
259267
dev_err(hcd->self.controller,
260268
"Verify register timed out ([%04x] = %02x)\n",
261269
addr, data);
270+
return -ETIMEDOUT;
262271
}
272+
273+
return 0;
263274
}
264275

265276
static int asmedia_load_fw(struct pci_dev *pdev, const struct firmware *fw)
@@ -276,23 +287,31 @@ static int asmedia_load_fw(struct pci_dev *pdev, const struct firmware *fw)
276287
hcd = dev_get_drvdata(&pdev->dev);
277288
regs = hcd->regs;
278289

279-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_MODE_NEXT,
280-
ASMT_MMIO_CPU_MODE_HALFSPEED, false);
290+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_MODE_NEXT,
291+
ASMT_MMIO_CPU_MODE_HALFSPEED, false);
292+
if (ret)
293+
return ret;
281294

282-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_EXEC_CTRL,
283-
ASMT_MMIO_CPU_EXEC_CTRL_RESET, false);
295+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_EXEC_CTRL,
296+
ASMT_MMIO_CPU_EXEC_CTRL_RESET, false);
297+
if (ret)
298+
return ret;
284299

285300
ret = asmedia_wait_reset(pdev);
286301
if (ret) {
287302
dev_err(hcd->self.controller, "Failed pre-upload reset\n");
288303
return ret;
289304
}
290305

291-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_EXEC_CTRL,
292-
ASMT_MMIO_CPU_EXEC_CTRL_HALT, false);
306+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_EXEC_CTRL,
307+
ASMT_MMIO_CPU_EXEC_CTRL_HALT, false);
308+
if (ret)
309+
return ret;
293310

294-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_MISC,
295-
ASMT_MMIO_CPU_MISC_CODE_RAM_WR, true);
311+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_MISC,
312+
ASMT_MMIO_CPU_MISC_CODE_RAM_WR, true);
313+
if (ret)
314+
return ret;
296315

297316
pci_write_config_byte(pdev, ASMT_CFG_SRAM_ACCESS,
298317
ASMT_CFG_SRAM_ACCESS_ENABLE);
@@ -328,13 +347,19 @@ static int asmedia_load_fw(struct pci_dev *pdev, const struct firmware *fw)
328347

329348
pci_write_config_byte(pdev, ASMT_CFG_SRAM_ACCESS, 0);
330349

331-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_MISC, 0, true);
350+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_MISC, 0, true);
351+
if (ret)
352+
return ret;
332353

333-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_MODE_NEXT,
334-
ASMT_MMIO_CPU_MODE_RAM |
335-
ASMT_MMIO_CPU_MODE_HALFSPEED, false);
354+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_MODE_NEXT,
355+
ASMT_MMIO_CPU_MODE_RAM |
356+
ASMT_MMIO_CPU_MODE_HALFSPEED, false);
357+
if (ret)
358+
return ret;
336359

337-
asmedia_write_reg(hcd, ASMT_MMIO_CPU_EXEC_CTRL, 0, false);
360+
ret = asmedia_write_reg(hcd, ASMT_MMIO_CPU_EXEC_CTRL, 0, false);
361+
if (ret)
362+
return ret;
338363

339364
ret = asmedia_wait_reset(pdev);
340365
if (ret) {

0 commit comments

Comments
 (0)