xref: /rk3399_rockchip-uboot/drivers/usb/host/ohci-at91.c (revision 8d233521cd5f26f093e2bf835118149fea4111c3)
1 /*
2  * (C) Copyright 2006
3  * DENX Software Engineering <mk@denx.de>
4  *
5  * SPDX-License-Identifier:	GPL-2.0+
6  */
7 
8 #include <common.h>
9 
10 #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
11 
12 #include <asm/io.h>
13 #include <asm/arch/hardware.h>
14 #include <asm/arch/at91_pmc.h>
15 #include <asm/arch/clk.h>
16 
17 int usb_cpu_init(void)
18 {
19 	at91_pmc_t *pmc	= (at91_pmc_t *)ATMEL_BASE_PMC;
20 
21 #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB
22 	/* Enable PLLB */
23 	writel(get_pllb_init(), &pmc->pllbr);
24 	while ((readl(&pmc->sr) & AT91_PMC_LOCKB) != AT91_PMC_LOCKB)
25 		;
26 #ifdef CONFIG_AT91SAM9N12
27 	at91_usb_clk_init(AT91_PMC_USBS_USB_PLLB | AT91_PMC_USB_DIV_2);
28 #endif
29 #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)
30 	if (at91_upll_clk_enable())
31 		return -1;
32 
33 	at91_usb_clk_init(AT91_PMC_USBS_USB_UPLL | AT91_PMC_USBDIV_10);
34 #endif
35 
36 	at91_periph_clk_enable(ATMEL_ID_UHP);
37 
38 	at91_system_clk_enable(ATMEL_PMC_UHP);
39 #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
40 	at91_system_clk_enable(AT91_PMC_HCK0);
41 #endif
42 
43 	return 0;
44 }
45 
46 int usb_cpu_stop(void)
47 {
48 	at91_pmc_t *pmc	= (at91_pmc_t *)ATMEL_BASE_PMC;
49 
50 	at91_periph_clk_disable(ATMEL_ID_UHP);
51 
52 	at91_system_clk_disable(ATMEL_PMC_UHP);
53 #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
54 	at91_system_clk_disable(AT91_PMC_HCK0);
55 #endif
56 
57 #ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB
58 #ifdef CONFIG_AT91SAM9N12
59 	at91_usb_clk_init(0);
60 #endif
61 	/* Disable PLLB */
62 	writel(0, &pmc->pllbr);
63 	while ((readl(&pmc->sr) & AT91_PMC_LOCKB) != 0)
64 		;
65 #elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)
66 	if (at91_upll_clk_disable())
67 		return -1;
68 #endif
69 
70 	return 0;
71 }
72 
73 int usb_cpu_init_fail(void)
74 {
75 	return usb_cpu_stop();
76 }
77 
78 #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */
79