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