xref: /rk3399_rockchip-uboot/arch/arm/cpu/pxa/usb.c (revision 326ea986ac150acdc7656d57fca647db80b50158)
184ad6884SPeter Tyser /*
284ad6884SPeter Tyser  * (C) Copyright 2006
384ad6884SPeter Tyser  * Markus Klotzbuecher, DENX Software Engineering <mk@denx.de>
484ad6884SPeter Tyser  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
684ad6884SPeter Tyser  */
784ad6884SPeter Tyser 
884ad6884SPeter Tyser #include <common.h>
984ad6884SPeter Tyser 
1084ad6884SPeter Tyser #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
11abc20abaSMarek Vasut # if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_CPU_PXA27X)
1284ad6884SPeter Tyser 
1384ad6884SPeter Tyser #include <asm/arch/pxa-regs.h>
143ba8bf7cSMarek Vasut #include <asm/io.h>
1584ad6884SPeter Tyser #include <usb.h>
1684ad6884SPeter Tyser 
usb_cpu_init(void)1784ad6884SPeter Tyser int usb_cpu_init(void)
1884ad6884SPeter Tyser {
1984ad6884SPeter Tyser #if defined(CONFIG_CPU_MONAHANS)
2084ad6884SPeter Tyser 	/* Enable USB host clock. */
213ba8bf7cSMarek Vasut 	writel(readl(CKENA) | CKENA_2_USBHOST | CKENA_20_UDC, CKENA);
2284ad6884SPeter Tyser 	udelay(100);
2384ad6884SPeter Tyser #endif
24abc20abaSMarek Vasut #if defined(CONFIG_CPU_PXA27X)
2584ad6884SPeter Tyser 	/* Enable USB host clock. */
263ba8bf7cSMarek Vasut 	writel(readl(CKEN) | CKEN10_USBHOST, CKEN);
2784ad6884SPeter Tyser #endif
2884ad6884SPeter Tyser 
2984ad6884SPeter Tyser #if defined(CONFIG_CPU_MONAHANS)
3084ad6884SPeter Tyser 	/* Configure Port 2 for Host (USB Client Registers) */
313ba8bf7cSMarek Vasut 	writel(0x3000c, UP2OCR);
3284ad6884SPeter Tyser #endif
3384ad6884SPeter Tyser 
343ba8bf7cSMarek Vasut 	writel(readl(UHCHR) | UHCHR_FHR, UHCHR);
355b84dd67SMike Frysinger 	mdelay(11);
363ba8bf7cSMarek Vasut 	writel(readl(UHCHR) & ~UHCHR_FHR, UHCHR);
3784ad6884SPeter Tyser 
383ba8bf7cSMarek Vasut 	writel(readl(UHCHR) | UHCHR_FSBIR, UHCHR);
393ba8bf7cSMarek Vasut 	while (readl(UHCHR) & UHCHR_FSBIR)
4084ad6884SPeter Tyser 		udelay(1);
4184ad6884SPeter Tyser 
4266a18186SStefan Herbrechtsmeier #if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_PXA27X)
433ba8bf7cSMarek Vasut 	writel(readl(UHCHR) & ~UHCHR_SSEP0, UHCHR);
4484ad6884SPeter Tyser #endif
45abc20abaSMarek Vasut #if defined(CONFIG_CPU_PXA27X)
463ba8bf7cSMarek Vasut 	writel(readl(UHCHR) & ~UHCHR_SSEP2, UHCHR);
4784ad6884SPeter Tyser #endif
483ba8bf7cSMarek Vasut 	writel(readl(UHCHR) & ~(UHCHR_SSEP1 | UHCHR_SSE), UHCHR);
4984ad6884SPeter Tyser 
5084ad6884SPeter Tyser 	return 0;
5184ad6884SPeter Tyser }
5284ad6884SPeter Tyser 
usb_cpu_stop(void)5384ad6884SPeter Tyser int usb_cpu_stop(void)
5484ad6884SPeter Tyser {
553ba8bf7cSMarek Vasut 	writel(readl(UHCHR) | UHCHR_FHR, UHCHR);
5684ad6884SPeter Tyser 	udelay(11);
573ba8bf7cSMarek Vasut 	writel(readl(UHCHR) & ~UHCHR_FHR, UHCHR);
5884ad6884SPeter Tyser 
591c0a14ebSStefan Herbrechtsmeier 	writel(readl(UHCCOMS) | UHCCOMS_HCR, UHCCOMS);
6084ad6884SPeter Tyser 	udelay(10);
6184ad6884SPeter Tyser 
6266a18186SStefan Herbrechtsmeier #if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_PXA27X)
633ba8bf7cSMarek Vasut 	writel(readl(UHCHR) | UHCHR_SSEP0, UHCHR);
6484ad6884SPeter Tyser #endif
65abc20abaSMarek Vasut #if defined(CONFIG_CPU_PXA27X)
663ba8bf7cSMarek Vasut 	writel(readl(UHCHR) | UHCHR_SSEP2, UHCHR);
6784ad6884SPeter Tyser #endif
683ba8bf7cSMarek Vasut 	writel(readl(UHCHR) | UHCHR_SSEP1 | UHCHR_SSE, UHCHR);
693ba8bf7cSMarek Vasut 
703ba8bf7cSMarek Vasut #if defined(CONFIG_CPU_MONAHANS)
713ba8bf7cSMarek Vasut 	/* Disable USB host clock. */
723ba8bf7cSMarek Vasut 	writel(readl(CKENA) & ~(CKENA_2_USBHOST | CKENA_20_UDC), CKENA);
733ba8bf7cSMarek Vasut 	udelay(100);
743ba8bf7cSMarek Vasut #endif
75abc20abaSMarek Vasut #if defined(CONFIG_CPU_PXA27X)
763ba8bf7cSMarek Vasut 	/* Disable USB host clock. */
773ba8bf7cSMarek Vasut 	writel(readl(CKEN) & ~CKEN10_USBHOST, CKEN);
783ba8bf7cSMarek Vasut #endif
7984ad6884SPeter Tyser 
8084ad6884SPeter Tyser 	return 0;
8184ad6884SPeter Tyser }
8284ad6884SPeter Tyser 
usb_cpu_init_fail(void)8384ad6884SPeter Tyser int usb_cpu_init_fail(void)
8484ad6884SPeter Tyser {
853ba8bf7cSMarek Vasut 	return usb_cpu_stop();
8684ad6884SPeter Tyser }
8784ad6884SPeter Tyser 
88abc20abaSMarek Vasut # endif /* defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_CPU_PXA27X) */
8984ad6884SPeter Tyser #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */
90