blob: 5ba352f90fbee842e3187719cf984f5b5a132c29 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
/*
* Copyright (C) 1999 ARM Limited
* Copyright (C) 2009-2010 Freescale Semiconductor, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef __ASM_ARCH_MXC_ARC_OTG_H__
#define __ASM_ARCH_MXC_ARC_OTG_H__
#include "../../regs-usbphy.h"
#if defined(CONFIG_USB_STATIC_IRAM) \
|| defined(CONFIG_USB_STATIC_IRAM_PPH)
#define USB_IRAM_SIZE SZ_8K
#else
#define USB_IRAM_SIZE 0
#endif
#define OTG_BASE_ADDR USBCTRL0_PHYS_ADDR
#define USB_OTGREGS_BASE (OTG_BASE_ADDR + 0x000)
/*
* OTG registers
*/
#define UOG_ID (0x00) /* Host ID */
#define UOG_HWGENERAL (0x04) /* Host General */
#define UOG_HWHOST (0x08) /* Host h/w params */
#define UOG_HWTXBUF (0x10) /* TX buffer h/w params */
#define UOG_HWRXBUF (0x14) /* RX buffer h/w params */
#define UOG_CAPLENGTH (0x100) /* Capability register length */
#define UOG_HCIVERSION (0x102) /* Host Interface version */
#define UOG_HCSPARAMS (0x104) /* Host control structural params */
#define UOG_HCCPARAMS (0x108) /* control capability params */
#define UOG_DCIVERSION (0x120) /* device interface version */
/* start EHCI registers: */
#define UOG_USBCMD (0x140) /* USB command register */
#define UOG_USBSTS (0x144) /* USB status register */
#define UOG_USBINTR (0x148) /* interrupt enable register */
#define UOG_FRINDEX (0x14c) /* USB frame index */
/* segment (0x150) addr bits 63:32 if needed */
#define UOG_PERIODICLISTBASE (0x154) /* host crtlr frame list base addr */
#define UOG_DEVICEADDR (0x154) /* device crtlr device address */
#define UOG_ASYNCLISTADDR (0x158) /* host ctrlr next async addr */
#define UOG_EPLISTADDR (0x158) /* device ctrlr endpoint list addr */
#define UOG_BURSTSIZE (0x160) /* host ctrlr embedded TT
async buf status */
#define UOG_TXFILLTUNING (0x164) /* TX FIFO fill tuning */
#define UOG_ULPIVIEW (0x170) /* ULPI viewport */
#define UOG_CFGFLAG (0x180) /* configflag (supports HS) */
#define UOG_PORTSC1 (0x184) /* port status and control */
/* end EHCI registers: */
#define UOG_OTGSC (0x1a4) /* OTG status and control */
#define UOG_USBMODE (0x1a8) /* USB device mode */
#define UOG_ENDPTSETUPSTAT (0x1ac) /* endpoint setup status */
#define UOG_ENDPTPRIME (0x1b0) /* endpoint initialization */
#define UOG_ENDPTFLUSH (0x1b4) /* endpoint de-initialize */
#define UOG_ENDPTSTAT (0x1b8) /* endpoint status */
#define UOG_ENDPTCOMPLETE (0x1bc) /* endpoint complete */
#define UOG_EPCTRL0 (0x1c0) /* endpoint control0 */
/*
* register bits
*/
/* x_PORTSCx */
#define PORTSC_PTS_MASK (3 << 30) /* parallel xcvr mask */
#define PORTSC_PTS_UTMI (0 << 30) /* UTMI/UTMI+ */
#define PORTSC_PTS_PHILIPS (1 << 30) /* Philips classic */
#define PORTSC_PTS_ULPI (2 << 30) /* ULPI */
#define PORTSC_PTS_SERIAL (3 << 30) /* serial */
#define PORTSC_STS (1 << 29) /* serial xcvr select */
#define PORTSC_PTW (1 << 28) /* UTMI width */
#define PORTSC_PHCD (1 << 23) /* Low Power Suspend */
#define PORTSC_PORT_POWER (1 << 12) /* port power */
#define PORTSC_LS_MASK (3 << 10) /* Line State mask */
#define PORTSC_LS_SE0 (0 << 10) /* SE0 */
#define PORTSC_LS_K_STATE (1 << 10) /* K-state */
#define PORTSC_LS_J_STATE (2 << 10) /* J-state */
#define PORTSC_PORT_RESET (1 << 8) /* Port reset */
#define PORTSC_PORT_SUSPEND (1 << 7) /* Suspend */
#define PORTSC_PORT_FORCE_RESUME (1 << 6) /* Force port resume */
#define PORTSC_OVER_CURRENT_CHG (1 << 5) /* over current change */
#define PORTSC_OVER_CURRENT_ACT (1 << 4) /* over currrent active */
#define PORTSC_PORT_EN_DIS_CHANGE (1 << 3) /* port change */
#define PORTSC_PORT_ENABLE (1 << 2) /* port enabled */
#define PORTSC_CONNECT_STATUS_CHANGE (1 << 1) /* connect status change */
#define PORTSC_CURRENT_CONNECT_STATUS (1 << 0) /* current connect status */
#define PORTSC_W1C_BITS \
(PORTSC_CONNECT_STATUS_CHANGE | \
PORTSC_PORT_EN_DIS_CHANGE | \
PORTSC_OVER_CURRENT_CHG)
/* UOG_OTGSC Register Bits */
/* control bits: */
#define OTGSC_CTRL_VBUS_DISCHARGE (1 << 0)
#define OTGSC_CTRL_VBUS_CHARGE (1 << 1)
/* controls DM pulldown */
#define OTGSC_CTRL_OTG_TERM (1 << 3)
#define OTGSC_CTRL_DATA_PULSING (1 << 4)
#define OTGSC_CTRL_USB_ID_PU (1 << 5)
/* current status: (R/O) */
/* 0=A-device 1=B-device */
#define OTGSC_STS_USB_ID (1 << 8)
#define OTGSC_STS_A_VBUS_VALID (1 << 9)
#define OTGSC_STS_A_SESSION_VALID (1 << 10)
#define OTGSC_STS_B_SESSION_VALID (1 << 11)
#define OTGSC_STS_B_SESSION_END (1 << 12)
#define OTGSC_STS_1ms_TIMER (1 << 13)
#define OTGSC_STS_DATA_PULSE (1 << 14)
/* interrupt status: (write to clear) */
#define OTGSC_IS_MASK (0x7f << 16)
#define OTGSC_IS_USB_ID (1 << 16)
#define OTGSC_IS_A_VBUS_VALID (1 << 17)
#define OTGSC_IS_A_SESSION_VALID (1 << 18)
#define OTGSC_IS_B_SESSION_VALID (1 << 19)
#define OTGSC_IS_B_SESSION_END (1 << 20)
#define OTGSC_IS_1ms_TIMER (1 << 21)
#define OTGSC_IS_DATA_PULSE (1 << 22)
/* interrupt enables: */
#define OTGSC_IE_MASK (0x7f << 24)
#define OTGSC_IE_USB_ID (1 << 24)
#define OTGSC_IE_A_VBUS_VALID (1 << 25)
#define OTGSC_IE_A_SESSION_VALID (1 << 26)
#define OTGSC_IE_B_SESSION_VALID (1 << 27)
#define OTGSC_IE_B_SESSION_END (1 << 28)
#define OTGSC_IE_1ms_TIMER (1 << 29)
#define OTGSC_IE_DATA_PULSE (1 << 30)
#if 1 /* FIXME these here for compatibility between my names and Leo's */
/* OTG interrupt enable bit masks */
#define OTGSC_INTERRUPT_ENABLE_BITS_MASK OTGSC_IE_MASK
#define OTGSC_INTSTS_MASK OTGSC_IS_MASK
/* OTG interrupt status bit masks */
#define OTGSC_INTERRUPT_STATUS_BITS_MASK OTGSC_IS_MASK
#endif
/* x_USBMODE */
#define USBMODE_SLOM (1 << 3) /* setup lockout mode */
#define USBMODE_ES (1 << 2) /* (big) endian select */
#define USBMODE_CM_MASK (3 << 0) /* controller mode mask */
#define USBMODE_CM_HOST (3 << 0) /* host */
#define USBMODE_CM_DEVICE (2 << 0) /* device */
#define USBMODE_CM_reserved (1 << 0) /* reserved */
/* USBCMD */
#define UCMD_RUN_STOP (1 << 0) /* controller run/stop */
#define UCMD_RESET (1 << 1) /* controller reset */
#define UCMD_ITC_NO_THRESHOLD (~(0xff << 16)) /* Interrupt Threshold */
/* OTG_MIRROR */
#define OTGM_SESEND (1 << 4) /* B device session end */
#define OTGM_VBUSVAL (1 << 3) /* Vbus valid */
#define OTGM_BSESVLD (1 << 2) /* B session Valid */
#define OTGM_ASESVLD (1 << 1) /* A session Valid */
#define OTGM_IDIDG (1 << 0) /* OTG ID pin status */
/* 1=high: Operate as B-device */
/* 0=low : Operate as A-device */
#define HCSPARAMS_PPC (0x1<<4) /* Port Power Control */
extern enum fsl_usb2_modes get_usb_mode(struct fsl_usb2_platform_data *pdata);
#endif
|