usb.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2006
  4. * Markus Klotzbuecher, DENX Software Engineering <mk@denx.de>
  5. */
  6. #include <common.h>
  7. #include <linux/delay.h>
  8. #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
  9. # if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_CPU_PXA27X)
  10. #include <asm/arch/pxa-regs.h>
  11. #include <asm/io.h>
  12. #include <usb.h>
  13. int usb_cpu_init(void)
  14. {
  15. #if defined(CONFIG_CPU_MONAHANS)
  16. /* Enable USB host clock. */
  17. writel(readl(CKENA) | CKENA_2_USBHOST | CKENA_20_UDC, CKENA);
  18. udelay(100);
  19. #endif
  20. #if defined(CONFIG_CPU_PXA27X)
  21. /* Enable USB host clock. */
  22. writel(readl(CKEN) | CKEN10_USBHOST, CKEN);
  23. #endif
  24. #if defined(CONFIG_CPU_MONAHANS)
  25. /* Configure Port 2 for Host (USB Client Registers) */
  26. writel(0x3000c, UP2OCR);
  27. #endif
  28. writel(readl(UHCHR) | UHCHR_FHR, UHCHR);
  29. mdelay(11);
  30. writel(readl(UHCHR) & ~UHCHR_FHR, UHCHR);
  31. writel(readl(UHCHR) | UHCHR_FSBIR, UHCHR);
  32. while (readl(UHCHR) & UHCHR_FSBIR)
  33. udelay(1);
  34. #if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_PXA27X)
  35. writel(readl(UHCHR) & ~UHCHR_SSEP0, UHCHR);
  36. #endif
  37. #if defined(CONFIG_CPU_PXA27X)
  38. writel(readl(UHCHR) & ~UHCHR_SSEP2, UHCHR);
  39. #endif
  40. writel(readl(UHCHR) & ~(UHCHR_SSEP1 | UHCHR_SSE), UHCHR);
  41. return 0;
  42. }
  43. int usb_cpu_stop(void)
  44. {
  45. writel(readl(UHCHR) | UHCHR_FHR, UHCHR);
  46. udelay(11);
  47. writel(readl(UHCHR) & ~UHCHR_FHR, UHCHR);
  48. writel(readl(UHCCOMS) | UHCCOMS_HCR, UHCCOMS);
  49. udelay(10);
  50. #if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_PXA27X)
  51. writel(readl(UHCHR) | UHCHR_SSEP0, UHCHR);
  52. #endif
  53. #if defined(CONFIG_CPU_PXA27X)
  54. writel(readl(UHCHR) | UHCHR_SSEP2, UHCHR);
  55. #endif
  56. writel(readl(UHCHR) | UHCHR_SSEP1 | UHCHR_SSE, UHCHR);
  57. #if defined(CONFIG_CPU_MONAHANS)
  58. /* Disable USB host clock. */
  59. writel(readl(CKENA) & ~(CKENA_2_USBHOST | CKENA_20_UDC), CKENA);
  60. udelay(100);
  61. #endif
  62. #if defined(CONFIG_CPU_PXA27X)
  63. /* Disable USB host clock. */
  64. writel(readl(CKEN) & ~CKEN10_USBHOST, CKEN);
  65. #endif
  66. return 0;
  67. }
  68. int usb_cpu_init_fail(void)
  69. {
  70. return usb_cpu_stop();
  71. }
  72. # endif /* defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_CPU_PXA27X) */
  73. #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */