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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
|
/* $FreeBSD$ */
/*-
* Copyright (c) 2014 Hans Petter Selasky <hselasky@FreeBSD.org>
* All rights reserved.
*
* This software was developed by SRI International and the University of
* Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
* ("CTSRD"), as part of the DARPA CRASH research programme.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _SAF1761_OTG_REG_H_
#define _SAF1761_OTG_REG_H_
/* Global registers */
#define SOTG_VEND_PROD_ID 0x370
#define SOTG_VEND_ID(x) ((x) & 0xFFFF)
#define SOTG_PROD_ID(x) (((x) >> 16) & 0xFFFF)
#define SOTG_CTRL_SET_CLR 0x374
#define SOTG_CTRL_SET(x) ((x) & 0xFFFF)
#define SOTG_CTRL_CLR(x) (((x) << 16) & 0xFFFF0000)
#define SOTG_CTRL_OTG_DISABLE (1 << 10)
#define SOTG_CTRL_OTG_SE0_EN (1 << 9)
#define SOTG_CTRL_BDIS_ACON_EN (1 << 8)
#define SOTG_CTRL_SW_SEL_HC_DC (1 << 7)
#define SOTG_CTRL_VBUS_CHRG (1 << 6)
#define SOTG_CTRL_VBUS_DISCHRG (1 << 5)
#define SOTG_CTRL_VBUS_DRV (1 << 4)
#define SOTG_CTRL_SEL_CP_EXT (1 << 3)
#define SOTG_CTRL_DM_PULL_DOWN (1 << 2)
#define SOTG_CTRL_DP_PULL_DOWN (1 << 1)
#define SOTG_CTRL_DP_PULL_UP (1 << 0)
#define SOTG_STATUS 0x378
#define SOTG_STATUS_B_SE0_SRP (1 << 8)
#define SOTG_STATUS_B_SESS_END (1 << 7)
#define SOTG_STATUS_RMT_CONN (1 << 4)
#define SOTG_STATUS_ID (1 << 3)
#define SOTG_STATUS_DP_SRP (1 << 2)
#define SOTG_STATUS_A_B_SESS_VLD (1 << 1)
#define SOTG_STATUS_VBUS_VLD (1 << 0)
#define SOTG_IRQ_LATCH_SET_CLR 0x37C
#define SOTG_IRQ_LATCH_SET(x) ((x) & 0xFFFF)
#define SOTG_IRQ_LATCH_CLR(x) (((x) << 16) & 0xFFFF0000)
#define SOTG_IRQ_ENABLE_SET_CLR 0x380
#define SOTG_IRQ_ENABLE_SET(x) ((x) & 0xFFFF)
#define SOTG_IRQ_ENABLE_CLR(x) (((x) << 16) & 0xFFFF0000)
#define SOTG_IRQ_RISE_SET_CLR 0x384
#define SOTG_IRQ_RISE_SET(x) ((x) & 0xFFFF)
#define SOTG_IRQ_RISE_CLR(x) (((x) << 16) & 0xFFFF0000)
#define SOTG_IRQ_OTG_TMR_TIMEOUT (1 << 9)
#define SOTG_IRQ_B_SE0_SRP (1 << 8)
#define SOTG_IRQ_B_SESS_END (1 << 7)
#define SOTG_IRQ_BDIS_ACON (1 << 6)
#define SOTG_IRQ_OTG_RESUME (1 << 5)
#define SOTG_IRQ_RMT_CONN (1 << 4)
#define SOTG_IRQ_ID (1 << 3)
#define SOTG_IRQ_DP_SRP (1 << 2)
#define SOTG_IRQ_A_B_SESS_VLD (1 << 1)
#define SOTG_IRQ_VBUS_VLD (1 << 0)
#define SOTG_TIMER_LOW_SET_CLR 0x388
#define SOTG_TIMER_LOW_SET(x) ((x) & 0xFFFF)
#define SOTG_TIMER_LOW_CLR(x) (((x) << 16) & 0xFFFF0000)
#define SOTG_TIMER_HIGH_SET_CLR 0x38C
#define SOTG_TIMER_HIGH_SET(x) ((x) & 0xFFFF)
#define SOTG_TIMER_HIGH_CLR(x) (((x) << 16) & 0xFFFF0000)
#define SOTG_TIMER_HIGH_START (1U << 15)
#define SOTG_MEMORY_REG 0x33c
/* Peripheral controller specific registers */
#define SOTG_ADDRESS 0x200
#define SOTG_ADDRESS_ENABLE (1 << 7)
#define SOTG_MODE 0x20C
#define SOTG_MODE_DMACLK_ON (1 << 9)
#define SOTG_MODE_VBUSSTAT (1 << 8)
#define SOTG_MODE_CLKAON (1 << 7)
#define SOTG_MODE_SNDRSU (1 << 6)
#define SOTG_MODE_GOSUSP (1 << 5)
#define SOTG_MODE_SFRESET (1 << 4)
#define SOTG_MODE_GLINTENA (1 << 3)
#define SOTG_MODE_WKUPCS (1 << 2)
#define SOTG_INTERRUPT_CFG 0x210
#define SOTG_INTERRUPT_CFG_DEBUG_SET (1 << 16)
#define SOTG_INTERRUPT_CFG_CDBGMOD (1 << 6) /* ACK only */
#define SOTG_INTERRUPT_CFG_DDBGMODIN (1 << 4) /* ACK only */
#define SOTG_INTERRUPT_CFG_DDBGMODOUT (1 << 2) /* ACK and NYET only */
#define SOTG_INTERRUPT_CFG_INTLVL (1 << 1)
#define SOTG_INTERRUPT_CFG_INTPOL (1 << 0)
#define SOTG_DCINTERRUPT_EN 0x214
#define SOTG_HW_MODE_CTRL 0x300
#define SOTG_HW_MODE_CTRL_ALL_ATX_RESET (1 << 31)
#define SOTG_HW_MODE_CTRL_ANA_DIGI_OC (1 << 15)
#define SOTG_HW_MODE_CTRL_DEV_DMA (1 << 11)
#define SOTG_HW_MODE_CTRL_COMN_INT (1 << 10)
#define SOTG_HW_MODE_CTRL_COMN_DMA (1 << 9)
#define SOTG_HW_MODE_CTRL_DATA_BUS_WIDTH (1 << 8)
#define SOTG_HW_MODE_CTRL_DACK_POL (1 << 6)
#define SOTG_HW_MODE_CTRL_DREQ_POL (1 << 5)
#define SOTG_HW_MODE_CTRL_INTR_POL (1 << 2)
#define SOTG_HW_MODE_CTRL_INTR_LEVEL (1 << 1)
#define SOTG_HW_MODE_CTRL_GLOBAL_INTR_EN (1 << 0)
#define SOTG_OTG_CTRL 0x374
#define SOTG_EP_INDEX 0x22c
#define SOTG_EP_INDEX_EP0SETUP (1 << 5)
#define SOTG_EP_INDEX_ENDP_INDEX_MASK (15 << 1)
#define SOTG_EP_INDEX_ENDP_INDEX_SHIFT 1
#define SOTG_EP_INDEX_DIR_IN (1 << 0)
#define SOTG_EP_INDEX_DIR_OUT 0
#define SOTG_CTRL_FUNC 0x228
#define SOTG_CTRL_FUNC_CLBUF (1 << 4)
#define SOTG_CTRL_FUNC_VENDP (1 << 3)
#define SOTG_CTRL_FUNC_DSEN (1 << 2)
#define SOTG_CTRL_FUNC_STATUS (1 << 1)
#define SOTG_CTRL_FUNC_STALL (1 << 0)
#define SOTG_DATA_PORT 0x220
#define SOTG_BUF_LENGTH 0x21C
#define SOTG_BUF_LENGTH_BUFLEN_MASK 0xFFFF
#define SOTG_BUF_LENGTH_FILLED_MASK (3 << 16)
#define SOTG_EP_MAXPACKET 0x204
#define SOTG_EP_TYPE 0x208
#define SOTG_EP_TYPE_NOEMPPKT (1 << 4)
#define SOTG_EP_TYPE_ENABLE (1 << 3)
#define SOTG_EP_TYPE_DBLBUF (1 << 2)
#define SOTG_EP_TYPE_EP_TYPE (3 << 0)
#define SOTG_DMA_CMD 0x230
#define SOTG_DMA_XFER_COUNT 0x234
#define SOTG_DCDMA_CFG 0x238
#define SOTG_DMA_HW 0x23C
#define SOTG_DMA_IRQ_REASON 0x250
#define SOTG_DMA_IRQ_ENABLE 0x254
#define SOTG_DMA_EP 0x258
#define SOTG_BURST_COUNTER 0x264
#define SOTG_DCINTERRUPT 0x218
#define SOTG_DCINTERRUPT_IEPRX(n) (1 << (10 + (2*(n))))
#define SOTG_DCINTERRUPT_IEPTX(n) (1 << (11 + (2*(n))))
#define SOTG_DCINTERRUPT_IEP0SETUP (1 << 8)
#define SOTG_DCINTERRUPT_IEVBUS (1 << 7)
#define SOTG_DCINTERRUPT_IEDMA (1 << 6)
#define SOTG_DCINTERRUPT_IEHS_STA (1 << 5)
#define SOTG_DCINTERRUPT_IERESM (1 << 4)
#define SOTG_DCINTERRUPT_IESUSP (1 << 3)
#define SOTG_DCINTERRUPT_IEPSOF (1 << 2)
#define SOTG_DCINTERRUPT_IESOF (1 << 1)
#define SOTG_DCINTERRUPT_IEBRST (1 << 0)
#define SOTG_DCCHIP_ID 0x270
#define SOTG_FRAME_NUM 0x274
#define SOTG_FRAME_NUM_MICROSOFR_MASK 0x3800
#define SOTG_FRAME_NUM_MICROSOFR_SHIFT 11
#define SOTG_FRAME_NUM_SOFR_MASK 0x7FF
#define SOTG_DCSCRATCH 0x278
#define SOTG_UNLOCK_DEVICE 0x27C
#define SOTG_UNLOCK_DEVICE_CODE 0xAA37
#define SOTG_IRQ_PULSE_WIDTH 0x280
#define SOTG_TEST_MODE 0x284
#define SOTG_TEST_MODE_FORCEHS (1 << 7)
#define SOTG_TEST_MODE_FORCEFS (1 << 4)
#define SOTG_TEST_MODE_PRBS (1 << 3)
#define SOTG_TEST_MODE_KSTATE (1 << 2)
#define SOTG_TEST_MODE_JSTATE (1 << 1)
#define SOTG_TEST_MODE_SE0_NAK (1 << 0)
/* Host controller specific registers */
#define SOTG_FRINDEX 0x002c
#define SOTG_FRINDEX_MASK 0x3fff
#define SOTG_CONFIGFLAG 0x0060
#define SOTG_CONFIGFLAG_ENABLE (1 << 0)
#define SOTG_PORTSC1 0x0064
#define SOTG_PORTSC1_PIC (3 << 14)
#define SOTG_PORTSC1_PO (1 << 13)
#define SOTG_PORTSC1_PP (1 << 12)
#define SOTG_PORTSC1_LS (3 << 10)
#define SOTG_PORTSC1_PR (1 << 8)
#define SOTG_PORTSC1_SUSP (1 << 7)
#define SOTG_PORTSC1_FPR (1 << 6)
#define SOTG_PORTSC1_PED (1 << 2)
#define SOTG_PORTSC1_ECSC (1 << 1)
#define SOTG_PORTSC1_ECCS (1 << 0)
#define SOTG_PTD_DW0 0
#define SOTG_PTD_DW0_VALID 1U
#define SOTG_PTD_DW1 4
#define SOTG_PTD_DW1_ENABLE_SPLIT (1 << 14)
#define SOTG_PTD_DW2 8
#define SOTG_PTD_DW2_RL (0xf << 25)
#define SOTG_PTD_DW3 12
#define SOTG_PTD_DW3_NRL (0xf << 19)
#define SOTG_PTD_DW3_ACTIVE (1U << 31)
#define SOTG_PTD_DW3_HALTED (1U << 30)
#define SOTG_PTD_DW3_ERRORS (3U << 28)
#define SOTG_PTD_DW3_CERR_3 (3U << 23)
#define SOTG_PTD_DW3_CERR_2 (2U << 23) /* infinite NAKs */
#define SOTG_PTD_DW3_CERR_1 (1U << 23)
#define SOTG_PTD_DW3_XFER_COUNT_HS 0x7FFF
#define SOTG_PTD_DW3_XFER_COUNT_SPLIT 0x03FF
#define SOTG_PTD_DW4 16
#define SOTG_PTD_DW5 20
#define SOTG_PTD_DW6 24
#define SOTG_PTD_DW7 28
#define SOTG_DATA_ADDR(x) (0x1000 + (512 * (x)))
#define SOTG_ASYNC_PTD(x) (0xC00 + ((x) * 32))
#define SOTG_INTR_PTD(x) (0x800 + ((x) * 32))
#define SOTG_ISOC_PTD(x) (0x400 + ((x) * 32))
#define SOTG_PTD(x) (0x400 + ((x) * 32))
#define SOTG_HC_MEMORY_ADDR(x) (((x) - 0x400) >> 3)
#define SOTG_SW_RESET 0x30C
#define SOTG_SW_RESET_HC (1 << 1)
#define SOTG_SW_RESET_ALL (1 << 0)
#define SOTG_POWER_DOWN 0x354
#define SOTG_POWER_DOWN_PORT3_PD (1 << 12)
#define SOTG_POWER_DOWN_PORT2_PD (1 << 11)
#define SOTG_POWER_DOWN_VBATDET_PWR (1 << 10)
#define SOTG_POWER_DOWN_BIAS_EN (1 << 5)
#define SOTG_POWER_DOWN_VREG_ON (1 << 4)
#define SOTG_POWER_DOWN_OC3_PWR (1 << 3)
#define SOTG_POWER_DOWN_OC2_PWR (1 << 2)
#define SOTG_POWER_DOWN_OC1_PWR (1 << 1)
#define SOTG_POWER_DOWN_HC_CLK_EN (1 << 0)
#define SOTG_USBCMD 0x20
#define SOTG_USBCMD_LHCR (1 << 7)
#define SOTG_USBCMD_HCRESET (1 << 1)
#define SOTG_USBCMD_RS (1 << 0)
#define SOTG_HCSCRATCH 0x308
#define SOTG_HCINTERRUPT 0x310
#define SOTG_HCINTERRUPT_OTG_IRQ (1 << 10)
#define SOTG_HCINTERRUPT_ISO_IRQ (1 << 9)
#define SOTG_HCINTERRUPT_ALT_IRQ (1 << 8)
#define SOTG_HCINTERRUPT_INT_IRQ (1 << 7)
#define SOTG_HCINTERRUPT_CLKREADY (1 << 6)
#define SOTG_HCINTERRUPT_HCSUSP (1 << 5)
#define SOTG_HCINTERRUPT_DMAEOTINT (1 << 3)
#define SOTG_HCINTERRUPT_SOFITLINT (1 << 1)
#define SOTG_HCINTERRUPT_ENABLE 0x314
#define SOTG_ATL_PTD_DONE_PTD 0x150
#define SOTG_ATL_PTD_SKIP_PTD 0x154
#define SOTG_ATL_PTD_LAST_PTD 0x158
#define SOTG_INT_PTD_DONE_PTD 0x140
#define SOTG_INT_PTD_SKIP_PTD 0x144
#define SOTG_INT_PTD_LAST_PTD 0x148
#define SOTG_ISO_PTD_DONE_PTD 0x130
#define SOTG_ISO_PTD_SKIP_PTD 0x134
#define SOTG_ISO_PTD_LAST_PTD 0x138
#define SOTG_HCBUFFERSTATUS 0x334
#define SOTG_HCBUFFERSTATUS_ISO_BUF_FILL (1 << 2)
#define SOTG_HCBUFFERSTATUS_INT_BUF_FILL (1 << 1)
#define SOTG_HCBUFFERSTATUS_ATL_BUF_FILL (1 << 0)
#define SOTG_ISO_IRQ_MASK_OR 0x318
#define SOTG_INT_IRQ_MASK_OR 0x31C
#define SOTG_ATL_IRQ_MASK_OR 0x320
#define SOTG_ISO_IRQ_MASK_AND 0x324
#define SOTG_INT_IRQ_MASK_AND 0x328
#define SOTG_ATL_IRQ_MASK_AND 0x32C
#endif /* _SAF1761_OTG_REG_H_ */
|