Commit b5e5c2f84350ab276515d469fd5b00a9dcce4796

Authored by Frank Li
Committed by Ye Li
1 parent decfa98482

MLK-19181-2: i.MX850: SPL enable usb support

Enable DWC3 USB support at i.MX850D platform

Signed-off-by: Li Jun <jun.li@nxp.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
(cherry picked from commit 7c3d2a17bf85e97a486d01e231480baaa7e7a167)
(cherry picked from commit 1dd830df85ef684d8b6acd4655204ce7bd6be997)

Showing 1 changed file with 44 additions and 2 deletions Side-by-side Diff

arch/arm/mach-imx/imx8m/soc.c
... ... @@ -762,17 +762,59 @@
762 762  
763 763 #define FSL_SIP_GPC 0xC2000000
764 764 #define FSL_SIP_CONFIG_GPC_PM_DOMAIN 0x03
765   -int imx8m_usb_power(int usb_id, bool on)
  765 +
  766 +#ifdef CONFIG_SPL_BUILD
  767 +static uint32_t gpc_pu_m_core_offset[11] = {
  768 + 0xc00, 0xc40, 0xc80, 0xcc0,
  769 + 0xdc0, 0xe00, 0xe40, 0xe80,
  770 + 0xec0, 0xf00, 0xf40,
  771 +};
  772 +
  773 +#define PGC_PCR 0
  774 +
  775 +void imx_gpc_set_m_core_pgc(unsigned int offset, bool pdn)
766 776 {
767   - unsigned long ret;
  777 + uint32_t val;
  778 + uintptr_t reg = GPC_BASE_ADDR + offset;
768 779  
  780 + val = readl(reg);
  781 + val &= ~(0x1 << PGC_PCR);
  782 +
  783 + if(pdn)
  784 + val |= 0x1 << PGC_PCR;
  785 + writel(val, reg);
  786 +}
  787 +
  788 +void imx8m_usb_power_domain(uint32_t domain_id, bool on)
  789 +{
  790 + uint32_t val;
  791 + uintptr_t reg;
  792 +
  793 + imx_gpc_set_m_core_pgc(gpc_pu_m_core_offset[domain_id], true);
  794 +
  795 + reg = GPC_BASE_ADDR + (on ? 0xf8 : 0x104);
  796 + val = 1 << (domain_id > 3 ? (domain_id + 3) : domain_id);
  797 + writel(val, reg);
  798 + while (readl(reg) & val)
  799 + ;
  800 + imx_gpc_set_m_core_pgc(gpc_pu_m_core_offset[domain_id], false);
  801 +}
  802 +#endif
  803 +
  804 +int imx8m_usb_power(int usb_id, bool on)
  805 +{
769 806 if (usb_id > 1)
770 807 return -EINVAL;
771 808  
  809 +#ifdef CONFIG_SPL_BUILD
  810 + imx8m_usb_power_domain(2 + usb_id, on);
  811 +#else
  812 + unsigned long ret;
772 813 ret = call_imx_sip(FSL_SIP_GPC,
773 814 FSL_SIP_CONFIG_GPC_PM_DOMAIN, 2 + usb_id, on, 0);
774 815 if (ret)
775 816 return -EPERM;
  817 +#endif
776 818  
777 819 return 0;
778 820 }