e79c74c863c1b9869b9307cf62a255f9b7e97bb3
[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 * According to docs FUSB200 has 15 endpoints, but according to the source 10.
4
5 # 0x00 ZM_MAIN_CTRL_OFFSET
6 * BIT7
7 * BIT6 - 1 = HighSpeed is set (read only?)
8 * BIT5
9 * BIT4
10 * BIT3
11 * BIT2 - 1 = enable global Int
12 * BIT1
13 * BIT0 - 1 = set Remote Wake Up;
14
15 # 0x01 ZM_DEVICE_ADDRESS_OFFSET
16 * BIT7 - usb config? (r/w)
17 * BIT6
18 * BIT5
19 * BIT4
20 * BIT3
21 * BIT2
22 * BIT1
23 * BIT0
24
25 # 0x02 ZM_TEST_OFFSET
26 * BIT0 - 1 ?? set on usb 2.0 init
27
28 # 0x08 ZM_PHY_TEST_SELECT_OFFSET
29 * BIT7
30 * BIT6
31 * BIT5
32 * BIT4 - TEST_PKY
33 * BIT3 - TEST_SE0_NAK
34 * BIT2 - TEST_K
35 * BIT1 - TEST_J
36 * BIT0
37
38 According to FUSB200 doc:  
39 DM(D-) DP(D+) Description  
40 0      0      0: SE0  
41 0      1      1: 'J' State  
42 1      0      2: 'K' State  
43 1      1      3: SE1  
44    0: Control PHY to turn off 1.5K Ohm pull-up resistor  
45    1: Control PHY to turn on 1.5K Ohm pull-up resistor  
46
47
48
49 # 0x0A ZM_VDR_SPECIFIC_MODE_OFFSET
50
51 # 0x0B ZM_CX_CONFIG_STATUS_OFFSET
52 * BIT7
53 * BIT6 - EP0 tx stall
54 * BIT5 - indicator that frame was transmitted.
55 * BIT4
56 * BIT3 - set to drom the fram?
57 * BIT2 - set CX_STL to stall Endpoint0 & will also clear FIFO0
58 * BIT1 - 
59 * BIT0 - set CX_DONE to indicate the transmistion of control frame
60
61 # 0x0C ZM_EP0_DATA_OFFSET
62 * Write 32bit data to fifo
63
64 # 0x11 ZM_INTR_MASK_BYTE_0_OFFSET
65 Theoretically INTR_MASK_BYTE should control INTR_SOURCE. Is it correct?
66
67 # 0x12 ZM_INTR_MASK_BYTE_1_OFFSET
68 USB OUT FIFO
69
70 # 0x13 ZM_INTR_MASK_BYTE_2_OFFSET
71 USB OUT FIFO
72
73 # 0x14 ZM_INTR_MASK_BYTE_3_OFFSET
74 USB OUT FIFO
75
76 # 0x15 ZM_INTR_MASK_BYTE_4_OFFSET
77     
78     #define mUSB_REG_OUT_INT_ENABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \
79                                   USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0x3f)
80     #define mUSB_REG_OUT_INT_DISABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \                    
81                                   USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0xc0)
82
83 # 0x16 ZM_INTR_MASK_BYTE_5_OFFSET
84 USB IN FIFO
85
86 # 0x17 ZM_INTR_MASK_BYTE_6_OFFSET
87 USB IN FIFO
88
89     #define mUSB_STATUS_IN_INT_ENABLE()     USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
90                 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)&0xbf)
91     #define mUSB_STATUS_IN_INT_DISABLE()    USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
92                 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)|0xc0)
93
94 # 0x18 ZM_INTR_MASK_BYTE_7_OFFSET
95
96 # 0x20 ZM_INTR_GROUP_OFFSET
97 * BIT7 - group INTR 7
98 * BIT6 - group INTR 6
99 * BIT5 - group INTR 5
100 * BIT4 - group INTR 4
101 * BIT3 - group INTR 3
102 * BIT2 - group INTR 2
103 * BIT1 - group INTR 1
104 * BIT0 - group INTR 0  
105 These bits indicate if fallowing groups got some interrupt.
106
107 # 0x21 ZM_INTR_SOURCE_0_OFFSET
108 * BIT7 - abort interrupt? should be cleared first?
109 * BIT6 -
110 * BIT5 - 
111 * BIT4 - ep0 CMD_FAIL
112 * BIT3 - ep0 CMD_END
113 * BIT2 - USB EP0 OUT/rx interrupt
114 * BIT1 - USB EP0 IN/tx interrupt
115 * BIT0 - ep0 SETUP
116
117 # 0x22 ZM_INTR_SOURCE_1_OFFSET
118 # 0x23 ZM_INTR_SOURCE_2_OFFSET
119 # 0x24 ZM_INTR_SOURCE_3_OFFSET
120 # 0x25 ZM_INTR_SOURCE_4_OFFSET
121 * BIT7 - End of data.
122 * BIT6 - vUsb_Reg_Out(). Pending data in fifo for EP4. We need to read it out.
123 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. 
124
125 # 0x26 ZM_INTR_SOURCE_5_OFFSET
126 these endpoints are handled by DMA  
127
128 # 0x27 ZM_INTR_SOURCE_6_OFFSET
129 * BIT6 - vUsb_Status_In()?
130
131 # 0x28 ZM_INTR_SOURCE_7_OFFSET
132 * BIT7
133 * BIT6
134 * BIT5
135 * BIT4
136 * BIT3 - USB resume
137 * BIT2 - USB suspend
138 * BIT1 - USB reset interrupt.
139 * BIT0
140
141 # 0x3E ZM_EP_IN_MAX_SIZE_LOW_OFFSET
142
143 # 0x3F ZM_EP_IN_MAX_SIZE_HIGH_OFFSET
144 * BIT7
145 * BIT6
146 * BIT5
147 * BIT4 - mUsbEPinRsTgSet
148 * BIT3 - mUsbEPinStallSet
149 * BIT2
150 * BIT1
151 * BIT0  
152 These offset + 2 Byte step for each endpoint.  
153 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
154
155 # 0x5E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET
156
157 # 0x5F ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET
158 * BIT7
159 * BIT6
160 * BIT5
161 * BIT4 - mUsbEPoutRsTgSet
162 * BIT3 - mUsbEPoutStallSet
163 * BIT2
164 * BIT1
165 * BIT0  
166 These offset + 2 Byte step for each endpoint.  
167 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
168
169 # 0xAE ZM_EP3_BYTE_COUNT_HIGH_OFFSET
170     BIT3 - 1 xfer done?
171     comments: after sending data from target to host, set BIT3
172
173 # 0xAF ZM_EP4_BYTE_COUNT_HIGH_OFFSET
174     BIT4 - 1 - reset fifo; 0 - disable reset?
175     comments: probably compatible with ZM_EP3_BYTE_COUNT_HIGH_OFFSET.  
176 **These name reg do not fit to pattern!!!** Compare with 0x3e, 0x3f and 0x5e, 0x5f.
177 If we have 0x3e, 0x3f and 0x5e, 0x5f, why do we need this register?
178
179 # 0xBE ZM_EP3_BYTE_COUNT_LOW_OFFSET
180     size of data in fifo buffer? never used?
181
182 # 0xBF ZM_EP4_BYTE_COUNT_LOW_OFFSET
183     size of data in fifo buffer
184
185 # 0xF8 ZM_EP3_DATA_OFFSET
186 32bit data.  
187
188 # 0xFC ZM_EP4_DATA_OFFSET
189 32bit data.  
190
191 # 0x100 what is here?
192 **we miss 8 bytes here**
193
194 # 0x108 ZM_SOC_USB_MODE_CTRL_OFFSET
195     BIT10 - 1 - enable MP (EP6) downstream stream mode
196     BIT9 - 1 - enable MP (EP6) downstream DMA mode
197     BIT8 - 1 - enable HP (EP5) downstream DMA mode
198     BIT7 - 1 - enable HP (EP5) downstream stream mode
199     BIT6 - 1 - enable LP downstream stream mode
200     BIT5 - define the host dma buffer size - 4096(00) 8192 (01) 16384(10) 32768(11) bytes
201     BIT4 - ^
202     BIT3 - 0 - enable upstream stream mode: 1 - enable upstream packed mode;
203     BIT2 - 0 - Set into 64 byte mode (full speed) 1 - Set into 512 byte mode (usb highspeed)
204     BIT1 - 0 - disable upstream dma mode; 1 - enable upstream dma mode
205     BIT0 - 0 - disable LP down stream dma mode; 1 - eanble LP down stream dma mode
206 comments:
207 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
208 LP - lo priotiry; MP - middle priority; HP - High priority;
209     
210
211 # 0x110 ZM_SOC_USB_MAX_AGGREGATE_OFFSET
212     set stream mode packet buffer critirea
213     0x0 = disable stream mode or 1 packet. So 0x9 is 10 packets?
214 # 0x114 ZM_SOC_USB_TIME_CTRL_OFFSET
215     set stream mode timeout critirea. the unit is 32 USB (30Mhz) clock cycles.