ep0.c 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066
  1. /**
  2. * ep0.c - DesignWare USB3 DRD Controller Endpoint 0 Handling
  3. *
  4. * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com
  5. *
  6. * Authors: Felipe Balbi <balbi@ti.com>,
  7. * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
  8. *
  9. * Taken from Linux Kernel v3.19-rc1 (drivers/usb/dwc3/ep0.c) and ported
  10. * to uboot.
  11. *
  12. * commit c00552ebaf : Merge 3.18-rc7 into usb-next
  13. *
  14. * SPDX-License-Identifier: GPL-2.0
  15. */
  16. #include <linux/kernel.h>
  17. #include <linux/list.h>
  18. #include <linux/usb/ch9.h>
  19. #include <linux/usb/gadget.h>
  20. #include <linux/usb/composite.h>
  21. #include "core.h"
  22. #include "gadget.h"
  23. #include "io.h"
  24. #include "linux-compat.h"
  25. static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep);
  26. static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
  27. struct dwc3_ep *dep, struct dwc3_request *req);
  28. static const char *dwc3_ep0_state_string(enum dwc3_ep0_state state)
  29. {
  30. switch (state) {
  31. case EP0_UNCONNECTED:
  32. return "Unconnected";
  33. case EP0_SETUP_PHASE:
  34. return "Setup Phase";
  35. case EP0_DATA_PHASE:
  36. return "Data Phase";
  37. case EP0_STATUS_PHASE:
  38. return "Status Phase";
  39. default:
  40. return "UNKNOWN";
  41. }
  42. }
  43. static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
  44. u32 len, u32 type)
  45. {
  46. struct dwc3_gadget_ep_cmd_params params;
  47. struct dwc3_trb *trb;
  48. struct dwc3_ep *dep;
  49. int ret;
  50. dep = dwc->eps[epnum];
  51. if (dep->flags & DWC3_EP_BUSY) {
  52. dev_vdbg(dwc->dev, "%s still busy", dep->name);
  53. return 0;
  54. }
  55. trb = dwc->ep0_trb;
  56. trb->bpl = lower_32_bits(buf_dma);
  57. trb->bph = upper_32_bits(buf_dma);
  58. trb->size = len;
  59. trb->ctrl = type;
  60. trb->ctrl |= (DWC3_TRB_CTRL_HWO
  61. | DWC3_TRB_CTRL_LST
  62. | DWC3_TRB_CTRL_IOC
  63. | DWC3_TRB_CTRL_ISP_IMI);
  64. memset(&params, 0, sizeof(params));
  65. params.param0 = upper_32_bits(dwc->ep0_trb_addr);
  66. params.param1 = lower_32_bits(dwc->ep0_trb_addr);
  67. ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
  68. DWC3_DEPCMD_STARTTRANSFER, &params);
  69. if (ret < 0) {
  70. dev_dbg(dwc->dev, "%s STARTTRANSFER failed", dep->name);
  71. return ret;
  72. }
  73. dep->flags |= DWC3_EP_BUSY;
  74. dep->resource_index = dwc3_gadget_ep_get_transfer_index(dwc,
  75. dep->number);
  76. dwc->ep0_next_event = DWC3_EP0_COMPLETE;
  77. return 0;
  78. }
  79. static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
  80. struct dwc3_request *req)
  81. {
  82. struct dwc3 *dwc = dep->dwc;
  83. req->request.actual = 0;
  84. req->request.status = -EINPROGRESS;
  85. req->epnum = dep->number;
  86. list_add_tail(&req->list, &dep->request_list);
  87. /*
  88. * Gadget driver might not be quick enough to queue a request
  89. * before we get a Transfer Not Ready event on this endpoint.
  90. *
  91. * In that case, we will set DWC3_EP_PENDING_REQUEST. When that
  92. * flag is set, it's telling us that as soon as Gadget queues the
  93. * required request, we should kick the transfer here because the
  94. * IRQ we were waiting for is long gone.
  95. */
  96. if (dep->flags & DWC3_EP_PENDING_REQUEST) {
  97. unsigned direction;
  98. direction = !!(dep->flags & DWC3_EP0_DIR_IN);
  99. if (dwc->ep0state != EP0_DATA_PHASE) {
  100. dev_WARN(dwc->dev, "Unexpected pending request\n");
  101. return 0;
  102. }
  103. __dwc3_ep0_do_control_data(dwc, dwc->eps[direction], req);
  104. dep->flags &= ~(DWC3_EP_PENDING_REQUEST |
  105. DWC3_EP0_DIR_IN);
  106. return 0;
  107. }
  108. /*
  109. * In case gadget driver asked us to delay the STATUS phase,
  110. * handle it here.
  111. */
  112. if (dwc->delayed_status) {
  113. unsigned direction;
  114. direction = !dwc->ep0_expect_in;
  115. dwc->delayed_status = false;
  116. usb_gadget_set_state(&dwc->gadget, USB_STATE_CONFIGURED);
  117. if (dwc->ep0state == EP0_STATUS_PHASE)
  118. __dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
  119. else
  120. dev_dbg(dwc->dev, "too early for delayed status");
  121. return 0;
  122. }
  123. /*
  124. * Unfortunately we have uncovered a limitation wrt the Data Phase.
  125. *
  126. * Section 9.4 says we can wait for the XferNotReady(DATA) event to
  127. * come before issueing Start Transfer command, but if we do, we will
  128. * miss situations where the host starts another SETUP phase instead of
  129. * the DATA phase. Such cases happen at least on TD.7.6 of the Link
  130. * Layer Compliance Suite.
  131. *
  132. * The problem surfaces due to the fact that in case of back-to-back
  133. * SETUP packets there will be no XferNotReady(DATA) generated and we
  134. * will be stuck waiting for XferNotReady(DATA) forever.
  135. *
  136. * By looking at tables 9-13 and 9-14 of the Databook, we can see that
  137. * it tells us to start Data Phase right away. It also mentions that if
  138. * we receive a SETUP phase instead of the DATA phase, core will issue
  139. * XferComplete for the DATA phase, before actually initiating it in
  140. * the wire, with the TRB's status set to "SETUP_PENDING". Such status
  141. * can only be used to print some debugging logs, as the core expects
  142. * us to go through to the STATUS phase and start a CONTROL_STATUS TRB,
  143. * just so it completes right away, without transferring anything and,
  144. * only then, we can go back to the SETUP phase.
  145. *
  146. * Because of this scenario, SNPS decided to change the programming
  147. * model of control transfers and support on-demand transfers only for
  148. * the STATUS phase. To fix the issue we have now, we will always wait
  149. * for gadget driver to queue the DATA phase's struct usb_request, then
  150. * start it right away.
  151. *
  152. * If we're actually in a 2-stage transfer, we will wait for
  153. * XferNotReady(STATUS).
  154. */
  155. if (dwc->three_stage_setup) {
  156. unsigned direction;
  157. direction = dwc->ep0_expect_in;
  158. dwc->ep0state = EP0_DATA_PHASE;
  159. __dwc3_ep0_do_control_data(dwc, dwc->eps[direction], req);
  160. dep->flags &= ~DWC3_EP0_DIR_IN;
  161. }
  162. return 0;
  163. }
  164. int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
  165. gfp_t gfp_flags)
  166. {
  167. struct dwc3_request *req = to_dwc3_request(request);
  168. struct dwc3_ep *dep = to_dwc3_ep(ep);
  169. struct dwc3 *dwc = dep->dwc;
  170. unsigned long flags;
  171. int ret;
  172. spin_lock_irqsave(&dwc->lock, flags);
  173. if (!dep->endpoint.desc) {
  174. dev_dbg(dwc->dev, "trying to queue request %p to disabled %s",
  175. request, dep->name);
  176. ret = -ESHUTDOWN;
  177. goto out;
  178. }
  179. /* we share one TRB for ep0/1 */
  180. if (!list_empty(&dep->request_list)) {
  181. ret = -EBUSY;
  182. goto out;
  183. }
  184. dev_vdbg(dwc->dev, "queueing request %p to %s length %d state '%s'",
  185. request, dep->name, request->length,
  186. dwc3_ep0_state_string(dwc->ep0state));
  187. ret = __dwc3_gadget_ep0_queue(dep, req);
  188. out:
  189. spin_unlock_irqrestore(&dwc->lock, flags);
  190. return ret;
  191. }
  192. static void dwc3_ep0_stall_and_restart(struct dwc3 *dwc)
  193. {
  194. struct dwc3_ep *dep;
  195. /* reinitialize physical ep1 */
  196. dep = dwc->eps[1];
  197. dep->flags = DWC3_EP_ENABLED;
  198. /* stall is always issued on EP0 */
  199. dep = dwc->eps[0];
  200. __dwc3_gadget_ep_set_halt(dep, 1, false);
  201. dep->flags = DWC3_EP_ENABLED;
  202. dwc->delayed_status = false;
  203. if (!list_empty(&dep->request_list)) {
  204. struct dwc3_request *req;
  205. req = next_request(&dep->request_list);
  206. dwc3_gadget_giveback(dep, req, -ECONNRESET);
  207. }
  208. dwc->ep0state = EP0_SETUP_PHASE;
  209. dwc3_ep0_out_start(dwc);
  210. }
  211. int __dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value)
  212. {
  213. struct dwc3_ep *dep = to_dwc3_ep(ep);
  214. struct dwc3 *dwc = dep->dwc;
  215. dwc3_ep0_stall_and_restart(dwc);
  216. return 0;
  217. }
  218. int dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value)
  219. {
  220. unsigned long flags;
  221. int ret;
  222. spin_lock_irqsave(&dwc->lock, flags);
  223. ret = __dwc3_gadget_ep0_set_halt(ep, value);
  224. spin_unlock_irqrestore(&dwc->lock, flags);
  225. return ret;
  226. }
  227. void dwc3_ep0_out_start(struct dwc3 *dwc)
  228. {
  229. int ret;
  230. ret = dwc3_ep0_start_trans(dwc, 0, dwc->ctrl_req_addr, 8,
  231. DWC3_TRBCTL_CONTROL_SETUP);
  232. WARN_ON(ret < 0);
  233. }
  234. static struct dwc3_ep *dwc3_wIndex_to_dep(struct dwc3 *dwc, __le16 wIndex_le)
  235. {
  236. struct dwc3_ep *dep;
  237. u32 windex = le16_to_cpu(wIndex_le);
  238. u32 epnum;
  239. epnum = (windex & USB_ENDPOINT_NUMBER_MASK) << 1;
  240. if ((windex & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
  241. epnum |= 1;
  242. dep = dwc->eps[epnum];
  243. if (dep->flags & DWC3_EP_ENABLED)
  244. return dep;
  245. return NULL;
  246. }
  247. static void dwc3_ep0_status_cmpl(struct usb_ep *ep, struct usb_request *req)
  248. {
  249. }
  250. /*
  251. * ch 9.4.5
  252. */
  253. static int dwc3_ep0_handle_status(struct dwc3 *dwc,
  254. struct usb_ctrlrequest *ctrl)
  255. {
  256. struct dwc3_ep *dep;
  257. u32 recip;
  258. u32 reg;
  259. u16 usb_status = 0;
  260. __le16 *response_pkt;
  261. recip = ctrl->bRequestType & USB_RECIP_MASK;
  262. switch (recip) {
  263. case USB_RECIP_DEVICE:
  264. /*
  265. * LTM will be set once we know how to set this in HW.
  266. */
  267. usb_status |= dwc->is_selfpowered << USB_DEVICE_SELF_POWERED;
  268. if (dwc->speed == DWC3_DSTS_SUPERSPEED) {
  269. reg = dwc3_readl(dwc->regs, DWC3_DCTL);
  270. if (reg & DWC3_DCTL_INITU1ENA)
  271. usb_status |= 1 << USB_DEV_STAT_U1_ENABLED;
  272. if (reg & DWC3_DCTL_INITU2ENA)
  273. usb_status |= 1 << USB_DEV_STAT_U2_ENABLED;
  274. }
  275. break;
  276. case USB_RECIP_INTERFACE:
  277. /*
  278. * Function Remote Wake Capable D0
  279. * Function Remote Wakeup D1
  280. */
  281. break;
  282. case USB_RECIP_ENDPOINT:
  283. dep = dwc3_wIndex_to_dep(dwc, ctrl->wIndex);
  284. if (!dep)
  285. return -EINVAL;
  286. if (dep->flags & DWC3_EP_STALL)
  287. usb_status = 1 << USB_ENDPOINT_HALT;
  288. break;
  289. default:
  290. return -EINVAL;
  291. }
  292. response_pkt = (__le16 *) dwc->setup_buf;
  293. *response_pkt = cpu_to_le16(usb_status);
  294. dep = dwc->eps[0];
  295. dwc->ep0_usb_req.dep = dep;
  296. dwc->ep0_usb_req.request.length = sizeof(*response_pkt);
  297. dwc->ep0_usb_req.request.buf = dwc->setup_buf;
  298. dwc->ep0_usb_req.request.complete = dwc3_ep0_status_cmpl;
  299. return __dwc3_gadget_ep0_queue(dep, &dwc->ep0_usb_req);
  300. }
  301. static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
  302. struct usb_ctrlrequest *ctrl, int set)
  303. {
  304. struct dwc3_ep *dep;
  305. u32 recip;
  306. u32 wValue;
  307. u32 wIndex;
  308. u32 reg;
  309. int ret;
  310. enum usb_device_state state;
  311. wValue = le16_to_cpu(ctrl->wValue);
  312. wIndex = le16_to_cpu(ctrl->wIndex);
  313. recip = ctrl->bRequestType & USB_RECIP_MASK;
  314. state = dwc->gadget.state;
  315. switch (recip) {
  316. case USB_RECIP_DEVICE:
  317. switch (wValue) {
  318. case USB_DEVICE_REMOTE_WAKEUP:
  319. break;
  320. /*
  321. * 9.4.1 says only only for SS, in AddressState only for
  322. * default control pipe
  323. */
  324. case USB_DEVICE_U1_ENABLE:
  325. if (state != USB_STATE_CONFIGURED)
  326. return -EINVAL;
  327. if (dwc->speed != DWC3_DSTS_SUPERSPEED)
  328. return -EINVAL;
  329. reg = dwc3_readl(dwc->regs, DWC3_DCTL);
  330. if (set)
  331. reg |= DWC3_DCTL_INITU1ENA;
  332. else
  333. reg &= ~DWC3_DCTL_INITU1ENA;
  334. dwc3_writel(dwc->regs, DWC3_DCTL, reg);
  335. break;
  336. case USB_DEVICE_U2_ENABLE:
  337. if (state != USB_STATE_CONFIGURED)
  338. return -EINVAL;
  339. if (dwc->speed != DWC3_DSTS_SUPERSPEED)
  340. return -EINVAL;
  341. reg = dwc3_readl(dwc->regs, DWC3_DCTL);
  342. if (set)
  343. reg |= DWC3_DCTL_INITU2ENA;
  344. else
  345. reg &= ~DWC3_DCTL_INITU2ENA;
  346. dwc3_writel(dwc->regs, DWC3_DCTL, reg);
  347. break;
  348. case USB_DEVICE_LTM_ENABLE:
  349. return -EINVAL;
  350. case USB_DEVICE_TEST_MODE:
  351. if ((wIndex & 0xff) != 0)
  352. return -EINVAL;
  353. if (!set)
  354. return -EINVAL;
  355. dwc->test_mode_nr = wIndex >> 8;
  356. dwc->test_mode = true;
  357. break;
  358. default:
  359. return -EINVAL;
  360. }
  361. break;
  362. case USB_RECIP_INTERFACE:
  363. switch (wValue) {
  364. case USB_INTRF_FUNC_SUSPEND:
  365. if (wIndex & USB_INTRF_FUNC_SUSPEND_LP)
  366. /* XXX enable Low power suspend */
  367. ;
  368. if (wIndex & USB_INTRF_FUNC_SUSPEND_RW)
  369. /* XXX enable remote wakeup */
  370. ;
  371. break;
  372. default:
  373. return -EINVAL;
  374. }
  375. break;
  376. case USB_RECIP_ENDPOINT:
  377. switch (wValue) {
  378. case USB_ENDPOINT_HALT:
  379. dep = dwc3_wIndex_to_dep(dwc, wIndex);
  380. if (!dep)
  381. return -EINVAL;
  382. if (set == 0 && (dep->flags & DWC3_EP_WEDGE))
  383. break;
  384. ret = __dwc3_gadget_ep_set_halt(dep, set, true);
  385. if (ret)
  386. return -EINVAL;
  387. break;
  388. default:
  389. return -EINVAL;
  390. }
  391. break;
  392. default:
  393. return -EINVAL;
  394. }
  395. return 0;
  396. }
  397. static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
  398. {
  399. enum usb_device_state state = dwc->gadget.state;
  400. u32 addr;
  401. u32 reg;
  402. addr = le16_to_cpu(ctrl->wValue);
  403. if (addr > 127) {
  404. dev_dbg(dwc->dev, "invalid device address %d", addr);
  405. return -EINVAL;
  406. }
  407. if (state == USB_STATE_CONFIGURED) {
  408. dev_dbg(dwc->dev, "trying to set address when configured");
  409. return -EINVAL;
  410. }
  411. reg = dwc3_readl(dwc->regs, DWC3_DCFG);
  412. reg &= ~(DWC3_DCFG_DEVADDR_MASK);
  413. reg |= DWC3_DCFG_DEVADDR(addr);
  414. dwc3_writel(dwc->regs, DWC3_DCFG, reg);
  415. if (addr)
  416. usb_gadget_set_state(&dwc->gadget, USB_STATE_ADDRESS);
  417. else
  418. usb_gadget_set_state(&dwc->gadget, USB_STATE_DEFAULT);
  419. return 0;
  420. }
  421. static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
  422. {
  423. int ret;
  424. spin_unlock(&dwc->lock);
  425. ret = dwc->gadget_driver->setup(&dwc->gadget, ctrl);
  426. spin_lock(&dwc->lock);
  427. return ret;
  428. }
  429. static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
  430. {
  431. enum usb_device_state state = dwc->gadget.state;
  432. u32 cfg;
  433. int ret;
  434. u32 reg;
  435. dwc->start_config_issued = false;
  436. cfg = le16_to_cpu(ctrl->wValue);
  437. switch (state) {
  438. case USB_STATE_DEFAULT:
  439. return -EINVAL;
  440. case USB_STATE_ADDRESS:
  441. ret = dwc3_ep0_delegate_req(dwc, ctrl);
  442. /* if the cfg matches and the cfg is non zero */
  443. if (cfg && (!ret || (ret == USB_GADGET_DELAYED_STATUS))) {
  444. /*
  445. * only change state if set_config has already
  446. * been processed. If gadget driver returns
  447. * USB_GADGET_DELAYED_STATUS, we will wait
  448. * to change the state on the next usb_ep_queue()
  449. */
  450. if (ret == 0)
  451. usb_gadget_set_state(&dwc->gadget,
  452. USB_STATE_CONFIGURED);
  453. /*
  454. * Enable transition to U1/U2 state when
  455. * nothing is pending from application.
  456. */
  457. reg = dwc3_readl(dwc->regs, DWC3_DCTL);
  458. reg |= (DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA);
  459. dwc3_writel(dwc->regs, DWC3_DCTL, reg);
  460. dwc->resize_fifos = true;
  461. dev_dbg(dwc->dev, "resize FIFOs flag SET");
  462. }
  463. break;
  464. case USB_STATE_CONFIGURED:
  465. ret = dwc3_ep0_delegate_req(dwc, ctrl);
  466. if (!cfg && !ret)
  467. usb_gadget_set_state(&dwc->gadget,
  468. USB_STATE_ADDRESS);
  469. break;
  470. default:
  471. ret = -EINVAL;
  472. }
  473. return ret;
  474. }
  475. static void dwc3_ep0_set_sel_cmpl(struct usb_ep *ep, struct usb_request *req)
  476. {
  477. struct dwc3_ep *dep = to_dwc3_ep(ep);
  478. struct dwc3 *dwc = dep->dwc;
  479. u32 param = 0;
  480. u32 reg;
  481. struct timing {
  482. u8 u1sel;
  483. u8 u1pel;
  484. u16 u2sel;
  485. u16 u2pel;
  486. } __packed timing;
  487. int ret;
  488. memcpy(&timing, req->buf, sizeof(timing));
  489. dwc->u1sel = timing.u1sel;
  490. dwc->u1pel = timing.u1pel;
  491. dwc->u2sel = le16_to_cpu(timing.u2sel);
  492. dwc->u2pel = le16_to_cpu(timing.u2pel);
  493. reg = dwc3_readl(dwc->regs, DWC3_DCTL);
  494. if (reg & DWC3_DCTL_INITU2ENA)
  495. param = dwc->u2pel;
  496. if (reg & DWC3_DCTL_INITU1ENA)
  497. param = dwc->u1pel;
  498. /*
  499. * According to Synopsys Databook, if parameter is
  500. * greater than 125, a value of zero should be
  501. * programmed in the register.
  502. */
  503. if (param > 125)
  504. param = 0;
  505. /* now that we have the time, issue DGCMD Set Sel */
  506. ret = dwc3_send_gadget_generic_command(dwc,
  507. DWC3_DGCMD_SET_PERIODIC_PAR, param);
  508. WARN_ON(ret < 0);
  509. }
  510. static int dwc3_ep0_set_sel(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
  511. {
  512. struct dwc3_ep *dep;
  513. enum usb_device_state state = dwc->gadget.state;
  514. u16 wLength;
  515. if (state == USB_STATE_DEFAULT)
  516. return -EINVAL;
  517. wLength = le16_to_cpu(ctrl->wLength);
  518. if (wLength != 6) {
  519. dev_err(dwc->dev, "Set SEL should be 6 bytes, got %d\n",
  520. wLength);
  521. return -EINVAL;
  522. }
  523. /*
  524. * To handle Set SEL we need to receive 6 bytes from Host. So let's
  525. * queue a usb_request for 6 bytes.
  526. *
  527. * Remember, though, this controller can't handle non-wMaxPacketSize
  528. * aligned transfers on the OUT direction, so we queue a request for
  529. * wMaxPacketSize instead.
  530. */
  531. dep = dwc->eps[0];
  532. dwc->ep0_usb_req.dep = dep;
  533. dwc->ep0_usb_req.request.length = dep->endpoint.maxpacket;
  534. dwc->ep0_usb_req.request.buf = dwc->setup_buf;
  535. dwc->ep0_usb_req.request.complete = dwc3_ep0_set_sel_cmpl;
  536. return __dwc3_gadget_ep0_queue(dep, &dwc->ep0_usb_req);
  537. }
  538. static int dwc3_ep0_set_isoch_delay(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
  539. {
  540. u16 wLength;
  541. u16 wValue;
  542. u16 wIndex;
  543. wValue = le16_to_cpu(ctrl->wValue);
  544. wLength = le16_to_cpu(ctrl->wLength);
  545. wIndex = le16_to_cpu(ctrl->wIndex);
  546. if (wIndex || wLength)
  547. return -EINVAL;
  548. /*
  549. * REVISIT It's unclear from Databook what to do with this
  550. * value. For now, just cache it.
  551. */
  552. dwc->isoch_delay = wValue;
  553. return 0;
  554. }
  555. static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
  556. {
  557. int ret;
  558. switch (ctrl->bRequest) {
  559. case USB_REQ_GET_STATUS:
  560. dev_vdbg(dwc->dev, "USB_REQ_GET_STATUS");
  561. ret = dwc3_ep0_handle_status(dwc, ctrl);
  562. break;
  563. case USB_REQ_CLEAR_FEATURE:
  564. dev_vdbg(dwc->dev, "USB_REQ_CLEAR_FEATURE");
  565. ret = dwc3_ep0_handle_feature(dwc, ctrl, 0);
  566. break;
  567. case USB_REQ_SET_FEATURE:
  568. dev_vdbg(dwc->dev, "USB_REQ_SET_FEATURE");
  569. ret = dwc3_ep0_handle_feature(dwc, ctrl, 1);
  570. break;
  571. case USB_REQ_SET_ADDRESS:
  572. dev_vdbg(dwc->dev, "USB_REQ_SET_ADDRESS");
  573. ret = dwc3_ep0_set_address(dwc, ctrl);
  574. break;
  575. case USB_REQ_SET_CONFIGURATION:
  576. dev_vdbg(dwc->dev, "USB_REQ_SET_CONFIGURATION");
  577. ret = dwc3_ep0_set_config(dwc, ctrl);
  578. break;
  579. case USB_REQ_SET_SEL:
  580. dev_vdbg(dwc->dev, "USB_REQ_SET_SEL");
  581. ret = dwc3_ep0_set_sel(dwc, ctrl);
  582. break;
  583. case USB_REQ_SET_ISOCH_DELAY:
  584. dev_vdbg(dwc->dev, "USB_REQ_SET_ISOCH_DELAY");
  585. ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
  586. break;
  587. default:
  588. dev_vdbg(dwc->dev, "Forwarding to gadget driver");
  589. ret = dwc3_ep0_delegate_req(dwc, ctrl);
  590. break;
  591. }
  592. return ret;
  593. }
  594. static void dwc3_ep0_inspect_setup(struct dwc3 *dwc,
  595. const struct dwc3_event_depevt *event)
  596. {
  597. struct usb_ctrlrequest *ctrl = dwc->ctrl_req;
  598. int ret = -EINVAL;
  599. u32 len;
  600. if (!dwc->gadget_driver)
  601. goto out;
  602. len = le16_to_cpu(ctrl->wLength);
  603. if (!len) {
  604. dwc->three_stage_setup = false;
  605. dwc->ep0_expect_in = false;
  606. dwc->ep0_next_event = DWC3_EP0_NRDY_STATUS;
  607. } else {
  608. dwc->three_stage_setup = true;
  609. dwc->ep0_expect_in = !!(ctrl->bRequestType & USB_DIR_IN);
  610. dwc->ep0_next_event = DWC3_EP0_NRDY_DATA;
  611. }
  612. if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD)
  613. ret = dwc3_ep0_std_request(dwc, ctrl);
  614. else
  615. ret = dwc3_ep0_delegate_req(dwc, ctrl);
  616. if (ret == USB_GADGET_DELAYED_STATUS)
  617. dwc->delayed_status = true;
  618. out:
  619. if (ret < 0)
  620. dwc3_ep0_stall_and_restart(dwc);
  621. }
  622. static void dwc3_ep0_complete_data(struct dwc3 *dwc,
  623. const struct dwc3_event_depevt *event)
  624. {
  625. struct dwc3_request *r = NULL;
  626. struct usb_request *ur;
  627. struct dwc3_trb *trb;
  628. struct dwc3_ep *ep0;
  629. u32 transferred;
  630. u32 status;
  631. u32 length;
  632. u8 epnum;
  633. epnum = event->endpoint_number;
  634. ep0 = dwc->eps[0];
  635. dwc->ep0_next_event = DWC3_EP0_NRDY_STATUS;
  636. trb = dwc->ep0_trb;
  637. r = next_request(&ep0->request_list);
  638. if (!r)
  639. return;
  640. status = DWC3_TRB_SIZE_TRBSTS(trb->size);
  641. if (status == DWC3_TRBSTS_SETUP_PENDING) {
  642. dev_dbg(dwc->dev, "Setup Pending received");
  643. if (r)
  644. dwc3_gadget_giveback(ep0, r, -ECONNRESET);
  645. return;
  646. }
  647. ur = &r->request;
  648. length = trb->size & DWC3_TRB_SIZE_MASK;
  649. if (dwc->ep0_bounced) {
  650. unsigned transfer_size = ur->length;
  651. unsigned maxp = ep0->endpoint.maxpacket;
  652. transfer_size += (maxp - (transfer_size % maxp));
  653. transferred = min_t(u32, ur->length,
  654. transfer_size - length);
  655. memcpy(ur->buf, dwc->ep0_bounce, transferred);
  656. } else {
  657. transferred = ur->length - length;
  658. }
  659. ur->actual += transferred;
  660. if ((epnum & 1) && ur->actual < ur->length) {
  661. /* for some reason we did not get everything out */
  662. dwc3_ep0_stall_and_restart(dwc);
  663. } else {
  664. dwc3_gadget_giveback(ep0, r, 0);
  665. if (IS_ALIGNED(ur->length, ep0->endpoint.maxpacket) &&
  666. ur->length && ur->zero) {
  667. int ret;
  668. dwc->ep0_next_event = DWC3_EP0_COMPLETE;
  669. ret = dwc3_ep0_start_trans(dwc, epnum,
  670. dwc->ctrl_req_addr, 0,
  671. DWC3_TRBCTL_CONTROL_DATA);
  672. WARN_ON(ret < 0);
  673. }
  674. }
  675. }
  676. static void dwc3_ep0_complete_status(struct dwc3 *dwc,
  677. const struct dwc3_event_depevt *event)
  678. {
  679. struct dwc3_request *r;
  680. struct dwc3_ep *dep;
  681. struct dwc3_trb *trb;
  682. u32 status;
  683. dep = dwc->eps[0];
  684. trb = dwc->ep0_trb;
  685. if (!list_empty(&dep->request_list)) {
  686. r = next_request(&dep->request_list);
  687. dwc3_gadget_giveback(dep, r, 0);
  688. }
  689. if (dwc->test_mode) {
  690. int ret;
  691. ret = dwc3_gadget_set_test_mode(dwc, dwc->test_mode_nr);
  692. if (ret < 0) {
  693. dev_dbg(dwc->dev, "Invalid Test #%d",
  694. dwc->test_mode_nr);
  695. dwc3_ep0_stall_and_restart(dwc);
  696. return;
  697. }
  698. }
  699. status = DWC3_TRB_SIZE_TRBSTS(trb->size);
  700. if (status == DWC3_TRBSTS_SETUP_PENDING)
  701. dev_dbg(dwc->dev, "Setup Pending received");
  702. dwc->ep0state = EP0_SETUP_PHASE;
  703. dwc3_ep0_out_start(dwc);
  704. }
  705. static void dwc3_ep0_xfer_complete(struct dwc3 *dwc,
  706. const struct dwc3_event_depevt *event)
  707. {
  708. struct dwc3_ep *dep = dwc->eps[event->endpoint_number];
  709. dep->flags &= ~DWC3_EP_BUSY;
  710. dep->resource_index = 0;
  711. dwc->setup_packet_pending = false;
  712. switch (dwc->ep0state) {
  713. case EP0_SETUP_PHASE:
  714. dev_vdbg(dwc->dev, "Setup Phase");
  715. dwc3_ep0_inspect_setup(dwc, event);
  716. break;
  717. case EP0_DATA_PHASE:
  718. dev_vdbg(dwc->dev, "Data Phase");
  719. dwc3_ep0_complete_data(dwc, event);
  720. break;
  721. case EP0_STATUS_PHASE:
  722. dev_vdbg(dwc->dev, "Status Phase");
  723. dwc3_ep0_complete_status(dwc, event);
  724. break;
  725. default:
  726. WARN(true, "UNKNOWN ep0state %d\n", dwc->ep0state);
  727. }
  728. }
  729. static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
  730. struct dwc3_ep *dep, struct dwc3_request *req)
  731. {
  732. int ret;
  733. req->direction = !!dep->number;
  734. if (req->request.length == 0) {
  735. ret = dwc3_ep0_start_trans(dwc, dep->number,
  736. dwc->ctrl_req_addr, 0,
  737. DWC3_TRBCTL_CONTROL_DATA);
  738. } else if (!IS_ALIGNED(req->request.length, dep->endpoint.maxpacket)
  739. && (dep->number == 0)) {
  740. u32 transfer_size;
  741. u32 maxpacket;
  742. ret = usb_gadget_map_request(&dwc->gadget, &req->request,
  743. dep->number);
  744. if (ret) {
  745. dev_dbg(dwc->dev, "failed to map request\n");
  746. return;
  747. }
  748. WARN_ON(req->request.length > DWC3_EP0_BOUNCE_SIZE);
  749. maxpacket = dep->endpoint.maxpacket;
  750. transfer_size = roundup(req->request.length, maxpacket);
  751. dwc->ep0_bounced = true;
  752. /*
  753. * REVISIT in case request length is bigger than
  754. * DWC3_EP0_BOUNCE_SIZE we will need two chained
  755. * TRBs to handle the transfer.
  756. */
  757. ret = dwc3_ep0_start_trans(dwc, dep->number,
  758. dwc->ep0_bounce_addr, transfer_size,
  759. DWC3_TRBCTL_CONTROL_DATA);
  760. } else {
  761. ret = usb_gadget_map_request(&dwc->gadget, &req->request,
  762. dep->number);
  763. if (ret) {
  764. dev_dbg(dwc->dev, "failed to map request\n");
  765. return;
  766. }
  767. ret = dwc3_ep0_start_trans(dwc, dep->number, req->request.dma,
  768. req->request.length, DWC3_TRBCTL_CONTROL_DATA);
  769. }
  770. WARN_ON(ret < 0);
  771. }
  772. static int dwc3_ep0_start_control_status(struct dwc3_ep *dep)
  773. {
  774. struct dwc3 *dwc = dep->dwc;
  775. u32 type;
  776. type = dwc->three_stage_setup ? DWC3_TRBCTL_CONTROL_STATUS3
  777. : DWC3_TRBCTL_CONTROL_STATUS2;
  778. return dwc3_ep0_start_trans(dwc, dep->number,
  779. dwc->ctrl_req_addr, 0, type);
  780. }
  781. static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep)
  782. {
  783. if (dwc->resize_fifos) {
  784. dev_dbg(dwc->dev, "Resizing FIFOs");
  785. dwc3_gadget_resize_tx_fifos(dwc);
  786. dwc->resize_fifos = 0;
  787. }
  788. WARN_ON(dwc3_ep0_start_control_status(dep));
  789. }
  790. static void dwc3_ep0_do_control_status(struct dwc3 *dwc,
  791. const struct dwc3_event_depevt *event)
  792. {
  793. struct dwc3_ep *dep = dwc->eps[event->endpoint_number];
  794. __dwc3_ep0_do_control_status(dwc, dep);
  795. }
  796. static void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep)
  797. {
  798. struct dwc3_gadget_ep_cmd_params params;
  799. u32 cmd;
  800. int ret;
  801. if (!dep->resource_index)
  802. return;
  803. cmd = DWC3_DEPCMD_ENDTRANSFER;
  804. cmd |= DWC3_DEPCMD_CMDIOC;
  805. cmd |= DWC3_DEPCMD_PARAM(dep->resource_index);
  806. memset(&params, 0, sizeof(params));
  807. ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params);
  808. WARN_ON_ONCE(ret);
  809. dep->resource_index = 0;
  810. }
  811. static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
  812. const struct dwc3_event_depevt *event)
  813. {
  814. dwc->setup_packet_pending = true;
  815. switch (event->status) {
  816. case DEPEVT_STATUS_CONTROL_DATA:
  817. dev_vdbg(dwc->dev, "Control Data");
  818. /*
  819. * We already have a DATA transfer in the controller's cache,
  820. * if we receive a XferNotReady(DATA) we will ignore it, unless
  821. * it's for the wrong direction.
  822. *
  823. * In that case, we must issue END_TRANSFER command to the Data
  824. * Phase we already have started and issue SetStall on the
  825. * control endpoint.
  826. */
  827. if (dwc->ep0_expect_in != event->endpoint_number) {
  828. struct dwc3_ep *dep = dwc->eps[dwc->ep0_expect_in];
  829. dev_vdbg(dwc->dev, "Wrong direction for Data phase");
  830. dwc3_ep0_end_control_data(dwc, dep);
  831. dwc3_ep0_stall_and_restart(dwc);
  832. return;
  833. }
  834. break;
  835. case DEPEVT_STATUS_CONTROL_STATUS:
  836. if (dwc->ep0_next_event != DWC3_EP0_NRDY_STATUS)
  837. return;
  838. dev_vdbg(dwc->dev, "Control Status");
  839. dwc->ep0state = EP0_STATUS_PHASE;
  840. if (dwc->delayed_status) {
  841. WARN_ON_ONCE(event->endpoint_number != 1);
  842. dev_vdbg(dwc->dev, "Delayed Status");
  843. return;
  844. }
  845. dwc3_ep0_do_control_status(dwc, event);
  846. }
  847. }
  848. void dwc3_ep0_interrupt(struct dwc3 *dwc,
  849. const struct dwc3_event_depevt *event)
  850. {
  851. u8 epnum = event->endpoint_number;
  852. dev_dbg(dwc->dev, "%s while ep%d%s in state '%s'",
  853. dwc3_ep_event_string(event->endpoint_event),
  854. epnum >> 1, (epnum & 1) ? "in" : "out",
  855. dwc3_ep0_state_string(dwc->ep0state));
  856. switch (event->endpoint_event) {
  857. case DWC3_DEPEVT_XFERCOMPLETE:
  858. dwc3_ep0_xfer_complete(dwc, event);
  859. break;
  860. case DWC3_DEPEVT_XFERNOTREADY:
  861. dwc3_ep0_xfernotready(dwc, event);
  862. break;
  863. case DWC3_DEPEVT_XFERINPROGRESS:
  864. case DWC3_DEPEVT_RXTXFIFOEVT:
  865. case DWC3_DEPEVT_STREAMEVT:
  866. case DWC3_DEPEVT_EPCMDCMPLT:
  867. break;
  868. }
  869. }