1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Renesas USBF USB Function driver 4 * 5 * Copyright 2022 Schneider Electric 6 * Author: Herve Codina <herve.codina@bootlin.com> 7 */ 8 9 #include <linux/delay.h> 10 #include <linux/dma-mapping.h> 11 #include <linux/interrupt.h> 12 #include <linux/iopoll.h> 13 #include <linux/kernel.h> 14 #include <linux/kfifo.h> 15 #include <linux/module.h> 16 #include <linux/platform_device.h> 17 #include <linux/pm_runtime.h> 18 #include <linux/types.h> 19 #include <linux/usb/composite.h> 20 #include <linux/usb/gadget.h> 21 #include <linux/usb/role.h> 22 23 #define USBF_NUM_ENDPOINTS 16 24 #define USBF_EP0_MAX_PCKT_SIZE 64 25 26 /* EPC registers */ 27 #define USBF_REG_USB_CONTROL 0x000 28 #define USBF_USB_PUE2 BIT(2) 29 #define USBF_USB_CONNECTB BIT(3) 30 #define USBF_USB_DEFAULT BIT(4) 31 #define USBF_USB_CONF BIT(5) 32 #define USBF_USB_SUSPEND BIT(6) 33 #define USBF_USB_RSUM_IN BIT(7) 34 #define USBF_USB_SOF_RCV BIT(8) 35 #define USBF_USB_FORCEFS BIT(9) 36 #define USBF_USB_INT_SEL BIT(10) 37 #define USBF_USB_SOF_CLK_MODE BIT(11) 38 39 #define USBF_REG_USB_STATUS 0x004 40 #define USBF_USB_RSUM_OUT BIT(1) 41 #define USBF_USB_SPND_OUT BIT(2) 42 #define USBF_USB_USB_RST BIT(3) 43 #define USBF_USB_DEFAULT_ST BIT(4) 44 #define USBF_USB_CONF_ST BIT(5) 45 #define USBF_USB_SPEED_MODE BIT(6) 46 #define USBF_USB_SOF_DELAY_STATUS BIT(31) 47 48 #define USBF_REG_USB_ADDRESS 0x008 49 #define USBF_USB_SOF_STATUS BIT(15) 50 #define USBF_USB_SET_USB_ADDR(_a) ((_a) << 16) 51 #define USBF_USB_GET_FRAME(_r) ((_r) & 0x7FF) 52 53 #define USBF_REG_SETUP_DATA0 0x018 54 #define USBF_REG_SETUP_DATA1 0x01C 55 #define USBF_REG_USB_INT_STA 0x020 56 #define USBF_USB_RSUM_INT BIT(1) 57 #define USBF_USB_SPND_INT BIT(2) 58 #define USBF_USB_USB_RST_INT BIT(3) 59 #define USBF_USB_SOF_INT BIT(4) 60 #define USBF_USB_SOF_ERROR_INT BIT(5) 61 #define USBF_USB_SPEED_MODE_INT BIT(6) 62 #define USBF_USB_EPN_INT(_n) (BIT(8) << (_n)) /* n=0..15 */ 63 64 #define USBF_REG_USB_INT_ENA 0x024 65 #define USBF_USB_RSUM_EN BIT(1) 66 #define USBF_USB_SPND_EN BIT(2) 67 #define USBF_USB_USB_RST_EN BIT(3) 68 #define USBF_USB_SOF_EN BIT(4) 69 #define USBF_USB_SOF_ERROR_EN BIT(5) 70 #define USBF_USB_SPEED_MODE_EN BIT(6) 71 #define USBF_USB_EPN_EN(_n) (BIT(8) << (_n)) /* n=0..15 */ 72 73 #define USBF_BASE_EP0 0x028 74 /* EP0 registers offsets from Base + USBF_BASE_EP0 (EP0 regs area) */ 75 #define USBF_REG_EP0_CONTROL 0x00 76 #define USBF_EP0_ONAK BIT(0) 77 #define USBF_EP0_INAK BIT(1) 78 #define USBF_EP0_STL BIT(2) 79 #define USBF_EP0_PERR_NAK_CLR BIT(3) 80 #define USBF_EP0_INAK_EN BIT(4) 81 #define USBF_EP0_DW_MASK (0x3 << 5) 82 #define USBF_EP0_DW(_s) ((_s) << 5) 83 #define USBF_EP0_DEND BIT(7) 84 #define USBF_EP0_BCLR BIT(8) 85 #define USBF_EP0_PIDCLR BIT(9) 86 #define USBF_EP0_AUTO BIT(16) 87 #define USBF_EP0_OVERSEL BIT(17) 88 #define USBF_EP0_STGSEL BIT(18) 89 90 #define USBF_REG_EP0_STATUS 0x04 91 #define USBF_EP0_SETUP_INT BIT(0) 92 #define USBF_EP0_STG_START_INT BIT(1) 93 #define USBF_EP0_STG_END_INT BIT(2) 94 #define USBF_EP0_STALL_INT BIT(3) 95 #define USBF_EP0_IN_INT BIT(4) 96 #define USBF_EP0_OUT_INT BIT(5) 97 #define USBF_EP0_OUT_OR_INT BIT(6) 98 #define USBF_EP0_OUT_NULL_INT BIT(7) 99 #define USBF_EP0_IN_EMPTY BIT(8) 100 #define USBF_EP0_IN_FULL BIT(9) 101 #define USBF_EP0_IN_DATA BIT(10) 102 #define USBF_EP0_IN_NAK_INT BIT(11) 103 #define USBF_EP0_OUT_EMPTY BIT(12) 104 #define USBF_EP0_OUT_FULL BIT(13) 105 #define USBF_EP0_OUT_NULL BIT(14) 106 #define USBF_EP0_OUT_NAK_INT BIT(15) 107 #define USBF_EP0_PERR_NAK_INT BIT(16) 108 #define USBF_EP0_PERR_NAK BIT(17) 109 #define USBF_EP0_PID BIT(18) 110 111 #define USBF_REG_EP0_INT_ENA 0x08 112 #define USBF_EP0_SETUP_EN BIT(0) 113 #define USBF_EP0_STG_START_EN BIT(1) 114 #define USBF_EP0_STG_END_EN BIT(2) 115 #define USBF_EP0_STALL_EN BIT(3) 116 #define USBF_EP0_IN_EN BIT(4) 117 #define USBF_EP0_OUT_EN BIT(5) 118 #define USBF_EP0_OUT_OR_EN BIT(6) 119 #define USBF_EP0_OUT_NULL_EN BIT(7) 120 #define USBF_EP0_IN_NAK_EN BIT(11) 121 #define USBF_EP0_OUT_NAK_EN BIT(15) 122 #define USBF_EP0_PERR_NAK_EN BIT(16) 123 124 #define USBF_REG_EP0_LENGTH 0x0C 125 #define USBF_EP0_LDATA (0x7FF << 0) 126 #define USBF_REG_EP0_READ 0x10 127 #define USBF_REG_EP0_WRITE 0x14 128 129 #define USBF_BASE_EPN(_n) (0x040 + (_n) * 0x020) 130 /* EPn registers offsets from Base + USBF_BASE_EPN(n-1). n=1..15 */ 131 #define USBF_REG_EPN_CONTROL 0x000 132 #define USBF_EPN_ONAK BIT(0) 133 #define USBF_EPN_OSTL BIT(2) 134 #define USBF_EPN_ISTL BIT(3) 135 #define USBF_EPN_OSTL_EN BIT(4) 136 #define USBF_EPN_DW_MASK (0x3 << 5) 137 #define USBF_EPN_DW(_s) ((_s) << 5) 138 #define USBF_EPN_DEND BIT(7) 139 #define USBF_EPN_CBCLR BIT(8) 140 #define USBF_EPN_BCLR BIT(9) 141 #define USBF_EPN_OPIDCLR BIT(10) 142 #define USBF_EPN_IPIDCLR BIT(11) 143 #define USBF_EPN_AUTO BIT(16) 144 #define USBF_EPN_OVERSEL BIT(17) 145 #define USBF_EPN_MODE_MASK (0x3 << 24) 146 #define USBF_EPN_MODE_BULK (0x0 << 24) 147 #define USBF_EPN_MODE_INTR (0x1 << 24) 148 #define USBF_EPN_MODE_ISO (0x2 << 24) 149 #define USBF_EPN_DIR0 BIT(26) 150 #define USBF_EPN_BUF_TYPE_DOUBLE BIT(30) 151 #define USBF_EPN_EN BIT(31) 152 153 #define USBF_REG_EPN_STATUS 0x004 154 #define USBF_EPN_IN_EMPTY BIT(0) 155 #define USBF_EPN_IN_FULL BIT(1) 156 #define USBF_EPN_IN_DATA BIT(2) 157 #define USBF_EPN_IN_INT BIT(3) 158 #define USBF_EPN_IN_STALL_INT BIT(4) 159 #define USBF_EPN_IN_NAK_ERR_INT BIT(5) 160 #define USBF_EPN_IN_END_INT BIT(7) 161 #define USBF_EPN_IPID BIT(10) 162 #define USBF_EPN_OUT_EMPTY BIT(16) 163 #define USBF_EPN_OUT_FULL BIT(17) 164 #define USBF_EPN_OUT_NULL_INT BIT(18) 165 #define USBF_EPN_OUT_INT BIT(19) 166 #define USBF_EPN_OUT_STALL_INT BIT(20) 167 #define USBF_EPN_OUT_NAK_ERR_INT BIT(21) 168 #define USBF_EPN_OUT_OR_INT BIT(22) 169 #define USBF_EPN_OUT_END_INT BIT(23) 170 #define USBF_EPN_ISO_CRC BIT(24) 171 #define USBF_EPN_ISO_OR BIT(26) 172 #define USBF_EPN_OUT_NOTKN BIT(27) 173 #define USBF_EPN_ISO_OPID BIT(28) 174 #define USBF_EPN_ISO_PIDERR BIT(29) 175 176 #define USBF_REG_EPN_INT_ENA 0x008 177 #define USBF_EPN_IN_EN BIT(3) 178 #define USBF_EPN_IN_STALL_EN BIT(4) 179 #define USBF_EPN_IN_NAK_ERR_EN BIT(5) 180 #define USBF_EPN_IN_END_EN BIT(7) 181 #define USBF_EPN_OUT_NULL_EN BIT(18) 182 #define USBF_EPN_OUT_EN BIT(19) 183 #define USBF_EPN_OUT_STALL_EN BIT(20) 184 #define USBF_EPN_OUT_NAK_ERR_EN BIT(21) 185 #define USBF_EPN_OUT_OR_EN BIT(22) 186 #define USBF_EPN_OUT_END_EN BIT(23) 187 188 #define USBF_REG_EPN_DMA_CTRL 0x00C 189 #define USBF_EPN_DMAMODE0 BIT(0) 190 #define USBF_EPN_DMA_EN BIT(4) 191 #define USBF_EPN_STOP_SET BIT(8) 192 #define USBF_EPN_BURST_SET BIT(9) 193 #define USBF_EPN_DEND_SET BIT(10) 194 #define USBF_EPN_STOP_MODE BIT(11) 195 196 #define USBF_REG_EPN_PCKT_ADRS 0x010 197 #define USBF_EPN_MPKT(_l) ((_l) << 0) 198 #define USBF_EPN_BASEAD(_a) ((_a) << 16) 199 200 #define USBF_REG_EPN_LEN_DCNT 0x014 201 #define USBF_EPN_GET_LDATA(_r) ((_r) & 0x7FF) 202 #define USBF_EPN_SET_DMACNT(_c) ((_c) << 16) 203 #define USBF_EPN_GET_DMACNT(_r) (((_r) >> 16) & 0x1ff) 204 205 #define USBF_REG_EPN_READ 0x018 206 #define USBF_REG_EPN_WRITE 0x01C 207 208 /* AHB-EPC Bridge registers */ 209 #define USBF_REG_AHBSCTR 0x1000 210 #define USBF_REG_AHBMCTR 0x1004 211 #define USBF_SYS_WBURST_TYPE BIT(2) 212 #define USBF_SYS_ARBITER_CTR BIT(31) 213 214 #define USBF_REG_AHBBINT 0x1008 215 #define USBF_SYS_ERR_MASTER (0x0F << 0) 216 #define USBF_SYS_SBUS_ERRINT0 BIT(4) 217 #define USBF_SYS_SBUS_ERRINT1 BIT(5) 218 #define USBF_SYS_MBUS_ERRINT BIT(6) 219 #define USBF_SYS_VBUS_INT BIT(13) 220 #define USBF_SYS_DMA_ENDINT_EPN(_n) (BIT(16) << (_n)) /* _n=1..15 */ 221 222 #define USBF_REG_AHBBINTEN 0x100C 223 #define USBF_SYS_SBUS_ERRINT0EN BIT(4) 224 #define USBF_SYS_SBUS_ERRINT1EN BIT(5) 225 #define USBF_SYS_MBUS_ERRINTEN BIT(6) 226 #define USBF_SYS_VBUS_INTEN BIT(13) 227 #define USBF_SYS_DMA_ENDINTEN_EPN(_n) (BIT(16) << (_n)) /* _n=1..15 */ 228 229 #define USBF_REG_EPCTR 0x1010 230 #define USBF_SYS_EPC_RST BIT(0) 231 #define USBF_SYS_PLL_RST BIT(2) 232 #define USBF_SYS_PLL_LOCK BIT(4) 233 #define USBF_SYS_PLL_RESUME BIT(5) 234 #define USBF_SYS_VBUS_LEVEL BIT(8) 235 #define USBF_SYS_DIRPD BIT(12) 236 237 #define USBF_REG_USBSSVER 0x1020 238 #define USBF_REG_USBSSCONF 0x1024 239 #define USBF_SYS_DMA_AVAILABLE(_n) (BIT(0) << (_n)) /* _n=0..15 */ 240 #define USBF_SYS_EP_AVAILABLE(_n) (BIT(16) << (_n)) /* _n=0..15 */ 241 242 #define USBF_BASE_DMA_EPN(_n) (0x1110 + (_n) * 0x010) 243 /* EPn DMA registers offsets from Base USBF_BASE_DMA_EPN(n-1). n=1..15*/ 244 #define USBF_REG_DMA_EPN_DCR1 0x00 245 #define USBF_SYS_EPN_REQEN BIT(0) 246 #define USBF_SYS_EPN_DIR0 BIT(1) 247 #define USBF_SYS_EPN_SET_DMACNT(_c) ((_c) << 16) 248 #define USBF_SYS_EPN_GET_DMACNT(_r) (((_r) >> 16) & 0x0FF) 249 250 #define USBF_REG_DMA_EPN_DCR2 0x04 251 #define USBF_SYS_EPN_MPKT(_s) ((_s) << 0) 252 #define USBF_SYS_EPN_LMPKT(_l) ((_l) << 16) 253 254 #define USBF_REG_DMA_EPN_TADR 0x08 255 256 /* USB request */ 257 struct usbf_req { 258 struct usb_request req; 259 struct list_head queue; 260 unsigned int is_zero_sent : 1; 261 unsigned int is_mapped : 1; 262 enum { 263 USBF_XFER_START, 264 USBF_XFER_WAIT_DMA, 265 USBF_XFER_SEND_NULL, 266 USBF_XFER_WAIT_END, 267 USBF_XFER_WAIT_DMA_SHORT, 268 USBF_XFER_WAIT_BRIDGE, 269 } xfer_step; 270 size_t dma_size; 271 }; 272 273 /* USB Endpoint */ 274 struct usbf_ep { 275 struct usb_ep ep; 276 char name[32]; 277 struct list_head queue; 278 unsigned int is_processing : 1; 279 unsigned int is_in : 1; 280 struct usbf_udc *udc; 281 void __iomem *regs; 282 void __iomem *dma_regs; 283 unsigned int id : 8; 284 unsigned int disabled : 1; 285 unsigned int is_wedged : 1; 286 unsigned int delayed_status : 1; 287 u32 status; 288 void (*bridge_on_dma_end)(struct usbf_ep *ep); 289 }; 290 291 enum usbf_ep0state { 292 EP0_IDLE, 293 EP0_IN_DATA_PHASE, 294 EP0_OUT_DATA_PHASE, 295 EP0_OUT_STATUS_START_PHASE, 296 EP0_OUT_STATUS_PHASE, 297 EP0_OUT_STATUS_END_PHASE, 298 EP0_IN_STATUS_START_PHASE, 299 EP0_IN_STATUS_PHASE, 300 EP0_IN_STATUS_END_PHASE, 301 }; 302 303 struct usbf_udc { 304 struct usb_gadget gadget; 305 struct usb_gadget_driver *driver; 306 struct device *dev; 307 void __iomem *regs; 308 spinlock_t lock; 309 bool is_remote_wakeup; 310 bool is_usb_suspended; 311 struct usbf_ep ep[USBF_NUM_ENDPOINTS]; 312 /* for EP0 control messages */ 313 enum usbf_ep0state ep0state; 314 struct usbf_req setup_reply; 315 u8 ep0_buf[USBF_EP0_MAX_PCKT_SIZE]; 316 }; 317 318 struct usbf_ep_info { 319 const char *name; 320 struct usb_ep_caps caps; 321 u16 base_addr; 322 unsigned int is_double : 1; 323 u16 maxpacket_limit; 324 }; 325 326 #define USBF_SINGLE_BUFFER 0 327 #define USBF_DOUBLE_BUFFER 1 328 #define USBF_EP_INFO(_name, _caps, _base_addr, _is_double, _maxpacket_limit) \ 329 { \ 330 .name = _name, \ 331 .caps = _caps, \ 332 .base_addr = _base_addr, \ 333 .is_double = _is_double, \ 334 .maxpacket_limit = _maxpacket_limit, \ 335 } 336 337 /* This table is computed from the recommended values provided in the SOC 338 * datasheet. The buffer type (single/double) and the endpoint type cannot 339 * be changed. The mapping in internal RAM (base_addr and number of words) 340 * for each endpoints depends on the max packet size and the buffer type. 341 */ 342 static const struct usbf_ep_info usbf_ep_info[USBF_NUM_ENDPOINTS] = { 343 /* ep0: buf @0x0000 64 bytes, fixed 32 words */ 344 [0] = USBF_EP_INFO("ep0-ctrl", 345 USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL, 346 USB_EP_CAPS_DIR_ALL), 347 0x0000, USBF_SINGLE_BUFFER, USBF_EP0_MAX_PCKT_SIZE), 348 /* ep1: buf @0x0020, 2 buffers 512 bytes -> (512 * 2 / 4) words */ 349 [1] = USBF_EP_INFO("ep1-bulk", 350 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, 351 USB_EP_CAPS_DIR_ALL), 352 0x0020, USBF_DOUBLE_BUFFER, 512), 353 /* ep2: buf @0x0120, 2 buffers 512 bytes -> (512 * 2 / 4) words */ 354 [2] = USBF_EP_INFO("ep2-bulk", 355 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, 356 USB_EP_CAPS_DIR_ALL), 357 0x0120, USBF_DOUBLE_BUFFER, 512), 358 /* ep3: buf @0x0220, 1 buffer 512 bytes -> (512 * 2 / 4) words */ 359 [3] = USBF_EP_INFO("ep3-bulk", 360 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, 361 USB_EP_CAPS_DIR_ALL), 362 0x0220, USBF_SINGLE_BUFFER, 512), 363 /* ep4: buf @0x02A0, 1 buffer 512 bytes -> (512 * 1 / 4) words */ 364 [4] = USBF_EP_INFO("ep4-bulk", 365 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, 366 USB_EP_CAPS_DIR_ALL), 367 0x02A0, USBF_SINGLE_BUFFER, 512), 368 /* ep5: buf @0x0320, 1 buffer 512 bytes -> (512 * 2 / 4) words */ 369 [5] = USBF_EP_INFO("ep5-bulk", 370 USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, 371 USB_EP_CAPS_DIR_ALL), 372 0x0320, USBF_SINGLE_BUFFER, 512), 373 /* ep6: buf @0x03A0, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */ 374 [6] = USBF_EP_INFO("ep6-int", 375 USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, 376 USB_EP_CAPS_DIR_ALL), 377 0x03A0, USBF_SINGLE_BUFFER, 1024), 378 /* ep7: buf @0x04A0, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */ 379 [7] = USBF_EP_INFO("ep7-int", 380 USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, 381 USB_EP_CAPS_DIR_ALL), 382 0x04A0, USBF_SINGLE_BUFFER, 1024), 383 /* ep8: buf @0x0520, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */ 384 [8] = USBF_EP_INFO("ep8-int", 385 USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, 386 USB_EP_CAPS_DIR_ALL), 387 0x0520, USBF_SINGLE_BUFFER, 1024), 388 /* ep9: buf @0x0620, 1 buffer 1024 bytes -> (1024 * 1 / 4) words */ 389 [9] = USBF_EP_INFO("ep9-int", 390 USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, 391 USB_EP_CAPS_DIR_ALL), 392 0x0620, USBF_SINGLE_BUFFER, 1024), 393 /* ep10: buf @0x0720, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */ 394 [10] = USBF_EP_INFO("ep10-iso", 395 USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, 396 USB_EP_CAPS_DIR_ALL), 397 0x0720, USBF_DOUBLE_BUFFER, 1024), 398 /* ep11: buf @0x0920, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */ 399 [11] = USBF_EP_INFO("ep11-iso", 400 USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, 401 USB_EP_CAPS_DIR_ALL), 402 0x0920, USBF_DOUBLE_BUFFER, 1024), 403 /* ep12: buf @0x0B20, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */ 404 [12] = USBF_EP_INFO("ep12-iso", 405 USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, 406 USB_EP_CAPS_DIR_ALL), 407 0x0B20, USBF_DOUBLE_BUFFER, 1024), 408 /* ep13: buf @0x0D20, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */ 409 [13] = USBF_EP_INFO("ep13-iso", 410 USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, 411 USB_EP_CAPS_DIR_ALL), 412 0x0D20, USBF_DOUBLE_BUFFER, 1024), 413 /* ep14: buf @0x0F20, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */ 414 [14] = USBF_EP_INFO("ep14-iso", 415 USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, 416 USB_EP_CAPS_DIR_ALL), 417 0x0F20, USBF_DOUBLE_BUFFER, 1024), 418 /* ep15: buf @0x1120, 2 buffers 1024 bytes -> (1024 * 2 / 4) words */ 419 [15] = USBF_EP_INFO("ep15-iso", 420 USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, 421 USB_EP_CAPS_DIR_ALL), 422 0x1120, USBF_DOUBLE_BUFFER, 1024), 423 }; 424 425 static inline u32 usbf_reg_readl(struct usbf_udc *udc, uint offset) 426 { 427 return readl(udc->regs + offset); 428 } 429 430 static inline void usbf_reg_writel(struct usbf_udc *udc, uint offset, u32 val) 431 { 432 writel(val, udc->regs + offset); 433 } 434 435 static inline void usbf_reg_bitset(struct usbf_udc *udc, uint offset, u32 set) 436 { 437 u32 tmp; 438 439 tmp = usbf_reg_readl(udc, offset); 440 tmp |= set; 441 usbf_reg_writel(udc, offset, tmp); 442 } 443 444 static inline void usbf_reg_bitclr(struct usbf_udc *udc, uint offset, u32 clr) 445 { 446 u32 tmp; 447 448 tmp = usbf_reg_readl(udc, offset); 449 tmp &= ~clr; 450 usbf_reg_writel(udc, offset, tmp); 451 } 452 453 static inline void usbf_reg_clrset(struct usbf_udc *udc, uint offset, 454 u32 clr, u32 set) 455 { 456 u32 tmp; 457 458 tmp = usbf_reg_readl(udc, offset); 459 tmp &= ~clr; 460 tmp |= set; 461 usbf_reg_writel(udc, offset, tmp); 462 } 463 464 static inline u32 usbf_ep_reg_readl(struct usbf_ep *ep, uint offset) 465 { 466 return readl(ep->regs + offset); 467 } 468 469 static inline void usbf_ep_reg_read_rep(struct usbf_ep *ep, uint offset, 470 void *dst, uint count) 471 { 472 readsl(ep->regs + offset, dst, count); 473 } 474 475 static inline void usbf_ep_reg_writel(struct usbf_ep *ep, uint offset, u32 val) 476 { 477 writel(val, ep->regs + offset); 478 } 479 480 static inline void usbf_ep_reg_write_rep(struct usbf_ep *ep, uint offset, 481 const void *src, uint count) 482 { 483 writesl(ep->regs + offset, src, count); 484 } 485 486 static inline void usbf_ep_reg_bitset(struct usbf_ep *ep, uint offset, u32 set) 487 { 488 u32 tmp; 489 490 tmp = usbf_ep_reg_readl(ep, offset); 491 tmp |= set; 492 usbf_ep_reg_writel(ep, offset, tmp); 493 } 494 495 static inline void usbf_ep_reg_bitclr(struct usbf_ep *ep, uint offset, u32 clr) 496 { 497 u32 tmp; 498 499 tmp = usbf_ep_reg_readl(ep, offset); 500 tmp &= ~clr; 501 usbf_ep_reg_writel(ep, offset, tmp); 502 } 503 504 static inline void usbf_ep_reg_clrset(struct usbf_ep *ep, uint offset, 505 u32 clr, u32 set) 506 { 507 u32 tmp; 508 509 tmp = usbf_ep_reg_readl(ep, offset); 510 tmp &= ~clr; 511 tmp |= set; 512 usbf_ep_reg_writel(ep, offset, tmp); 513 } 514 515 static inline u32 usbf_ep_dma_reg_readl(struct usbf_ep *ep, uint offset) 516 { 517 return readl(ep->dma_regs + offset); 518 } 519 520 static inline void usbf_ep_dma_reg_writel(struct usbf_ep *ep, uint offset, 521 u32 val) 522 { 523 writel(val, ep->dma_regs + offset); 524 } 525 526 static inline void usbf_ep_dma_reg_bitset(struct usbf_ep *ep, uint offset, 527 u32 set) 528 { 529 u32 tmp; 530 531 tmp = usbf_ep_dma_reg_readl(ep, offset); 532 tmp |= set; 533 usbf_ep_dma_reg_writel(ep, offset, tmp); 534 } 535 536 static inline void usbf_ep_dma_reg_bitclr(struct usbf_ep *ep, uint offset, 537 u32 clr) 538 { 539 u32 tmp; 540 541 tmp = usbf_ep_dma_reg_readl(ep, offset); 542 tmp &= ~clr; 543 usbf_ep_dma_reg_writel(ep, offset, tmp); 544 } 545 546 static void usbf_ep0_send_null(struct usbf_ep *ep0, bool is_data1) 547 { 548 u32 set; 549 550 set = USBF_EP0_DEND; 551 if (is_data1) 552 set |= USBF_EP0_PIDCLR; 553 554 usbf_ep_reg_bitset(ep0, USBF_REG_EP0_CONTROL, set); 555 } 556 557 static int usbf_ep0_pio_in(struct usbf_ep *ep0, struct usbf_req *req) 558 { 559 unsigned int left; 560 unsigned int nb; 561 const void *buf; 562 u32 ctrl; 563 u32 last; 564 565 left = req->req.length - req->req.actual; 566 567 if (left == 0) { 568 if (!req->is_zero_sent) { 569 if (req->req.length == 0) { 570 dev_dbg(ep0->udc->dev, "ep0 send null\n"); 571 usbf_ep0_send_null(ep0, false); 572 req->is_zero_sent = 1; 573 return -EINPROGRESS; 574 } 575 if ((req->req.actual % ep0->ep.maxpacket) == 0) { 576 if (req->req.zero) { 577 dev_dbg(ep0->udc->dev, "ep0 send null\n"); 578 usbf_ep0_send_null(ep0, false); 579 req->is_zero_sent = 1; 580 return -EINPROGRESS; 581 } 582 } 583 } 584 return 0; 585 } 586 587 if (left > ep0->ep.maxpacket) 588 left = ep0->ep.maxpacket; 589 590 buf = req->req.buf; 591 buf += req->req.actual; 592 593 nb = left / sizeof(u32); 594 if (nb) { 595 usbf_ep_reg_write_rep(ep0, USBF_REG_EP0_WRITE, buf, nb); 596 buf += (nb * sizeof(u32)); 597 req->req.actual += (nb * sizeof(u32)); 598 left -= (nb * sizeof(u32)); 599 } 600 ctrl = usbf_ep_reg_readl(ep0, USBF_REG_EP0_CONTROL); 601 ctrl &= ~USBF_EP0_DW_MASK; 602 if (left) { 603 memcpy(&last, buf, left); 604 usbf_ep_reg_writel(ep0, USBF_REG_EP0_WRITE, last); 605 ctrl |= USBF_EP0_DW(left); 606 req->req.actual += left; 607 } 608 usbf_ep_reg_writel(ep0, USBF_REG_EP0_CONTROL, ctrl | USBF_EP0_DEND); 609 610 dev_dbg(ep0->udc->dev, "ep0 send %u/%u\n", 611 req->req.actual, req->req.length); 612 613 return -EINPROGRESS; 614 } 615 616 static int usbf_ep0_pio_out(struct usbf_ep *ep0, struct usbf_req *req) 617 { 618 int req_status = 0; 619 unsigned int count; 620 unsigned int recv; 621 unsigned int left; 622 unsigned int nb; 623 void *buf; 624 u32 last; 625 626 if (ep0->status & USBF_EP0_OUT_INT) { 627 recv = usbf_ep_reg_readl(ep0, USBF_REG_EP0_LENGTH) & USBF_EP0_LDATA; 628 count = recv; 629 630 buf = req->req.buf; 631 buf += req->req.actual; 632 633 left = req->req.length - req->req.actual; 634 635 dev_dbg(ep0->udc->dev, "ep0 recv %u, left %u\n", count, left); 636 637 if (left > ep0->ep.maxpacket) 638 left = ep0->ep.maxpacket; 639 640 if (count > left) { 641 req_status = -EOVERFLOW; 642 count = left; 643 } 644 645 if (count) { 646 nb = count / sizeof(u32); 647 if (nb) { 648 usbf_ep_reg_read_rep(ep0, USBF_REG_EP0_READ, 649 buf, nb); 650 buf += (nb * sizeof(u32)); 651 req->req.actual += (nb * sizeof(u32)); 652 count -= (nb * sizeof(u32)); 653 } 654 if (count) { 655 last = usbf_ep_reg_readl(ep0, USBF_REG_EP0_READ); 656 memcpy(buf, &last, count); 657 req->req.actual += count; 658 } 659 } 660 dev_dbg(ep0->udc->dev, "ep0 recv %u/%u\n", 661 req->req.actual, req->req.length); 662 663 if (req_status) { 664 dev_dbg(ep0->udc->dev, "ep0 req.status=%d\n", req_status); 665 req->req.status = req_status; 666 return 0; 667 } 668 669 if (recv < ep0->ep.maxpacket) { 670 dev_dbg(ep0->udc->dev, "ep0 short packet\n"); 671 /* This is a short packet -> It is the end */ 672 req->req.status = 0; 673 return 0; 674 } 675 676 /* The Data stage of a control transfer from an endpoint to the 677 * host is complete when the endpoint does one of the following: 678 * - Has transferred exactly the expected amount of data 679 * - Transfers a packet with a payload size less than 680 * wMaxPacketSize or transfers a zero-length packet 681 */ 682 if (req->req.actual == req->req.length) { 683 req->req.status = 0; 684 return 0; 685 } 686 } 687 688 if (ep0->status & USBF_EP0_OUT_NULL_INT) { 689 /* NULL packet received */ 690 dev_dbg(ep0->udc->dev, "ep0 null packet\n"); 691 if (req->req.actual != req->req.length) { 692 req->req.status = req->req.short_not_ok ? 693 -EREMOTEIO : 0; 694 } else { 695 req->req.status = 0; 696 } 697 return 0; 698 } 699 700 return -EINPROGRESS; 701 } 702 703 static void usbf_ep0_fifo_flush(struct usbf_ep *ep0) 704 { 705 u32 sts; 706 int ret; 707 708 usbf_ep_reg_bitset(ep0, USBF_REG_EP0_CONTROL, USBF_EP0_BCLR); 709 710 ret = readl_poll_timeout_atomic(ep0->regs + USBF_REG_EP0_STATUS, sts, 711 (sts & (USBF_EP0_IN_DATA | USBF_EP0_IN_EMPTY)) == USBF_EP0_IN_EMPTY, 712 0, 10000); 713 if (ret) 714 dev_err(ep0->udc->dev, "ep0 flush fifo timed out\n"); 715 716 } 717 718 static void usbf_epn_send_null(struct usbf_ep *epn) 719 { 720 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, USBF_EPN_DEND); 721 } 722 723 static void usbf_epn_send_residue(struct usbf_ep *epn, const void *buf, 724 unsigned int size) 725 { 726 u32 tmp; 727 728 memcpy(&tmp, buf, size); 729 usbf_ep_reg_writel(epn, USBF_REG_EPN_WRITE, tmp); 730 731 usbf_ep_reg_clrset(epn, USBF_REG_EPN_CONTROL, 732 USBF_EPN_DW_MASK, 733 USBF_EPN_DW(size) | USBF_EPN_DEND); 734 } 735 736 static int usbf_epn_pio_in(struct usbf_ep *epn, struct usbf_req *req) 737 { 738 unsigned int left; 739 unsigned int nb; 740 const void *buf; 741 742 left = req->req.length - req->req.actual; 743 744 if (left == 0) { 745 if (!req->is_zero_sent) { 746 if (req->req.length == 0) { 747 dev_dbg(epn->udc->dev, "ep%u send_null\n", epn->id); 748 usbf_epn_send_null(epn); 749 req->is_zero_sent = 1; 750 return -EINPROGRESS; 751 } 752 if ((req->req.actual % epn->ep.maxpacket) == 0) { 753 if (req->req.zero) { 754 dev_dbg(epn->udc->dev, "ep%u send_null\n", 755 epn->id); 756 usbf_epn_send_null(epn); 757 req->is_zero_sent = 1; 758 return -EINPROGRESS; 759 } 760 } 761 } 762 return 0; 763 } 764 765 if (left > epn->ep.maxpacket) 766 left = epn->ep.maxpacket; 767 768 buf = req->req.buf; 769 buf += req->req.actual; 770 771 nb = left / sizeof(u32); 772 if (nb) { 773 usbf_ep_reg_write_rep(epn, USBF_REG_EPN_WRITE, buf, nb); 774 buf += (nb * sizeof(u32)); 775 req->req.actual += (nb * sizeof(u32)); 776 left -= (nb * sizeof(u32)); 777 } 778 779 if (left) { 780 usbf_epn_send_residue(epn, buf, left); 781 req->req.actual += left; 782 } else { 783 usbf_ep_reg_clrset(epn, USBF_REG_EPN_CONTROL, 784 USBF_EPN_DW_MASK, 785 USBF_EPN_DEND); 786 } 787 788 dev_dbg(epn->udc->dev, "ep%u send %u/%u\n", epn->id, req->req.actual, 789 req->req.length); 790 791 return -EINPROGRESS; 792 } 793 794 static void usbf_epn_enable_in_end_int(struct usbf_ep *epn) 795 { 796 usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_IN_END_EN); 797 } 798 799 static int usbf_epn_dma_in(struct usbf_ep *epn, struct usbf_req *req) 800 { 801 unsigned int left; 802 u32 npkt; 803 u32 lastpkt; 804 int ret; 805 806 if (!IS_ALIGNED((uintptr_t)req->req.buf, 4)) { 807 dev_dbg(epn->udc->dev, "ep%u buf unaligned -> fallback pio\n", 808 epn->id); 809 return usbf_epn_pio_in(epn, req); 810 } 811 812 left = req->req.length - req->req.actual; 813 814 switch (req->xfer_step) { 815 default: 816 case USBF_XFER_START: 817 if (left == 0) { 818 dev_dbg(epn->udc->dev, "ep%u send null\n", epn->id); 819 usbf_epn_send_null(epn); 820 req->xfer_step = USBF_XFER_WAIT_END; 821 break; 822 } 823 if (left < 4) { 824 dev_dbg(epn->udc->dev, "ep%u send residue %u\n", epn->id, 825 left); 826 usbf_epn_send_residue(epn, 827 req->req.buf + req->req.actual, left); 828 req->req.actual += left; 829 req->xfer_step = USBF_XFER_WAIT_END; 830 break; 831 } 832 833 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 1); 834 if (ret < 0) { 835 dev_err(epn->udc->dev, "usb_gadget_map_request failed (%d)\n", 836 ret); 837 return ret; 838 } 839 req->is_mapped = 1; 840 841 npkt = DIV_ROUND_UP(left, epn->ep.maxpacket); 842 lastpkt = (left % epn->ep.maxpacket); 843 if (lastpkt == 0) 844 lastpkt = epn->ep.maxpacket; 845 lastpkt &= ~0x3; /* DMA is done on 32bit units */ 846 847 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR2, 848 USBF_SYS_EPN_MPKT(epn->ep.maxpacket) | USBF_SYS_EPN_LMPKT(lastpkt)); 849 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_TADR, 850 req->req.dma); 851 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1, 852 USBF_SYS_EPN_SET_DMACNT(npkt)); 853 usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1, 854 USBF_SYS_EPN_REQEN); 855 856 usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, USBF_EPN_SET_DMACNT(npkt)); 857 858 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO); 859 860 /* The end of DMA transfer at the USBF level needs to be handle 861 * after the detection of the end of DMA transfer at the brige 862 * level. 863 * To force this sequence, EPN_IN_END_EN will be set by the 864 * detection of the end of transfer at bridge level (ie. bridge 865 * interrupt). 866 */ 867 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, 868 USBF_EPN_IN_EN | USBF_EPN_IN_END_EN); 869 epn->bridge_on_dma_end = usbf_epn_enable_in_end_int; 870 871 /* Clear any pending IN_END interrupt */ 872 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(u32)USBF_EPN_IN_END_INT); 873 874 usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL, 875 USBF_EPN_BURST_SET | USBF_EPN_DMAMODE0); 876 usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL, 877 USBF_EPN_DMA_EN); 878 879 req->dma_size = (npkt - 1) * epn->ep.maxpacket + lastpkt; 880 881 dev_dbg(epn->udc->dev, "ep%u dma xfer %zu\n", epn->id, 882 req->dma_size); 883 884 req->xfer_step = USBF_XFER_WAIT_DMA; 885 break; 886 887 case USBF_XFER_WAIT_DMA: 888 if (!(epn->status & USBF_EPN_IN_END_INT)) { 889 dev_dbg(epn->udc->dev, "ep%u dma not done\n", epn->id); 890 break; 891 } 892 dev_dbg(epn->udc->dev, "ep%u dma done\n", epn->id); 893 894 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 1); 895 req->is_mapped = 0; 896 897 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO); 898 899 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, 900 USBF_EPN_IN_END_EN, 901 USBF_EPN_IN_EN); 902 903 req->req.actual += req->dma_size; 904 905 left = req->req.length - req->req.actual; 906 if (left) { 907 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(u32)USBF_EPN_IN_INT); 908 909 dev_dbg(epn->udc->dev, "ep%u send residue %u\n", epn->id, 910 left); 911 usbf_epn_send_residue(epn, 912 req->req.buf + req->req.actual, left); 913 req->req.actual += left; 914 req->xfer_step = USBF_XFER_WAIT_END; 915 break; 916 } 917 918 if (req->req.actual % epn->ep.maxpacket) { 919 /* last packet was a short packet. Tell the hardware to 920 * send it right now. 921 */ 922 dev_dbg(epn->udc->dev, "ep%u send short\n", epn->id); 923 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, 924 ~(u32)USBF_EPN_IN_INT); 925 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, 926 USBF_EPN_DEND); 927 928 req->xfer_step = USBF_XFER_WAIT_END; 929 break; 930 } 931 932 /* Last packet size was a maxpacket size 933 * Send null packet if needed 934 */ 935 if (req->req.zero) { 936 req->xfer_step = USBF_XFER_SEND_NULL; 937 break; 938 } 939 940 /* No more action to do. Wait for the end of the USB transfer */ 941 req->xfer_step = USBF_XFER_WAIT_END; 942 break; 943 944 case USBF_XFER_SEND_NULL: 945 dev_dbg(epn->udc->dev, "ep%u send null\n", epn->id); 946 usbf_epn_send_null(epn); 947 req->xfer_step = USBF_XFER_WAIT_END; 948 break; 949 950 case USBF_XFER_WAIT_END: 951 if (!(epn->status & USBF_EPN_IN_INT)) { 952 dev_dbg(epn->udc->dev, "ep%u end not done\n", epn->id); 953 break; 954 } 955 dev_dbg(epn->udc->dev, "ep%u send done %u/%u\n", epn->id, 956 req->req.actual, req->req.length); 957 req->xfer_step = USBF_XFER_START; 958 return 0; 959 } 960 961 return -EINPROGRESS; 962 } 963 964 static void usbf_epn_recv_residue(struct usbf_ep *epn, void *buf, 965 unsigned int size) 966 { 967 u32 last; 968 969 last = usbf_ep_reg_readl(epn, USBF_REG_EPN_READ); 970 memcpy(buf, &last, size); 971 } 972 973 static int usbf_epn_pio_out(struct usbf_ep *epn, struct usbf_req *req) 974 { 975 int req_status = 0; 976 unsigned int count; 977 unsigned int recv; 978 unsigned int left; 979 unsigned int nb; 980 void *buf; 981 982 if (epn->status & USBF_EPN_OUT_INT) { 983 recv = USBF_EPN_GET_LDATA( 984 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); 985 count = recv; 986 987 buf = req->req.buf; 988 buf += req->req.actual; 989 990 left = req->req.length - req->req.actual; 991 992 dev_dbg(epn->udc->dev, "ep%u recv %u, left %u, mpkt %u\n", epn->id, 993 recv, left, epn->ep.maxpacket); 994 995 if (left > epn->ep.maxpacket) 996 left = epn->ep.maxpacket; 997 998 if (count > left) { 999 req_status = -EOVERFLOW; 1000 count = left; 1001 } 1002 1003 if (count) { 1004 nb = count / sizeof(u32); 1005 if (nb) { 1006 usbf_ep_reg_read_rep(epn, USBF_REG_EPN_READ, 1007 buf, nb); 1008 buf += (nb * sizeof(u32)); 1009 req->req.actual += (nb * sizeof(u32)); 1010 count -= (nb * sizeof(u32)); 1011 } 1012 if (count) { 1013 usbf_epn_recv_residue(epn, buf, count); 1014 req->req.actual += count; 1015 } 1016 } 1017 dev_dbg(epn->udc->dev, "ep%u recv %u/%u\n", epn->id, 1018 req->req.actual, req->req.length); 1019 1020 if (req_status) { 1021 dev_dbg(epn->udc->dev, "ep%u req.status=%d\n", epn->id, 1022 req_status); 1023 req->req.status = req_status; 1024 return 0; 1025 } 1026 1027 if (recv < epn->ep.maxpacket) { 1028 dev_dbg(epn->udc->dev, "ep%u short packet\n", epn->id); 1029 /* This is a short packet -> It is the end */ 1030 req->req.status = 0; 1031 return 0; 1032 } 1033 1034 /* Request full -> complete */ 1035 if (req->req.actual == req->req.length) { 1036 req->req.status = 0; 1037 return 0; 1038 } 1039 } 1040 1041 if (epn->status & USBF_EPN_OUT_NULL_INT) { 1042 /* NULL packet received */ 1043 dev_dbg(epn->udc->dev, "ep%u null packet\n", epn->id); 1044 if (req->req.actual != req->req.length) { 1045 req->req.status = req->req.short_not_ok ? 1046 -EREMOTEIO : 0; 1047 } else { 1048 req->req.status = 0; 1049 } 1050 return 0; 1051 } 1052 1053 return -EINPROGRESS; 1054 } 1055 1056 static void usbf_epn_enable_out_end_int(struct usbf_ep *epn) 1057 { 1058 usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_OUT_END_EN); 1059 } 1060 1061 static void usbf_epn_process_queue(struct usbf_ep *epn); 1062 1063 static void usbf_epn_dma_out_send_dma(struct usbf_ep *epn, dma_addr_t addr, u32 npkt, bool is_short) 1064 { 1065 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR2, USBF_SYS_EPN_MPKT(epn->ep.maxpacket)); 1066 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_TADR, addr); 1067 1068 if (is_short) { 1069 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1, 1070 USBF_SYS_EPN_SET_DMACNT(1) | USBF_SYS_EPN_DIR0); 1071 usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1, 1072 USBF_SYS_EPN_REQEN); 1073 1074 usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, 1075 USBF_EPN_SET_DMACNT(0)); 1076 1077 /* The end of DMA transfer at the USBF level needs to be handled 1078 * after the detection of the end of DMA transfer at the brige 1079 * level. 1080 * To force this sequence, enabling the OUT_END interrupt will 1081 * be donee by the detection of the end of transfer at bridge 1082 * level (ie. bridge interrupt). 1083 */ 1084 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, 1085 USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN | USBF_EPN_OUT_END_EN); 1086 epn->bridge_on_dma_end = usbf_epn_enable_out_end_int; 1087 1088 /* Clear any pending OUT_END interrupt */ 1089 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, 1090 ~(u32)USBF_EPN_OUT_END_INT); 1091 1092 usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL, 1093 USBF_EPN_STOP_MODE | USBF_EPN_STOP_SET | USBF_EPN_DMAMODE0); 1094 usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL, 1095 USBF_EPN_DMA_EN); 1096 return; 1097 } 1098 1099 usbf_ep_dma_reg_writel(epn, USBF_REG_DMA_EPN_DCR1, 1100 USBF_SYS_EPN_SET_DMACNT(npkt) | USBF_SYS_EPN_DIR0); 1101 usbf_ep_dma_reg_bitset(epn, USBF_REG_DMA_EPN_DCR1, 1102 USBF_SYS_EPN_REQEN); 1103 1104 usbf_ep_reg_writel(epn, USBF_REG_EPN_LEN_DCNT, 1105 USBF_EPN_SET_DMACNT(npkt)); 1106 1107 /* Here, the bridge may or may not generate an interrupt to signal the 1108 * end of DMA transfer. 1109 * Keep only OUT_END interrupt and let handle the bridge later during 1110 * the OUT_END processing. 1111 */ 1112 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, 1113 USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN, 1114 USBF_EPN_OUT_END_EN); 1115 1116 /* Disable bridge interrupt. It will be renabled later */ 1117 usbf_reg_bitclr(epn->udc, USBF_REG_AHBBINTEN, 1118 USBF_SYS_DMA_ENDINTEN_EPN(epn->id)); 1119 1120 /* Clear any pending DMA_END interrupt at bridge level */ 1121 usbf_reg_writel(epn->udc, USBF_REG_AHBBINT, 1122 USBF_SYS_DMA_ENDINT_EPN(epn->id)); 1123 1124 /* Clear any pending OUT_END interrupt */ 1125 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, 1126 ~(u32)USBF_EPN_OUT_END_INT); 1127 1128 usbf_ep_reg_writel(epn, USBF_REG_EPN_DMA_CTRL, 1129 USBF_EPN_STOP_MODE | USBF_EPN_STOP_SET | USBF_EPN_DMAMODE0 | USBF_EPN_BURST_SET); 1130 usbf_ep_reg_bitset(epn, USBF_REG_EPN_DMA_CTRL, 1131 USBF_EPN_DMA_EN); 1132 } 1133 1134 static size_t usbf_epn_dma_out_complete_dma(struct usbf_ep *epn, bool is_short) 1135 { 1136 u32 dmacnt; 1137 u32 tmp; 1138 int ret; 1139 1140 /* Restore interrupt mask */ 1141 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, 1142 USBF_EPN_OUT_END_EN, 1143 USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN); 1144 1145 if (is_short) { 1146 /* Nothing more to do when the DMA was for a short packet */ 1147 return 0; 1148 } 1149 1150 /* Enable the bridge interrupt */ 1151 usbf_reg_bitset(epn->udc, USBF_REG_AHBBINTEN, 1152 USBF_SYS_DMA_ENDINTEN_EPN(epn->id)); 1153 1154 tmp = usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT); 1155 dmacnt = USBF_EPN_GET_DMACNT(tmp); 1156 1157 if (dmacnt) { 1158 /* Some packet were not received (halted by a short or a null 1159 * packet. 1160 * The bridge never raises an interrupt in this case. 1161 * Wait for the end of transfer at bridge level 1162 */ 1163 ret = readl_poll_timeout_atomic( 1164 epn->dma_regs + USBF_REG_DMA_EPN_DCR1, 1165 tmp, (USBF_SYS_EPN_GET_DMACNT(tmp) == dmacnt), 1166 0, 10000); 1167 if (ret) { 1168 dev_err(epn->udc->dev, "ep%u wait bridge timed out\n", 1169 epn->id); 1170 } 1171 1172 usbf_ep_dma_reg_bitclr(epn, USBF_REG_DMA_EPN_DCR1, 1173 USBF_SYS_EPN_REQEN); 1174 1175 /* The dmacnt value tells how many packet were not transferred 1176 * from the maximum number of packet we set for the DMA transfer. 1177 * Compute the left DMA size based on this value. 1178 */ 1179 return dmacnt * epn->ep.maxpacket; 1180 } 1181 1182 return 0; 1183 } 1184 1185 static int usbf_epn_dma_out(struct usbf_ep *epn, struct usbf_req *req) 1186 { 1187 unsigned int dma_left; 1188 unsigned int count; 1189 unsigned int recv; 1190 unsigned int left; 1191 u32 npkt; 1192 int ret; 1193 1194 if (!IS_ALIGNED((uintptr_t)req->req.buf, 4)) { 1195 dev_dbg(epn->udc->dev, "ep%u buf unaligned -> fallback pio\n", 1196 epn->id); 1197 return usbf_epn_pio_out(epn, req); 1198 } 1199 1200 switch (req->xfer_step) { 1201 default: 1202 case USBF_XFER_START: 1203 if (epn->status & USBF_EPN_OUT_NULL_INT) { 1204 dev_dbg(epn->udc->dev, "ep%u null packet\n", epn->id); 1205 if (req->req.actual != req->req.length) { 1206 req->req.status = req->req.short_not_ok ? 1207 -EREMOTEIO : 0; 1208 } else { 1209 req->req.status = 0; 1210 } 1211 return 0; 1212 } 1213 1214 if (!(epn->status & USBF_EPN_OUT_INT)) { 1215 dev_dbg(epn->udc->dev, "ep%u OUT_INT not set -> spurious\n", 1216 epn->id); 1217 break; 1218 } 1219 1220 recv = USBF_EPN_GET_LDATA( 1221 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); 1222 if (!recv) { 1223 dev_dbg(epn->udc->dev, "ep%u recv = 0 -> spurious\n", 1224 epn->id); 1225 break; 1226 } 1227 1228 left = req->req.length - req->req.actual; 1229 1230 dev_dbg(epn->udc->dev, "ep%u recv %u, left %u, mpkt %u\n", epn->id, 1231 recv, left, epn->ep.maxpacket); 1232 1233 if (recv > left) { 1234 dev_err(epn->udc->dev, "ep%u overflow (%u/%u)\n", 1235 epn->id, recv, left); 1236 req->req.status = -EOVERFLOW; 1237 return -EOVERFLOW; 1238 } 1239 1240 if (recv < epn->ep.maxpacket) { 1241 /* Short packet received */ 1242 dev_dbg(epn->udc->dev, "ep%u short packet\n", epn->id); 1243 if (recv <= 3) { 1244 usbf_epn_recv_residue(epn, 1245 req->req.buf + req->req.actual, recv); 1246 req->req.actual += recv; 1247 1248 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", 1249 epn->id, req->req.actual, req->req.length); 1250 1251 req->xfer_step = USBF_XFER_START; 1252 return 0; 1253 } 1254 1255 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0); 1256 if (ret < 0) { 1257 dev_err(epn->udc->dev, "map request failed (%d)\n", 1258 ret); 1259 return ret; 1260 } 1261 req->is_mapped = 1; 1262 1263 usbf_epn_dma_out_send_dma(epn, 1264 req->req.dma + req->req.actual, 1265 1, true); 1266 req->dma_size = recv & ~0x3; 1267 1268 dev_dbg(epn->udc->dev, "ep%u dma short xfer %zu\n", epn->id, 1269 req->dma_size); 1270 1271 req->xfer_step = USBF_XFER_WAIT_DMA_SHORT; 1272 break; 1273 } 1274 1275 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0); 1276 if (ret < 0) { 1277 dev_err(epn->udc->dev, "map request failed (%d)\n", 1278 ret); 1279 return ret; 1280 } 1281 req->is_mapped = 1; 1282 1283 /* Use the maximum DMA size according to the request buffer. 1284 * We will adjust the received size later at the end of the DMA 1285 * transfer with the left size computed from 1286 * usbf_epn_dma_out_complete_dma(). 1287 */ 1288 npkt = left / epn->ep.maxpacket; 1289 usbf_epn_dma_out_send_dma(epn, 1290 req->req.dma + req->req.actual, 1291 npkt, false); 1292 req->dma_size = npkt * epn->ep.maxpacket; 1293 1294 dev_dbg(epn->udc->dev, "ep%u dma xfer %zu (%u)\n", epn->id, 1295 req->dma_size, npkt); 1296 1297 req->xfer_step = USBF_XFER_WAIT_DMA; 1298 break; 1299 1300 case USBF_XFER_WAIT_DMA_SHORT: 1301 if (!(epn->status & USBF_EPN_OUT_END_INT)) { 1302 dev_dbg(epn->udc->dev, "ep%u dma short not done\n", epn->id); 1303 break; 1304 } 1305 dev_dbg(epn->udc->dev, "ep%u dma short done\n", epn->id); 1306 1307 usbf_epn_dma_out_complete_dma(epn, true); 1308 1309 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); 1310 req->is_mapped = 0; 1311 1312 req->req.actual += req->dma_size; 1313 1314 recv = USBF_EPN_GET_LDATA( 1315 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); 1316 1317 count = recv & 0x3; 1318 if (count) { 1319 dev_dbg(epn->udc->dev, "ep%u recv residue %u\n", epn->id, 1320 count); 1321 usbf_epn_recv_residue(epn, 1322 req->req.buf + req->req.actual, count); 1323 req->req.actual += count; 1324 } 1325 1326 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id, 1327 req->req.actual, req->req.length); 1328 1329 req->xfer_step = USBF_XFER_START; 1330 return 0; 1331 1332 case USBF_XFER_WAIT_DMA: 1333 if (!(epn->status & USBF_EPN_OUT_END_INT)) { 1334 dev_dbg(epn->udc->dev, "ep%u dma not done\n", epn->id); 1335 break; 1336 } 1337 dev_dbg(epn->udc->dev, "ep%u dma done\n", epn->id); 1338 1339 dma_left = usbf_epn_dma_out_complete_dma(epn, false); 1340 if (dma_left) { 1341 /* Adjust the final DMA size with */ 1342 count = req->dma_size - dma_left; 1343 1344 dev_dbg(epn->udc->dev, "ep%u dma xfer done %u\n", epn->id, 1345 count); 1346 1347 req->req.actual += count; 1348 1349 if (epn->status & USBF_EPN_OUT_NULL_INT) { 1350 /* DMA was stopped by a null packet reception */ 1351 dev_dbg(epn->udc->dev, "ep%u dma stopped by null pckt\n", 1352 epn->id); 1353 usb_gadget_unmap_request(&epn->udc->gadget, 1354 &req->req, 0); 1355 req->is_mapped = 0; 1356 1357 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, 1358 ~(u32)USBF_EPN_OUT_NULL_INT); 1359 1360 if (req->req.actual != req->req.length) { 1361 req->req.status = req->req.short_not_ok ? 1362 -EREMOTEIO : 0; 1363 } else { 1364 req->req.status = 0; 1365 } 1366 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", 1367 epn->id, req->req.actual, req->req.length); 1368 req->xfer_step = USBF_XFER_START; 1369 return 0; 1370 } 1371 1372 recv = USBF_EPN_GET_LDATA( 1373 usbf_ep_reg_readl(epn, USBF_REG_EPN_LEN_DCNT)); 1374 left = req->req.length - req->req.actual; 1375 if (recv > left) { 1376 dev_err(epn->udc->dev, 1377 "ep%u overflow (%u/%u)\n", epn->id, 1378 recv, left); 1379 req->req.status = -EOVERFLOW; 1380 usb_gadget_unmap_request(&epn->udc->gadget, 1381 &req->req, 0); 1382 req->is_mapped = 0; 1383 1384 req->xfer_step = USBF_XFER_START; 1385 return -EOVERFLOW; 1386 } 1387 1388 if (recv > 3) { 1389 usbf_epn_dma_out_send_dma(epn, 1390 req->req.dma + req->req.actual, 1391 1, true); 1392 req->dma_size = recv & ~0x3; 1393 1394 dev_dbg(epn->udc->dev, "ep%u dma short xfer %zu\n", 1395 epn->id, req->dma_size); 1396 1397 req->xfer_step = USBF_XFER_WAIT_DMA_SHORT; 1398 break; 1399 } 1400 1401 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); 1402 req->is_mapped = 0; 1403 1404 count = recv & 0x3; 1405 if (count) { 1406 dev_dbg(epn->udc->dev, "ep%u recv residue %u\n", 1407 epn->id, count); 1408 usbf_epn_recv_residue(epn, 1409 req->req.buf + req->req.actual, count); 1410 req->req.actual += count; 1411 } 1412 1413 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id, 1414 req->req.actual, req->req.length); 1415 1416 req->xfer_step = USBF_XFER_START; 1417 return 0; 1418 } 1419 1420 /* Process queue at bridge interrupt only */ 1421 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, 1422 USBF_EPN_OUT_END_EN | USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN); 1423 epn->status = 0; 1424 epn->bridge_on_dma_end = usbf_epn_process_queue; 1425 1426 req->xfer_step = USBF_XFER_WAIT_BRIDGE; 1427 break; 1428 1429 case USBF_XFER_WAIT_BRIDGE: 1430 dev_dbg(epn->udc->dev, "ep%u bridge transfers done\n", epn->id); 1431 1432 /* Restore interrupt mask */ 1433 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, 1434 USBF_EPN_OUT_END_EN, 1435 USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN); 1436 1437 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); 1438 req->is_mapped = 0; 1439 1440 req->req.actual += req->dma_size; 1441 1442 req->xfer_step = USBF_XFER_START; 1443 left = req->req.length - req->req.actual; 1444 if (!left) { 1445 /* No more data can be added to the buffer */ 1446 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u\n", epn->id, 1447 req->req.actual, req->req.length); 1448 return 0; 1449 } 1450 dev_dbg(epn->udc->dev, "ep%u recv done %u/%u, wait more data\n", 1451 epn->id, req->req.actual, req->req.length); 1452 break; 1453 } 1454 1455 return -EINPROGRESS; 1456 } 1457 1458 static void usbf_epn_dma_stop(struct usbf_ep *epn) 1459 { 1460 usbf_ep_dma_reg_bitclr(epn, USBF_REG_DMA_EPN_DCR1, USBF_SYS_EPN_REQEN); 1461 1462 /* In the datasheet: 1463 * If EP[m]_REQEN = 0b is set during DMA transfer, AHB-EPC stops DMA 1464 * after 1 packet transfer completed. 1465 * Therefore, wait sufficient time for ensuring DMA transfer 1466 * completion. The WAIT time depends on the system, especially AHB 1467 * bus activity 1468 * So arbitrary 10ms would be sufficient. 1469 */ 1470 mdelay(10); 1471 1472 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_DMA_CTRL, USBF_EPN_DMA_EN); 1473 } 1474 1475 static void usbf_epn_dma_abort(struct usbf_ep *epn, struct usbf_req *req) 1476 { 1477 dev_dbg(epn->udc->dev, "ep%u %s dma abort\n", epn->id, 1478 epn->is_in ? "in" : "out"); 1479 1480 epn->bridge_on_dma_end = NULL; 1481 1482 usbf_epn_dma_stop(epn); 1483 1484 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 1485 epn->is_in ? 1 : 0); 1486 req->is_mapped = 0; 1487 1488 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_AUTO); 1489 1490 if (epn->is_in) { 1491 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, 1492 USBF_EPN_IN_END_EN, 1493 USBF_EPN_IN_EN); 1494 } else { 1495 usbf_ep_reg_clrset(epn, USBF_REG_EPN_INT_ENA, 1496 USBF_EPN_OUT_END_EN, 1497 USBF_EPN_OUT_EN | USBF_EPN_OUT_NULL_EN); 1498 } 1499 1500 /* As dma is stopped, be sure that no DMA interrupt are pending */ 1501 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, 1502 USBF_EPN_IN_END_INT | USBF_EPN_OUT_END_INT); 1503 1504 usbf_reg_writel(epn->udc, USBF_REG_AHBBINT, USBF_SYS_DMA_ENDINT_EPN(epn->id)); 1505 1506 /* Enable DMA interrupt the bridge level */ 1507 usbf_reg_bitset(epn->udc, USBF_REG_AHBBINTEN, 1508 USBF_SYS_DMA_ENDINTEN_EPN(epn->id)); 1509 1510 /* Reset transfer step */ 1511 req->xfer_step = USBF_XFER_START; 1512 } 1513 1514 static void usbf_epn_fifo_flush(struct usbf_ep *epn) 1515 { 1516 u32 ctrl; 1517 u32 sts; 1518 int ret; 1519 1520 dev_dbg(epn->udc->dev, "ep%u %s fifo flush\n", epn->id, 1521 epn->is_in ? "in" : "out"); 1522 1523 ctrl = usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL); 1524 usbf_ep_reg_writel(epn, USBF_REG_EPN_CONTROL, ctrl | USBF_EPN_BCLR); 1525 1526 if (ctrl & USBF_EPN_DIR0) 1527 return; 1528 1529 ret = readl_poll_timeout_atomic(epn->regs + USBF_REG_EPN_STATUS, sts, 1530 (sts & (USBF_EPN_IN_DATA | USBF_EPN_IN_EMPTY)) == USBF_EPN_IN_EMPTY, 1531 0, 10000); 1532 if (ret) 1533 dev_err(epn->udc->dev, "ep%u flush fifo timed out\n", epn->id); 1534 } 1535 1536 static void usbf_ep_req_done(struct usbf_ep *ep, struct usbf_req *req, 1537 int status) 1538 { 1539 list_del_init(&req->queue); 1540 1541 if (status) { 1542 req->req.status = status; 1543 } else { 1544 if (req->req.status == -EINPROGRESS) 1545 req->req.status = status; 1546 } 1547 1548 dev_dbg(ep->udc->dev, "ep%u %s req done length %u/%u, status=%d\n", ep->id, 1549 ep->is_in ? "in" : "out", 1550 req->req.actual, req->req.length, req->req.status); 1551 1552 if (req->is_mapped) 1553 usbf_epn_dma_abort(ep, req); 1554 1555 spin_unlock(&ep->udc->lock); 1556 usb_gadget_giveback_request(&ep->ep, &req->req); 1557 spin_lock(&ep->udc->lock); 1558 } 1559 1560 static void usbf_ep_nuke(struct usbf_ep *ep, int status) 1561 { 1562 struct usbf_req *req; 1563 1564 dev_dbg(ep->udc->dev, "ep%u %s nuke status %d\n", ep->id, 1565 ep->is_in ? "in" : "out", 1566 status); 1567 1568 while (!list_empty(&ep->queue)) { 1569 req = list_first_entry(&ep->queue, struct usbf_req, queue); 1570 usbf_ep_req_done(ep, req, status); 1571 } 1572 1573 if (ep->id == 0) 1574 usbf_ep0_fifo_flush(ep); 1575 else 1576 usbf_epn_fifo_flush(ep); 1577 } 1578 1579 static bool usbf_ep_is_stalled(struct usbf_ep *ep) 1580 { 1581 u32 ctrl; 1582 1583 if (ep->id == 0) { 1584 ctrl = usbf_ep_reg_readl(ep, USBF_REG_EP0_CONTROL); 1585 return (ctrl & USBF_EP0_STL) ? true : false; 1586 } 1587 1588 ctrl = usbf_ep_reg_readl(ep, USBF_REG_EPN_CONTROL); 1589 if (ep->is_in) 1590 return (ctrl & USBF_EPN_ISTL) ? true : false; 1591 1592 return (ctrl & USBF_EPN_OSTL) ? true : false; 1593 } 1594 1595 static int usbf_epn_start_queue(struct usbf_ep *epn) 1596 { 1597 struct usbf_req *req; 1598 int ret; 1599 1600 if (usbf_ep_is_stalled(epn)) 1601 return 0; 1602 1603 req = list_first_entry_or_null(&epn->queue, struct usbf_req, queue); 1604 1605 if (epn->is_in) { 1606 if (req && !epn->is_processing) { 1607 ret = epn->dma_regs ? 1608 usbf_epn_dma_in(epn, req) : 1609 usbf_epn_pio_in(epn, req); 1610 if (ret != -EINPROGRESS) { 1611 dev_err(epn->udc->dev, 1612 "queued next request not in progress\n"); 1613 /* The request cannot be completed (ie 1614 * ret == 0) on the first call. 1615 * stall and nuke the endpoint 1616 */ 1617 return ret ? ret : -EIO; 1618 } 1619 } 1620 } else { 1621 if (req) { 1622 /* Clear ONAK to accept OUT tokens */ 1623 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, 1624 USBF_EPN_ONAK); 1625 1626 /* Enable interrupts */ 1627 usbf_ep_reg_bitset(epn, USBF_REG_EPN_INT_ENA, 1628 USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT); 1629 } else { 1630 /* Disable incoming data and interrupt. 1631 * They will be enable on next usb_eb_queue call 1632 */ 1633 usbf_ep_reg_bitset(epn, USBF_REG_EPN_CONTROL, 1634 USBF_EPN_ONAK); 1635 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_INT_ENA, 1636 USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT); 1637 } 1638 } 1639 return 0; 1640 } 1641 1642 static int usbf_ep_process_queue(struct usbf_ep *ep) 1643 { 1644 int (*usbf_ep_xfer)(struct usbf_ep *ep, struct usbf_req *req); 1645 struct usbf_req *req; 1646 int is_processing; 1647 int ret; 1648 1649 if (ep->is_in) { 1650 usbf_ep_xfer = usbf_ep0_pio_in; 1651 if (ep->id) { 1652 usbf_ep_xfer = ep->dma_regs ? 1653 usbf_epn_dma_in : usbf_epn_pio_in; 1654 } 1655 } else { 1656 usbf_ep_xfer = usbf_ep0_pio_out; 1657 if (ep->id) { 1658 usbf_ep_xfer = ep->dma_regs ? 1659 usbf_epn_dma_out : usbf_epn_pio_out; 1660 } 1661 } 1662 1663 req = list_first_entry_or_null(&ep->queue, struct usbf_req, queue); 1664 if (!req) { 1665 dev_err(ep->udc->dev, 1666 "no request available for ep%u %s process\n", ep->id, 1667 ep->is_in ? "in" : "out"); 1668 return -ENOENT; 1669 } 1670 1671 do { 1672 /* Were going to read the FIFO for this current request. 1673 * NAK any other incoming data to avoid a race condition if no 1674 * more request are available. 1675 */ 1676 if (!ep->is_in && ep->id != 0) { 1677 usbf_ep_reg_bitset(ep, USBF_REG_EPN_CONTROL, 1678 USBF_EPN_ONAK); 1679 } 1680 1681 ret = usbf_ep_xfer(ep, req); 1682 if (ret == -EINPROGRESS) { 1683 if (!ep->is_in && ep->id != 0) { 1684 /* The current request needs more data. 1685 * Allow incoming data 1686 */ 1687 usbf_ep_reg_bitclr(ep, USBF_REG_EPN_CONTROL, 1688 USBF_EPN_ONAK); 1689 } 1690 return ret; 1691 } 1692 1693 is_processing = ep->is_processing; 1694 ep->is_processing = 1; 1695 usbf_ep_req_done(ep, req, ret); 1696 ep->is_processing = is_processing; 1697 1698 if (ret) { 1699 /* An error was detected during the request transfer. 1700 * Any pending DMA transfers were aborted by the 1701 * usbf_ep_req_done() call. 1702 * It's time to flush the fifo 1703 */ 1704 if (ep->id == 0) 1705 usbf_ep0_fifo_flush(ep); 1706 else 1707 usbf_epn_fifo_flush(ep); 1708 } 1709 1710 req = list_first_entry_or_null(&ep->queue, struct usbf_req, 1711 queue); 1712 1713 if (ep->is_in) 1714 continue; 1715 1716 if (ep->id != 0) { 1717 if (req) { 1718 /* An other request is available. 1719 * Allow incoming data 1720 */ 1721 usbf_ep_reg_bitclr(ep, USBF_REG_EPN_CONTROL, 1722 USBF_EPN_ONAK); 1723 } else { 1724 /* No request queued. Disable interrupts. 1725 * They will be enabled on usb_ep_queue 1726 */ 1727 usbf_ep_reg_bitclr(ep, USBF_REG_EPN_INT_ENA, 1728 USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT); 1729 } 1730 } 1731 /* Do not recall usbf_ep_xfer() */ 1732 return req ? -EINPROGRESS : 0; 1733 1734 } while (req); 1735 1736 return 0; 1737 } 1738 1739 static void usbf_ep_stall(struct usbf_ep *ep, bool stall) 1740 { 1741 struct usbf_req *first; 1742 1743 dev_dbg(ep->udc->dev, "ep%u %s %s\n", ep->id, 1744 ep->is_in ? "in" : "out", 1745 stall ? "stall" : "unstall"); 1746 1747 if (ep->id == 0) { 1748 if (stall) 1749 usbf_ep_reg_bitset(ep, USBF_REG_EP0_CONTROL, USBF_EP0_STL); 1750 else 1751 usbf_ep_reg_bitclr(ep, USBF_REG_EP0_CONTROL, USBF_EP0_STL); 1752 return; 1753 } 1754 1755 if (stall) { 1756 if (ep->is_in) 1757 usbf_ep_reg_bitset(ep, USBF_REG_EPN_CONTROL, 1758 USBF_EPN_ISTL); 1759 else 1760 usbf_ep_reg_bitset(ep, USBF_REG_EPN_CONTROL, 1761 USBF_EPN_OSTL | USBF_EPN_OSTL_EN); 1762 } else { 1763 first = list_first_entry_or_null(&ep->queue, struct usbf_req, queue); 1764 if (first && first->is_mapped) { 1765 /* This can appear if the host halts an endpoint using 1766 * SET_FEATURE and then un-halts the endpoint 1767 */ 1768 usbf_epn_dma_abort(ep, first); 1769 } 1770 usbf_epn_fifo_flush(ep); 1771 if (ep->is_in) { 1772 usbf_ep_reg_clrset(ep, USBF_REG_EPN_CONTROL, 1773 USBF_EPN_ISTL, 1774 USBF_EPN_IPIDCLR); 1775 } else { 1776 usbf_ep_reg_clrset(ep, USBF_REG_EPN_CONTROL, 1777 USBF_EPN_OSTL, 1778 USBF_EPN_OSTL_EN | USBF_EPN_OPIDCLR); 1779 } 1780 usbf_epn_start_queue(ep); 1781 } 1782 } 1783 1784 static void usbf_ep0_enable(struct usbf_ep *ep0) 1785 { 1786 usbf_ep_reg_writel(ep0, USBF_REG_EP0_CONTROL, USBF_EP0_INAK_EN | USBF_EP0_BCLR); 1787 1788 usbf_ep_reg_writel(ep0, USBF_REG_EP0_INT_ENA, 1789 USBF_EP0_SETUP_EN | USBF_EP0_STG_START_EN | USBF_EP0_STG_END_EN | 1790 USBF_EP0_OUT_EN | USBF_EP0_OUT_NULL_EN | USBF_EP0_IN_EN); 1791 1792 ep0->udc->ep0state = EP0_IDLE; 1793 ep0->disabled = 0; 1794 1795 /* enable interrupts for the ep0 */ 1796 usbf_reg_bitset(ep0->udc, USBF_REG_USB_INT_ENA, USBF_USB_EPN_EN(0)); 1797 } 1798 1799 static int usbf_epn_enable(struct usbf_ep *epn) 1800 { 1801 u32 base_addr; 1802 u32 ctrl; 1803 1804 base_addr = usbf_ep_info[epn->id].base_addr; 1805 usbf_ep_reg_writel(epn, USBF_REG_EPN_PCKT_ADRS, 1806 USBF_EPN_BASEAD(base_addr) | USBF_EPN_MPKT(epn->ep.maxpacket)); 1807 1808 /* OUT transfer interrupt are enabled during usb_ep_queue */ 1809 if (epn->is_in) { 1810 /* Will be changed in DMA processing */ 1811 usbf_ep_reg_writel(epn, USBF_REG_EPN_INT_ENA, USBF_EPN_IN_EN); 1812 } 1813 1814 /* Clear, set endpoint direction, set IN/OUT STL, and enable 1815 * Send NAK for Data out as request are not queued yet 1816 */ 1817 ctrl = USBF_EPN_EN | USBF_EPN_BCLR; 1818 if (epn->is_in) 1819 ctrl |= USBF_EPN_OSTL | USBF_EPN_OSTL_EN; 1820 else 1821 ctrl |= USBF_EPN_DIR0 | USBF_EPN_ISTL | USBF_EPN_OSTL_EN | USBF_EPN_ONAK; 1822 usbf_ep_reg_writel(epn, USBF_REG_EPN_CONTROL, ctrl); 1823 1824 return 0; 1825 } 1826 1827 static int usbf_ep_enable(struct usb_ep *_ep, 1828 const struct usb_endpoint_descriptor *desc) 1829 { 1830 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 1831 struct usbf_udc *udc = ep->udc; 1832 unsigned long flags; 1833 int ret; 1834 1835 if (ep->id == 0) 1836 return -EINVAL; 1837 1838 if (!desc || desc->bDescriptorType != USB_DT_ENDPOINT) 1839 return -EINVAL; 1840 1841 dev_dbg(ep->udc->dev, "ep%u %s mpkts %d\n", ep->id, 1842 usb_endpoint_dir_in(desc) ? "in" : "out", 1843 usb_endpoint_maxp(desc)); 1844 1845 spin_lock_irqsave(&ep->udc->lock, flags); 1846 ep->is_in = usb_endpoint_dir_in(desc); 1847 ep->ep.maxpacket = usb_endpoint_maxp(desc); 1848 1849 ret = usbf_epn_enable(ep); 1850 if (ret) 1851 goto end; 1852 1853 ep->disabled = 0; 1854 1855 /* enable interrupts for this endpoint */ 1856 usbf_reg_bitset(udc, USBF_REG_USB_INT_ENA, USBF_USB_EPN_EN(ep->id)); 1857 1858 /* enable DMA interrupt at bridge level if DMA is used */ 1859 if (ep->dma_regs) { 1860 ep->bridge_on_dma_end = NULL; 1861 usbf_reg_bitset(udc, USBF_REG_AHBBINTEN, 1862 USBF_SYS_DMA_ENDINTEN_EPN(ep->id)); 1863 } 1864 1865 ret = 0; 1866 end: 1867 spin_unlock_irqrestore(&ep->udc->lock, flags); 1868 return ret; 1869 } 1870 1871 static int usbf_epn_disable(struct usbf_ep *epn) 1872 { 1873 /* Disable interrupts */ 1874 usbf_ep_reg_writel(epn, USBF_REG_EPN_INT_ENA, 0); 1875 1876 /* Disable endpoint */ 1877 usbf_ep_reg_bitclr(epn, USBF_REG_EPN_CONTROL, USBF_EPN_EN); 1878 1879 /* remove anything that was pending */ 1880 usbf_ep_nuke(epn, -ESHUTDOWN); 1881 1882 return 0; 1883 } 1884 1885 static int usbf_ep_disable(struct usb_ep *_ep) 1886 { 1887 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 1888 struct usbf_udc *udc = ep->udc; 1889 unsigned long flags; 1890 int ret; 1891 1892 if (ep->id == 0) 1893 return -EINVAL; 1894 1895 dev_dbg(ep->udc->dev, "ep%u %s mpkts %d\n", ep->id, 1896 ep->is_in ? "in" : "out", ep->ep.maxpacket); 1897 1898 spin_lock_irqsave(&ep->udc->lock, flags); 1899 ep->disabled = 1; 1900 /* Disable DMA interrupt */ 1901 if (ep->dma_regs) { 1902 usbf_reg_bitclr(udc, USBF_REG_AHBBINTEN, 1903 USBF_SYS_DMA_ENDINTEN_EPN(ep->id)); 1904 ep->bridge_on_dma_end = NULL; 1905 } 1906 /* disable interrupts for this endpoint */ 1907 usbf_reg_bitclr(udc, USBF_REG_USB_INT_ENA, USBF_USB_EPN_EN(ep->id)); 1908 /* and the endpoint itself */ 1909 ret = usbf_epn_disable(ep); 1910 spin_unlock_irqrestore(&ep->udc->lock, flags); 1911 1912 return ret; 1913 } 1914 1915 static int usbf_ep0_queue(struct usbf_ep *ep0, struct usbf_req *req, 1916 gfp_t gfp_flags) 1917 { 1918 int ret; 1919 1920 req->req.actual = 0; 1921 req->req.status = -EINPROGRESS; 1922 req->is_zero_sent = 0; 1923 1924 list_add_tail(&req->queue, &ep0->queue); 1925 1926 if (ep0->udc->ep0state == EP0_IN_STATUS_START_PHASE) 1927 return 0; 1928 1929 if (!ep0->is_in) 1930 return 0; 1931 1932 if (ep0->udc->ep0state == EP0_IN_STATUS_PHASE) { 1933 if (req->req.length) { 1934 dev_err(ep0->udc->dev, 1935 "request lng %u for ep0 in status phase\n", 1936 req->req.length); 1937 return -EINVAL; 1938 } 1939 ep0->delayed_status = 0; 1940 } 1941 if (!ep0->is_processing) { 1942 ret = usbf_ep0_pio_in(ep0, req); 1943 if (ret != -EINPROGRESS) { 1944 dev_err(ep0->udc->dev, 1945 "queued request not in progress\n"); 1946 /* The request cannot be completed (ie 1947 * ret == 0) on the first call 1948 */ 1949 return ret ? ret : -EIO; 1950 } 1951 } 1952 1953 return 0; 1954 } 1955 1956 static int usbf_epn_queue(struct usbf_ep *ep, struct usbf_req *req, 1957 gfp_t gfp_flags) 1958 { 1959 int was_empty; 1960 int ret; 1961 1962 if (ep->disabled) { 1963 dev_err(ep->udc->dev, "ep%u request queue while disable\n", 1964 ep->id); 1965 return -ESHUTDOWN; 1966 } 1967 1968 req->req.actual = 0; 1969 req->req.status = -EINPROGRESS; 1970 req->is_zero_sent = 0; 1971 req->xfer_step = USBF_XFER_START; 1972 1973 was_empty = list_empty(&ep->queue); 1974 list_add_tail(&req->queue, &ep->queue); 1975 if (was_empty) { 1976 ret = usbf_epn_start_queue(ep); 1977 if (ret) 1978 return ret; 1979 } 1980 return 0; 1981 } 1982 1983 static int usbf_ep_queue(struct usb_ep *_ep, struct usb_request *_req, 1984 gfp_t gfp_flags) 1985 { 1986 struct usbf_req *req = container_of(_req, struct usbf_req, req); 1987 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 1988 struct usbf_udc *udc = ep->udc; 1989 unsigned long flags; 1990 int ret; 1991 1992 if (!_req || !_req->buf) 1993 return -EINVAL; 1994 1995 if (!udc || !udc->driver) 1996 return -EINVAL; 1997 1998 dev_dbg(ep->udc->dev, "ep%u %s req queue length %u, zero %u, short_not_ok %u\n", 1999 ep->id, ep->is_in ? "in" : "out", 2000 req->req.length, req->req.zero, req->req.short_not_ok); 2001 2002 spin_lock_irqsave(&ep->udc->lock, flags); 2003 if (ep->id == 0) 2004 ret = usbf_ep0_queue(ep, req, gfp_flags); 2005 else 2006 ret = usbf_epn_queue(ep, req, gfp_flags); 2007 spin_unlock_irqrestore(&ep->udc->lock, flags); 2008 return ret; 2009 } 2010 2011 static int usbf_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) 2012 { 2013 struct usbf_req *req = container_of(_req, struct usbf_req, req); 2014 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 2015 unsigned long flags; 2016 int is_processing; 2017 int first; 2018 int ret; 2019 2020 spin_lock_irqsave(&ep->udc->lock, flags); 2021 2022 dev_dbg(ep->udc->dev, "ep%u %s req dequeue length %u/%u\n", 2023 ep->id, ep->is_in ? "in" : "out", 2024 req->req.actual, req->req.length); 2025 2026 first = list_is_first(&req->queue, &ep->queue); 2027 2028 /* Complete the request but avoid any operation that could be done 2029 * if a new request is queued during the request completion 2030 */ 2031 is_processing = ep->is_processing; 2032 ep->is_processing = 1; 2033 usbf_ep_req_done(ep, req, -ECONNRESET); 2034 ep->is_processing = is_processing; 2035 2036 if (first) { 2037 /* The first item in the list was dequeued. 2038 * This item could already be submitted to the hardware. 2039 * So, flush the fifo 2040 */ 2041 if (ep->id) 2042 usbf_epn_fifo_flush(ep); 2043 else 2044 usbf_ep0_fifo_flush(ep); 2045 } 2046 2047 if (ep->id == 0) { 2048 /* We dequeue a request on ep0. On this endpoint, we can have 2049 * 1 request related to the data stage and/or 1 request 2050 * related to the status stage. 2051 * We dequeue one of them and so the USB control transaction 2052 * is no more coherent. The simple way to be consistent after 2053 * dequeuing is to stall and nuke the endpoint and wait the 2054 * next SETUP packet. 2055 */ 2056 usbf_ep_stall(ep, true); 2057 usbf_ep_nuke(ep, -ECONNRESET); 2058 ep->udc->ep0state = EP0_IDLE; 2059 goto end; 2060 } 2061 2062 if (!first) 2063 goto end; 2064 2065 ret = usbf_epn_start_queue(ep); 2066 if (ret) { 2067 usbf_ep_stall(ep, true); 2068 usbf_ep_nuke(ep, -EIO); 2069 } 2070 end: 2071 spin_unlock_irqrestore(&ep->udc->lock, flags); 2072 return 0; 2073 } 2074 2075 static struct usb_request *usbf_ep_alloc_request(struct usb_ep *_ep, 2076 gfp_t gfp_flags) 2077 { 2078 struct usbf_req *req; 2079 2080 if (!_ep) 2081 return NULL; 2082 2083 req = kzalloc_obj(*req, gfp_flags); 2084 if (!req) 2085 return NULL; 2086 2087 INIT_LIST_HEAD(&req->queue); 2088 2089 return &req->req; 2090 } 2091 2092 static void usbf_ep_free_request(struct usb_ep *_ep, struct usb_request *_req) 2093 { 2094 struct usbf_req *req; 2095 unsigned long flags; 2096 struct usbf_ep *ep; 2097 2098 if (!_ep || !_req) 2099 return; 2100 2101 req = container_of(_req, struct usbf_req, req); 2102 ep = container_of(_ep, struct usbf_ep, ep); 2103 2104 spin_lock_irqsave(&ep->udc->lock, flags); 2105 list_del_init(&req->queue); 2106 spin_unlock_irqrestore(&ep->udc->lock, flags); 2107 kfree(req); 2108 } 2109 2110 static int usbf_ep_set_halt(struct usb_ep *_ep, int halt) 2111 { 2112 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 2113 unsigned long flags; 2114 int ret; 2115 2116 if (ep->id == 0) 2117 return -EINVAL; 2118 2119 spin_lock_irqsave(&ep->udc->lock, flags); 2120 2121 if (!list_empty(&ep->queue)) { 2122 ret = -EAGAIN; 2123 goto end; 2124 } 2125 2126 usbf_ep_stall(ep, halt); 2127 if (!halt) 2128 ep->is_wedged = 0; 2129 2130 ret = 0; 2131 end: 2132 spin_unlock_irqrestore(&ep->udc->lock, flags); 2133 2134 return ret; 2135 } 2136 2137 static int usbf_ep_set_wedge(struct usb_ep *_ep) 2138 { 2139 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 2140 unsigned long flags; 2141 int ret; 2142 2143 if (ep->id == 0) 2144 return -EINVAL; 2145 2146 spin_lock_irqsave(&ep->udc->lock, flags); 2147 if (!list_empty(&ep->queue)) { 2148 ret = -EAGAIN; 2149 goto end; 2150 } 2151 usbf_ep_stall(ep, 1); 2152 ep->is_wedged = 1; 2153 2154 ret = 0; 2155 end: 2156 spin_unlock_irqrestore(&ep->udc->lock, flags); 2157 return ret; 2158 } 2159 2160 static struct usb_ep_ops usbf_ep_ops = { 2161 .enable = usbf_ep_enable, 2162 .disable = usbf_ep_disable, 2163 .queue = usbf_ep_queue, 2164 .dequeue = usbf_ep_dequeue, 2165 .set_halt = usbf_ep_set_halt, 2166 .set_wedge = usbf_ep_set_wedge, 2167 .alloc_request = usbf_ep_alloc_request, 2168 .free_request = usbf_ep_free_request, 2169 }; 2170 2171 static void usbf_ep0_req_complete(struct usb_ep *_ep, struct usb_request *_req) 2172 { 2173 } 2174 2175 static void usbf_ep0_fill_req(struct usbf_ep *ep0, struct usbf_req *req, 2176 void *buf, unsigned int length, 2177 void (*complete)(struct usb_ep *_ep, 2178 struct usb_request *_req)) 2179 { 2180 if (buf && length) 2181 memcpy(ep0->udc->ep0_buf, buf, length); 2182 2183 req->req.buf = ep0->udc->ep0_buf; 2184 req->req.length = length; 2185 req->req.dma = 0; 2186 req->req.zero = true; 2187 req->req.complete = complete ? complete : usbf_ep0_req_complete; 2188 req->req.status = -EINPROGRESS; 2189 req->req.context = NULL; 2190 req->req.actual = 0; 2191 } 2192 2193 static struct usbf_ep *usbf_get_ep_by_addr(struct usbf_udc *udc, u8 address) 2194 { 2195 struct usbf_ep *ep; 2196 unsigned int i; 2197 2198 if ((address & USB_ENDPOINT_NUMBER_MASK) == 0) 2199 return &udc->ep[0]; 2200 2201 for (i = 1; i < ARRAY_SIZE(udc->ep); i++) { 2202 ep = &udc->ep[i]; 2203 2204 if (!ep->ep.desc) 2205 continue; 2206 2207 if (ep->ep.desc->bEndpointAddress == address) 2208 return ep; 2209 } 2210 2211 return NULL; 2212 } 2213 2214 static int usbf_req_delegate(struct usbf_udc *udc, 2215 const struct usb_ctrlrequest *ctrlrequest) 2216 { 2217 int ret; 2218 2219 spin_unlock(&udc->lock); 2220 ret = udc->driver->setup(&udc->gadget, ctrlrequest); 2221 spin_lock(&udc->lock); 2222 if (ret < 0) { 2223 dev_dbg(udc->dev, "udc driver setup failed %d\n", ret); 2224 return ret; 2225 } 2226 if (ret == USB_GADGET_DELAYED_STATUS) { 2227 dev_dbg(udc->dev, "delayed status set\n"); 2228 udc->ep[0].delayed_status = 1; 2229 return 0; 2230 } 2231 return ret; 2232 } 2233 2234 static int usbf_req_get_status(struct usbf_udc *udc, 2235 const struct usb_ctrlrequest *ctrlrequest) 2236 { 2237 struct usbf_ep *ep; 2238 u16 status_data; 2239 u16 wLength; 2240 u16 wValue; 2241 u16 wIndex; 2242 2243 wValue = le16_to_cpu(ctrlrequest->wValue); 2244 wLength = le16_to_cpu(ctrlrequest->wLength); 2245 wIndex = le16_to_cpu(ctrlrequest->wIndex); 2246 2247 switch (ctrlrequest->bRequestType) { 2248 case USB_DIR_IN | USB_RECIP_DEVICE | USB_TYPE_STANDARD: 2249 if ((wValue != 0) || (wIndex != 0) || (wLength != 2)) 2250 goto delegate; 2251 2252 status_data = 0; 2253 if (udc->gadget.is_selfpowered) 2254 status_data |= BIT(USB_DEVICE_SELF_POWERED); 2255 2256 if (udc->is_remote_wakeup) 2257 status_data |= BIT(USB_DEVICE_REMOTE_WAKEUP); 2258 2259 break; 2260 2261 case USB_DIR_IN | USB_RECIP_ENDPOINT | USB_TYPE_STANDARD: 2262 if ((wValue != 0) || (wLength != 2)) 2263 goto delegate; 2264 2265 ep = usbf_get_ep_by_addr(udc, wIndex); 2266 if (!ep) 2267 return -EINVAL; 2268 2269 status_data = 0; 2270 if (usbf_ep_is_stalled(ep)) 2271 status_data |= cpu_to_le16(1); 2272 break; 2273 2274 case USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_STANDARD: 2275 if ((wValue != 0) || (wLength != 2)) 2276 goto delegate; 2277 status_data = 0; 2278 break; 2279 2280 default: 2281 goto delegate; 2282 } 2283 2284 usbf_ep0_fill_req(&udc->ep[0], &udc->setup_reply, &status_data, 2285 sizeof(status_data), NULL); 2286 usbf_ep0_queue(&udc->ep[0], &udc->setup_reply, GFP_ATOMIC); 2287 2288 return 0; 2289 2290 delegate: 2291 return usbf_req_delegate(udc, ctrlrequest); 2292 } 2293 2294 static int usbf_req_clear_set_feature(struct usbf_udc *udc, 2295 const struct usb_ctrlrequest *ctrlrequest, 2296 bool is_set) 2297 { 2298 struct usbf_ep *ep; 2299 u16 wLength; 2300 u16 wValue; 2301 u16 wIndex; 2302 2303 wValue = le16_to_cpu(ctrlrequest->wValue); 2304 wLength = le16_to_cpu(ctrlrequest->wLength); 2305 wIndex = le16_to_cpu(ctrlrequest->wIndex); 2306 2307 switch (ctrlrequest->bRequestType) { 2308 case USB_DIR_OUT | USB_RECIP_DEVICE: 2309 if ((wIndex != 0) || (wLength != 0)) 2310 goto delegate; 2311 2312 if (wValue != cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP)) 2313 goto delegate; 2314 2315 udc->is_remote_wakeup = is_set; 2316 break; 2317 2318 case USB_DIR_OUT | USB_RECIP_ENDPOINT: 2319 if (wLength != 0) 2320 goto delegate; 2321 2322 ep = usbf_get_ep_by_addr(udc, wIndex); 2323 if (!ep) 2324 return -EINVAL; 2325 2326 if ((ep->id == 0) && is_set) { 2327 /* Endpoint 0 cannot be halted (stalled) 2328 * Returning an error code leads to a STALL on this ep0 2329 * but keep the automate in a consistent state. 2330 */ 2331 return -EINVAL; 2332 } 2333 if (ep->is_wedged && !is_set) { 2334 /* Ignore CLEAR_FEATURE(HALT ENDPOINT) when the 2335 * endpoint is wedged 2336 */ 2337 break; 2338 } 2339 usbf_ep_stall(ep, is_set); 2340 break; 2341 2342 default: 2343 goto delegate; 2344 } 2345 2346 return 0; 2347 2348 delegate: 2349 return usbf_req_delegate(udc, ctrlrequest); 2350 } 2351 2352 static void usbf_ep0_req_set_address_complete(struct usb_ep *_ep, 2353 struct usb_request *_req) 2354 { 2355 struct usbf_ep *ep = container_of(_ep, struct usbf_ep, ep); 2356 2357 /* The status phase of the SET_ADDRESS request is completed ... */ 2358 if (_req->status == 0) { 2359 /* ... without any errors -> Signaled the state to the core. */ 2360 usb_gadget_set_state(&ep->udc->gadget, USB_STATE_ADDRESS); 2361 } 2362 2363 /* In case of request failure, there is no need to revert the address 2364 * value set to the hardware as the hardware will take care of the 2365 * value only if the status stage is completed normally. 2366 */ 2367 } 2368 2369 static int usbf_req_set_address(struct usbf_udc *udc, 2370 const struct usb_ctrlrequest *ctrlrequest) 2371 { 2372 u16 wLength; 2373 u16 wValue; 2374 u16 wIndex; 2375 u32 addr; 2376 2377 wValue = le16_to_cpu(ctrlrequest->wValue); 2378 wLength = le16_to_cpu(ctrlrequest->wLength); 2379 wIndex = le16_to_cpu(ctrlrequest->wIndex); 2380 2381 if (ctrlrequest->bRequestType != (USB_DIR_OUT | USB_RECIP_DEVICE)) 2382 goto delegate; 2383 2384 if ((wIndex != 0) || (wLength != 0) || (wValue > 127)) 2385 return -EINVAL; 2386 2387 addr = wValue; 2388 /* The hardware will take care of this USB address after the status 2389 * stage of the SET_ADDRESS request is completed normally. 2390 * It is safe to write it now 2391 */ 2392 usbf_reg_writel(udc, USBF_REG_USB_ADDRESS, USBF_USB_SET_USB_ADDR(addr)); 2393 2394 /* Queued the status request */ 2395 usbf_ep0_fill_req(&udc->ep[0], &udc->setup_reply, NULL, 0, 2396 usbf_ep0_req_set_address_complete); 2397 usbf_ep0_queue(&udc->ep[0], &udc->setup_reply, GFP_ATOMIC); 2398 2399 return 0; 2400 2401 delegate: 2402 return usbf_req_delegate(udc, ctrlrequest); 2403 } 2404 2405 static int usbf_req_set_configuration(struct usbf_udc *udc, 2406 const struct usb_ctrlrequest *ctrlrequest) 2407 { 2408 u16 wLength; 2409 u16 wValue; 2410 u16 wIndex; 2411 int ret; 2412 2413 ret = usbf_req_delegate(udc, ctrlrequest); 2414 if (ret) 2415 return ret; 2416 2417 wValue = le16_to_cpu(ctrlrequest->wValue); 2418 wLength = le16_to_cpu(ctrlrequest->wLength); 2419 wIndex = le16_to_cpu(ctrlrequest->wIndex); 2420 2421 if ((ctrlrequest->bRequestType != (USB_DIR_OUT | USB_RECIP_DEVICE)) || 2422 (wIndex != 0) || (wLength != 0)) { 2423 /* No error detected by driver->setup() but it is not an USB2.0 2424 * Ch9 SET_CONFIGURATION. 2425 * Nothing more to do 2426 */ 2427 return 0; 2428 } 2429 2430 if (wValue & 0x00FF) { 2431 usbf_reg_bitset(udc, USBF_REG_USB_CONTROL, USBF_USB_CONF); 2432 } else { 2433 usbf_reg_bitclr(udc, USBF_REG_USB_CONTROL, USBF_USB_CONF); 2434 /* Go back to Address State */ 2435 spin_unlock(&udc->lock); 2436 usb_gadget_set_state(&udc->gadget, USB_STATE_ADDRESS); 2437 spin_lock(&udc->lock); 2438 } 2439 2440 return 0; 2441 } 2442 2443 static int usbf_handle_ep0_setup(struct usbf_ep *ep0) 2444 { 2445 union { 2446 struct usb_ctrlrequest ctrlreq; 2447 u32 raw[2]; 2448 } crq; 2449 struct usbf_udc *udc = ep0->udc; 2450 int ret; 2451 2452 /* Read setup data (ie the USB control request) */ 2453 crq.raw[0] = usbf_reg_readl(udc, USBF_REG_SETUP_DATA0); 2454 crq.raw[1] = usbf_reg_readl(udc, USBF_REG_SETUP_DATA1); 2455 2456 dev_dbg(ep0->udc->dev, 2457 "ep0 req%02x.%02x, wValue 0x%04x, wIndex 0x%04x, wLength 0x%04x\n", 2458 crq.ctrlreq.bRequestType, crq.ctrlreq.bRequest, 2459 crq.ctrlreq.wValue, crq.ctrlreq.wIndex, crq.ctrlreq.wLength); 2460 2461 /* Set current EP0 state according to the received request */ 2462 if (crq.ctrlreq.wLength) { 2463 if (crq.ctrlreq.bRequestType & USB_DIR_IN) { 2464 udc->ep0state = EP0_IN_DATA_PHASE; 2465 usbf_ep_reg_clrset(ep0, USBF_REG_EP0_CONTROL, 2466 USBF_EP0_INAK, 2467 USBF_EP0_INAK_EN); 2468 ep0->is_in = 1; 2469 } else { 2470 udc->ep0state = EP0_OUT_DATA_PHASE; 2471 usbf_ep_reg_bitclr(ep0, USBF_REG_EP0_CONTROL, 2472 USBF_EP0_ONAK); 2473 ep0->is_in = 0; 2474 } 2475 } else { 2476 udc->ep0state = EP0_IN_STATUS_START_PHASE; 2477 ep0->is_in = 1; 2478 } 2479 2480 /* We starts a new control transfer -> Clear the delayed status flag */ 2481 ep0->delayed_status = 0; 2482 2483 if ((crq.ctrlreq.bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD) { 2484 /* This is not a USB standard request -> delegate */ 2485 goto delegate; 2486 } 2487 2488 switch (crq.ctrlreq.bRequest) { 2489 case USB_REQ_GET_STATUS: 2490 ret = usbf_req_get_status(udc, &crq.ctrlreq); 2491 break; 2492 2493 case USB_REQ_CLEAR_FEATURE: 2494 ret = usbf_req_clear_set_feature(udc, &crq.ctrlreq, false); 2495 break; 2496 2497 case USB_REQ_SET_FEATURE: 2498 ret = usbf_req_clear_set_feature(udc, &crq.ctrlreq, true); 2499 break; 2500 2501 case USB_REQ_SET_ADDRESS: 2502 ret = usbf_req_set_address(udc, &crq.ctrlreq); 2503 break; 2504 2505 case USB_REQ_SET_CONFIGURATION: 2506 ret = usbf_req_set_configuration(udc, &crq.ctrlreq); 2507 break; 2508 2509 default: 2510 goto delegate; 2511 } 2512 2513 return ret; 2514 2515 delegate: 2516 return usbf_req_delegate(udc, &crq.ctrlreq); 2517 } 2518 2519 static int usbf_handle_ep0_data_status(struct usbf_ep *ep0, 2520 const char *ep0state_name, 2521 enum usbf_ep0state next_ep0state) 2522 { 2523 struct usbf_udc *udc = ep0->udc; 2524 int ret; 2525 2526 ret = usbf_ep_process_queue(ep0); 2527 switch (ret) { 2528 case -ENOENT: 2529 dev_err(udc->dev, 2530 "no request available for ep0 %s phase\n", 2531 ep0state_name); 2532 break; 2533 case -EINPROGRESS: 2534 /* More data needs to be processed */ 2535 ret = 0; 2536 break; 2537 case 0: 2538 /* All requests in the queue are processed */ 2539 udc->ep0state = next_ep0state; 2540 break; 2541 default: 2542 dev_err(udc->dev, 2543 "process queue failed for ep0 %s phase (%d)\n", 2544 ep0state_name, ret); 2545 break; 2546 } 2547 return ret; 2548 } 2549 2550 static int usbf_handle_ep0_out_status_start(struct usbf_ep *ep0) 2551 { 2552 struct usbf_udc *udc = ep0->udc; 2553 struct usbf_req *req; 2554 2555 usbf_ep_reg_clrset(ep0, USBF_REG_EP0_CONTROL, 2556 USBF_EP0_ONAK, 2557 USBF_EP0_PIDCLR); 2558 ep0->is_in = 0; 2559 2560 req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue); 2561 if (!req) { 2562 usbf_ep0_fill_req(ep0, &udc->setup_reply, NULL, 0, NULL); 2563 usbf_ep0_queue(ep0, &udc->setup_reply, GFP_ATOMIC); 2564 } else { 2565 if (req->req.length) { 2566 dev_err(udc->dev, 2567 "queued request length %u for ep0 out status phase\n", 2568 req->req.length); 2569 } 2570 } 2571 udc->ep0state = EP0_OUT_STATUS_PHASE; 2572 return 0; 2573 } 2574 2575 static int usbf_handle_ep0_in_status_start(struct usbf_ep *ep0) 2576 { 2577 struct usbf_udc *udc = ep0->udc; 2578 struct usbf_req *req; 2579 int ret; 2580 2581 usbf_ep_reg_clrset(ep0, USBF_REG_EP0_CONTROL, 2582 USBF_EP0_INAK, 2583 USBF_EP0_INAK_EN | USBF_EP0_PIDCLR); 2584 ep0->is_in = 1; 2585 2586 /* Queue request for status if needed */ 2587 req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue); 2588 if (!req) { 2589 if (ep0->delayed_status) { 2590 dev_dbg(ep0->udc->dev, 2591 "EP0_IN_STATUS_START_PHASE ep0->delayed_status set\n"); 2592 udc->ep0state = EP0_IN_STATUS_PHASE; 2593 return 0; 2594 } 2595 2596 usbf_ep0_fill_req(ep0, &udc->setup_reply, NULL, 2597 0, NULL); 2598 usbf_ep0_queue(ep0, &udc->setup_reply, 2599 GFP_ATOMIC); 2600 2601 req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue); 2602 } else { 2603 if (req->req.length) { 2604 dev_err(udc->dev, 2605 "queued request length %u for ep0 in status phase\n", 2606 req->req.length); 2607 } 2608 } 2609 2610 ret = usbf_ep0_pio_in(ep0, req); 2611 if (ret != -EINPROGRESS) { 2612 usbf_ep_req_done(ep0, req, ret); 2613 udc->ep0state = EP0_IN_STATUS_END_PHASE; 2614 return 0; 2615 } 2616 2617 udc->ep0state = EP0_IN_STATUS_PHASE; 2618 return 0; 2619 } 2620 2621 static void usbf_ep0_interrupt(struct usbf_ep *ep0) 2622 { 2623 struct usbf_udc *udc = ep0->udc; 2624 u32 sts, prev_sts; 2625 int prev_ep0state; 2626 int ret; 2627 2628 ep0->status = usbf_ep_reg_readl(ep0, USBF_REG_EP0_STATUS); 2629 usbf_ep_reg_writel(ep0, USBF_REG_EP0_STATUS, ~ep0->status); 2630 2631 dev_dbg(ep0->udc->dev, "ep0 status=0x%08x, enable=%08x\n, ctrl=0x%08x\n", 2632 ep0->status, 2633 usbf_ep_reg_readl(ep0, USBF_REG_EP0_INT_ENA), 2634 usbf_ep_reg_readl(ep0, USBF_REG_EP0_CONTROL)); 2635 2636 sts = ep0->status & (USBF_EP0_SETUP_INT | USBF_EP0_IN_INT | USBF_EP0_OUT_INT | 2637 USBF_EP0_OUT_NULL_INT | USBF_EP0_STG_START_INT | 2638 USBF_EP0_STG_END_INT); 2639 2640 ret = 0; 2641 do { 2642 dev_dbg(ep0->udc->dev, "udc->ep0state=%d\n", udc->ep0state); 2643 2644 prev_sts = sts; 2645 prev_ep0state = udc->ep0state; 2646 switch (udc->ep0state) { 2647 case EP0_IDLE: 2648 if (!(sts & USBF_EP0_SETUP_INT)) 2649 break; 2650 2651 sts &= ~USBF_EP0_SETUP_INT; 2652 dev_dbg(ep0->udc->dev, "ep0 handle setup\n"); 2653 ret = usbf_handle_ep0_setup(ep0); 2654 break; 2655 2656 case EP0_IN_DATA_PHASE: 2657 if (!(sts & USBF_EP0_IN_INT)) 2658 break; 2659 2660 sts &= ~USBF_EP0_IN_INT; 2661 dev_dbg(ep0->udc->dev, "ep0 handle in data phase\n"); 2662 ret = usbf_handle_ep0_data_status(ep0, 2663 "in data", EP0_OUT_STATUS_START_PHASE); 2664 break; 2665 2666 case EP0_OUT_STATUS_START_PHASE: 2667 if (!(sts & USBF_EP0_STG_START_INT)) 2668 break; 2669 2670 sts &= ~USBF_EP0_STG_START_INT; 2671 dev_dbg(ep0->udc->dev, "ep0 handle out status start phase\n"); 2672 ret = usbf_handle_ep0_out_status_start(ep0); 2673 break; 2674 2675 case EP0_OUT_STATUS_PHASE: 2676 if (!(sts & (USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT))) 2677 break; 2678 2679 sts &= ~(USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT); 2680 dev_dbg(ep0->udc->dev, "ep0 handle out status phase\n"); 2681 ret = usbf_handle_ep0_data_status(ep0, 2682 "out status", 2683 EP0_OUT_STATUS_END_PHASE); 2684 break; 2685 2686 case EP0_OUT_STATUS_END_PHASE: 2687 if (!(sts & (USBF_EP0_STG_END_INT | USBF_EP0_SETUP_INT))) 2688 break; 2689 2690 sts &= ~USBF_EP0_STG_END_INT; 2691 dev_dbg(ep0->udc->dev, "ep0 handle out status end phase\n"); 2692 udc->ep0state = EP0_IDLE; 2693 break; 2694 2695 case EP0_OUT_DATA_PHASE: 2696 if (!(sts & (USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT))) 2697 break; 2698 2699 sts &= ~(USBF_EP0_OUT_INT | USBF_EP0_OUT_NULL_INT); 2700 dev_dbg(ep0->udc->dev, "ep0 handle out data phase\n"); 2701 ret = usbf_handle_ep0_data_status(ep0, 2702 "out data", EP0_IN_STATUS_START_PHASE); 2703 break; 2704 2705 case EP0_IN_STATUS_START_PHASE: 2706 if (!(sts & USBF_EP0_STG_START_INT)) 2707 break; 2708 2709 sts &= ~USBF_EP0_STG_START_INT; 2710 dev_dbg(ep0->udc->dev, "ep0 handle in status start phase\n"); 2711 ret = usbf_handle_ep0_in_status_start(ep0); 2712 break; 2713 2714 case EP0_IN_STATUS_PHASE: 2715 if (!(sts & USBF_EP0_IN_INT)) 2716 break; 2717 2718 sts &= ~USBF_EP0_IN_INT; 2719 dev_dbg(ep0->udc->dev, "ep0 handle in status phase\n"); 2720 ret = usbf_handle_ep0_data_status(ep0, 2721 "in status", EP0_IN_STATUS_END_PHASE); 2722 break; 2723 2724 case EP0_IN_STATUS_END_PHASE: 2725 if (!(sts & (USBF_EP0_STG_END_INT | USBF_EP0_SETUP_INT))) 2726 break; 2727 2728 sts &= ~USBF_EP0_STG_END_INT; 2729 dev_dbg(ep0->udc->dev, "ep0 handle in status end\n"); 2730 udc->ep0state = EP0_IDLE; 2731 break; 2732 2733 default: 2734 udc->ep0state = EP0_IDLE; 2735 break; 2736 } 2737 2738 if (ret) { 2739 dev_dbg(ep0->udc->dev, "ep0 failed (%d)\n", ret); 2740 /* Failure -> stall. 2741 * This stall state will be automatically cleared when 2742 * the IP receives the next SETUP packet 2743 */ 2744 usbf_ep_stall(ep0, true); 2745 2746 /* Remove anything that was pending */ 2747 usbf_ep_nuke(ep0, -EPROTO); 2748 2749 udc->ep0state = EP0_IDLE; 2750 break; 2751 } 2752 2753 } while ((prev_ep0state != udc->ep0state) || (prev_sts != sts)); 2754 2755 dev_dbg(ep0->udc->dev, "ep0 done udc->ep0state=%d, status=0x%08x. next=0x%08x\n", 2756 udc->ep0state, sts, 2757 usbf_ep_reg_readl(ep0, USBF_REG_EP0_STATUS)); 2758 } 2759 2760 static void usbf_epn_process_queue(struct usbf_ep *epn) 2761 { 2762 int ret; 2763 2764 ret = usbf_ep_process_queue(epn); 2765 switch (ret) { 2766 case -ENOENT: 2767 dev_warn(epn->udc->dev, "ep%u %s, no request available\n", 2768 epn->id, epn->is_in ? "in" : "out"); 2769 break; 2770 case -EINPROGRESS: 2771 /* More data needs to be processed */ 2772 ret = 0; 2773 break; 2774 case 0: 2775 /* All requests in the queue are processed */ 2776 break; 2777 default: 2778 dev_err(epn->udc->dev, "ep%u %s, process queue failed (%d)\n", 2779 epn->id, epn->is_in ? "in" : "out", ret); 2780 break; 2781 } 2782 2783 if (ret) { 2784 dev_dbg(epn->udc->dev, "ep%u %s failed (%d)\n", epn->id, 2785 epn->is_in ? "in" : "out", ret); 2786 usbf_ep_stall(epn, true); 2787 usbf_ep_nuke(epn, ret); 2788 } 2789 } 2790 2791 static void usbf_epn_interrupt(struct usbf_ep *epn) 2792 { 2793 u32 sts; 2794 u32 ena; 2795 2796 epn->status = usbf_ep_reg_readl(epn, USBF_REG_EPN_STATUS); 2797 ena = usbf_ep_reg_readl(epn, USBF_REG_EPN_INT_ENA); 2798 usbf_ep_reg_writel(epn, USBF_REG_EPN_STATUS, ~(epn->status & ena)); 2799 2800 dev_dbg(epn->udc->dev, "ep%u %s status=0x%08x, enable=%08x\n, ctrl=0x%08x\n", 2801 epn->id, epn->is_in ? "in" : "out", epn->status, ena, 2802 usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL)); 2803 2804 if (epn->disabled) { 2805 dev_warn(epn->udc->dev, "ep%u %s, interrupt while disabled\n", 2806 epn->id, epn->is_in ? "in" : "out"); 2807 return; 2808 } 2809 2810 sts = epn->status & ena; 2811 2812 if (sts & (USBF_EPN_IN_END_INT | USBF_EPN_IN_INT)) { 2813 sts &= ~(USBF_EPN_IN_END_INT | USBF_EPN_IN_INT); 2814 dev_dbg(epn->udc->dev, "ep%u %s process queue (in interrupts)\n", 2815 epn->id, epn->is_in ? "in" : "out"); 2816 usbf_epn_process_queue(epn); 2817 } 2818 2819 if (sts & (USBF_EPN_OUT_END_INT | USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT)) { 2820 sts &= ~(USBF_EPN_OUT_END_INT | USBF_EPN_OUT_INT | USBF_EPN_OUT_NULL_INT); 2821 dev_dbg(epn->udc->dev, "ep%u %s process queue (out interrupts)\n", 2822 epn->id, epn->is_in ? "in" : "out"); 2823 usbf_epn_process_queue(epn); 2824 } 2825 2826 dev_dbg(epn->udc->dev, "ep%u %s done status=0x%08x. next=0x%08x\n", 2827 epn->id, epn->is_in ? "in" : "out", 2828 sts, usbf_ep_reg_readl(epn, USBF_REG_EPN_STATUS)); 2829 } 2830 2831 static void usbf_ep_reset(struct usbf_ep *ep) 2832 { 2833 ep->status = 0; 2834 /* Remove anything that was pending */ 2835 usbf_ep_nuke(ep, -ESHUTDOWN); 2836 } 2837 2838 static void usbf_reset(struct usbf_udc *udc) 2839 { 2840 int i; 2841 2842 for (i = 0; i < ARRAY_SIZE(udc->ep); i++) { 2843 if (udc->ep[i].disabled) 2844 continue; 2845 2846 usbf_ep_reset(&udc->ep[i]); 2847 } 2848 2849 if (usbf_reg_readl(udc, USBF_REG_USB_STATUS) & USBF_USB_SPEED_MODE) 2850 udc->gadget.speed = USB_SPEED_HIGH; 2851 else 2852 udc->gadget.speed = USB_SPEED_FULL; 2853 2854 /* Remote wakeup feature must be disabled on USB bus reset */ 2855 udc->is_remote_wakeup = false; 2856 2857 /* Enable endpoint zero */ 2858 usbf_ep0_enable(&udc->ep[0]); 2859 2860 if (udc->driver) { 2861 /* Signal the reset */ 2862 spin_unlock(&udc->lock); 2863 usb_gadget_udc_reset(&udc->gadget, udc->driver); 2864 spin_lock(&udc->lock); 2865 } 2866 } 2867 2868 static void usbf_driver_suspend(struct usbf_udc *udc) 2869 { 2870 if (udc->is_usb_suspended) { 2871 dev_dbg(udc->dev, "already suspended\n"); 2872 return; 2873 } 2874 2875 dev_dbg(udc->dev, "do usb suspend\n"); 2876 udc->is_usb_suspended = true; 2877 2878 if (udc->driver && udc->driver->suspend) { 2879 spin_unlock(&udc->lock); 2880 udc->driver->suspend(&udc->gadget); 2881 spin_lock(&udc->lock); 2882 2883 /* The datasheet tells to set the USB_CONTROL register SUSPEND 2884 * bit when the USB bus suspend is detected. 2885 * This bit stops the clocks (clocks for EPC, SIE, USBPHY) but 2886 * these clocks seems not used only by the USB device. Some 2887 * UARTs can be lost ... 2888 * So, do not set the USB_CONTROL register SUSPEND bit. 2889 */ 2890 } 2891 } 2892 2893 static void usbf_driver_resume(struct usbf_udc *udc) 2894 { 2895 if (!udc->is_usb_suspended) 2896 return; 2897 2898 dev_dbg(udc->dev, "do usb resume\n"); 2899 udc->is_usb_suspended = false; 2900 2901 if (udc->driver && udc->driver->resume) { 2902 spin_unlock(&udc->lock); 2903 udc->driver->resume(&udc->gadget); 2904 spin_lock(&udc->lock); 2905 } 2906 } 2907 2908 static irqreturn_t usbf_epc_irq(int irq, void *_udc) 2909 { 2910 struct usbf_udc *udc = (struct usbf_udc *)_udc; 2911 unsigned long flags; 2912 struct usbf_ep *ep; 2913 u32 int_sts; 2914 u32 int_en; 2915 int i; 2916 2917 spin_lock_irqsave(&udc->lock, flags); 2918 2919 int_en = usbf_reg_readl(udc, USBF_REG_USB_INT_ENA); 2920 int_sts = usbf_reg_readl(udc, USBF_REG_USB_INT_STA) & int_en; 2921 usbf_reg_writel(udc, USBF_REG_USB_INT_STA, ~int_sts); 2922 2923 dev_dbg(udc->dev, "int_sts=0x%08x\n", int_sts); 2924 2925 if (int_sts & USBF_USB_RSUM_INT) { 2926 dev_dbg(udc->dev, "handle resume\n"); 2927 usbf_driver_resume(udc); 2928 } 2929 2930 if (int_sts & USBF_USB_USB_RST_INT) { 2931 dev_dbg(udc->dev, "handle bus reset\n"); 2932 usbf_driver_resume(udc); 2933 usbf_reset(udc); 2934 } 2935 2936 if (int_sts & USBF_USB_SPEED_MODE_INT) { 2937 if (usbf_reg_readl(udc, USBF_REG_USB_STATUS) & USBF_USB_SPEED_MODE) 2938 udc->gadget.speed = USB_SPEED_HIGH; 2939 else 2940 udc->gadget.speed = USB_SPEED_FULL; 2941 dev_dbg(udc->dev, "handle speed change (%s)\n", 2942 udc->gadget.speed == USB_SPEED_HIGH ? "High" : "Full"); 2943 } 2944 2945 if (int_sts & USBF_USB_EPN_INT(0)) { 2946 usbf_driver_resume(udc); 2947 usbf_ep0_interrupt(&udc->ep[0]); 2948 } 2949 2950 for (i = 1; i < ARRAY_SIZE(udc->ep); i++) { 2951 ep = &udc->ep[i]; 2952 2953 if (int_sts & USBF_USB_EPN_INT(i)) { 2954 usbf_driver_resume(udc); 2955 usbf_epn_interrupt(ep); 2956 } 2957 } 2958 2959 if (int_sts & USBF_USB_SPND_INT) { 2960 dev_dbg(udc->dev, "handle suspend\n"); 2961 usbf_driver_suspend(udc); 2962 } 2963 2964 spin_unlock_irqrestore(&udc->lock, flags); 2965 2966 return IRQ_HANDLED; 2967 } 2968 2969 static irqreturn_t usbf_ahb_epc_irq(int irq, void *_udc) 2970 { 2971 struct usbf_udc *udc = (struct usbf_udc *)_udc; 2972 unsigned long flags; 2973 struct usbf_ep *epn; 2974 u32 sysbint; 2975 void (*ep_action)(struct usbf_ep *epn); 2976 int i; 2977 2978 spin_lock_irqsave(&udc->lock, flags); 2979 2980 /* Read and ack interrupts */ 2981 sysbint = usbf_reg_readl(udc, USBF_REG_AHBBINT); 2982 usbf_reg_writel(udc, USBF_REG_AHBBINT, sysbint); 2983 2984 if ((sysbint & USBF_SYS_VBUS_INT) == USBF_SYS_VBUS_INT) { 2985 if (usbf_reg_readl(udc, USBF_REG_EPCTR) & USBF_SYS_VBUS_LEVEL) { 2986 dev_dbg(udc->dev, "handle vbus (1)\n"); 2987 spin_unlock(&udc->lock); 2988 usb_udc_vbus_handler(&udc->gadget, true); 2989 usb_gadget_set_state(&udc->gadget, USB_STATE_POWERED); 2990 spin_lock(&udc->lock); 2991 } else { 2992 dev_dbg(udc->dev, "handle vbus (0)\n"); 2993 udc->is_usb_suspended = false; 2994 spin_unlock(&udc->lock); 2995 usb_udc_vbus_handler(&udc->gadget, false); 2996 usb_gadget_set_state(&udc->gadget, 2997 USB_STATE_NOTATTACHED); 2998 spin_lock(&udc->lock); 2999 } 3000 } 3001 3002 for (i = 1; i < ARRAY_SIZE(udc->ep); i++) { 3003 if (sysbint & USBF_SYS_DMA_ENDINT_EPN(i)) { 3004 epn = &udc->ep[i]; 3005 dev_dbg(epn->udc->dev, 3006 "ep%u handle DMA complete. action=%ps\n", 3007 epn->id, epn->bridge_on_dma_end); 3008 ep_action = epn->bridge_on_dma_end; 3009 if (ep_action) { 3010 epn->bridge_on_dma_end = NULL; 3011 ep_action(epn); 3012 } 3013 } 3014 } 3015 3016 spin_unlock_irqrestore(&udc->lock, flags); 3017 3018 return IRQ_HANDLED; 3019 } 3020 3021 static int usbf_udc_start(struct usb_gadget *gadget, 3022 struct usb_gadget_driver *driver) 3023 { 3024 struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget); 3025 unsigned long flags; 3026 3027 dev_info(udc->dev, "start (driver '%s')\n", driver->driver.name); 3028 3029 spin_lock_irqsave(&udc->lock, flags); 3030 3031 /* hook up the driver */ 3032 udc->driver = driver; 3033 3034 /* Enable VBUS interrupt */ 3035 usbf_reg_writel(udc, USBF_REG_AHBBINTEN, USBF_SYS_VBUS_INTEN); 3036 3037 spin_unlock_irqrestore(&udc->lock, flags); 3038 3039 return 0; 3040 } 3041 3042 static int usbf_udc_stop(struct usb_gadget *gadget) 3043 { 3044 struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget); 3045 unsigned long flags; 3046 3047 spin_lock_irqsave(&udc->lock, flags); 3048 3049 /* Disable VBUS interrupt */ 3050 usbf_reg_writel(udc, USBF_REG_AHBBINTEN, 0); 3051 3052 udc->driver = NULL; 3053 3054 spin_unlock_irqrestore(&udc->lock, flags); 3055 3056 dev_info(udc->dev, "stopped\n"); 3057 3058 return 0; 3059 } 3060 3061 static int usbf_get_frame(struct usb_gadget *gadget) 3062 { 3063 struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget); 3064 3065 return USBF_USB_GET_FRAME(usbf_reg_readl(udc, USBF_REG_USB_ADDRESS)); 3066 } 3067 3068 static void usbf_attach(struct usbf_udc *udc) 3069 { 3070 /* Enable USB signal to Function PHY 3071 * D+ signal Pull-up 3072 * Disable endpoint 0, it will be automatically enable when a USB reset 3073 * is received. 3074 * Disable the other endpoints 3075 */ 3076 usbf_reg_clrset(udc, USBF_REG_USB_CONTROL, 3077 USBF_USB_CONNECTB | USBF_USB_DEFAULT | USBF_USB_CONF, 3078 USBF_USB_PUE2); 3079 3080 /* Enable reset and mode change interrupts */ 3081 usbf_reg_bitset(udc, USBF_REG_USB_INT_ENA, 3082 USBF_USB_USB_RST_EN | USBF_USB_SPEED_MODE_EN | USBF_USB_RSUM_EN | USBF_USB_SPND_EN); 3083 } 3084 3085 static void usbf_detach(struct usbf_udc *udc) 3086 { 3087 int i; 3088 3089 /* Disable interrupts */ 3090 usbf_reg_writel(udc, USBF_REG_USB_INT_ENA, 0); 3091 3092 for (i = 0; i < ARRAY_SIZE(udc->ep); i++) { 3093 if (udc->ep[i].disabled) 3094 continue; 3095 3096 usbf_ep_reset(&udc->ep[i]); 3097 } 3098 3099 /* Disable USB signal to Function PHY 3100 * Do not Pull-up D+ signal 3101 * Disable endpoint 0 3102 * Disable the other endpoints 3103 */ 3104 usbf_reg_clrset(udc, USBF_REG_USB_CONTROL, 3105 USBF_USB_PUE2 | USBF_USB_DEFAULT | USBF_USB_CONF, 3106 USBF_USB_CONNECTB); 3107 } 3108 3109 static int usbf_pullup(struct usb_gadget *gadget, int is_on) 3110 { 3111 struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget); 3112 unsigned long flags; 3113 3114 dev_dbg(udc->dev, "pullup %d\n", is_on); 3115 3116 spin_lock_irqsave(&udc->lock, flags); 3117 if (is_on) 3118 usbf_attach(udc); 3119 else 3120 usbf_detach(udc); 3121 spin_unlock_irqrestore(&udc->lock, flags); 3122 3123 return 0; 3124 } 3125 3126 static int usbf_udc_set_selfpowered(struct usb_gadget *gadget, 3127 int is_selfpowered) 3128 { 3129 struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget); 3130 unsigned long flags; 3131 3132 spin_lock_irqsave(&udc->lock, flags); 3133 gadget->is_selfpowered = (is_selfpowered != 0); 3134 spin_unlock_irqrestore(&udc->lock, flags); 3135 3136 return 0; 3137 } 3138 3139 static int usbf_udc_wakeup(struct usb_gadget *gadget) 3140 { 3141 struct usbf_udc *udc = container_of(gadget, struct usbf_udc, gadget); 3142 unsigned long flags; 3143 int ret; 3144 3145 spin_lock_irqsave(&udc->lock, flags); 3146 3147 if (!udc->is_remote_wakeup) { 3148 dev_dbg(udc->dev, "remote wakeup not allowed\n"); 3149 ret = -EINVAL; 3150 goto end; 3151 } 3152 3153 dev_dbg(udc->dev, "do wakeup\n"); 3154 3155 /* Send the resume signal */ 3156 usbf_reg_bitset(udc, USBF_REG_USB_CONTROL, USBF_USB_RSUM_IN); 3157 usbf_reg_bitclr(udc, USBF_REG_USB_CONTROL, USBF_USB_RSUM_IN); 3158 3159 ret = 0; 3160 end: 3161 spin_unlock_irqrestore(&udc->lock, flags); 3162 return ret; 3163 } 3164 3165 static struct usb_gadget_ops usbf_gadget_ops = { 3166 .get_frame = usbf_get_frame, 3167 .pullup = usbf_pullup, 3168 .udc_start = usbf_udc_start, 3169 .udc_stop = usbf_udc_stop, 3170 .set_selfpowered = usbf_udc_set_selfpowered, 3171 .wakeup = usbf_udc_wakeup, 3172 }; 3173 3174 static int usbf_epn_check(struct usbf_ep *epn) 3175 { 3176 const char *type_txt; 3177 const char *buf_txt; 3178 int ret = 0; 3179 u32 ctrl; 3180 3181 ctrl = usbf_ep_reg_readl(epn, USBF_REG_EPN_CONTROL); 3182 3183 switch (ctrl & USBF_EPN_MODE_MASK) { 3184 case USBF_EPN_MODE_BULK: 3185 type_txt = "bulk"; 3186 if (epn->ep.caps.type_control || epn->ep.caps.type_iso || 3187 !epn->ep.caps.type_bulk || epn->ep.caps.type_int) { 3188 dev_err(epn->udc->dev, 3189 "ep%u caps mismatch, bulk expected\n", epn->id); 3190 ret = -EINVAL; 3191 } 3192 break; 3193 case USBF_EPN_MODE_INTR: 3194 type_txt = "intr"; 3195 if (epn->ep.caps.type_control || epn->ep.caps.type_iso || 3196 epn->ep.caps.type_bulk || !epn->ep.caps.type_int) { 3197 dev_err(epn->udc->dev, 3198 "ep%u caps mismatch, int expected\n", epn->id); 3199 ret = -EINVAL; 3200 } 3201 break; 3202 case USBF_EPN_MODE_ISO: 3203 type_txt = "iso"; 3204 if (epn->ep.caps.type_control || !epn->ep.caps.type_iso || 3205 epn->ep.caps.type_bulk || epn->ep.caps.type_int) { 3206 dev_err(epn->udc->dev, 3207 "ep%u caps mismatch, iso expected\n", epn->id); 3208 ret = -EINVAL; 3209 } 3210 break; 3211 default: 3212 type_txt = "unknown"; 3213 dev_err(epn->udc->dev, "ep%u unknown type\n", epn->id); 3214 ret = -EINVAL; 3215 break; 3216 } 3217 3218 if (ctrl & USBF_EPN_BUF_TYPE_DOUBLE) { 3219 buf_txt = "double"; 3220 if (!usbf_ep_info[epn->id].is_double) { 3221 dev_err(epn->udc->dev, 3222 "ep%u buffer mismatch, double expected\n", 3223 epn->id); 3224 ret = -EINVAL; 3225 } 3226 } else { 3227 buf_txt = "single"; 3228 if (usbf_ep_info[epn->id].is_double) { 3229 dev_err(epn->udc->dev, 3230 "ep%u buffer mismatch, single expected\n", 3231 epn->id); 3232 ret = -EINVAL; 3233 } 3234 } 3235 3236 dev_dbg(epn->udc->dev, "ep%u (%s) %s, %s buffer %u, checked %s\n", 3237 epn->id, epn->ep.name, type_txt, buf_txt, 3238 epn->ep.maxpacket_limit, ret ? "failed" : "ok"); 3239 3240 return ret; 3241 } 3242 3243 static int usbf_probe(struct platform_device *pdev) 3244 { 3245 struct device *dev = &pdev->dev; 3246 struct usbf_udc *udc; 3247 struct usbf_ep *ep; 3248 unsigned int i; 3249 int irq; 3250 int ret; 3251 3252 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL); 3253 if (!udc) 3254 return -ENOMEM; 3255 platform_set_drvdata(pdev, udc); 3256 3257 udc->dev = dev; 3258 spin_lock_init(&udc->lock); 3259 3260 udc->regs = devm_platform_ioremap_resource(pdev, 0); 3261 if (IS_ERR(udc->regs)) 3262 return PTR_ERR(udc->regs); 3263 3264 ret = devm_pm_runtime_enable(&pdev->dev); 3265 if (ret) 3266 return ret; 3267 ret = pm_runtime_resume_and_get(&pdev->dev); 3268 if (ret < 0) 3269 return ret; 3270 3271 dev_info(dev, "USBF version: %08x\n", 3272 usbf_reg_readl(udc, USBF_REG_USBSSVER)); 3273 3274 /* Resetting the PLL is handled via the clock driver as it has common 3275 * registers with USB Host 3276 */ 3277 usbf_reg_bitclr(udc, USBF_REG_EPCTR, USBF_SYS_EPC_RST); 3278 3279 /* modify in register gadget process */ 3280 udc->gadget.speed = USB_SPEED_FULL; 3281 udc->gadget.max_speed = USB_SPEED_HIGH; 3282 udc->gadget.ops = &usbf_gadget_ops; 3283 3284 udc->gadget.name = dev->driver->name; 3285 udc->gadget.dev.parent = dev; 3286 udc->gadget.ep0 = &udc->ep[0].ep; 3287 3288 /* The hardware DMA controller needs dma addresses aligned on 32bit. 3289 * A fallback to pio is done if DMA addresses are not aligned. 3290 */ 3291 udc->gadget.quirk_avoids_skb_reserve = 1; 3292 3293 INIT_LIST_HEAD(&udc->gadget.ep_list); 3294 /* we have a canned request structure to allow sending packets as reply 3295 * to get_status requests 3296 */ 3297 INIT_LIST_HEAD(&udc->setup_reply.queue); 3298 3299 for (i = 0; i < ARRAY_SIZE(udc->ep); i++) { 3300 ep = &udc->ep[i]; 3301 3302 if (!(usbf_reg_readl(udc, USBF_REG_USBSSCONF) & 3303 USBF_SYS_EP_AVAILABLE(i))) { 3304 continue; 3305 } 3306 3307 INIT_LIST_HEAD(&ep->queue); 3308 3309 ep->id = i; 3310 ep->disabled = 1; 3311 ep->udc = udc; 3312 ep->ep.ops = &usbf_ep_ops; 3313 ep->ep.name = usbf_ep_info[i].name; 3314 ep->ep.caps = usbf_ep_info[i].caps; 3315 usb_ep_set_maxpacket_limit(&ep->ep, 3316 usbf_ep_info[i].maxpacket_limit); 3317 3318 if (ep->id == 0) { 3319 ep->regs = ep->udc->regs + USBF_BASE_EP0; 3320 } else { 3321 ep->regs = ep->udc->regs + USBF_BASE_EPN(ep->id - 1); 3322 ret = usbf_epn_check(ep); 3323 if (ret) 3324 return ret; 3325 if (usbf_reg_readl(udc, USBF_REG_USBSSCONF) & 3326 USBF_SYS_DMA_AVAILABLE(i)) { 3327 ep->dma_regs = ep->udc->regs + 3328 USBF_BASE_DMA_EPN(ep->id - 1); 3329 } 3330 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); 3331 } 3332 } 3333 3334 irq = platform_get_irq(pdev, 0); 3335 if (irq < 0) 3336 return irq; 3337 ret = devm_request_irq(dev, irq, usbf_epc_irq, 0, "usbf-epc", udc); 3338 if (ret) 3339 return ret; 3340 3341 irq = platform_get_irq(pdev, 1); 3342 if (irq < 0) 3343 return irq; 3344 ret = devm_request_irq(dev, irq, usbf_ahb_epc_irq, 0, "usbf-ahb-epc", udc); 3345 if (ret) 3346 return ret; 3347 3348 usbf_reg_bitset(udc, USBF_REG_AHBMCTR, USBF_SYS_WBURST_TYPE); 3349 3350 usbf_reg_bitset(udc, USBF_REG_USB_CONTROL, 3351 USBF_USB_INT_SEL | USBF_USB_SOF_RCV | USBF_USB_SOF_CLK_MODE); 3352 3353 ret = usb_add_gadget_udc(dev, &udc->gadget); 3354 if (ret) 3355 return ret; 3356 3357 return 0; 3358 } 3359 3360 static void usbf_remove(struct platform_device *pdev) 3361 { 3362 struct usbf_udc *udc = platform_get_drvdata(pdev); 3363 3364 usb_del_gadget_udc(&udc->gadget); 3365 3366 pm_runtime_put(&pdev->dev); 3367 } 3368 3369 static const struct of_device_id usbf_match[] = { 3370 { .compatible = "renesas,rzn1-usbf" }, 3371 {} /* sentinel */ 3372 }; 3373 MODULE_DEVICE_TABLE(of, usbf_match); 3374 3375 static struct platform_driver udc_driver = { 3376 .driver = { 3377 .name = "usbf_renesas", 3378 .of_match_table = usbf_match, 3379 }, 3380 .probe = usbf_probe, 3381 .remove = usbf_remove, 3382 }; 3383 3384 module_platform_driver(udc_driver); 3385 3386 MODULE_AUTHOR("Herve Codina <herve.codina@bootlin.com>"); 3387 MODULE_DESCRIPTION("Renesas R-Car Gen3 & RZ/N1 USB Function driver"); 3388 MODULE_LICENSE("GPL"); 3389