MLK-18316 imx8: Fix USBOTG disconnect when XRDC blocking is enabled
authorYe Li <ye.li@nxp.com>
Tue, 15 May 2018 09:03:19 +0000 (02:03 -0700)
committerYe Li <ye.li@nxp.com>
Fri, 24 May 2019 09:31:09 +0000 (02:31 -0700)
We clean USBOTG register USBCMD if it is used in serial download mode.
When XRDC blocking is enabled, we can't write this register directly,
must enable the OTG power, otherwise the kernel will get SError
exception in mfgtool.

Signed-off-by: Ye Li <ye.li@nxp.com>
(cherry picked from commit cf2143dc97b2a8f21b828c7386c59ee965d981f2)
(cherry picked from commit 55dd2c8e17eca27b3d393be9fd84a153ce7bf37b)

arch/arm/mach-imx/imx8/cpu.c

index 2136084..ad6238d 100644 (file)
@@ -1148,6 +1148,31 @@ u32 get_cpu_rev(void)
        return (id << 12) | rev;
 }
 
+void disconnect_from_pc(void)
+{
+       int ret;
+       struct power_domain pd;
+
+       if (!power_domain_lookup_name("conn_usb0", &pd)) {
+               ret = power_domain_on(&pd);
+               if (ret) {
+                       printf("conn_usb0 Power up failed! (error = %d)\n", ret);
+                       return;
+               }
+
+               writel(0x0, USB_BASE_ADDR + 0x140);
+
+               ret = power_domain_off(&pd);
+               if (ret) {
+                       printf("conn_usb0 Power off failed! (error = %d)\n", ret);
+                       return;
+               }
+       } else {
+               printf("conn_usb0 finding failed!\n");
+               return;
+       }
+}
+
 #if CONFIG_IS_ENABLED(CPU)
 struct cpu_imx_platdata {
        const char *name;