1*7237d22bSSergey Kostanbaev /* 2*7237d22bSSergey Kostanbaev * (C) Copyright 2013 3*7237d22bSSergey Kostanbaev * Sergey Kostanbaev < sergey.kostanbaev <at> fairwaves.ru > 4*7237d22bSSergey Kostanbaev * 5*7237d22bSSergey Kostanbaev * SPDX-License-Identifier: GPL-2.0+ 6*7237d22bSSergey Kostanbaev */ 7*7237d22bSSergey Kostanbaev 8*7237d22bSSergey Kostanbaev #include <config.h> 9*7237d22bSSergey Kostanbaev #include <common.h> 10*7237d22bSSergey Kostanbaev 11*7237d22bSSergey Kostanbaev #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) 12*7237d22bSSergey Kostanbaev #include <asm/io.h> 13*7237d22bSSergey Kostanbaev #include <asm/arch/ep93xx.h> 14*7237d22bSSergey Kostanbaev 15*7237d22bSSergey Kostanbaev int usb_cpu_init(void) 16*7237d22bSSergey Kostanbaev { 17*7237d22bSSergey Kostanbaev struct syscon_regs *syscon = (struct syscon_regs *)SYSCON_BASE; 18*7237d22bSSergey Kostanbaev unsigned long pwr = readl(&syscon->pwrcnt); 19*7237d22bSSergey Kostanbaev writel(pwr | SYSCON_PWRCNT_USH_EN, &syscon->pwrcnt); 20*7237d22bSSergey Kostanbaev 21*7237d22bSSergey Kostanbaev return 0; 22*7237d22bSSergey Kostanbaev } 23*7237d22bSSergey Kostanbaev 24*7237d22bSSergey Kostanbaev int usb_cpu_stop(void) 25*7237d22bSSergey Kostanbaev { 26*7237d22bSSergey Kostanbaev struct syscon_regs *syscon = (struct syscon_regs *)SYSCON_BASE; 27*7237d22bSSergey Kostanbaev unsigned long pwr = readl(&syscon->pwrcnt); 28*7237d22bSSergey Kostanbaev writel(pwr & ~SYSCON_PWRCNT_USH_EN, &syscon->pwrcnt); 29*7237d22bSSergey Kostanbaev 30*7237d22bSSergey Kostanbaev return 0; 31*7237d22bSSergey Kostanbaev } 32*7237d22bSSergey Kostanbaev 33*7237d22bSSergey Kostanbaev int usb_cpu_init_fail(void) 34*7237d22bSSergey Kostanbaev { 35*7237d22bSSergey Kostanbaev return usb_cpu_stop(); 36*7237d22bSSergey Kostanbaev } 37*7237d22bSSergey Kostanbaev 38*7237d22bSSergey Kostanbaev #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */ 39