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 * 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 # 0x12 ZM_INTR_MASK_BYTE_1_OFFSET
66 USB OUT FIFO
67
68 # 0x13 ZM_INTR_MASK_BYTE_2_OFFSET
69 USB OUT FIFO
70
71 # 0x14 ZM_INTR_MASK_BYTE_3_OFFSET
72 USB OUT FIFO
73
74 # 0x15 ZM_INTR_MASK_BYTE_4_OFFSET
75     
76     #define mUSB_REG_OUT_INT_ENABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \
77                                   USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0x3f)
78     #define mUSB_REG_OUT_INT_DISABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \                    
79                                   USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0xc0)
80
81 # 0x16 ZM_INTR_MASK_BYTE_5_OFFSET
82 USB IN FIFO
83
84 # 0x17 ZM_INTR_MASK_BYTE_6_OFFSET
85 USB IN FIFO
86
87     #define mUSB_STATUS_IN_INT_ENABLE()     USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
88                 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)&0xbf)
89     #define mUSB_STATUS_IN_INT_DISABLE()    USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
90                 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)|0xc0)
91
92 # 0x18 ZM_INTR_MASK_BYTE_7_OFFSET
93
94 # 0x20 ZM_INTR_GROUP_OFFSET
95 * BIT7 - group INTR 7
96 * BIT6 - group INTR 6
97 * BIT5 - group INTR 5
98 * BIT4 - group INTR 4
99 * BIT3 - group INTR 3
100 * BIT2 - group INTR 2
101 * BIT1 - group INTR 1
102 * BIT0 - group INTR 0  
103 These bits indicate if fallowing groups got some interrupt.
104
105 # 0x21 ZM_INTR_SOURCE_0_OFFSET
106 * BIT7 - abort interrupt? should be cleared first?
107 * BIT6 -
108 * BIT5 - 
109 * BIT4 - ep0 CMD_FAIL
110 * BIT3 - ep0 CMD_END
111 * BIT2 - USB EP0 OUT/rx interrupt
112 * BIT1 - USB EP0 IN/tx interrupt
113 * BIT0 - ep0 SETUP
114
115 # 0x22 ZM_INTR_SOURCE_1_OFFSET
116 # 0x23 ZM_INTR_SOURCE_2_OFFSET
117 # 0x24 ZM_INTR_SOURCE_3_OFFSET
118 # 0x25 ZM_INTR_SOURCE_4_OFFSET
119 * BIT6 - vUsb_Reg_Out()?
120
121 # 0x26 ZM_INTR_SOURCE_5_OFFSET
122 these endpoints are handled by DMA  
123
124 # 0x27 ZM_INTR_SOURCE_6_OFFSET
125 * BIT6 - vUsb_Status_In()?
126
127 # 0x28 ZM_INTR_SOURCE_7_OFFSET
128 * BIT7
129 * BIT6
130 * BIT5
131 * BIT4
132 * BIT3 - USB resume
133 * BIT2 - USB suspend
134 * BIT1 - USB reset interrupt.
135 * BIT0
136
137 # 0x3F ZM_EP_IN_MAX_SIZE_HIGH_OFFSET
138
139 # 0x3E ZM_EP_IN_MAX_SIZE_LOW_OFFSET
140
141 # 0x5E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET
142
143 # 0x5F ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET
144
145 # 0xAE ZM_EP3_BYTE_COUNT_HIGH_OFFSET
146     BIT3 - 1 xfer done?
147     comments: after sending data from target to host, set BIT3
148
149 # 0xAF ZM_EP4_BYTE_COUNT_HIGH_OFFSET
150     BIT4 - 1 - reset fifo; 0 - disable reset?
151     comments: probably compatible with ZM_EP3_BYTE_COUNT_HIGH_OFFSET
152
153 # 0xBE ZM_EP3_BYTE_COUNT_LOW_OFFSET
154
155 # 0xBF ZM_EP4_BYTE_COUNT_LOW_OFFSET
156     size of data in fifo buffer
157
158 # 0xF8 ZM_EP3_DATA_OFFSET
159 # 0xFC ZM_EP4_DATA_OFFSET
160
161 # 0x108 ZM_SOC_USB_MODE_CTRL_OFFSET
162     BIT10 - 1 - enable MP (EP6) downstream stream mode
163     BIT9 - 1 - enable MP (EP6) downstream DMA mode
164     BIT8 - 1 - enable HP (EP5) downstream DMA mode
165     BIT7 - 1 - enable HP (EP5) downstream stream mode
166     BIT6 - 1 - enable LP downstream stream mode
167     BIT5 - define the host dma buffer size - 4096(00) 8192 (01) 16384(10) 32768(11) bytes
168     BIT4 - ^
169     BIT3 - 0 - enable upstream stream mode: 1 - enable upstream packed mode;
170     BIT2 - 0 - Set into 64 byte mode (full speed) 1 - Set into 512 byte mode (usb highspeed)
171     BIT1 - 0 - disable upstream dma mode; 1 - enable upstream dma mode
172     BIT0 - 0 - disable LP down stream dma mode; 1 - eanble LP down stream dma mode
173 comments:
174 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
175 LP - lo priotiry; MP - middle priority; HP - High priority;
176     
177
178 # 0x110 ZM_SOC_USB_MAX_AGGREGATE_OFFSET
179     set stream mode packet buffer critirea
180     0x0 = disable stream mode or 1 packet. So 0x9 is 10 packets?
181 # 0x114 ZM_SOC_USB_TIME_CTRL_OFFSET
182     set stream mode timeout critirea. the unit is 32 USB (30Mhz) clock cycles.