1a6a78be0SŁukasz Dałek /* 2a6a78be0SŁukasz Dałek * PXA25x UDC definitions 3a6a78be0SŁukasz Dałek * 4a6a78be0SŁukasz Dałek * Copyright (C) 2012 Łukasz Dałek <luk0104@gmail.com> 5a6a78be0SŁukasz Dałek * 6*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 7a6a78be0SŁukasz Dałek */ 8a6a78be0SŁukasz Dałek 9a6a78be0SŁukasz Dałek #ifndef __REGS_USB_H__ 10a6a78be0SŁukasz Dałek #define __REGS_USB_H__ 11a6a78be0SŁukasz Dałek 12a6a78be0SŁukasz Dałek struct pxa25x_udc_regs { 13a6a78be0SŁukasz Dałek /* UDC Control Register */ 14a6a78be0SŁukasz Dałek uint32_t udccr; /* 0x000 */ 15a6a78be0SŁukasz Dałek uint32_t reserved1; 16a6a78be0SŁukasz Dałek 17a6a78be0SŁukasz Dałek /* UDC Control Function Register */ 18a6a78be0SŁukasz Dałek uint32_t udccfr; /* 0x008 */ 19a6a78be0SŁukasz Dałek uint32_t reserved2; 20a6a78be0SŁukasz Dałek 21a6a78be0SŁukasz Dałek /* UDC Endpoint Control/Status Registers */ 22a6a78be0SŁukasz Dałek uint32_t udccs[16]; /* 0x010 - 0x04c */ 23a6a78be0SŁukasz Dałek 24a6a78be0SŁukasz Dałek /* UDC Interrupt Control/Status Registers */ 25a6a78be0SŁukasz Dałek uint32_t uicr0; /* 0x050 */ 26a6a78be0SŁukasz Dałek uint32_t uicr1; /* 0x054 */ 27a6a78be0SŁukasz Dałek uint32_t usir0; /* 0x058 */ 28a6a78be0SŁukasz Dałek uint32_t usir1; /* 0x05c */ 29a6a78be0SŁukasz Dałek 30a6a78be0SŁukasz Dałek /* UDC Frame Number/Byte Count Registers */ 31a6a78be0SŁukasz Dałek uint32_t ufnrh; /* 0x060 */ 32a6a78be0SŁukasz Dałek uint32_t ufnrl; /* 0x064 */ 33a6a78be0SŁukasz Dałek uint32_t ubcr2; /* 0x068 */ 34a6a78be0SŁukasz Dałek uint32_t ubcr4; /* 0x06c */ 35a6a78be0SŁukasz Dałek uint32_t ubcr7; /* 0x070 */ 36a6a78be0SŁukasz Dałek uint32_t ubcr9; /* 0x074 */ 37a6a78be0SŁukasz Dałek uint32_t ubcr12; /* 0x078 */ 38a6a78be0SŁukasz Dałek uint32_t ubcr14; /* 0x07c */ 39a6a78be0SŁukasz Dałek 40a6a78be0SŁukasz Dałek /* UDC Endpoint Data Registers */ 41a6a78be0SŁukasz Dałek uint32_t uddr0; /* 0x080 */ 42a6a78be0SŁukasz Dałek uint32_t reserved3[7]; 43a6a78be0SŁukasz Dałek uint32_t uddr5; /* 0x0a0 */ 44a6a78be0SŁukasz Dałek uint32_t reserved4[7]; 45a6a78be0SŁukasz Dałek uint32_t uddr10; /* 0x0c0 */ 46a6a78be0SŁukasz Dałek uint32_t reserved5[7]; 47a6a78be0SŁukasz Dałek uint32_t uddr15; /* 0x0e0 */ 48a6a78be0SŁukasz Dałek uint32_t reserved6[7]; 49a6a78be0SŁukasz Dałek uint32_t uddr1; /* 0x100 */ 50a6a78be0SŁukasz Dałek uint32_t reserved7[31]; 51a6a78be0SŁukasz Dałek uint32_t uddr2; /* 0x180 */ 52a6a78be0SŁukasz Dałek uint32_t reserved8[31]; 53a6a78be0SŁukasz Dałek uint32_t uddr3; /* 0x200 */ 54a6a78be0SŁukasz Dałek uint32_t reserved9[127]; 55a6a78be0SŁukasz Dałek uint32_t uddr4; /* 0x400 */ 56a6a78be0SŁukasz Dałek uint32_t reserved10[127]; 57a6a78be0SŁukasz Dałek uint32_t uddr6; /* 0x600 */ 58a6a78be0SŁukasz Dałek uint32_t reserved11[31]; 59a6a78be0SŁukasz Dałek uint32_t uddr7; /* 0x680 */ 60a6a78be0SŁukasz Dałek uint32_t reserved12[31]; 61a6a78be0SŁukasz Dałek uint32_t uddr8; /* 0x700 */ 62a6a78be0SŁukasz Dałek uint32_t reserved13[127]; 63a6a78be0SŁukasz Dałek uint32_t uddr9; /* 0x900 */ 64a6a78be0SŁukasz Dałek uint32_t reserved14[127]; 65a6a78be0SŁukasz Dałek uint32_t uddr11; /* 0xb00 */ 66a6a78be0SŁukasz Dałek uint32_t reserved15[31]; 67a6a78be0SŁukasz Dałek uint32_t uddr12; /* 0xb80 */ 68a6a78be0SŁukasz Dałek uint32_t reserved16[31]; 69a6a78be0SŁukasz Dałek uint32_t uddr13; /* 0xc00 */ 70a6a78be0SŁukasz Dałek uint32_t reserved17[127]; 71a6a78be0SŁukasz Dałek uint32_t uddr14; /* 0xe00 */ 72a6a78be0SŁukasz Dałek 73a6a78be0SŁukasz Dałek }; 74a6a78be0SŁukasz Dałek 75a6a78be0SŁukasz Dałek #define PXA25X_UDC_BASE 0x40600000 76a6a78be0SŁukasz Dałek 77a6a78be0SŁukasz Dałek #define UDCCR_UDE (1 << 0) 78a6a78be0SŁukasz Dałek #define UDCCR_UDA (1 << 1) 79a6a78be0SŁukasz Dałek #define UDCCR_RSM (1 << 2) 80a6a78be0SŁukasz Dałek #define UDCCR_RESIR (1 << 3) 81a6a78be0SŁukasz Dałek #define UDCCR_SUSIR (1 << 4) 82a6a78be0SŁukasz Dałek #define UDCCR_SRM (1 << 5) 83a6a78be0SŁukasz Dałek #define UDCCR_RSTIR (1 << 6) 84a6a78be0SŁukasz Dałek #define UDCCR_REM (1 << 7) 85a6a78be0SŁukasz Dałek 86a6a78be0SŁukasz Dałek /* Bulk IN endpoint 1/6/11 */ 87a6a78be0SŁukasz Dałek #define UDCCS_BI_TSP (1 << 7) 88a6a78be0SŁukasz Dałek #define UDCCS_BI_FST (1 << 5) 89a6a78be0SŁukasz Dałek #define UDCCS_BI_SST (1 << 4) 90a6a78be0SŁukasz Dałek #define UDCCS_BI_TUR (1 << 3) 91a6a78be0SŁukasz Dałek #define UDCCS_BI_FTF (1 << 2) 92a6a78be0SŁukasz Dałek #define UDCCS_BI_TPC (1 << 1) 93a6a78be0SŁukasz Dałek #define UDCCS_BI_TFS (1 << 0) 94a6a78be0SŁukasz Dałek 95a6a78be0SŁukasz Dałek /* Bulk OUT endpoint 2/7/12 */ 96a6a78be0SŁukasz Dałek #define UDCCS_BO_RSP (1 << 7) 97a6a78be0SŁukasz Dałek #define UDCCS_BO_RNE (1 << 6) 98a6a78be0SŁukasz Dałek #define UDCCS_BO_FST (1 << 5) 99a6a78be0SŁukasz Dałek #define UDCCS_BO_SST (1 << 4) 100a6a78be0SŁukasz Dałek #define UDCCS_BO_DME (1 << 3) 101a6a78be0SŁukasz Dałek #define UDCCS_BO_RPC (1 << 1) 102a6a78be0SŁukasz Dałek #define UDCCS_BO_RFS (1 << 0) 103a6a78be0SŁukasz Dałek 104a6a78be0SŁukasz Dałek /* Isochronous OUT endpoint 4/9/14 */ 105a6a78be0SŁukasz Dałek #define UDCCS_IO_RSP (1 << 7) 106a6a78be0SŁukasz Dałek #define UDCCS_IO_RNE (1 << 6) 107a6a78be0SŁukasz Dałek #define UDCCS_IO_DME (1 << 3) 108a6a78be0SŁukasz Dałek #define UDCCS_IO_ROF (1 << 2) 109a6a78be0SŁukasz Dałek #define UDCCS_IO_RPC (1 << 1) 110a6a78be0SŁukasz Dałek #define UDCCS_IO_RFS (1 << 0) 111a6a78be0SŁukasz Dałek 112a6a78be0SŁukasz Dałek /* Control endpoint 0 */ 113a6a78be0SŁukasz Dałek #define UDCCS0_OPR (1 << 0) 114a6a78be0SŁukasz Dałek #define UDCCS0_IPR (1 << 1) 115a6a78be0SŁukasz Dałek #define UDCCS0_FTF (1 << 2) 116a6a78be0SŁukasz Dałek #define UDCCS0_DRWF (1 << 3) 117a6a78be0SŁukasz Dałek #define UDCCS0_SST (1 << 4) 118a6a78be0SŁukasz Dałek #define UDCCS0_FST (1 << 5) 119a6a78be0SŁukasz Dałek #define UDCCS0_RNE (1 << 6) 120a6a78be0SŁukasz Dałek #define UDCCS0_SA (1 << 7) 121a6a78be0SŁukasz Dałek 122a6a78be0SŁukasz Dałek #define UICR0_IM0 (1 << 0) 123a6a78be0SŁukasz Dałek 124a6a78be0SŁukasz Dałek #define USIR0_IR0 (1 << 0) 125a6a78be0SŁukasz Dałek #define USIR0_IR1 (1 << 1) 126a6a78be0SŁukasz Dałek #define USIR0_IR2 (1 << 2) 127a6a78be0SŁukasz Dałek #define USIR0_IR3 (1 << 3) 128a6a78be0SŁukasz Dałek #define USIR0_IR4 (1 << 4) 129a6a78be0SŁukasz Dałek #define USIR0_IR5 (1 << 5) 130a6a78be0SŁukasz Dałek #define USIR0_IR6 (1 << 6) 131a6a78be0SŁukasz Dałek #define USIR0_IR7 (1 << 7) 132a6a78be0SŁukasz Dałek 133a6a78be0SŁukasz Dałek #define UDCCFR_AREN (1 << 7) /* ACK response enable (now) */ 134a6a78be0SŁukasz Dałek #define UDCCFR_ACM (1 << 2) /* ACK control mode (wait for AREN) */ 135a6a78be0SŁukasz Dałek /* 136a6a78be0SŁukasz Dałek * Intel(R) PXA255 Processor Specification, September 2003 (page 31) 137a6a78be0SŁukasz Dałek * define new "must be one" bits in UDCCFR (see Table 12-13.) 138a6a78be0SŁukasz Dałek */ 139a6a78be0SŁukasz Dałek #define UDCCFR_MB1 (0xff & ~(UDCCFR_AREN | UDCCFR_ACM)) 140a6a78be0SŁukasz Dałek 141a6a78be0SŁukasz Dałek #define UFNRH_SIR (1 << 7) /* SOF interrupt request */ 142a6a78be0SŁukasz Dałek #define UFNRH_SIM (1 << 6) /* SOF interrupt mask */ 143a6a78be0SŁukasz Dałek #define UFNRH_IPE14 (1 << 5) /* ISO packet error, ep14 */ 144a6a78be0SŁukasz Dałek #define UFNRH_IPE9 (1 << 4) /* ISO packet error, ep9 */ 145a6a78be0SŁukasz Dałek #define UFNRH_IPE4 (1 << 3) /* ISO packet error, ep4 */ 146a6a78be0SŁukasz Dałek 147a6a78be0SŁukasz Dałek #endif /* __REGS_USB_H__ */ 148