bcm_udc_otg_phy.c 1.4 KB

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