summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/usb-drv-arc.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c
index 5a08acb348..af97e3e174 100644
--- a/firmware/target/arm/usb-drv-arc.c
+++ b/firmware/target/arm/usb-drv-arc.c
@@ -388,6 +388,30 @@ void usb_drv_reset(void)
388 sleep(HZ/20); 388 sleep(HZ/20);
389 REG_USBCMD |= USBCMD_CTRL_RESET; 389 REG_USBCMD |= USBCMD_CTRL_RESET;
390 while (REG_USBCMD & USBCMD_CTRL_RESET); 390 while (REG_USBCMD & USBCMD_CTRL_RESET);
391
392#if CONFIG_CPU == PP5022 || CONFIG_CPU == PP5024
393 /* On a CPU which identifies as a PP5022, this
394 initialization must be done after USB is reset.
395 */
396 outl(inl(0x70000060) | 0xF, 0x70000060);
397 outl(inl(0x70000028) | 0x10000, 0x70000028);
398 outl(inl(0x70000028) & ~0x10000, 0x70000028);
399 outl(inl(0x70000060) & ~0x20, 0x70000060);
400 udelay(10);
401 outl(inl(0x70000060) | 0x20, 0x70000060);
402 udelay(10);
403 outl((inl(0x70000060) & ~0xF) | 4, 0x70000060);
404 udelay(10);
405 outl(inl(0x70000060) & ~0x20, 0x70000060);
406 udelay(10);
407 outl(inl(0x70000060) & ~0xF, 0x70000060);
408 udelay(10);
409 outl(inl(0x70000060) | 0x20, 0x70000060);
410 udelay(10);
411 outl(inl(0x70000028) | 0x800, 0x70000028);
412 outl(inl(0x70000028) & ~0x800, 0x70000028);
413 while (inl(0x70000028) & 0x80);
414#endif
391} 415}
392 416
393/* One-time driver startup init */ 417/* One-time driver startup init */