Commit b5e5c2f84350ab276515d469fd5b00a9dcce4796
Committed by
Ye Li
1 parent
decfa98482
Exists in
smarc_8mq-imx_v2020.04_5.4.24_2.1.0
and in
3 other branches
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 | } |