Updated usb regs (markdown)
[librecmc/open-ath9k-htc-firmware.wiki.git] / usb-regs.md
index f091dada7f1b05b34d44cad35866a590547fc4e3..0929b824986da39e6ccfe82d45f9d05fd62cfd1d 100644 (file)
@@ -1,6 +1,7 @@
 Assumptions made on source code:
 * looks like USB block is [FUSB200](http://www.faraday-tech.com/techDocument/FUSB200_ProductBrief_v1_2.pdf).
-* According to docs FUSB200 has 15 endpoints, but according to the source 10.
+* We have 15 Enddpoints and 15 FIFO buffers.
+* **FIFO0 - FIFO13, 512 Byte each? FIFO14 - FIFO15 - 64 Byte each?**
 
 # 0x00 ZM_MAIN_CTRL_OFFSET
 * BIT7
@@ -29,7 +30,7 @@ Assumptions made on source code:
 * BIT7
 * BIT6
 * BIT5
-* BIT4 - TEST_PKY
+* BIT4 - TEST_PKY - Test packed. 
 * BIT3 - TEST_SE0_NAK
 * BIT2 - TEST_K
 * BIT1 - TEST_J
@@ -43,7 +44,7 @@ DM(D-) DP(D+) Description
 1      1      3: SE1  
    0: Control PHY to turn off 1.5K Ohm pull-up resistor  
    1: Control PHY to turn on 1.5K Ohm pull-up resistor  
-
+If TEST_PKY is set, the test packet must be filled into FIFO by DMA first.  
 
 
 # 0x0A ZM_VDR_SPECIFIC_MODE_OFFSET
@@ -138,34 +139,189 @@ these endpoints are handled by DMA
 * BIT1 - USB reset interrupt.
 * BIT0
 
-# 0x3E ZM_EP_IN_MAX_SIZE_LOW_OFFSET
-
-# 0x3F ZM_EP_IN_MAX_SIZE_HIGH_OFFSET
+# 0x2F mUsbEPMap EP0
+code use: ZM_FUSB_BASE+0x30+(EPn-1)  
+(0x0F | FIFOn << 4) = OUT
+(0xF0 | FIFOn) = IN
+
+for FIFOn see mUsbFIFOMap registers.
+
+Current configuration:
+* 0x2f 0x00                                                                    
+* 0x30 0x0f <- EP1 = OUT + Start FIFO0                                                                    
+* 0x31 0xf2 <- EP2 = IN  + Start FIFO2                                                                   
+* 0x32 0xfe <- EP3 = IN + Start FIFO14                                                                    
+* 0x33 0xff <- EP4 = OUT + Start FIFO15                                                                    
+* 0x34 0x4f                                                                     
+* 0x35 0x6f                                                                     
+* 0x36 0x00                                                                     
+* 0x37 0x00                                                                     
+* 0x38 0x00                                                                     
+* 0x39 0x00                                                                     
+* 0x3a 0x00                                                                     
+* 0x3b 0x00                                                                     
+* 0x3c 0x00                                                                     
+* 0x3d 0x00                                                                     
+* 0x3e 0x00 
+
+# 0x30 mUsbEPMap EP1
+# 0x31 mUsbEPMap EP2
+# 0x32 mUsbEPMap EP3
+# 0x33 mUsbEPMap EP4
+# 0x34 mUsbEPMap EP5
+# 0x35 mUsbEPMap EP6
+# 0x36 mUsbEPMap EP7                                                                    
+# 0x37 mUsbEPMap EP8                                                                     
+# 0x38 mUsbEPMap EP9                                                                   
+# 0x39 mUsbEPMap EP10                                                                     
+# 0x3a mUsbEPMap EP11                                                                   
+# 0x3b mUsbEPMap EP12                                                                  
+# 0x3c mUsbEPMap EP13                                                                   
+# 0x3d mUsbEPMap EP14                                                                    
+# 0x3e mUsbEPMap EP15
+
+# 0x3E ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP0
+* BIT0 - BIT7; low size regs. Max size 0x7ff (ZM_EP_IN_MAX_SIZE_LOW_OFFSET + ZM_EP_IN_MAX_SIZE_HIGH_OFFSET)
+
+# 0x3F ZM_EP_IN_MAX_SIZE_HIGH_OFFSET EP0
 * BIT7
 * BIT6
 * BIT5
 * BIT4 - mUsbEPinRsTgSet
 * BIT3 - mUsbEPinStallSet
-* BIT2
-* BIT1
-* BIT0  
+* BIT0 - BIT2; High size regs
 These offset + 2 Byte step for each endpoint.  
 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
 
-# 0x5E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET
 
-# 0x5F ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET
+# 0x40 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP1
+# 0x42 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP2
+# 0x44 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP3
+# 0x46 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP4
+# 0x48 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP5
+# 0x4A ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP6
+# 0x4C ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP7
+# 0x4E ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP8
+# 0x50 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP9
+# 0x52 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP10
+# 0x54 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP11
+# 0x56 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP12
+# 0x58 ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP13
+# 0x5A ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP14
+# 0x5C ZM_EP_IN_MAX_SIZE_LOW_OFFSET EP15
+
+# 0x5E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP0
+* BIT0 - BIT7; low size regs. Max size 0x7ff (ZM_EP_OUT_MAX_SIZE_LOW_OFFSET + ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET)
+
+# 0x5F ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET EP0
 * BIT7
 * BIT6
 * BIT5
 * BIT4 - mUsbEPoutRsTgSet
 * BIT3 - mUsbEPoutStallSet
-* BIT2
-* BIT1
-* BIT0  
+* BIT0 - BIT2; High size regs
+
 These offset + 2 Byte step for each endpoint.  
 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
 
+# 0x60 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP1
+# 0x62 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP2
+# 0x64 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP3
+# 0x66 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP4
+# 0x68 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP5
+# 0x6A ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP6
+# 0x6C ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP7
+# 0x6E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP8
+# 0x70 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP9
+# 0x72 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP10
+# 0x74 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP11
+# 0x76 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP12
+# 0x78 ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP13
+# 0x7A ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP14
+# 0x7C ZM_EP_OUT_MAX_SIZE_LOW_OFFSET EP15
+
+# 0x80 mUsbFIFOMap FIFO0                                                                 
+* BIT7
+* BIT6
+* BIT5
+* BIT4 - Direction: 0 - OUT; 1 - IN.
+* BIT0 - BIT3: assigned EP number.
+
+Current layout:
+* 0x80 0x01 - EP1 OUT                                                                 
+* 0x81 0x01 - EP1 OUT                                                                    
+* 0x82 0x12 - EP2 IN                                                                    
+* 0x83 0x12 - EP2 IN                                                                    
+* 0x84 0x05                                                                     
+* 0x85 0x05                                                                     
+* 0x86 0x06                                                                     
+* 0x87 0x06                                                                     
+* 0x88 0x00                                                                     
+* 0x89 0x00                                                                     
+* 0x8a 0x00                                                                     
+* 0x8b 0x00                                                                     
+* 0x8c 0x00                                                                     
+* 0x8d 0x00                                                                     
+* 0x8e 0x13                                                                     
+* 0x8f 0x04 
+
+# 0x81 mUsbFIFOMap FIFO1                                                                  
+# 0x82 mUsbFIFOMap FIFO2                                                                 
+# 0x83 mUsbFIFOMap FIFO3                                                            
+# 0x84 mUsbFIFOMap FIFO4                                                            
+# 0x85 mUsbFIFOMap FIFO5                                                             
+# 0x86 mUsbFIFOMap FIFO6                                                                 
+# 0x87 mUsbFIFOMap FIFO7                                                                 
+# 0x88 mUsbFIFOMap FIFO8                                                               
+# 0x89 mUsbFIFOMap FIFO9                                                              
+# 0x8a mUsbFIFOMap FIFO10                                                              
+# 0x8b mUsbFIFOMap FIFO11                                                             
+# 0x8c mUsbFIFOMap FIFO12                                                               
+# 0x8d mUsbFIFOMap FIFO13                                                               
+# 0x8e mUsbFIFOMap FIFO14                                                               
+# 0x8f mUsbFIFOMap FIFO15
+
+# 0x90 mUsbFIFOConfig FIFO0
+* BIT7 - If EPn use more then one FIFO, then this bit should be on the first
+* BIT6
+* BIT5
+* BIT4 - Block size: 0 - 64/512; 1 - 128/1024. It depends on initial FIFO size.
+* BIT2 - BIT3; number of FIFO blocks or better to say extra blocks? 0 - no more blocks; 1 - one block; 2 - two blocks.
+* BIT0 - BIT1; EP type: 0x1 - Iso; 0x2 - Bulk, 0x3 - Intr;
+
+* 0x90 0x86 <- FIFO0: Bulk | + one block (0x91) | size 512
+* 0x91 0x06                                                                     
+* 0x92 0x86                                                                     
+* 0x93 0x06                                                                     
+* 0x94 0x86                                                                     
+* 0x95 0x06                                                                     
+* 0x96 0x86                                                                     
+* 0x97 0x06                                                                     
+* 0x98 0x00                                                                     
+* 0x99 0x00                                                                     
+* 0x9a 0x00                                                                     
+* 0x9b 0x00                                                                     
+* 0x9c 0x00                                                                     
+* 0x9d 0x00                                                                     
+* 0x9e 0x83                                                                     
+* 0x9f 0x83 
+
+# 0x91 mUsbFIFOConfig FIFO1                                                                    
+# 0x92 mUsbFIFOConfig FIFO2                                                                    
+# 0x93 mUsbFIFOConfig FIFO3                                                                     
+# 0x94 mUsbFIFOConfig FIFO4                                                                     
+# 0x95 mUsbFIFOConfig FIFO5                                                                     
+# 0x96 mUsbFIFOConfig FIFO6                                                                     
+# 0x97 mUsbFIFOConfig FIFO7                                                                     
+# 0x98 mUsbFIFOConfig FIFO8                                                                     
+# 0x99 mUsbFIFOConfig FIFO9                                                                     
+# 0x9a mUsbFIFOConfig FIFO10                                                                     
+# 0x9b mUsbFIFOConfig FIFO11                                                                     
+# 0x9c mUsbFIFOConfig FIFO12                                                                     
+# 0x9d mUsbFIFOConfig FIFO13                                                                     
+# 0x9e mUsbFIFOConfig FIFO14                                                                     
+# 0x9f mUsbFIFOConfig FIFO15  
+
 # 0xAE ZM_EP3_BYTE_COUNT_HIGH_OFFSET
     BIT3 - 1 xfer done?
     comments: after sending data from target to host, set BIT3
@@ -182,11 +338,28 @@ If we have 0x3e, 0x3f and 0x5e, 0x5f, why do we need this register?
 # 0xBF ZM_EP4_BYTE_COUNT_LOW_OFFSET
     size of data in fifo buffer. Maximum size of EP4 should be 64 Bytes. If reported value is bigger, then buffer is defiantly corrupt.
 
+# 0xc0 FIFO0 DATA OFFSET?
+# 0xc4 FIFO1 DATA OFFSET?
+# 0xc8 FIFO2 DATA OFFSET?
+# 0xcc FIFO3 DATA OFFSET?
+# 0xd0 FIFO4 DATA OFFSET?
+# 0xd4 FIFO5 DATA OFFSET?
+# 0xd8 FIFO6 DATA OFFSET?
+# 0xdc FIFO7 DATA OFFSET?
+# 0xe0 FIFO8 DATA OFFSET?
+# 0xe4 FIFO9 DATA OFFSET?
+# 0xe8 FIFO10 DATA OFFSET?
+# 0xec FIFO11 DATA OFFSET?
+# 0xf0 FIFO12 DATA OFFSET?
+# 0xf4 FIFO13 DATA OFFSET?
+# 0xf8 FIFO14 DATA OFFSET?
+# 0xfc FIFO15 DATA OFFSET?
+
 # 0xF8 ZM_EP3_DATA_OFFSET
-32bit data.  
+32bit data. Probably FIFO14 offset.. not EP
 
 # 0xFC ZM_EP4_DATA_OFFSET
-32bit data.  
+32bit data. Probably FIFO15 offset.. not EP
 
 # 0x100 ZM_CBUS_FIFO_SIZE_REG
 0x1 - 1 Byte, 0x3 - 2 Byte, 0x7 - 3 Byte; 0xf - 4 Byte.