Updated usb regs (markdown)
[librecmc/open-ath9k-htc-firmware.wiki.git] / usb-regs.md
1 Assumptions made on source code:
2 * looks like USB block is [FUSB200](http://www.faraday-tech.com/techDocument/FUSB200_ProductBrief_v1_2.pdf).
3 * We have 15 Enddpoints and 15 FIFO buffers.
4 * **FIFO0 - FIFO13, 512 Byte each? FIFO14 - FIFO15 - 64 Byte each?**
5 * location of usb descriptor target_firmware/magpie_fw_dev/build/magpie_1_1/sboot/hif/usb/src/usb_table.c
6
7 # EP layout vs software/reg layout
8 Default  
9 * EP 1 OUT; Bulk; = LP (Low priority downstream); RX0;  
10 * EP 2 IN; Bulk; = US (upstream)  
11 * EP 3 IN; Interrupt;  
12 * EP 4 OUT; Interrupt;  
13 * EP 5 OUT; Bulk; = HP (High priority downstream); RX1;  
14 * EP 6 OUT; Bulk; = MP (Medium priority downstream); RX2;  
15
16
17 # 0x00 ZM_MAIN_CTRL_OFFSET
18 * BIT7
19 * BIT6 - 1 = HighSpeed is set (read only?)
20 * BIT5 - chip enable
21 * BIT4 - sfrst. soft reset?
22 * BIT3 - go suspend
23 * BIT2 - 1 = enable global Int
24 * BIT1
25 * BIT0 - 1 = set Remote Wake Up;
26
27 # 0x01 ZM_DEVICE_ADDRESS_OFFSET
28 * BIT7 - usb config? (r/w)
29 * BIT6
30 * BIT5
31 * BIT4
32 * BIT3
33 * BIT2
34 * BIT1
35 * BIT0
36
37 # 0x02 ZM_TEST_OFFSET
38 * BIT0 - 1 ?? set on usb 2.0 init
39
40 # 0x08 ZM_PHY_TEST_SELECT_OFFSET
41 * BIT7
42 * BIT6
43 * BIT5
44 * BIT4 - TEST_PKY - Test packed. 
45 * BIT3 - TEST_SE0_NAK
46 * BIT2 - TEST_K
47 * BIT1 - TEST_J
48 * BIT0
49
50 According to FUSB200 doc:  
51 DM(D-) DP(D+) Description  
52 0      0      0: SE0  
53 0      1      1: 'J' State  
54 1      0      2: 'K' State  
55 1      1      3: SE1  
56    0: Control PHY to turn off 1.5K Ohm pull-up resistor  
57    1: Control PHY to turn on 1.5K Ohm pull-up resistor  
58 If TEST_PKY is set, the test packet must be filled into FIFO by DMA first.  
59
60
61 # 0x0A ZM_VDR_SPECIFIC_MODE_OFFSET
62
63 # 0x0B ZM_CX_CONFIG_STATUS_OFFSET
64 * BIT7
65 * BIT6 - EP0 tx stall
66 * BIT5 - indicator that frame was transmitted.
67 * BIT4
68 * BIT3 - set to drom the fram?
69 * BIT2 - set CX_STL to stall Endpoint0 & will also clear FIFO0
70 * BIT1 - 
71 * BIT0 - set CX_DONE to indicate the transmistion of control frame
72
73 # 0x0C ZM_EP0_DATA_OFFSET
74 * Write 32bit data to fifo
75
76 # 0x11 ZM_INTR_MASK_BYTE_0_OFFSET
77 Theoretically INTR_MASK_BYTE should control INTR_SOURCE. Is it correct?
78
79 # 0x12 ZM_INTR_MASK_BYTE_1_OFFSET
80 USB OUT FIFO
81
82 # 0x13 ZM_INTR_MASK_BYTE_2_OFFSET
83 USB OUT FIFO
84
85 # 0x14 ZM_INTR_MASK_BYTE_3_OFFSET
86 USB OUT FIFO
87
88 # 0x15 ZM_INTR_MASK_BYTE_4_OFFSET
89     
90     #define mUSB_REG_OUT_INT_ENABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \
91                                   USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0x3f)
92     #define mUSB_REG_OUT_INT_DISABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \                    
93                                   USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0xc0)
94
95 # 0x16 ZM_INTR_MASK_BYTE_5_OFFSET
96 USB IN FIFO
97
98 # 0x17 ZM_INTR_MASK_BYTE_6_OFFSET
99 USB IN FIFO
100
101     #define mUSB_STATUS_IN_INT_ENABLE()     USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
102                 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)&0xbf)
103     #define mUSB_STATUS_IN_INT_DISABLE()    USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
104                 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)|0xc0)
105
106 # 0x18 ZM_INTR_MASK_BYTE_7_OFFSET
107
108 # 0x20 ZM_INTR_GROUP_OFFSET
109 * BIT7 - group INTR 7
110 * BIT6 - group INTR 6
111 * BIT5 - group INTR 5
112 * BIT4 - group INTR 4
113 * BIT3 - group INTR 3
114 * BIT2 - group INTR 2
115 * BIT1 - group INTR 1
116 * BIT0 - group INTR 0  
117 These bits indicate if fallowing groups got some interrupt.
118
119 # 0x21 ZM_INTR_SOURCE_0_OFFSET
120 * BIT7 - abort interrupt? should be cleared first?
121 * BIT6 -
122 * BIT5 - 
123 * BIT4 - ep0 CMD_FAIL
124 * BIT3 - ep0 CMD_END
125 * BIT2 - USB EP0 OUT/rx interrupt
126 * BIT1 - USB EP0 IN/tx interrupt
127 * BIT0 - ep0 SETUP
128
129 # 0x22 ZM_INTR_SOURCE_1_OFFSET
130 # 0x23 ZM_INTR_SOURCE_2_OFFSET
131 short packed interrupts?  
132
133 # 0x24 ZM_INTR_SOURCE_3_OFFSET
134 # 0x25 ZM_INTR_SOURCE_4_OFFSET
135 * BIT7 - End of data.
136 * BIT6 - vUsb_Reg_Out(). Pending data in fifo for EP4. We need to read it out.
137 Comments: we can read only 64bytes per time. If pending data is less then 64bytes or it is end of packet, then BIT6 and BIT7 will be set. If not, then only BIT6 is set. 
138
139 # 0x26 ZM_INTR_SOURCE_5_OFFSET
140 these endpoints are handled by DMA  
141
142 # 0x27 ZM_INTR_SOURCE_6_OFFSET
143 * BIT6 - vUsb_Status_In()?
144
145 # 0x28 ZM_INTR_SOURCE_7_OFFSET
146 * BIT7 - RX0BTYE_INT
147 * BIT6 - TX0BTYE_INT
148 * BIT5 - ISO seq abort
149 * BIT4 - ISO seq error
150 * BIT3 - USB resume
151 * BIT2 - USB suspend
152 * BIT1 - USB reset interrupt.
153 * BIT0
154
155 # 0x2F mUsbEPMap EP0
156 code use: ZM_FUSB_BASE+0x30+(EPn-1)  
157 (0x0F | FIFOn << 4) = OUT
158 (0xF0 | FIFOn) = IN  
159 **probably incorrect interpretation. It should be FUSB_REG_IDLE_CNT  
160  set suspend delay in ms**
161
162 for FIFOn see mUsbFIFOMap registers.
163
164 Current configuration:
165 * 0x2f 0x00                                                                    
166 * 0x30 0x0f <- EP1 = OUT + Start FIFO0                                                                    
167 * 0x31 0xf2 <- EP2 = IN  + Start FIFO2                                                                   
168 * 0x32 0xfe <- EP3 = IN + Start FIFO14                                                                    
169 * 0x33 0xff <- EP4 = OUT + Start FIFO15                                                                    
170 * 0x34 0x4f                                                                     
171 * 0x35 0x6f                                                                     
172 * 0x36 0x00                                                                     
173 * 0x37 0x00                                                                     
174 * 0x38 0x00                                                                     
175 * 0x39 0x00                                                                     
176 * 0x3a 0x00                                                                     
177 * 0x3b 0x00                                                                     
178 * 0x3c 0x00                                                                     
179 * 0x3d 0x00                                                                     
180
181 # 0x30 mUsbEPMap EP1
182 # 0x31 mUsbEPMap EP2
183 # 0x32 mUsbEPMap EP3
184 # 0x33 mUsbEPMap EP4
185 # 0x34 mUsbEPMap EP5
186 # 0x35 mUsbEPMap EP6
187 # 0x36 mUsbEPMap EP7                                                                    
188 # 0x37 mUsbEPMap EP8                                                                     
189 # 0x38 mUsbEPMap EP9                                                                   
190 # 0x39 mUsbEPMap EP10                                                                     
191 # 0x3a mUsbEPMap EP11                                                                   
192 # 0x3b mUsbEPMap EP12                                                                  
193 # 0x3c mUsbEPMap EP13                                                                   
194 # 0x3d mUsbEPMap EP14                                                                    
195
196 # 0x3E ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP0
197 * BIT0 - BIT7; low size regs. Max size 0x7ff (ZM_EP_IN_MAX_SIZE_LOW_OFFSET + ZM_EP_IN_MAX_SIZE_HIGH_OFFSET)
198
199 Current configuration:
200 * 0x3e 0x00                                                                     
201 * 0x40 0x00                                                                     
202 * 0x42 0x00                                                                     
203 * 0x44 0x40                                                                     
204 * 0x46 0x00                                                                     
205 * 0x48 0x00                                                                     
206 * 0x4a 0x00                                                                     
207 * 0x4c 0x00                                                                     
208 * 0x4e 0x00                                                                     
209 * 0x50 0x00                                                                     
210 * 0x52 0x00                                                                     
211 * 0x54 0x00                                                                     
212 * 0x56 0x00                                                                     
213 * 0x58 0x00                                                                     
214 * 0x5a 0x00                                                                     
215 * 0x5c 0x00 
216
217
218 # 0x3F ZM_EP_IN_MAX_SIZE_HIGH_OFFSET EP0
219 * BIT7
220 * BIT6
221 * BIT5
222 * BIT4 - mUsbEPinRsTgSet
223 * BIT3 - mUsbEPinStallSet
224 * BIT0 - BIT2; High size regs
225 These offset + 2 Byte step for each endpoint.  
226 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
227
228 * 0x3f 0x00                                                                     
229 * 0x41 0x02                                                                     
230 * 0x43 0x22                                                                     
231 * 0x45 0x20                                                                     
232 * 0x47 0x02                                                                     
233 * 0x49 0x02                                                                     
234 * 0x4b 0x02                                                                     
235 * 0x4d 0x00                                                                     
236 * 0x4f 0x00                                                                     
237 * 0x51 0x00                                                                     
238 * 0x53 0x00                                                                     
239 * 0x55 0x00                                                                     
240 * 0x57 0x00                                                                     
241 * 0x59 0x00                                                                     
242 * 0x5b 0x00                                                                     
243 * 0x5d 0x00 
244
245 # 0x40 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP1
246 # 0x42 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP2
247 # 0x44 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP3
248 # 0x46 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP4
249 # 0x48 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP5
250 # 0x4A ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP6
251 # 0x4C ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP7
252 # 0x4E ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP8
253 # 0x50 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP9
254 # 0x52 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP10
255 # 0x54 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP11
256 # 0x56 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP12
257 # 0x58 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP13
258 # 0x5A ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP14
259 # 0x5C ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP15
260
261 # 0x5E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP0
262 * BIT0 - BIT7; low size regs. Max size 0x7ff (ZM_EP_OUT_MAX_SIZE_LOW_OFFSET + ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET)
263
264 # 0x5F ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET EP0
265 * BIT7
266 * BIT6
267 * BIT5
268 * BIT4 - mUsbEPoutRsTgSet
269 * BIT3 - mUsbEPoutStallSet
270 * BIT0 - BIT2; High size regs
271
272 These offset + 2 Byte step for each endpoint.  
273 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
274
275 # 0x60 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP1
276 # 0x62 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP2
277 # 0x64 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP3
278 # 0x66 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP4
279 # 0x68 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP5
280 # 0x6A ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP6
281 # 0x6C ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP7
282 # 0x6E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP8
283 # 0x70 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP9
284 # 0x72 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP10
285 # 0x74 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP11
286 # 0x76 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP12
287 # 0x78 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP13
288 # 0x7A ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP14
289 # 0x7C ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP15
290
291 # 0x80 mUsbFIFOMap FIFO0                                                                 
292 * BIT7
293 * BIT6
294 * BIT5
295 * BIT4 - Direction: 0 - OUT; 1 - IN.
296 * BIT0 - BIT3: assigned EP number.
297
298 Current layout:
299 * 0x80 0x01 - EP1 OUT                                                                 
300 * 0x81 0x01 - EP1 OUT                                                                    
301 * 0x82 0x12 - EP2 IN                                                                    
302 * 0x83 0x12 - EP2 IN                                                                    
303 * 0x84 0x05                                                                     
304 * 0x85 0x05                                                                     
305 * 0x86 0x06                                                                     
306 * 0x87 0x06                                                                     
307 * 0x88 0x00                                                                     
308 * 0x89 0x00                                                                     
309 * 0x8a 0x00                                                                     
310 * 0x8b 0x00                                                                     
311 * 0x8c 0x00                                                                     
312 * 0x8d 0x00                                                                     
313 * 0x8e 0x13                                                                     
314 * 0x8f 0x04 
315
316 # 0x81 mUsbFIFOMap FIFO1                                                                  
317 # 0x82 mUsbFIFOMap FIFO2                                                                 
318 # 0x83 mUsbFIFOMap FIFO3                                                            
319 # 0x84 mUsbFIFOMap FIFO4                                                            
320 # 0x85 mUsbFIFOMap FIFO5                                                             
321 # 0x86 mUsbFIFOMap FIFO6                                                                 
322 # 0x87 mUsbFIFOMap FIFO7                                                                 
323 # 0x88 mUsbFIFOMap FIFO8                                                               
324 # 0x89 mUsbFIFOMap FIFO9                                                              
325 # 0x8a mUsbFIFOMap FIFO10                                                              
326 # 0x8b mUsbFIFOMap FIFO11                                                             
327 # 0x8c mUsbFIFOMap FIFO12                                                               
328 # 0x8d mUsbFIFOMap FIFO13                                                               
329 # 0x8e mUsbFIFOMap FIFO14                                                               
330 # 0x8f mUsbFIFOMap FIFO15
331
332 # 0x90 mUsbFIFOConfig FIFO0
333 * BIT7 - If EPn use more then one FIFO, then this bit should be on the first
334 * BIT6
335 * BIT5
336 * BIT4 - Block size: 0 - 64/512; 1 - 128/1024. It depends on initial FIFO size.
337 * BIT2 - BIT3; number of FIFO blocks or better to say extra blocks? 0 - no more blocks; 1 - one block; 2 - two blocks.
338 * BIT0 - BIT1; EP type: 0x1 - Iso; 0x2 - Bulk, 0x3 - Intr;
339
340 * 0x90 0x86 <- FIFO0: Bulk | + one block (0x91) | size 512
341 * 0x91 0x06                                                                     
342 * 0x92 0x86                                                                     
343 * 0x93 0x06                                                                     
344 * 0x94 0x86                                                                     
345 * 0x95 0x06                                                                     
346 * 0x96 0x86                                                                     
347 * 0x97 0x06                                                                     
348 * 0x98 0x00                                                                     
349 * 0x99 0x00                                                                     
350 * 0x9a 0x00                                                                     
351 * 0x9b 0x00                                                                     
352 * 0x9c 0x00                                                                     
353 * 0x9d 0x00                                                                     
354 * 0x9e 0x83                                                                     
355 * 0x9f 0x83 
356
357 # 0x91 mUsbFIFOConfig FIFO1                                                                    
358 # 0x92 mUsbFIFOConfig FIFO2                                                                    
359 # 0x93 mUsbFIFOConfig FIFO3                                                                     
360 # 0x94 mUsbFIFOConfig FIFO4                                                                     
361 # 0x95 mUsbFIFOConfig FIFO5                                                                     
362 # 0x96 mUsbFIFOConfig FIFO6                                                                     
363 # 0x97 mUsbFIFOConfig FIFO7                                                                     
364 # 0x98 mUsbFIFOConfig FIFO8                                                                     
365 # 0x99 mUsbFIFOConfig FIFO9                                                                     
366 # 0x9a mUsbFIFOConfig FIFO10                                                                     
367 # 0x9b mUsbFIFOConfig FIFO11                                                                     
368 # 0x9c mUsbFIFOConfig FIFO12                                                                     
369 # 0x9d mUsbFIFOConfig FIFO13                                                                     
370 # 0x9e mUsbFIFOConfig FIFO14                                                                     
371 # 0x9f mUsbFIFOConfig FIFO15  
372
373 # 0xa0 FUSB_REG_FIFO0_INS
374 * BIT0 - BIT2 - high offset of byte count in fifo.
375
376 # 0xa1 FUSB_REG_FIFO1_INS
377 # 0xa2 FUSB_REG_FIFO2_INS
378 # 0xa3 FUSB_REG_FIFO3_INS
379 # 0xa4 FUSB_REG_FIFO4_INS
380 # 0xa5 FUSB_REG_FIFO5_INS
381 # 0xa6 FUSB_REG_FIFO6_INS
382 # 0xa7 FUSB_REG_FIFO7_INS
383 # 0xa8 FUSB_REG_FIFO8_INS
384 # 0xa9 FUSB_REG_FIFO9_INS
385 # 0xaa FUSB_REG_FIFO10_INS
386 # 0xab FUSB_REG_FIFO11_INS
387 # 0xac FUSB_REG_FIFO12_INS
388 # 0xad FUSB_REG_FIFO13_INS
389 # 0xae FUSB_REG_FIFO14_INS
390 or known as ZM_EP3_BYTE_COUNT_HIGH_OFFSET  
391     BIT3 - 1 xfer done?
392     comments: after sending data from target to host, set BIT3
393
394 # 0xaf FUSB_REG_FIFO15_INS
395 or known ZM_EP4_BYTE_COUNT_HIGH_OFFSET  
396     BIT4 - 1 - reset fifo; 0 - disable reset?
397     comments: probably compatible with ZM_EP3_BYTE_COUNT_HIGH_OFFSET.  
398 **These name reg do not fit to pattern!!!** Compare with 0x3e, 0x3f and 0x5e, 0x5f.
399 If we have 0x3e, 0x3f and 0x5e, 0x5f, why do we need this register?
400
401 # 0xb0 FUSB_REG_FIFO0_BCNT
402 # 0xb1 FUSB_REG_FIFO1_BCNT
403 # 0xb2 FUSB_REG_FIFO2_BCNT
404 # 0xb3 FUSB_REG_FIFO3_BCNT
405 # 0xb4 FUSB_REG_FIFO4_BCNT
406 # 0xb5 FUSB_REG_FIFO5_BCNT
407 # 0xb6 FUSB_REG_FIFO6_BCNT
408 # 0xb7 FUSB_REG_FIFO7_BCNT
409 # 0xb8 FUSB_REG_FIFO8_BCNT
410 # 0xb9 FUSB_REG_FIFO9_BCNT
411 # 0xba FUSB_REG_FIFO10_BCNT
412 # 0xbb FUSB_REG_FIFO11_BCNT
413 # 0xbc FUSB_REG_FIFO12_BCNT
414 # 0xbd FUSB_REG_FIFO13_BCNT
415 # 0xbe FUSB_REG_FIFO14_BCNT
416 or known as ZM_EP3_BYTE_COUNT_LOW_OFFSET  
417     size of data in fifo buffer? never used?
418
419 # 0xbf FUSB_REG_FIFO15_BCNT
420 or known as ZM_EP4_BYTE_COUNT_LOW_OFFSET  
421     size of data in fifo buffer. Maximum size of EP4 should be 64 Bytes. If reported value is bigger, then buffer is defiantly corrupt.
422
423 # 0xc0 FIFO0 DATA OFFSET?
424 or known as FUSB_REG_FIFO0_DP  
425
426 # 0xc4 FIFO1 DATA OFFSET?
427 # 0xc8 FIFO2 DATA OFFSET?
428 # 0xcc FIFO3 DATA OFFSET?
429 # 0xd0 FIFO4 DATA OFFSET?
430 # 0xd4 FIFO5 DATA OFFSET?
431 # 0xd8 FIFO6 DATA OFFSET?
432 # 0xdc FIFO7 DATA OFFSET?
433 # 0xe0 FIFO8 DATA OFFSET?
434 # 0xe4 FIFO9 DATA OFFSET?
435 # 0xe8 FIFO10 DATA OFFSET?
436 # 0xec FIFO11 DATA OFFSET?
437 # 0xf0 FIFO12 DATA OFFSET?
438 # 0xf4 FIFO13 DATA OFFSET?
439 # 0xf8 FIFO14 DATA OFFSET?
440 # 0xfc FIFO15 DATA OFFSET?
441
442 # 0xF8 ZM_EP3_DATA_OFFSET
443 32bit data. Probably FIFO14 offset.. not EP
444
445 # 0xFC ZM_EP4_DATA_OFFSET
446 32bit data. Probably FIFO15 offset.. not EP
447
448 # 0x100 ZM_CBUS_FIFO_SIZE_REG
449 0x1 - 1 Byte, 0x3 - 2 Byte, 0x7 - 3 Byte; 0xf - 4 Byte.
450
451 **we miss 7 bytes here**
452
453 # 0x108 ZM_SOC_USB_MODE_CTRL_OFFSET
454     BIT10 - 1 - enable MP (EP6) downstream stream mode
455     BIT9 - 1 - enable MP (EP6) downstream DMA mode
456     BIT8 - 1 - enable HP (EP5) downstream DMA mode
457     BIT7 - 1 - enable HP (EP5) downstream stream mode
458     BIT6 - 1 - enable LP downstream stream mode
459     BIT5 - define the host dma buffer size - 4096(00) 8192 (01) 16384(10) 32768(11) bytes
460     BIT4 - ^
461     BIT3 - 0 - enable upstream stream mode: 1 - enable upstream packed mode;
462     BIT2 - 0 - Set into 64 byte mode (full speed) 1 - Set into 512 byte mode (usb highspeed)
463     BIT1 - 0 - disable upstream dma mode; 1 - enable upstream dma mode
464     BIT0 - 0 - disable LP down stream dma mode; 1 - eanble LP down stream dma mode
465 comments:
466 ryan: 04/01: bit0 could disable lpdn dma, which is good at debugging while async_fifo have problem,    we could disable this and check the fifo_rcv_size to see if we have correct at fifo or not
467 LP - lo priotiry; MP - middle priority; HP - High priority;
468     
469
470 # 0x110 ZM_SOC_USB_MAX_AGGREGATE_OFFSET
471     set stream mode packet buffer critirea
472     0x0 = disable stream mode or 1 packet. So 0x9 is 10 packets?
473 # 0x114 ZM_SOC_USB_TIME_CTRL_OFFSET
474     set stream mode timeout critirea. the unit is 32 USB (30Mhz) clock cycles.
475
476 # 0x1f0 ZM_CBUS_CTRL_REG