xref: /rk3399_rockchip-uboot/include/usb/ehci-ci.h (revision 7f513e8196589e3b1274132abe3b59e52979e3e5)
1e162c6b1SMateusz Kulikowski /*
2e162c6b1SMateusz Kulikowski  * Copyright (c) 2005, 2009 Freescale Semiconductor, Inc
3e162c6b1SMateusz Kulikowski  * Copyright (c) 2005 MontaVista Software
4e162c6b1SMateusz Kulikowski  * Copyright (c) 2008 Excito Elektronik i Sk=E5ne AB
5e162c6b1SMateusz Kulikowski  *
6e162c6b1SMateusz Kulikowski  * SPDX-License-Identifier:	GPL-2.0+
7e162c6b1SMateusz Kulikowski  */
8e162c6b1SMateusz Kulikowski 
9e162c6b1SMateusz Kulikowski #ifndef _EHCI_CI_H
10e162c6b1SMateusz Kulikowski #define _EHCI_CI_H
11e162c6b1SMateusz Kulikowski 
12e162c6b1SMateusz Kulikowski #include <asm/processor.h>
13e162c6b1SMateusz Kulikowski 
14e162c6b1SMateusz Kulikowski #define CONTROL_REGISTER_W1C_MASK       0x00020000  /* W1C: PHY_CLK_VALID */
15e162c6b1SMateusz Kulikowski 
16e162c6b1SMateusz Kulikowski /* Global offsets */
17e162c6b1SMateusz Kulikowski #define FSL_SKIP_PCI		0x100
18e162c6b1SMateusz Kulikowski 
19e162c6b1SMateusz Kulikowski /* offsets for the non-ehci registers in the FSL SOC USB controller */
20e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_ULPIVP	0x170
21e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_PORTSC1	0x184
22e162c6b1SMateusz Kulikowski #define PORT_PTS_MSK		(3 << 30)
23e162c6b1SMateusz Kulikowski #define PORT_PTS_UTMI		(0 << 30)
24e162c6b1SMateusz Kulikowski #define PORT_PTS_ULPI		(2 << 30)
25e162c6b1SMateusz Kulikowski #define PORT_PTS_SERIAL		(3 << 30)
26e162c6b1SMateusz Kulikowski #define PORT_PTS_PTW		(1 << 28)
27e162c6b1SMateusz Kulikowski #define PORT_PFSC		(1 << 24) /* Defined on Page 39-44 of the mpc5151 ERM */
28e162c6b1SMateusz Kulikowski #define PORT_PTS_PHCD		(1 << 23)
29e162c6b1SMateusz Kulikowski #define PORT_PP			(1 << 12)
30e162c6b1SMateusz Kulikowski #define PORT_PR			(1 << 8)
31e162c6b1SMateusz Kulikowski 
32e162c6b1SMateusz Kulikowski /* USBMODE Register bits */
33e162c6b1SMateusz Kulikowski #define CM_IDLE			(0 << 0)
34e162c6b1SMateusz Kulikowski #define CM_RESERVED		(1 << 0)
35e162c6b1SMateusz Kulikowski #define CM_DEVICE		(2 << 0)
36e162c6b1SMateusz Kulikowski #define CM_HOST			(3 << 0)
37e162c6b1SMateusz Kulikowski #define ES_BE			(1 << 2)	/* Big Endian Select, default is LE */
38e162c6b1SMateusz Kulikowski #define USBMODE_RESERVED_2	(0 << 2)
39e162c6b1SMateusz Kulikowski #define SLOM			(1 << 3)
40e162c6b1SMateusz Kulikowski #define SDIS			(1 << 4)
41e162c6b1SMateusz Kulikowski 
42e162c6b1SMateusz Kulikowski /* CONTROL Register bits */
43e162c6b1SMateusz Kulikowski #define ULPI_INT_EN		(1 << 0)
44e162c6b1SMateusz Kulikowski #define WU_INT_EN		(1 << 1)
45e162c6b1SMateusz Kulikowski #define USB_EN			(1 << 2)
46e162c6b1SMateusz Kulikowski #define LSF_EN			(1 << 3)
47e162c6b1SMateusz Kulikowski #define KEEP_OTG_ON		(1 << 4)
48e162c6b1SMateusz Kulikowski #define OTG_PORT		(1 << 5)
49e162c6b1SMateusz Kulikowski #define REFSEL_12MHZ		(0 << 6)
50e162c6b1SMateusz Kulikowski #define REFSEL_16MHZ		(1 << 6)
51e162c6b1SMateusz Kulikowski #define REFSEL_48MHZ		(2 << 6)
52e162c6b1SMateusz Kulikowski #define PLL_RESET		(1 << 8)
53e162c6b1SMateusz Kulikowski #define UTMI_PHY_EN		(1 << 9)
54e162c6b1SMateusz Kulikowski #define PHY_CLK_SEL_UTMI	(0 << 10)
55e162c6b1SMateusz Kulikowski #define PHY_CLK_SEL_ULPI	(1 << 10)
56e162c6b1SMateusz Kulikowski #define CLKIN_SEL_USB_CLK	(0 << 11)
57e162c6b1SMateusz Kulikowski #define CLKIN_SEL_USB_CLK2	(1 << 11)
58e162c6b1SMateusz Kulikowski #define CLKIN_SEL_SYS_CLK	(2 << 11)
59e162c6b1SMateusz Kulikowski #define CLKIN_SEL_SYS_CLK2	(3 << 11)
60e162c6b1SMateusz Kulikowski #define RESERVED_18		(0 << 13)
61e162c6b1SMateusz Kulikowski #define RESERVED_17		(0 << 14)
62e162c6b1SMateusz Kulikowski #define RESERVED_16		(0 << 15)
63e162c6b1SMateusz Kulikowski #define WU_INT			(1 << 16)
64e162c6b1SMateusz Kulikowski #define PHY_CLK_VALID		(1 << 17)
65e162c6b1SMateusz Kulikowski 
66e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_PORTSC2	0x188
67e162c6b1SMateusz Kulikowski 
68e162c6b1SMateusz Kulikowski /* OTG Status Control Register bits */
69e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_OTGSC	0x1a4
70e162c6b1SMateusz Kulikowski #define CTRL_VBUS_DISCHARGE	(0x1<<0)
71e162c6b1SMateusz Kulikowski #define CTRL_VBUS_CHARGE	(0x1<<1)
72e162c6b1SMateusz Kulikowski #define CTRL_OTG_TERMINATION	(0x1<<3)
73e162c6b1SMateusz Kulikowski #define CTRL_DATA_PULSING	(0x1<<4)
74e162c6b1SMateusz Kulikowski #define CTRL_ID_PULL_EN		(0x1<<5)
75e162c6b1SMateusz Kulikowski #define HA_DATA_PULSE		(0x1<<6)
76e162c6b1SMateusz Kulikowski #define HA_BA			(0x1<<7)
77e162c6b1SMateusz Kulikowski #define STS_USB_ID		(0x1<<8)
78e162c6b1SMateusz Kulikowski #define STS_A_VBUS_VALID	(0x1<<9)
79e162c6b1SMateusz Kulikowski #define STS_A_SESSION_VALID	(0x1<<10)
80e162c6b1SMateusz Kulikowski #define STS_B_SESSION_VALID	(0x1<<11)
81e162c6b1SMateusz Kulikowski #define STS_B_SESSION_END	(0x1<<12)
82e162c6b1SMateusz Kulikowski #define STS_1MS_TOGGLE		(0x1<<13)
83e162c6b1SMateusz Kulikowski #define STS_DATA_PULSING	(0x1<<14)
84e162c6b1SMateusz Kulikowski #define INTSTS_USB_ID		(0x1<<16)
85e162c6b1SMateusz Kulikowski #define INTSTS_A_VBUS_VALID	(0x1<<17)
86e162c6b1SMateusz Kulikowski #define INTSTS_A_SESSION_VALID	(0x1<<18)
87e162c6b1SMateusz Kulikowski #define INTSTS_B_SESSION_VALID	(0x1<<19)
88e162c6b1SMateusz Kulikowski #define INTSTS_B_SESSION_END	(0x1<<20)
89e162c6b1SMateusz Kulikowski #define INTSTS_1MS		(0x1<<21)
90e162c6b1SMateusz Kulikowski #define INTSTS_DATA_PULSING	(0x1<<22)
91e162c6b1SMateusz Kulikowski #define INTR_USB_ID_EN		(0x1<<24)
92e162c6b1SMateusz Kulikowski #define INTR_A_VBUS_VALID_EN	(0x1<<25)
93e162c6b1SMateusz Kulikowski #define INTR_A_SESSION_VALID_EN (0x1<<26)
94e162c6b1SMateusz Kulikowski #define INTR_B_SESSION_VALID_EN (0x1<<27)
95e162c6b1SMateusz Kulikowski #define INTR_B_SESSION_END_EN	(0x1<<28)
96e162c6b1SMateusz Kulikowski #define INTR_1MS_TIMER_EN	(0x1<<29)
97e162c6b1SMateusz Kulikowski #define INTR_DATA_PULSING_EN	(0x1<<30)
98e162c6b1SMateusz Kulikowski #define INTSTS_MASK		(0x00ff0000)
99e162c6b1SMateusz Kulikowski 
100e162c6b1SMateusz Kulikowski #define  INTERRUPT_ENABLE_BITS_MASK  \
101e162c6b1SMateusz Kulikowski 		(INTR_USB_ID_EN		| \
102e162c6b1SMateusz Kulikowski 		INTR_1MS_TIMER_EN	| \
103e162c6b1SMateusz Kulikowski 		INTR_A_VBUS_VALID_EN	| \
104e162c6b1SMateusz Kulikowski 		INTR_A_SESSION_VALID_EN | \
105e162c6b1SMateusz Kulikowski 		INTR_B_SESSION_VALID_EN | \
106e162c6b1SMateusz Kulikowski 		INTR_B_SESSION_END_EN	| \
107e162c6b1SMateusz Kulikowski 		INTR_DATA_PULSING_EN)
108e162c6b1SMateusz Kulikowski 
109e162c6b1SMateusz Kulikowski #define  INTERRUPT_STATUS_BITS_MASK  \
110e162c6b1SMateusz Kulikowski 		(INTSTS_USB_ID		| \
111e162c6b1SMateusz Kulikowski 		INTR_1MS_TIMER_EN	| \
112e162c6b1SMateusz Kulikowski 		INTSTS_A_VBUS_VALID	| \
113e162c6b1SMateusz Kulikowski 		INTSTS_A_SESSION_VALID  | \
114e162c6b1SMateusz Kulikowski 		INTSTS_B_SESSION_VALID  | \
115e162c6b1SMateusz Kulikowski 		INTSTS_B_SESSION_END	| \
116e162c6b1SMateusz Kulikowski 		INTSTS_DATA_PULSING)
117e162c6b1SMateusz Kulikowski 
118e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_USBMODE	0x1a8
119e162c6b1SMateusz Kulikowski 
120e162c6b1SMateusz Kulikowski #define USBGENCTRL		0x200		/* NOTE: big endian */
121e162c6b1SMateusz Kulikowski #define GC_WU_INT_CLR		(1 << 5)	/* Wakeup int clear */
122e162c6b1SMateusz Kulikowski #define GC_ULPI_SEL		(1 << 4)	/* ULPI i/f select (usb0 only)*/
123e162c6b1SMateusz Kulikowski #define GC_PPP			(1 << 3)	/* Port Power Polarity */
124e162c6b1SMateusz Kulikowski #define GC_PFP			(1 << 2)	/* Power Fault Polarity */
125e162c6b1SMateusz Kulikowski #define GC_WU_ULPI_EN		(1 << 1)	/* Wakeup on ULPI event */
126e162c6b1SMateusz Kulikowski #define GC_WU_IE		(1 << 1)	/* Wakeup interrupt enable */
127e162c6b1SMateusz Kulikowski 
128e162c6b1SMateusz Kulikowski #define ISIPHYCTRL		0x204		/* NOTE: big endian */
129e162c6b1SMateusz Kulikowski #define PHYCTRL_PHYE		(1 << 4)	/* On-chip UTMI PHY enable */
130e162c6b1SMateusz Kulikowski #define PHYCTRL_BSENH		(1 << 3)	/* Bit Stuff Enable High */
131e162c6b1SMateusz Kulikowski #define PHYCTRL_BSEN		(1 << 2)	/* Bit Stuff Enable */
132e162c6b1SMateusz Kulikowski #define PHYCTRL_LSFE		(1 << 1)	/* Line State Filter Enable */
133e162c6b1SMateusz Kulikowski #define PHYCTRL_PXE		(1 << 0)	/* PHY oscillator enable */
134e162c6b1SMateusz Kulikowski 
135e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_SNOOP1	0x400	/* NOTE: big-endian */
136e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_SNOOP2	0x404	/* NOTE: big-endian */
137e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_AGECNTTHRSH	0x408	/* NOTE: big-endian */
138e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_PRICTRL	0x40c	/* NOTE: big-endian */
139e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_SICTRL	0x410	/* NOTE: big-endian */
140e162c6b1SMateusz Kulikowski #define FSL_SOC_USB_CTRL	0x500	/* NOTE: big-endian */
141e162c6b1SMateusz Kulikowski #define SNOOP_SIZE_2GB		0x1e
142e162c6b1SMateusz Kulikowski 
143e162c6b1SMateusz Kulikowski /* System Clock Control Register */
144e162c6b1SMateusz Kulikowski #define MPC83XX_SCCR_USB_MASK		0x00f00000
145e162c6b1SMateusz Kulikowski #define MPC83XX_SCCR_USB_DRCM_11	0x00300000
146e162c6b1SMateusz Kulikowski #define MPC83XX_SCCR_USB_DRCM_01	0x00100000
147e162c6b1SMateusz Kulikowski #define MPC83XX_SCCR_USB_DRCM_10	0x00200000
148e162c6b1SMateusz Kulikowski 
149e162c6b1SMateusz Kulikowski #if defined(CONFIG_MPC83xx)
150e162c6b1SMateusz Kulikowski #define CONFIG_SYS_FSL_USB1_ADDR CONFIG_SYS_MPC83xx_USB1_ADDR
151e162c6b1SMateusz Kulikowski #if defined(CONFIG_MPC834x)
152e162c6b1SMateusz Kulikowski #define CONFIG_SYS_FSL_USB2_ADDR CONFIG_SYS_MPC83xx_USB2_ADDR
153e162c6b1SMateusz Kulikowski #else
154e162c6b1SMateusz Kulikowski #define CONFIG_SYS_FSL_USB2_ADDR	0
155e162c6b1SMateusz Kulikowski #endif
156e162c6b1SMateusz Kulikowski #elif defined(CONFIG_MPC85xx)
157e162c6b1SMateusz Kulikowski #define CONFIG_SYS_FSL_USB1_ADDR CONFIG_SYS_MPC85xx_USB1_ADDR
158e162c6b1SMateusz Kulikowski #define CONFIG_SYS_FSL_USB2_ADDR CONFIG_SYS_MPC85xx_USB2_ADDR
159*a8ecb39eSRajesh Bhagat #elif defined(CONFIG_LS102XA) || defined(CONFIG_ARCH_LS1012A)
1609729dc95SRajesh Bhagat #define CONFIG_SYS_FSL_USB1_ADDR CONFIG_SYS_EHCI_USB1_ADDR
161e162c6b1SMateusz Kulikowski #define CONFIG_SYS_FSL_USB2_ADDR        0
162e162c6b1SMateusz Kulikowski #endif
163e162c6b1SMateusz Kulikowski 
164e162c6b1SMateusz Kulikowski /*
165e162c6b1SMateusz Kulikowski  * Increasing TX FIFO threshold value from 2 to 4 decreases
166e162c6b1SMateusz Kulikowski  * data burst rate with which data packets are posted from the TX
167e162c6b1SMateusz Kulikowski  * latency FIFO to compensate for latencies in DDR pipeline during DMA
168e162c6b1SMateusz Kulikowski  */
169e162c6b1SMateusz Kulikowski #define TXFIFOTHRESH		4
170e162c6b1SMateusz Kulikowski 
171e162c6b1SMateusz Kulikowski /*
172e162c6b1SMateusz Kulikowski  * USB Registers
173e162c6b1SMateusz Kulikowski  */
174e162c6b1SMateusz Kulikowski struct usb_ehci {
175e162c6b1SMateusz Kulikowski 	u32	id;		/* 0x000 - Identification register */
176e162c6b1SMateusz Kulikowski 	u32	hwgeneral;	/* 0x004 - General hardware parameters */
177e162c6b1SMateusz Kulikowski 	u32	hwhost;		/* 0x008 - Host hardware parameters */
178e162c6b1SMateusz Kulikowski 	u32	hwdevice;	/* 0x00C - Device hardware parameters  */
179e162c6b1SMateusz Kulikowski 	u32	hwtxbuf;	/* 0x010 - TX buffer hardware parameters */
180e162c6b1SMateusz Kulikowski 	u32	hwrxbuf;	/* 0x014 - RX buffer hardware parameters */
181e162c6b1SMateusz Kulikowski 	u8	res1[0x68];
182e162c6b1SMateusz Kulikowski 	u32	gptimer0_ld;	/* 0x080 - General Purpose Timer 0 load value */
183e162c6b1SMateusz Kulikowski 	u32	gptimer0_ctrl;	/* 0x084 - General Purpose Timer 0 control */
184e162c6b1SMateusz Kulikowski 	u32     gptimer1_ld;	/* 0x088 - General Purpose Timer 1 load value */
185e162c6b1SMateusz Kulikowski 	u32     gptimer1_ctrl;	/* 0x08C - General Purpose Timer 1 control */
186e162c6b1SMateusz Kulikowski 	u32	sbuscfg;	/* 0x090 - System Bus Interface Control */
187d424efb2SMateusz Kulikowski 	u32	sbusstatus;	/* 0x094 - System Bus Interface Status */
188d424efb2SMateusz Kulikowski 	u32	sbusmode;	/* 0x098 - System Bus Interface Mode */
189d424efb2SMateusz Kulikowski 	u32	genconfig;	/* 0x09C - USB Core Configuration */
190d424efb2SMateusz Kulikowski 	u32	genconfig2;	/* 0x0A0 - USB Core Configuration 2 */
191d424efb2SMateusz Kulikowski 	u8	res2[0x5c];
192e162c6b1SMateusz Kulikowski 	u8	caplength;	/* 0x100 - Capability Register Length */
193e162c6b1SMateusz Kulikowski 	u8	res3[0x1];
194e162c6b1SMateusz Kulikowski 	u16	hciversion;	/* 0x102 - Host Interface Version */
195e162c6b1SMateusz Kulikowski 	u32	hcsparams;	/* 0x104 - Host Structural Parameters */
196e162c6b1SMateusz Kulikowski 	u32	hccparams;	/* 0x108 - Host Capability Parameters */
197e162c6b1SMateusz Kulikowski 	u8	res4[0x14];
198e162c6b1SMateusz Kulikowski 	u32	dciversion;	/* 0x120 - Device Interface Version */
199e162c6b1SMateusz Kulikowski 	u32	dciparams;	/* 0x124 - Device Controller Params */
200e162c6b1SMateusz Kulikowski 	u8	res5[0x18];
201e162c6b1SMateusz Kulikowski 	u32	usbcmd;		/* 0x140 - USB Command */
202e162c6b1SMateusz Kulikowski 	u32	usbsts;		/* 0x144 - USB Status */
203e162c6b1SMateusz Kulikowski 	u32	usbintr;	/* 0x148 - USB Interrupt Enable */
204e162c6b1SMateusz Kulikowski 	u32	frindex;	/* 0x14C - USB Frame Index */
205e162c6b1SMateusz Kulikowski 	u8	res6[0x4];
206e162c6b1SMateusz Kulikowski 	u32	perlistbase;	/* 0x154 - Periodic List Base
207e162c6b1SMateusz Kulikowski 					 - USB Device Address */
208e162c6b1SMateusz Kulikowski 	u32	ep_list_addr;	/* 0x158 - Next Asynchronous List
209e162c6b1SMateusz Kulikowski 					 - End Point Address */
210e162c6b1SMateusz Kulikowski 	u8	res7[0x4];
211e162c6b1SMateusz Kulikowski 	u32	burstsize;	/* 0x160 - Programmable Burst Size */
212e162c6b1SMateusz Kulikowski #define FSL_EHCI_TXPBURST(X)	((X) << 8)
213e162c6b1SMateusz Kulikowski #define FSL_EHCI_RXPBURST(X)	(X)
214e162c6b1SMateusz Kulikowski 	u32	txfilltuning;	/* 0x164 - Host TT Transmit
215e162c6b1SMateusz Kulikowski 					   pre-buffer packet tuning */
216e162c6b1SMateusz Kulikowski 	u8	res8[0x8];
217e162c6b1SMateusz Kulikowski 	u32	ulpi_viewpoint;	/* 0x170 - ULPI Reister Access */
218e162c6b1SMateusz Kulikowski 	u8	res9[0xc];
219e162c6b1SMateusz Kulikowski 	u32	config_flag;	/* 0x180 - Configured Flag Register */
220e162c6b1SMateusz Kulikowski 	u32	portsc;		/* 0x184 - Port status/control */
221e162c6b1SMateusz Kulikowski 	u8	res10[0x1C];
222e162c6b1SMateusz Kulikowski 	u32	otgsc;		/* 0x1a4 - Oo-The-Go status and control */
223e162c6b1SMateusz Kulikowski 	u32	usbmode;	/* 0x1a8 - USB Device Mode */
224e162c6b1SMateusz Kulikowski 	u32	epsetupstat;	/* 0x1ac - End Point Setup Status */
225e162c6b1SMateusz Kulikowski 	u32	epprime;	/* 0x1b0 - End Point Init Status */
226e162c6b1SMateusz Kulikowski 	u32	epflush;	/* 0x1b4 - End Point De-initlialize */
227e162c6b1SMateusz Kulikowski 	u32	epstatus;	/* 0x1b8 - End Point Status */
228e162c6b1SMateusz Kulikowski 	u32	epcomplete;	/* 0x1bc - End Point Complete */
229e162c6b1SMateusz Kulikowski 	u32	epctrl0;	/* 0x1c0 - End Point Control 0 */
230e162c6b1SMateusz Kulikowski 	u32	epctrl1;	/* 0x1c4 - End Point Control 1 */
231e162c6b1SMateusz Kulikowski 	u32	epctrl2;	/* 0x1c8 - End Point Control 2 */
232e162c6b1SMateusz Kulikowski 	u32	epctrl3;	/* 0x1cc - End Point Control 3 */
233e162c6b1SMateusz Kulikowski 	u32	epctrl4;	/* 0x1d0 - End Point Control 4 */
234e162c6b1SMateusz Kulikowski 	u32	epctrl5;	/* 0x1d4 - End Point Control 5 */
235e162c6b1SMateusz Kulikowski 	u8	res11[0x28];
236e162c6b1SMateusz Kulikowski 	u32	usbgenctrl;	/* 0x200 - USB General Control */
237e162c6b1SMateusz Kulikowski 	u32	isiphyctrl;	/* 0x204 - On-Chip PHY Control */
238e162c6b1SMateusz Kulikowski 	u8	res12[0x1F8];
239e162c6b1SMateusz Kulikowski 	u32	snoop1;		/* 0x400 - Snoop 1 */
240e162c6b1SMateusz Kulikowski 	u32	snoop2;		/* 0x404 - Snoop 2 */
241e162c6b1SMateusz Kulikowski 	u32	age_cnt_limit;	/* 0x408 - Age Count Threshold */
242e162c6b1SMateusz Kulikowski 	u32	prictrl;	/* 0x40c - Priority Control */
243e162c6b1SMateusz Kulikowski 	u32	sictrl;		/* 0x410 - System Interface Control */
244e162c6b1SMateusz Kulikowski 	u8	res13[0xEC];
245e162c6b1SMateusz Kulikowski 	u32	control;	/* 0x500 - Control */
246e162c6b1SMateusz Kulikowski 	u8	res14[0xafc];
247e162c6b1SMateusz Kulikowski };
248e162c6b1SMateusz Kulikowski 
249e162c6b1SMateusz Kulikowski /*
250e162c6b1SMateusz Kulikowski  * For MXC SOCs
251e162c6b1SMateusz Kulikowski  */
252e162c6b1SMateusz Kulikowski 
253e162c6b1SMateusz Kulikowski /* values for portsc field */
254e162c6b1SMateusz Kulikowski #define MXC_EHCI_PHY_LOW_POWER_SUSPEND	(1 << 23)
255e162c6b1SMateusz Kulikowski #define MXC_EHCI_FORCE_FS		(1 << 24)
256e162c6b1SMateusz Kulikowski #define MXC_EHCI_UTMI_8BIT		(0 << 28)
257e162c6b1SMateusz Kulikowski #define MXC_EHCI_UTMI_16BIT		(1 << 28)
258e162c6b1SMateusz Kulikowski #define MXC_EHCI_SERIAL			(1 << 29)
259e162c6b1SMateusz Kulikowski #define MXC_EHCI_MODE_UTMI		(0 << 30)
260e162c6b1SMateusz Kulikowski #define MXC_EHCI_MODE_PHILIPS		(1 << 30)
261e162c6b1SMateusz Kulikowski #define MXC_EHCI_MODE_ULPI		(2 << 30)
262e162c6b1SMateusz Kulikowski #define MXC_EHCI_MODE_SERIAL		(3 << 30)
263e162c6b1SMateusz Kulikowski 
264e162c6b1SMateusz Kulikowski /* values for flags field */
265e162c6b1SMateusz Kulikowski #define MXC_EHCI_INTERFACE_DIFF_UNI	(0 << 0)
266e162c6b1SMateusz Kulikowski #define MXC_EHCI_INTERFACE_DIFF_BI	(1 << 0)
267e162c6b1SMateusz Kulikowski #define MXC_EHCI_INTERFACE_SINGLE_UNI	(2 << 0)
268e162c6b1SMateusz Kulikowski #define MXC_EHCI_INTERFACE_SINGLE_BI	(3 << 0)
269e162c6b1SMateusz Kulikowski #define MXC_EHCI_INTERFACE_MASK		(0xf)
270e162c6b1SMateusz Kulikowski 
271e162c6b1SMateusz Kulikowski #define MXC_EHCI_POWER_PINS_ENABLED	(1 << 5)
272e162c6b1SMateusz Kulikowski #define MXC_EHCI_PWR_PIN_ACTIVE_HIGH	(1 << 6)
273e162c6b1SMateusz Kulikowski #define MXC_EHCI_OC_PIN_ACTIVE_LOW	(1 << 7)
274e162c6b1SMateusz Kulikowski #define MXC_EHCI_TTL_ENABLED		(1 << 8)
275e162c6b1SMateusz Kulikowski 
276e162c6b1SMateusz Kulikowski #define MXC_EHCI_INTERNAL_PHY		(1 << 9)
277e162c6b1SMateusz Kulikowski #define MXC_EHCI_IPPUE_DOWN		(1 << 10)
278e162c6b1SMateusz Kulikowski #define MXC_EHCI_IPPUE_UP		(1 << 11)
279e162c6b1SMateusz Kulikowski 
280e162c6b1SMateusz Kulikowski int usb_phy_mode(int port);
281e162c6b1SMateusz Kulikowski /* Board-specific initialization */
282e162c6b1SMateusz Kulikowski int board_ehci_hcd_init(int port);
283e162c6b1SMateusz Kulikowski int board_usb_phy_mode(int port);
284e162c6b1SMateusz Kulikowski 
285e162c6b1SMateusz Kulikowski #endif /* _EHCI_CI_H */
286