usb.c 2.1 KB

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