ep0.c 26 KB

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