From 4cadac201b480ac28dcbb27903489a98c0303a3d Mon Sep 17 00:00:00 2001 From: Ye Li Date: Tue, 15 May 2018 02:03:19 -0700 Subject: [PATCH] MLK-18316 imx8: Fix USBOTG disconnect when XRDC blocking is enabled 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 (cherry picked from commit cf2143dc97b2a8f21b828c7386c59ee965d981f2) (cherry picked from commit 55dd2c8e17eca27b3d393be9fd84a153ce7bf37b) --- arch/arm/mach-imx/imx8/cpu.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index 213608442e..ad6238d51b 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -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; -- 2.17.1