bcm_udc_otg_phy.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright 2015 Broadcom Corporation.
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <config.h>
  7. #include <common.h>
  8. #include <asm/io.h>
  9. #include <asm/arch/sysmap.h>
  10. #include <asm/kona-common/clk.h>
  11. #include "dwc2_udc_otg_priv.h"
  12. #include "bcm_udc_otg.h"
  13. void otg_phy_init(struct dwc2_udc *dev)
  14. {
  15. /* turn on the USB OTG clocks */
  16. clk_usb_otg_enable((void *)HSOTG_BASE_ADDR);
  17. /* set Phy to driving mode */
  18. wfld_clear(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  19. HSOTG_CTRL_PHY_P1CTL_NON_DRIVING_MASK);
  20. udelay(100);
  21. /* clear Soft Disconnect */
  22. wfld_clear(HSOTG_BASE_ADDR + HSOTG_DCTL_OFFSET,
  23. HSOTG_DCTL_SFTDISCON_MASK);
  24. /* invoke Reset (active low) */
  25. wfld_clear(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  26. HSOTG_CTRL_PHY_P1CTL_SOFT_RESET_MASK);
  27. /* Reset needs to be asserted for 2ms */
  28. udelay(2000);
  29. /* release Reset */
  30. wfld_set(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  31. HSOTG_CTRL_PHY_P1CTL_SOFT_RESET_MASK,
  32. HSOTG_CTRL_PHY_P1CTL_SOFT_RESET_MASK);
  33. }
  34. void otg_phy_off(struct dwc2_udc *dev)
  35. {
  36. /* Soft Disconnect */
  37. wfld_set(HSOTG_BASE_ADDR + HSOTG_DCTL_OFFSET,
  38. HSOTG_DCTL_SFTDISCON_MASK,
  39. HSOTG_DCTL_SFTDISCON_MASK);
  40. /* set Phy to non-driving (reset) mode */
  41. wfld_set(HSOTG_CTRL_BASE_ADDR + HSOTG_CTRL_PHY_P1CTL_OFFSET,
  42. HSOTG_CTRL_PHY_P1CTL_NON_DRIVING_MASK,
  43. HSOTG_CTRL_PHY_P1CTL_NON_DRIVING_MASK);
  44. }