renesas_usb3.c 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977
  1. /*
  2. * Renesas USB3.0 Peripheral driver (USB gadget)
  3. *
  4. * Copyright (C) 2015 Renesas Electronics Corporation
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; version 2 of the License.
  9. */
  10. #include <linux/delay.h>
  11. #include <linux/err.h>
  12. #include <linux/interrupt.h>
  13. #include <linux/io.h>
  14. #include <linux/module.h>
  15. #include <linux/of_device.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/pm_runtime.h>
  18. #include <linux/sizes.h>
  19. #include <linux/slab.h>
  20. #include <linux/usb/ch9.h>
  21. #include <linux/usb/gadget.h>
  22. /* register definitions */
  23. #define USB3_AXI_INT_STA 0x008
  24. #define USB3_AXI_INT_ENA 0x00c
  25. #define USB3_DMA_INT_STA 0x010
  26. #define USB3_DMA_INT_ENA 0x014
  27. #define USB3_USB_COM_CON 0x200
  28. #define USB3_USB20_CON 0x204
  29. #define USB3_USB30_CON 0x208
  30. #define USB3_USB_STA 0x210
  31. #define USB3_DRD_CON 0x218
  32. #define USB3_USB_INT_STA_1 0x220
  33. #define USB3_USB_INT_STA_2 0x224
  34. #define USB3_USB_INT_ENA_1 0x228
  35. #define USB3_USB_INT_ENA_2 0x22c
  36. #define USB3_STUP_DAT_0 0x230
  37. #define USB3_STUP_DAT_1 0x234
  38. #define USB3_P0_MOD 0x280
  39. #define USB3_P0_CON 0x288
  40. #define USB3_P0_STA 0x28c
  41. #define USB3_P0_INT_STA 0x290
  42. #define USB3_P0_INT_ENA 0x294
  43. #define USB3_P0_LNG 0x2a0
  44. #define USB3_P0_READ 0x2a4
  45. #define USB3_P0_WRITE 0x2a8
  46. #define USB3_PIPE_COM 0x2b0
  47. #define USB3_PN_MOD 0x2c0
  48. #define USB3_PN_RAMMAP 0x2c4
  49. #define USB3_PN_CON 0x2c8
  50. #define USB3_PN_STA 0x2cc
  51. #define USB3_PN_INT_STA 0x2d0
  52. #define USB3_PN_INT_ENA 0x2d4
  53. #define USB3_PN_LNG 0x2e0
  54. #define USB3_PN_READ 0x2e4
  55. #define USB3_PN_WRITE 0x2e8
  56. #define USB3_SSIFCMD 0x340
  57. /* AXI_INT_ENA and AXI_INT_STA */
  58. #define AXI_INT_DMAINT BIT(31)
  59. #define AXI_INT_EPCINT BIT(30)
  60. /* LCLKSEL */
  61. #define LCLKSEL_LSEL BIT(18)
  62. /* USB_COM_CON */
  63. #define USB_COM_CON_CONF BIT(24)
  64. #define USB_COM_CON_SPD_MODE BIT(17)
  65. #define USB_COM_CON_EP0_EN BIT(16)
  66. #define USB_COM_CON_DEV_ADDR_SHIFT 8
  67. #define USB_COM_CON_DEV_ADDR_MASK GENMASK(14, USB_COM_CON_DEV_ADDR_SHIFT)
  68. #define USB_COM_CON_DEV_ADDR(n) (((n) << USB_COM_CON_DEV_ADDR_SHIFT) & \
  69. USB_COM_CON_DEV_ADDR_MASK)
  70. #define USB_COM_CON_RX_DETECTION BIT(1)
  71. #define USB_COM_CON_PIPE_CLR BIT(0)
  72. /* USB20_CON */
  73. #define USB20_CON_B2_PUE BIT(31)
  74. #define USB20_CON_B2_SUSPEND BIT(24)
  75. #define USB20_CON_B2_CONNECT BIT(17)
  76. #define USB20_CON_B2_TSTMOD_SHIFT 8
  77. #define USB20_CON_B2_TSTMOD_MASK GENMASK(10, USB20_CON_B2_TSTMOD_SHIFT)
  78. #define USB20_CON_B2_TSTMOD(n) (((n) << USB20_CON_B2_TSTMOD_SHIFT) & \
  79. USB20_CON_B2_TSTMOD_MASK)
  80. #define USB20_CON_B2_TSTMOD_EN BIT(0)
  81. /* USB30_CON */
  82. #define USB30_CON_POW_SEL_SHIFT 24
  83. #define USB30_CON_POW_SEL_MASK GENMASK(26, USB30_CON_POW_SEL_SHIFT)
  84. #define USB30_CON_POW_SEL_IN_U3 BIT(26)
  85. #define USB30_CON_POW_SEL_IN_DISCON 0
  86. #define USB30_CON_POW_SEL_P2_TO_P0 BIT(25)
  87. #define USB30_CON_POW_SEL_P0_TO_P3 BIT(24)
  88. #define USB30_CON_POW_SEL_P0_TO_P2 0
  89. #define USB30_CON_B3_PLLWAKE BIT(23)
  90. #define USB30_CON_B3_CONNECT BIT(17)
  91. #define USB30_CON_B3_HOTRST_CMP BIT(1)
  92. /* USB_STA */
  93. #define USB_STA_SPEED_MASK (BIT(2) | BIT(1))
  94. #define USB_STA_SPEED_HS BIT(2)
  95. #define USB_STA_SPEED_FS BIT(1)
  96. #define USB_STA_SPEED_SS 0
  97. #define USB_STA_VBUS_STA BIT(0)
  98. /* DRD_CON */
  99. #define DRD_CON_PERI_CON BIT(24)
  100. #define DRD_CON_VBOUT BIT(0)
  101. /* USB_INT_ENA_1 and USB_INT_STA_1 */
  102. #define USB_INT_1_B3_PLLWKUP BIT(31)
  103. #define USB_INT_1_B3_LUPSUCS BIT(30)
  104. #define USB_INT_1_B3_DISABLE BIT(27)
  105. #define USB_INT_1_B3_WRMRST BIT(21)
  106. #define USB_INT_1_B3_HOTRST BIT(20)
  107. #define USB_INT_1_B2_USBRST BIT(12)
  108. #define USB_INT_1_B2_L1SPND BIT(11)
  109. #define USB_INT_1_B2_SPND BIT(9)
  110. #define USB_INT_1_B2_RSUM BIT(8)
  111. #define USB_INT_1_SPEED BIT(1)
  112. #define USB_INT_1_VBUS_CNG BIT(0)
  113. /* USB_INT_ENA_2 and USB_INT_STA_2 */
  114. #define USB_INT_2_PIPE(n) BIT(n)
  115. /* P0_MOD */
  116. #define P0_MOD_DIR BIT(6)
  117. /* P0_CON and PN_CON */
  118. #define PX_CON_BYTE_EN_MASK (BIT(10) | BIT(9))
  119. #define PX_CON_BYTE_EN_SHIFT 9
  120. #define PX_CON_BYTE_EN_BYTES(n) (((n) << PX_CON_BYTE_EN_SHIFT) & \
  121. PX_CON_BYTE_EN_MASK)
  122. #define PX_CON_SEND BIT(8)
  123. /* P0_CON */
  124. #define P0_CON_ST_RES_MASK (BIT(27) | BIT(26))
  125. #define P0_CON_ST_RES_FORCE_STALL BIT(27)
  126. #define P0_CON_ST_RES_NORMAL BIT(26)
  127. #define P0_CON_ST_RES_FORCE_NRDY 0
  128. #define P0_CON_OT_RES_MASK (BIT(25) | BIT(24))
  129. #define P0_CON_OT_RES_FORCE_STALL BIT(25)
  130. #define P0_CON_OT_RES_NORMAL BIT(24)
  131. #define P0_CON_OT_RES_FORCE_NRDY 0
  132. #define P0_CON_IN_RES_MASK (BIT(17) | BIT(16))
  133. #define P0_CON_IN_RES_FORCE_STALL BIT(17)
  134. #define P0_CON_IN_RES_NORMAL BIT(16)
  135. #define P0_CON_IN_RES_FORCE_NRDY 0
  136. #define P0_CON_RES_WEN BIT(7)
  137. #define P0_CON_BCLR BIT(1)
  138. /* P0_STA and PN_STA */
  139. #define PX_STA_BUFSTS BIT(0)
  140. /* P0_INT_ENA and P0_INT_STA */
  141. #define P0_INT_STSED BIT(18)
  142. #define P0_INT_STSST BIT(17)
  143. #define P0_INT_SETUP BIT(16)
  144. #define P0_INT_RCVNL BIT(8)
  145. #define P0_INT_ERDY BIT(7)
  146. #define P0_INT_FLOW BIT(6)
  147. #define P0_INT_STALL BIT(2)
  148. #define P0_INT_NRDY BIT(1)
  149. #define P0_INT_BFRDY BIT(0)
  150. #define P0_INT_ALL_BITS (P0_INT_STSED | P0_INT_SETUP | P0_INT_BFRDY)
  151. /* PN_MOD */
  152. #define PN_MOD_DIR BIT(6)
  153. #define PN_MOD_TYPE_SHIFT 4
  154. #define PN_MOD_TYPE_MASK GENMASK(5, PN_MOD_TYPE_SHIFT)
  155. #define PN_MOD_TYPE(n) (((n) << PN_MOD_TYPE_SHIFT) & \
  156. PN_MOD_TYPE_MASK)
  157. #define PN_MOD_EPNUM_MASK GENMASK(3, 0)
  158. #define PN_MOD_EPNUM(n) ((n) & PN_MOD_EPNUM_MASK)
  159. /* PN_RAMMAP */
  160. #define PN_RAMMAP_RAMAREA_SHIFT 29
  161. #define PN_RAMMAP_RAMAREA_MASK GENMASK(31, PN_RAMMAP_RAMAREA_SHIFT)
  162. #define PN_RAMMAP_RAMAREA_16KB BIT(31)
  163. #define PN_RAMMAP_RAMAREA_8KB (BIT(30) | BIT(29))
  164. #define PN_RAMMAP_RAMAREA_4KB BIT(30)
  165. #define PN_RAMMAP_RAMAREA_2KB BIT(29)
  166. #define PN_RAMMAP_RAMAREA_1KB 0
  167. #define PN_RAMMAP_MPKT_SHIFT 16
  168. #define PN_RAMMAP_MPKT_MASK GENMASK(26, PN_RAMMAP_MPKT_SHIFT)
  169. #define PN_RAMMAP_MPKT(n) (((n) << PN_RAMMAP_MPKT_SHIFT) & \
  170. PN_RAMMAP_MPKT_MASK)
  171. #define PN_RAMMAP_RAMIF_SHIFT 14
  172. #define PN_RAMMAP_RAMIF_MASK GENMASK(15, PN_RAMMAP_RAMIF_SHIFT)
  173. #define PN_RAMMAP_RAMIF(n) (((n) << PN_RAMMAP_RAMIF_SHIFT) & \
  174. PN_RAMMAP_RAMIF_MASK)
  175. #define PN_RAMMAP_BASEAD_MASK GENMASK(13, 0)
  176. #define PN_RAMMAP_BASEAD(offs) (((offs) >> 3) & PN_RAMMAP_BASEAD_MASK)
  177. #define PN_RAMMAP_DATA(area, ramif, basead) ((PN_RAMMAP_##area) | \
  178. (PN_RAMMAP_RAMIF(ramif)) | \
  179. (PN_RAMMAP_BASEAD(basead)))
  180. /* PN_CON */
  181. #define PN_CON_EN BIT(31)
  182. #define PN_CON_DATAIF_EN BIT(30)
  183. #define PN_CON_RES_MASK (BIT(17) | BIT(16))
  184. #define PN_CON_RES_FORCE_STALL BIT(17)
  185. #define PN_CON_RES_NORMAL BIT(16)
  186. #define PN_CON_RES_FORCE_NRDY 0
  187. #define PN_CON_LAST BIT(11)
  188. #define PN_CON_RES_WEN BIT(7)
  189. #define PN_CON_CLR BIT(0)
  190. /* PN_INT_STA and PN_INT_ENA */
  191. #define PN_INT_LSTTR BIT(4)
  192. #define PN_INT_BFRDY BIT(0)
  193. /* USB3_SSIFCMD */
  194. #define SSIFCMD_URES_U2 BIT(9)
  195. #define SSIFCMD_URES_U1 BIT(8)
  196. #define SSIFCMD_UDIR_U2 BIT(7)
  197. #define SSIFCMD_UDIR_U1 BIT(6)
  198. #define SSIFCMD_UREQ_U2 BIT(5)
  199. #define SSIFCMD_UREQ_U1 BIT(4)
  200. #define USB3_EP0_SS_MAX_PACKET_SIZE 512
  201. #define USB3_EP0_HSFS_MAX_PACKET_SIZE 64
  202. #define USB3_EP0_BUF_SIZE 8
  203. #define USB3_MAX_NUM_PIPES 30
  204. #define USB3_WAIT_US 3
  205. struct renesas_usb3;
  206. struct renesas_usb3_request {
  207. struct usb_request req;
  208. struct list_head queue;
  209. };
  210. #define USB3_EP_NAME_SIZE 8
  211. struct renesas_usb3_ep {
  212. struct usb_ep ep;
  213. struct renesas_usb3 *usb3;
  214. int num;
  215. char ep_name[USB3_EP_NAME_SIZE];
  216. struct list_head queue;
  217. u32 rammap_val;
  218. bool dir_in;
  219. bool halt;
  220. bool wedge;
  221. bool started;
  222. };
  223. struct renesas_usb3_priv {
  224. int ramsize_per_ramif; /* unit = bytes */
  225. int num_ramif;
  226. int ramsize_per_pipe; /* unit = bytes */
  227. bool workaround_for_vbus; /* if true, don't check vbus signal */
  228. };
  229. struct renesas_usb3 {
  230. void __iomem *reg;
  231. struct usb_gadget gadget;
  232. struct usb_gadget_driver *driver;
  233. struct renesas_usb3_ep *usb3_ep;
  234. int num_usb3_eps;
  235. spinlock_t lock;
  236. int disabled_count;
  237. struct usb_request *ep0_req;
  238. u16 test_mode;
  239. u8 ep0_buf[USB3_EP0_BUF_SIZE];
  240. bool softconnect;
  241. bool workaround_for_vbus;
  242. };
  243. #define gadget_to_renesas_usb3(_gadget) \
  244. container_of(_gadget, struct renesas_usb3, gadget)
  245. #define renesas_usb3_to_gadget(renesas_usb3) (&renesas_usb3->gadget)
  246. #define usb3_to_dev(_usb3) (_usb3->gadget.dev.parent)
  247. #define usb_ep_to_usb3_ep(_ep) container_of(_ep, struct renesas_usb3_ep, ep)
  248. #define usb3_ep_to_usb3(_usb3_ep) (_usb3_ep->usb3)
  249. #define usb_req_to_usb3_req(_req) container_of(_req, \
  250. struct renesas_usb3_request, req)
  251. #define usb3_get_ep(usb3, n) ((usb3)->usb3_ep + (n))
  252. #define usb3_for_each_ep(usb3_ep, usb3, i) \
  253. for ((i) = 0, usb3_ep = usb3_get_ep(usb3, (i)); \
  254. (i) < (usb3)->num_usb3_eps; \
  255. (i)++, usb3_ep = usb3_get_ep(usb3, (i)))
  256. static const char udc_name[] = "renesas_usb3";
  257. static void usb3_write(struct renesas_usb3 *usb3, u32 data, u32 offs)
  258. {
  259. iowrite32(data, usb3->reg + offs);
  260. }
  261. static u32 usb3_read(struct renesas_usb3 *usb3, u32 offs)
  262. {
  263. return ioread32(usb3->reg + offs);
  264. }
  265. static void usb3_set_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
  266. {
  267. u32 val = usb3_read(usb3, offs);
  268. val |= bits;
  269. usb3_write(usb3, val, offs);
  270. }
  271. static void usb3_clear_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
  272. {
  273. u32 val = usb3_read(usb3, offs);
  274. val &= ~bits;
  275. usb3_write(usb3, val, offs);
  276. }
  277. static int usb3_wait(struct renesas_usb3 *usb3, u32 reg, u32 mask,
  278. u32 expected)
  279. {
  280. int i;
  281. for (i = 0; i < USB3_WAIT_US; i++) {
  282. if ((usb3_read(usb3, reg) & mask) == expected)
  283. return 0;
  284. udelay(1);
  285. }
  286. dev_dbg(usb3_to_dev(usb3), "%s: timed out (%8x, %08x, %08x)\n",
  287. __func__, reg, mask, expected);
  288. return -EBUSY;
  289. }
  290. static void usb3_enable_irq_1(struct renesas_usb3 *usb3, u32 bits)
  291. {
  292. usb3_set_bit(usb3, bits, USB3_USB_INT_ENA_1);
  293. }
  294. static void usb3_disable_irq_1(struct renesas_usb3 *usb3, u32 bits)
  295. {
  296. usb3_clear_bit(usb3, bits, USB3_USB_INT_ENA_1);
  297. }
  298. static void usb3_enable_pipe_irq(struct renesas_usb3 *usb3, int num)
  299. {
  300. usb3_set_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
  301. }
  302. static void usb3_disable_pipe_irq(struct renesas_usb3 *usb3, int num)
  303. {
  304. usb3_clear_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
  305. }
  306. static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)
  307. {
  308. /* Set AXI_INT */
  309. usb3_write(usb3, ~0, USB3_DMA_INT_STA);
  310. usb3_write(usb3, 0, USB3_DMA_INT_ENA);
  311. usb3_set_bit(usb3, AXI_INT_DMAINT | AXI_INT_EPCINT, USB3_AXI_INT_ENA);
  312. }
  313. static void usb3_init_epc_registers(struct renesas_usb3 *usb3)
  314. {
  315. /* FIXME: How to change host / peripheral mode as well? */
  316. usb3_set_bit(usb3, DRD_CON_PERI_CON, USB3_DRD_CON);
  317. usb3_clear_bit(usb3, DRD_CON_VBOUT, USB3_DRD_CON);
  318. usb3_write(usb3, ~0, USB3_USB_INT_STA_1);
  319. usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
  320. }
  321. static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3)
  322. {
  323. if (!(usb3_read(usb3, USB3_USB20_CON) & USB20_CON_B2_SUSPEND))
  324. return true; /* already waked it up */
  325. usb3_clear_bit(usb3, USB20_CON_B2_SUSPEND, USB3_USB20_CON);
  326. usb3_enable_irq_1(usb3, USB_INT_1_B2_RSUM);
  327. return false;
  328. }
  329. static void usb3_usb2_pullup(struct renesas_usb3 *usb3, int pullup)
  330. {
  331. u32 bits = USB20_CON_B2_PUE | USB20_CON_B2_CONNECT;
  332. if (usb3->softconnect && pullup)
  333. usb3_set_bit(usb3, bits, USB3_USB20_CON);
  334. else
  335. usb3_clear_bit(usb3, bits, USB3_USB20_CON);
  336. }
  337. static void usb3_set_test_mode(struct renesas_usb3 *usb3)
  338. {
  339. u32 val = usb3_read(usb3, USB3_USB20_CON);
  340. val &= ~USB20_CON_B2_TSTMOD_MASK;
  341. val |= USB20_CON_B2_TSTMOD(usb3->test_mode);
  342. usb3_write(usb3, val | USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
  343. if (!usb3->test_mode)
  344. usb3_clear_bit(usb3, USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
  345. }
  346. static void usb3_start_usb2_connection(struct renesas_usb3 *usb3)
  347. {
  348. usb3->disabled_count++;
  349. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  350. usb3_set_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
  351. usb3_usb2_pullup(usb3, 1);
  352. }
  353. static int usb3_is_usb3_phy_in_u3(struct renesas_usb3 *usb3)
  354. {
  355. return usb3_read(usb3, USB3_USB30_CON) & USB30_CON_POW_SEL_IN_U3;
  356. }
  357. static bool usb3_wakeup_usb3_phy(struct renesas_usb3 *usb3)
  358. {
  359. if (!usb3_is_usb3_phy_in_u3(usb3))
  360. return true; /* already waked it up */
  361. usb3_set_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
  362. usb3_enable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
  363. return false;
  364. }
  365. static u16 usb3_feature_get_un_enabled(struct renesas_usb3 *usb3)
  366. {
  367. u32 mask_u2 = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
  368. u32 mask_u1 = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
  369. u32 val = usb3_read(usb3, USB3_SSIFCMD);
  370. u16 ret = 0;
  371. /* Enables {U2,U1} if the bits of UDIR and UREQ are set to 0 */
  372. if (!(val & mask_u2))
  373. ret |= 1 << USB_DEV_STAT_U2_ENABLED;
  374. if (!(val & mask_u1))
  375. ret |= 1 << USB_DEV_STAT_U1_ENABLED;
  376. return ret;
  377. }
  378. static void usb3_feature_u2_enable(struct renesas_usb3 *usb3, bool enable)
  379. {
  380. u32 bits = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
  381. /* Enables U2 if the bits of UDIR and UREQ are set to 0 */
  382. if (enable)
  383. usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
  384. else
  385. usb3_set_bit(usb3, bits, USB3_SSIFCMD);
  386. }
  387. static void usb3_feature_u1_enable(struct renesas_usb3 *usb3, bool enable)
  388. {
  389. u32 bits = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
  390. /* Enables U1 if the bits of UDIR and UREQ are set to 0 */
  391. if (enable)
  392. usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
  393. else
  394. usb3_set_bit(usb3, bits, USB3_SSIFCMD);
  395. }
  396. static void usb3_start_operation_for_usb3(struct renesas_usb3 *usb3)
  397. {
  398. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  399. usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
  400. usb3_set_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
  401. }
  402. static void usb3_start_usb3_connection(struct renesas_usb3 *usb3)
  403. {
  404. usb3_start_operation_for_usb3(usb3);
  405. usb3_set_bit(usb3, USB_COM_CON_RX_DETECTION, USB3_USB_COM_CON);
  406. usb3_enable_irq_1(usb3, USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
  407. USB_INT_1_SPEED);
  408. }
  409. static void usb3_stop_usb3_connection(struct renesas_usb3 *usb3)
  410. {
  411. usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
  412. }
  413. static void usb3_transition_to_default_state(struct renesas_usb3 *usb3,
  414. bool is_usb3)
  415. {
  416. usb3_set_bit(usb3, USB_INT_2_PIPE(0), USB3_USB_INT_ENA_2);
  417. usb3_write(usb3, P0_INT_ALL_BITS, USB3_P0_INT_STA);
  418. usb3_set_bit(usb3, P0_INT_ALL_BITS, USB3_P0_INT_ENA);
  419. if (is_usb3)
  420. usb3_enable_irq_1(usb3, USB_INT_1_B3_WRMRST |
  421. USB_INT_1_B3_HOTRST);
  422. else
  423. usb3_enable_irq_1(usb3, USB_INT_1_B2_SPND |
  424. USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
  425. }
  426. static void usb3_connect(struct renesas_usb3 *usb3)
  427. {
  428. if (usb3_wakeup_usb3_phy(usb3))
  429. usb3_start_usb3_connection(usb3);
  430. }
  431. static void usb3_reset_epc(struct renesas_usb3 *usb3)
  432. {
  433. usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
  434. usb3_clear_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  435. usb3_set_bit(usb3, USB_COM_CON_PIPE_CLR, USB3_USB_COM_CON);
  436. usb3->test_mode = 0;
  437. usb3_set_test_mode(usb3);
  438. }
  439. static void usb3_disconnect(struct renesas_usb3 *usb3)
  440. {
  441. usb3->disabled_count = 0;
  442. usb3_usb2_pullup(usb3, 0);
  443. usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
  444. usb3_reset_epc(usb3);
  445. if (usb3->driver)
  446. usb3->driver->disconnect(&usb3->gadget);
  447. }
  448. static void usb3_check_vbus(struct renesas_usb3 *usb3)
  449. {
  450. if (usb3->workaround_for_vbus) {
  451. usb3_connect(usb3);
  452. } else {
  453. if (usb3_read(usb3, USB3_USB_STA) & USB_STA_VBUS_STA)
  454. usb3_connect(usb3);
  455. else
  456. usb3_disconnect(usb3);
  457. }
  458. }
  459. static void renesas_usb3_init_controller(struct renesas_usb3 *usb3)
  460. {
  461. usb3_init_axi_bridge(usb3);
  462. usb3_init_epc_registers(usb3);
  463. usb3_check_vbus(usb3);
  464. }
  465. static void renesas_usb3_stop_controller(struct renesas_usb3 *usb3)
  466. {
  467. usb3_disconnect(usb3);
  468. usb3_write(usb3, 0, USB3_P0_INT_ENA);
  469. usb3_write(usb3, 0, USB3_PN_INT_ENA);
  470. usb3_write(usb3, 0, USB3_USB_INT_ENA_1);
  471. usb3_write(usb3, 0, USB3_USB_INT_ENA_2);
  472. usb3_write(usb3, 0, USB3_AXI_INT_ENA);
  473. }
  474. static void usb3_irq_epc_int_1_pll_wakeup(struct renesas_usb3 *usb3)
  475. {
  476. usb3_disable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
  477. usb3_clear_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
  478. usb3_start_usb3_connection(usb3);
  479. }
  480. static void usb3_irq_epc_int_1_linkup_success(struct renesas_usb3 *usb3)
  481. {
  482. usb3_transition_to_default_state(usb3, true);
  483. }
  484. static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
  485. {
  486. usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM);
  487. usb3_start_usb2_connection(usb3);
  488. usb3_transition_to_default_state(usb3, false);
  489. }
  490. static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
  491. {
  492. usb3_stop_usb3_connection(usb3);
  493. if (usb3_wakeup_usb2_phy(usb3))
  494. usb3_irq_epc_int_1_resume(usb3);
  495. }
  496. static void usb3_irq_epc_int_1_bus_reset(struct renesas_usb3 *usb3)
  497. {
  498. usb3_reset_epc(usb3);
  499. if (usb3->disabled_count < 3)
  500. usb3_start_usb3_connection(usb3);
  501. else
  502. usb3_start_usb2_connection(usb3);
  503. }
  504. static void usb3_irq_epc_int_1_vbus_change(struct renesas_usb3 *usb3)
  505. {
  506. usb3_check_vbus(usb3);
  507. }
  508. static void usb3_irq_epc_int_1_hot_reset(struct renesas_usb3 *usb3)
  509. {
  510. usb3_reset_epc(usb3);
  511. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  512. /* This bit shall be set within 12ms from the start of HotReset */
  513. usb3_set_bit(usb3, USB30_CON_B3_HOTRST_CMP, USB3_USB30_CON);
  514. }
  515. static void usb3_irq_epc_int_1_warm_reset(struct renesas_usb3 *usb3)
  516. {
  517. usb3_reset_epc(usb3);
  518. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  519. usb3_start_operation_for_usb3(usb3);
  520. usb3_enable_irq_1(usb3, USB_INT_1_SPEED);
  521. }
  522. static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
  523. {
  524. u32 speed = usb3_read(usb3, USB3_USB_STA) & USB_STA_SPEED_MASK;
  525. switch (speed) {
  526. case USB_STA_SPEED_SS:
  527. usb3->gadget.speed = USB_SPEED_SUPER;
  528. break;
  529. case USB_STA_SPEED_HS:
  530. usb3->gadget.speed = USB_SPEED_HIGH;
  531. break;
  532. case USB_STA_SPEED_FS:
  533. usb3->gadget.speed = USB_SPEED_FULL;
  534. break;
  535. default:
  536. usb3->gadget.speed = USB_SPEED_UNKNOWN;
  537. break;
  538. }
  539. }
  540. static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
  541. {
  542. if (int_sta_1 & USB_INT_1_B3_PLLWKUP)
  543. usb3_irq_epc_int_1_pll_wakeup(usb3);
  544. if (int_sta_1 & USB_INT_1_B3_LUPSUCS)
  545. usb3_irq_epc_int_1_linkup_success(usb3);
  546. if (int_sta_1 & USB_INT_1_B3_HOTRST)
  547. usb3_irq_epc_int_1_hot_reset(usb3);
  548. if (int_sta_1 & USB_INT_1_B3_WRMRST)
  549. usb3_irq_epc_int_1_warm_reset(usb3);
  550. if (int_sta_1 & USB_INT_1_B3_DISABLE)
  551. usb3_irq_epc_int_1_disable(usb3);
  552. if (int_sta_1 & USB_INT_1_B2_USBRST)
  553. usb3_irq_epc_int_1_bus_reset(usb3);
  554. if (int_sta_1 & USB_INT_1_B2_RSUM)
  555. usb3_irq_epc_int_1_resume(usb3);
  556. if (int_sta_1 & USB_INT_1_SPEED)
  557. usb3_irq_epc_int_1_speed(usb3);
  558. if (int_sta_1 & USB_INT_1_VBUS_CNG)
  559. usb3_irq_epc_int_1_vbus_change(usb3);
  560. }
  561. static struct renesas_usb3_request *__usb3_get_request(struct renesas_usb3_ep
  562. *usb3_ep)
  563. {
  564. return list_first_entry_or_null(&usb3_ep->queue,
  565. struct renesas_usb3_request, queue);
  566. }
  567. static struct renesas_usb3_request *usb3_get_request(struct renesas_usb3_ep
  568. *usb3_ep)
  569. {
  570. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  571. struct renesas_usb3_request *usb3_req;
  572. unsigned long flags;
  573. spin_lock_irqsave(&usb3->lock, flags);
  574. usb3_req = __usb3_get_request(usb3_ep);
  575. spin_unlock_irqrestore(&usb3->lock, flags);
  576. return usb3_req;
  577. }
  578. static void usb3_request_done(struct renesas_usb3_ep *usb3_ep,
  579. struct renesas_usb3_request *usb3_req, int status)
  580. {
  581. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  582. unsigned long flags;
  583. dev_dbg(usb3_to_dev(usb3), "giveback: ep%2d, %u, %u, %d\n",
  584. usb3_ep->num, usb3_req->req.length, usb3_req->req.actual,
  585. status);
  586. usb3_req->req.status = status;
  587. spin_lock_irqsave(&usb3->lock, flags);
  588. usb3_ep->started = false;
  589. list_del_init(&usb3_req->queue);
  590. spin_unlock_irqrestore(&usb3->lock, flags);
  591. usb_gadget_giveback_request(&usb3_ep->ep, &usb3_req->req);
  592. }
  593. static void usb3_irq_epc_pipe0_status_end(struct renesas_usb3 *usb3)
  594. {
  595. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  596. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  597. if (usb3_req)
  598. usb3_request_done(usb3_ep, usb3_req, 0);
  599. if (usb3->test_mode)
  600. usb3_set_test_mode(usb3);
  601. }
  602. static void usb3_get_setup_data(struct renesas_usb3 *usb3,
  603. struct usb_ctrlrequest *ctrl)
  604. {
  605. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  606. u32 *data = (u32 *)ctrl;
  607. *data++ = usb3_read(usb3, USB3_STUP_DAT_0);
  608. *data = usb3_read(usb3, USB3_STUP_DAT_1);
  609. /* update this driver's flag */
  610. usb3_ep->dir_in = !!(ctrl->bRequestType & USB_DIR_IN);
  611. }
  612. static void usb3_set_p0_con_update_res(struct renesas_usb3 *usb3, u32 res)
  613. {
  614. u32 val = usb3_read(usb3, USB3_P0_CON);
  615. val &= ~(P0_CON_ST_RES_MASK | P0_CON_OT_RES_MASK | P0_CON_IN_RES_MASK);
  616. val |= res | P0_CON_RES_WEN;
  617. usb3_write(usb3, val, USB3_P0_CON);
  618. }
  619. static void usb3_set_p0_con_for_ctrl_read_data(struct renesas_usb3 *usb3)
  620. {
  621. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
  622. P0_CON_OT_RES_FORCE_STALL |
  623. P0_CON_IN_RES_NORMAL);
  624. }
  625. static void usb3_set_p0_con_for_ctrl_read_status(struct renesas_usb3 *usb3)
  626. {
  627. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
  628. P0_CON_OT_RES_FORCE_STALL |
  629. P0_CON_IN_RES_NORMAL);
  630. }
  631. static void usb3_set_p0_con_for_ctrl_write_data(struct renesas_usb3 *usb3)
  632. {
  633. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
  634. P0_CON_OT_RES_NORMAL |
  635. P0_CON_IN_RES_FORCE_STALL);
  636. }
  637. static void usb3_set_p0_con_for_ctrl_write_status(struct renesas_usb3 *usb3)
  638. {
  639. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
  640. P0_CON_OT_RES_NORMAL |
  641. P0_CON_IN_RES_FORCE_STALL);
  642. }
  643. static void usb3_set_p0_con_for_no_data(struct renesas_usb3 *usb3)
  644. {
  645. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
  646. P0_CON_OT_RES_FORCE_STALL |
  647. P0_CON_IN_RES_FORCE_STALL);
  648. }
  649. static void usb3_set_p0_con_stall(struct renesas_usb3 *usb3)
  650. {
  651. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_STALL |
  652. P0_CON_OT_RES_FORCE_STALL |
  653. P0_CON_IN_RES_FORCE_STALL);
  654. }
  655. static void usb3_set_p0_con_stop(struct renesas_usb3 *usb3)
  656. {
  657. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
  658. P0_CON_OT_RES_FORCE_NRDY |
  659. P0_CON_IN_RES_FORCE_NRDY);
  660. }
  661. static int usb3_pn_change(struct renesas_usb3 *usb3, int num)
  662. {
  663. if (num == 0 || num > usb3->num_usb3_eps)
  664. return -ENXIO;
  665. usb3_write(usb3, num, USB3_PIPE_COM);
  666. return 0;
  667. }
  668. static void usb3_set_pn_con_update_res(struct renesas_usb3 *usb3, u32 res)
  669. {
  670. u32 val = usb3_read(usb3, USB3_PN_CON);
  671. val &= ~PN_CON_RES_MASK;
  672. val |= res & PN_CON_RES_MASK;
  673. val |= PN_CON_RES_WEN;
  674. usb3_write(usb3, val, USB3_PN_CON);
  675. }
  676. static void usb3_pn_start(struct renesas_usb3 *usb3)
  677. {
  678. usb3_set_pn_con_update_res(usb3, PN_CON_RES_NORMAL);
  679. }
  680. static void usb3_pn_stop(struct renesas_usb3 *usb3)
  681. {
  682. usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_NRDY);
  683. }
  684. static void usb3_pn_stall(struct renesas_usb3 *usb3)
  685. {
  686. usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_STALL);
  687. }
  688. static int usb3_pn_con_clear(struct renesas_usb3 *usb3)
  689. {
  690. usb3_set_bit(usb3, PN_CON_CLR, USB3_PN_CON);
  691. return usb3_wait(usb3, USB3_PN_CON, PN_CON_CLR, 0);
  692. }
  693. static bool usb3_is_transfer_complete(struct renesas_usb3_ep *usb3_ep,
  694. struct renesas_usb3_request *usb3_req)
  695. {
  696. struct usb_request *req = &usb3_req->req;
  697. if ((!req->zero && req->actual == req->length) ||
  698. (req->actual % usb3_ep->ep.maxpacket) || (req->length == 0))
  699. return true;
  700. else
  701. return false;
  702. }
  703. static int usb3_wait_pipe_status(struct renesas_usb3_ep *usb3_ep, u32 mask)
  704. {
  705. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  706. u32 sta_reg = usb3_ep->num ? USB3_PN_STA : USB3_P0_STA;
  707. return usb3_wait(usb3, sta_reg, mask, mask);
  708. }
  709. static void usb3_set_px_con_send(struct renesas_usb3_ep *usb3_ep, int bytes,
  710. bool last)
  711. {
  712. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  713. u32 con_reg = usb3_ep->num ? USB3_PN_CON : USB3_P0_CON;
  714. u32 val = usb3_read(usb3, con_reg);
  715. val |= PX_CON_SEND | PX_CON_BYTE_EN_BYTES(bytes);
  716. val |= (usb3_ep->num && last) ? PN_CON_LAST : 0;
  717. usb3_write(usb3, val, con_reg);
  718. }
  719. static int usb3_write_pipe(struct renesas_usb3_ep *usb3_ep,
  720. struct renesas_usb3_request *usb3_req,
  721. u32 fifo_reg)
  722. {
  723. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  724. int i;
  725. int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
  726. usb3_ep->ep.maxpacket);
  727. u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
  728. u32 tmp = 0;
  729. bool is_last;
  730. if (usb3_wait_pipe_status(usb3_ep, PX_STA_BUFSTS) < 0)
  731. return -EBUSY;
  732. /* Update gadget driver parameter */
  733. usb3_req->req.actual += len;
  734. /* Write data to the register */
  735. if (len >= 4) {
  736. iowrite32_rep(usb3->reg + fifo_reg, buf, len / 4);
  737. buf += (len / 4) * 4;
  738. len %= 4; /* update len to use usb3_set_pX_con_send() */
  739. }
  740. if (len) {
  741. for (i = 0; i < len; i++)
  742. tmp |= buf[i] << (8 * i);
  743. usb3_write(usb3, tmp, fifo_reg);
  744. }
  745. is_last = usb3_is_transfer_complete(usb3_ep, usb3_req);
  746. /* Send the data */
  747. usb3_set_px_con_send(usb3_ep, len, is_last);
  748. return is_last ? 0 : -EAGAIN;
  749. }
  750. static u32 usb3_get_received_length(struct renesas_usb3_ep *usb3_ep)
  751. {
  752. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  753. u32 lng_reg = usb3_ep->num ? USB3_PN_LNG : USB3_P0_LNG;
  754. return usb3_read(usb3, lng_reg);
  755. }
  756. static int usb3_read_pipe(struct renesas_usb3_ep *usb3_ep,
  757. struct renesas_usb3_request *usb3_req, u32 fifo_reg)
  758. {
  759. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  760. int i;
  761. int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
  762. usb3_get_received_length(usb3_ep));
  763. u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
  764. u32 tmp = 0;
  765. if (!len)
  766. return 0;
  767. /* Update gadget driver parameter */
  768. usb3_req->req.actual += len;
  769. /* Read data from the register */
  770. if (len >= 4) {
  771. ioread32_rep(usb3->reg + fifo_reg, buf, len / 4);
  772. buf += (len / 4) * 4;
  773. len %= 4;
  774. }
  775. if (len) {
  776. tmp = usb3_read(usb3, fifo_reg);
  777. for (i = 0; i < len; i++)
  778. buf[i] = (tmp >> (8 * i)) & 0xff;
  779. }
  780. return usb3_is_transfer_complete(usb3_ep, usb3_req) ? 0 : -EAGAIN;
  781. }
  782. static void usb3_set_status_stage(struct renesas_usb3_ep *usb3_ep,
  783. struct renesas_usb3_request *usb3_req)
  784. {
  785. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  786. if (usb3_ep->dir_in) {
  787. usb3_set_p0_con_for_ctrl_read_status(usb3);
  788. } else {
  789. if (!usb3_req->req.length)
  790. usb3_set_p0_con_for_no_data(usb3);
  791. else
  792. usb3_set_p0_con_for_ctrl_write_status(usb3);
  793. }
  794. }
  795. static void usb3_p0_xfer(struct renesas_usb3_ep *usb3_ep,
  796. struct renesas_usb3_request *usb3_req)
  797. {
  798. int ret = -EAGAIN;
  799. if (usb3_ep->dir_in)
  800. ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_P0_WRITE);
  801. else
  802. ret = usb3_read_pipe(usb3_ep, usb3_req, USB3_P0_READ);
  803. if (!ret)
  804. usb3_set_status_stage(usb3_ep, usb3_req);
  805. }
  806. static void usb3_start_pipe0(struct renesas_usb3_ep *usb3_ep,
  807. struct renesas_usb3_request *usb3_req)
  808. {
  809. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  810. if (usb3_ep->started)
  811. return;
  812. usb3_ep->started = true;
  813. if (usb3_ep->dir_in) {
  814. usb3_set_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
  815. usb3_set_p0_con_for_ctrl_read_data(usb3);
  816. } else {
  817. usb3_clear_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
  818. usb3_set_p0_con_for_ctrl_write_data(usb3);
  819. }
  820. usb3_p0_xfer(usb3_ep, usb3_req);
  821. }
  822. static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep,
  823. struct renesas_usb3_request *usb3_req)
  824. {
  825. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  826. struct renesas_usb3_request *usb3_req_first = usb3_get_request(usb3_ep);
  827. unsigned long flags;
  828. int ret = -EAGAIN;
  829. u32 enable_bits = 0;
  830. if (usb3_ep->halt || usb3_ep->started)
  831. return;
  832. if (usb3_req != usb3_req_first)
  833. return;
  834. spin_lock_irqsave(&usb3->lock, flags);
  835. if (usb3_pn_change(usb3, usb3_ep->num) < 0)
  836. goto out;
  837. usb3_ep->started = true;
  838. usb3_pn_start(usb3);
  839. if (usb3_ep->dir_in) {
  840. ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE);
  841. enable_bits |= PN_INT_LSTTR;
  842. }
  843. if (ret < 0)
  844. enable_bits |= PN_INT_BFRDY;
  845. if (enable_bits) {
  846. usb3_set_bit(usb3, enable_bits, USB3_PN_INT_ENA);
  847. usb3_enable_pipe_irq(usb3, usb3_ep->num);
  848. }
  849. out:
  850. spin_unlock_irqrestore(&usb3->lock, flags);
  851. }
  852. static int renesas_usb3_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
  853. gfp_t gfp_flags)
  854. {
  855. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  856. struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
  857. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  858. unsigned long flags;
  859. dev_dbg(usb3_to_dev(usb3), "ep_queue: ep%2d, %u\n", usb3_ep->num,
  860. _req->length);
  861. _req->status = -EINPROGRESS;
  862. _req->actual = 0;
  863. spin_lock_irqsave(&usb3->lock, flags);
  864. list_add_tail(&usb3_req->queue, &usb3_ep->queue);
  865. spin_unlock_irqrestore(&usb3->lock, flags);
  866. if (!usb3_ep->num)
  867. usb3_start_pipe0(usb3_ep, usb3_req);
  868. else
  869. usb3_start_pipen(usb3_ep, usb3_req);
  870. return 0;
  871. }
  872. static void usb3_set_device_address(struct renesas_usb3 *usb3, u16 addr)
  873. {
  874. /* DEV_ADDR bit field is cleared by WarmReset, HotReset and BusReset */
  875. usb3_set_bit(usb3, USB_COM_CON_DEV_ADDR(addr), USB3_USB_COM_CON);
  876. }
  877. static bool usb3_std_req_set_address(struct renesas_usb3 *usb3,
  878. struct usb_ctrlrequest *ctrl)
  879. {
  880. if (ctrl->wValue >= 128)
  881. return true; /* stall */
  882. usb3_set_device_address(usb3, ctrl->wValue);
  883. usb3_set_p0_con_for_no_data(usb3);
  884. return false;
  885. }
  886. static void usb3_pipe0_internal_xfer(struct renesas_usb3 *usb3,
  887. void *tx_data, size_t len,
  888. void (*complete)(struct usb_ep *ep,
  889. struct usb_request *req))
  890. {
  891. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  892. if (tx_data)
  893. memcpy(usb3->ep0_buf, tx_data,
  894. min_t(size_t, len, USB3_EP0_BUF_SIZE));
  895. usb3->ep0_req->buf = &usb3->ep0_buf;
  896. usb3->ep0_req->length = len;
  897. usb3->ep0_req->complete = complete;
  898. renesas_usb3_ep_queue(&usb3_ep->ep, usb3->ep0_req, GFP_ATOMIC);
  899. }
  900. static void usb3_pipe0_get_status_completion(struct usb_ep *ep,
  901. struct usb_request *req)
  902. {
  903. }
  904. static bool usb3_std_req_get_status(struct renesas_usb3 *usb3,
  905. struct usb_ctrlrequest *ctrl)
  906. {
  907. bool stall = false;
  908. struct renesas_usb3_ep *usb3_ep;
  909. int num;
  910. u16 status = 0;
  911. switch (ctrl->bRequestType & USB_RECIP_MASK) {
  912. case USB_RECIP_DEVICE:
  913. if (usb3->gadget.is_selfpowered)
  914. status |= 1 << USB_DEVICE_SELF_POWERED;
  915. if (usb3->gadget.speed == USB_SPEED_SUPER)
  916. status |= usb3_feature_get_un_enabled(usb3);
  917. break;
  918. case USB_RECIP_INTERFACE:
  919. break;
  920. case USB_RECIP_ENDPOINT:
  921. num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
  922. usb3_ep = usb3_get_ep(usb3, num);
  923. if (usb3_ep->halt)
  924. status |= 1 << USB_ENDPOINT_HALT;
  925. break;
  926. default:
  927. stall = true;
  928. break;
  929. }
  930. if (!stall) {
  931. status = cpu_to_le16(status);
  932. dev_dbg(usb3_to_dev(usb3), "get_status: req = %p\n",
  933. usb_req_to_usb3_req(usb3->ep0_req));
  934. usb3_pipe0_internal_xfer(usb3, &status, sizeof(status),
  935. usb3_pipe0_get_status_completion);
  936. }
  937. return stall;
  938. }
  939. static bool usb3_std_req_feature_device(struct renesas_usb3 *usb3,
  940. struct usb_ctrlrequest *ctrl, bool set)
  941. {
  942. bool stall = true;
  943. u16 w_value = le16_to_cpu(ctrl->wValue);
  944. switch (w_value) {
  945. case USB_DEVICE_TEST_MODE:
  946. if (!set)
  947. break;
  948. usb3->test_mode = le16_to_cpu(ctrl->wIndex) >> 8;
  949. stall = false;
  950. break;
  951. case USB_DEVICE_U1_ENABLE:
  952. case USB_DEVICE_U2_ENABLE:
  953. if (usb3->gadget.speed != USB_SPEED_SUPER)
  954. break;
  955. if (w_value == USB_DEVICE_U1_ENABLE)
  956. usb3_feature_u1_enable(usb3, set);
  957. if (w_value == USB_DEVICE_U2_ENABLE)
  958. usb3_feature_u2_enable(usb3, set);
  959. stall = false;
  960. break;
  961. default:
  962. break;
  963. }
  964. return stall;
  965. }
  966. static int usb3_set_halt_p0(struct renesas_usb3_ep *usb3_ep, bool halt)
  967. {
  968. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  969. if (unlikely(usb3_ep->num))
  970. return -EINVAL;
  971. usb3_ep->halt = halt;
  972. if (halt)
  973. usb3_set_p0_con_stall(usb3);
  974. else
  975. usb3_set_p0_con_stop(usb3);
  976. return 0;
  977. }
  978. static int usb3_set_halt_pn(struct renesas_usb3_ep *usb3_ep, bool halt,
  979. bool is_clear_feature)
  980. {
  981. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  982. unsigned long flags;
  983. spin_lock_irqsave(&usb3->lock, flags);
  984. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  985. usb3_ep->halt = halt;
  986. if (halt) {
  987. usb3_pn_stall(usb3);
  988. } else if (!is_clear_feature || !usb3_ep->wedge) {
  989. usb3_pn_con_clear(usb3);
  990. usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
  991. usb3_pn_stop(usb3);
  992. }
  993. }
  994. spin_unlock_irqrestore(&usb3->lock, flags);
  995. return 0;
  996. }
  997. static int usb3_set_halt(struct renesas_usb3_ep *usb3_ep, bool halt,
  998. bool is_clear_feature)
  999. {
  1000. int ret = 0;
  1001. if (halt && usb3_ep->started)
  1002. return -EAGAIN;
  1003. if (usb3_ep->num)
  1004. ret = usb3_set_halt_pn(usb3_ep, halt, is_clear_feature);
  1005. else
  1006. ret = usb3_set_halt_p0(usb3_ep, halt);
  1007. return ret;
  1008. }
  1009. static bool usb3_std_req_feature_endpoint(struct renesas_usb3 *usb3,
  1010. struct usb_ctrlrequest *ctrl,
  1011. bool set)
  1012. {
  1013. int num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
  1014. struct renesas_usb3_ep *usb3_ep;
  1015. struct renesas_usb3_request *usb3_req;
  1016. if (le16_to_cpu(ctrl->wValue) != USB_ENDPOINT_HALT)
  1017. return true; /* stall */
  1018. usb3_ep = usb3_get_ep(usb3, num);
  1019. usb3_set_halt(usb3_ep, set, true);
  1020. /* Restarts a queue if clear feature */
  1021. if (!set) {
  1022. usb3_ep->started = false;
  1023. usb3_req = usb3_get_request(usb3_ep);
  1024. if (usb3_req)
  1025. usb3_start_pipen(usb3_ep, usb3_req);
  1026. }
  1027. return false;
  1028. }
  1029. static bool usb3_std_req_feature(struct renesas_usb3 *usb3,
  1030. struct usb_ctrlrequest *ctrl, bool set)
  1031. {
  1032. bool stall = false;
  1033. switch (ctrl->bRequestType & USB_RECIP_MASK) {
  1034. case USB_RECIP_DEVICE:
  1035. stall = usb3_std_req_feature_device(usb3, ctrl, set);
  1036. break;
  1037. case USB_RECIP_INTERFACE:
  1038. break;
  1039. case USB_RECIP_ENDPOINT:
  1040. stall = usb3_std_req_feature_endpoint(usb3, ctrl, set);
  1041. break;
  1042. default:
  1043. stall = true;
  1044. break;
  1045. }
  1046. if (!stall)
  1047. usb3_set_p0_con_for_no_data(usb3);
  1048. return stall;
  1049. }
  1050. static void usb3_pipe0_set_sel_completion(struct usb_ep *ep,
  1051. struct usb_request *req)
  1052. {
  1053. /* TODO */
  1054. }
  1055. static bool usb3_std_req_set_sel(struct renesas_usb3 *usb3,
  1056. struct usb_ctrlrequest *ctrl)
  1057. {
  1058. u16 w_length = le16_to_cpu(ctrl->wLength);
  1059. if (w_length != 6)
  1060. return true; /* stall */
  1061. dev_dbg(usb3_to_dev(usb3), "set_sel: req = %p\n",
  1062. usb_req_to_usb3_req(usb3->ep0_req));
  1063. usb3_pipe0_internal_xfer(usb3, NULL, 6, usb3_pipe0_set_sel_completion);
  1064. return false;
  1065. }
  1066. static bool usb3_std_req_set_configuration(struct renesas_usb3 *usb3,
  1067. struct usb_ctrlrequest *ctrl)
  1068. {
  1069. if (ctrl->wValue > 0)
  1070. usb3_set_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
  1071. else
  1072. usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
  1073. return false;
  1074. }
  1075. /**
  1076. * usb3_handle_standard_request - handle some standard requests
  1077. * @usb3: the renesas_usb3 pointer
  1078. * @ctrl: a pointer of setup data
  1079. *
  1080. * Returns true if this function handled a standard request
  1081. */
  1082. static bool usb3_handle_standard_request(struct renesas_usb3 *usb3,
  1083. struct usb_ctrlrequest *ctrl)
  1084. {
  1085. bool ret = false;
  1086. bool stall = false;
  1087. if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
  1088. switch (ctrl->bRequest) {
  1089. case USB_REQ_SET_ADDRESS:
  1090. stall = usb3_std_req_set_address(usb3, ctrl);
  1091. ret = true;
  1092. break;
  1093. case USB_REQ_GET_STATUS:
  1094. stall = usb3_std_req_get_status(usb3, ctrl);
  1095. ret = true;
  1096. break;
  1097. case USB_REQ_CLEAR_FEATURE:
  1098. stall = usb3_std_req_feature(usb3, ctrl, false);
  1099. ret = true;
  1100. break;
  1101. case USB_REQ_SET_FEATURE:
  1102. stall = usb3_std_req_feature(usb3, ctrl, true);
  1103. ret = true;
  1104. break;
  1105. case USB_REQ_SET_SEL:
  1106. stall = usb3_std_req_set_sel(usb3, ctrl);
  1107. ret = true;
  1108. break;
  1109. case USB_REQ_SET_ISOCH_DELAY:
  1110. /* This hardware doesn't support Isochronous xfer */
  1111. stall = true;
  1112. ret = true;
  1113. break;
  1114. case USB_REQ_SET_CONFIGURATION:
  1115. usb3_std_req_set_configuration(usb3, ctrl);
  1116. break;
  1117. default:
  1118. break;
  1119. }
  1120. }
  1121. if (stall)
  1122. usb3_set_p0_con_stall(usb3);
  1123. return ret;
  1124. }
  1125. static int usb3_p0_con_clear_buffer(struct renesas_usb3 *usb3)
  1126. {
  1127. usb3_set_bit(usb3, P0_CON_BCLR, USB3_P0_CON);
  1128. return usb3_wait(usb3, USB3_P0_CON, P0_CON_BCLR, 0);
  1129. }
  1130. static void usb3_irq_epc_pipe0_setup(struct renesas_usb3 *usb3)
  1131. {
  1132. struct usb_ctrlrequest ctrl;
  1133. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  1134. /* Call giveback function if previous transfer is not completed */
  1135. if (usb3_ep->started)
  1136. usb3_request_done(usb3_ep, usb3_get_request(usb3_ep),
  1137. -ECONNRESET);
  1138. usb3_p0_con_clear_buffer(usb3);
  1139. usb3_get_setup_data(usb3, &ctrl);
  1140. if (!usb3_handle_standard_request(usb3, &ctrl))
  1141. if (usb3->driver->setup(&usb3->gadget, &ctrl) < 0)
  1142. usb3_set_p0_con_stall(usb3);
  1143. }
  1144. static void usb3_irq_epc_pipe0_bfrdy(struct renesas_usb3 *usb3)
  1145. {
  1146. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  1147. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  1148. if (!usb3_req)
  1149. return;
  1150. usb3_p0_xfer(usb3_ep, usb3_req);
  1151. }
  1152. static void usb3_irq_epc_pipe0(struct renesas_usb3 *usb3)
  1153. {
  1154. u32 p0_int_sta = usb3_read(usb3, USB3_P0_INT_STA);
  1155. p0_int_sta &= usb3_read(usb3, USB3_P0_INT_ENA);
  1156. usb3_write(usb3, p0_int_sta, USB3_P0_INT_STA);
  1157. if (p0_int_sta & P0_INT_STSED)
  1158. usb3_irq_epc_pipe0_status_end(usb3);
  1159. if (p0_int_sta & P0_INT_SETUP)
  1160. usb3_irq_epc_pipe0_setup(usb3);
  1161. if (p0_int_sta & P0_INT_BFRDY)
  1162. usb3_irq_epc_pipe0_bfrdy(usb3);
  1163. }
  1164. static void usb3_request_done_pipen(struct renesas_usb3 *usb3,
  1165. struct renesas_usb3_ep *usb3_ep,
  1166. struct renesas_usb3_request *usb3_req,
  1167. int status)
  1168. {
  1169. usb3_pn_stop(usb3);
  1170. usb3_disable_pipe_irq(usb3, usb3_ep->num);
  1171. usb3_request_done(usb3_ep, usb3_req, status);
  1172. /* get next usb3_req */
  1173. usb3_req = usb3_get_request(usb3_ep);
  1174. if (usb3_req)
  1175. usb3_start_pipen(usb3_ep, usb3_req);
  1176. }
  1177. static void usb3_irq_epc_pipen_lsttr(struct renesas_usb3 *usb3, int num)
  1178. {
  1179. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
  1180. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  1181. if (!usb3_req)
  1182. return;
  1183. if (usb3_ep->dir_in) {
  1184. dev_dbg(usb3_to_dev(usb3), "%s: len = %u, actual = %u\n",
  1185. __func__, usb3_req->req.length, usb3_req->req.actual);
  1186. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
  1187. }
  1188. }
  1189. static void usb3_irq_epc_pipen_bfrdy(struct renesas_usb3 *usb3, int num)
  1190. {
  1191. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
  1192. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  1193. if (!usb3_req)
  1194. return;
  1195. if (usb3_ep->dir_in) {
  1196. /* Do not stop the IN pipe here to detect LSTTR interrupt */
  1197. if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
  1198. usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA);
  1199. } else {
  1200. if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
  1201. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
  1202. }
  1203. }
  1204. static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num)
  1205. {
  1206. u32 pn_int_sta;
  1207. if (usb3_pn_change(usb3, num) < 0)
  1208. return;
  1209. pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA);
  1210. pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA);
  1211. usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA);
  1212. if (pn_int_sta & PN_INT_LSTTR)
  1213. usb3_irq_epc_pipen_lsttr(usb3, num);
  1214. if (pn_int_sta & PN_INT_BFRDY)
  1215. usb3_irq_epc_pipen_bfrdy(usb3, num);
  1216. }
  1217. static void usb3_irq_epc_int_2(struct renesas_usb3 *usb3, u32 int_sta_2)
  1218. {
  1219. int i;
  1220. for (i = 0; i < usb3->num_usb3_eps; i++) {
  1221. if (int_sta_2 & USB_INT_2_PIPE(i)) {
  1222. if (!i)
  1223. usb3_irq_epc_pipe0(usb3);
  1224. else
  1225. usb3_irq_epc_pipen(usb3, i);
  1226. }
  1227. }
  1228. }
  1229. static void usb3_irq_epc(struct renesas_usb3 *usb3)
  1230. {
  1231. u32 int_sta_1 = usb3_read(usb3, USB3_USB_INT_STA_1);
  1232. u32 int_sta_2 = usb3_read(usb3, USB3_USB_INT_STA_2);
  1233. int_sta_1 &= usb3_read(usb3, USB3_USB_INT_ENA_1);
  1234. if (int_sta_1) {
  1235. usb3_write(usb3, int_sta_1, USB3_USB_INT_STA_1);
  1236. usb3_irq_epc_int_1(usb3, int_sta_1);
  1237. }
  1238. int_sta_2 &= usb3_read(usb3, USB3_USB_INT_ENA_2);
  1239. if (int_sta_2)
  1240. usb3_irq_epc_int_2(usb3, int_sta_2);
  1241. }
  1242. static irqreturn_t renesas_usb3_irq(int irq, void *_usb3)
  1243. {
  1244. struct renesas_usb3 *usb3 = _usb3;
  1245. irqreturn_t ret = IRQ_NONE;
  1246. u32 axi_int_sta = usb3_read(usb3, USB3_AXI_INT_STA);
  1247. if (axi_int_sta & AXI_INT_EPCINT) {
  1248. usb3_irq_epc(usb3);
  1249. ret = IRQ_HANDLED;
  1250. }
  1251. return ret;
  1252. }
  1253. static void usb3_write_pn_mod(struct renesas_usb3_ep *usb3_ep,
  1254. const struct usb_endpoint_descriptor *desc)
  1255. {
  1256. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1257. u32 val = 0;
  1258. val |= usb3_ep->dir_in ? PN_MOD_DIR : 0;
  1259. val |= PN_MOD_TYPE(usb_endpoint_type(desc));
  1260. val |= PN_MOD_EPNUM(usb_endpoint_num(desc));
  1261. usb3_write(usb3, val, USB3_PN_MOD);
  1262. }
  1263. static u32 usb3_calc_ramarea(int ram_size)
  1264. {
  1265. WARN_ON(ram_size > SZ_16K);
  1266. if (ram_size <= SZ_1K)
  1267. return PN_RAMMAP_RAMAREA_1KB;
  1268. else if (ram_size <= SZ_2K)
  1269. return PN_RAMMAP_RAMAREA_2KB;
  1270. else if (ram_size <= SZ_4K)
  1271. return PN_RAMMAP_RAMAREA_4KB;
  1272. else if (ram_size <= SZ_8K)
  1273. return PN_RAMMAP_RAMAREA_8KB;
  1274. else
  1275. return PN_RAMMAP_RAMAREA_16KB;
  1276. }
  1277. static u32 usb3_calc_rammap_val(struct renesas_usb3_ep *usb3_ep,
  1278. const struct usb_endpoint_descriptor *desc)
  1279. {
  1280. return usb3_ep->rammap_val | PN_RAMMAP_MPKT(usb_endpoint_maxp(desc));
  1281. }
  1282. static int usb3_enable_pipe_n(struct renesas_usb3_ep *usb3_ep,
  1283. const struct usb_endpoint_descriptor *desc)
  1284. {
  1285. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1286. unsigned long flags;
  1287. usb3_ep->dir_in = usb_endpoint_dir_in(desc);
  1288. spin_lock_irqsave(&usb3->lock, flags);
  1289. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1290. usb3_write_pn_mod(usb3_ep, desc);
  1291. usb3_write(usb3, usb3_calc_rammap_val(usb3_ep, desc),
  1292. USB3_PN_RAMMAP);
  1293. usb3_pn_con_clear(usb3);
  1294. usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1295. }
  1296. spin_unlock_irqrestore(&usb3->lock, flags);
  1297. return 0;
  1298. }
  1299. static int usb3_disable_pipe_n(struct renesas_usb3_ep *usb3_ep)
  1300. {
  1301. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1302. unsigned long flags;
  1303. usb3_ep->halt = false;
  1304. spin_lock_irqsave(&usb3->lock, flags);
  1305. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1306. usb3_write(usb3, 0, USB3_PN_RAMMAP);
  1307. usb3_clear_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1308. }
  1309. spin_unlock_irqrestore(&usb3->lock, flags);
  1310. return 0;
  1311. }
  1312. /*------- usb_ep_ops -----------------------------------------------------*/
  1313. static int renesas_usb3_ep_enable(struct usb_ep *_ep,
  1314. const struct usb_endpoint_descriptor *desc)
  1315. {
  1316. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1317. return usb3_enable_pipe_n(usb3_ep, desc);
  1318. }
  1319. static int renesas_usb3_ep_disable(struct usb_ep *_ep)
  1320. {
  1321. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1322. struct renesas_usb3_request *usb3_req;
  1323. do {
  1324. usb3_req = usb3_get_request(usb3_ep);
  1325. if (!usb3_req)
  1326. break;
  1327. usb3_request_done(usb3_ep, usb3_req, -ESHUTDOWN);
  1328. } while (1);
  1329. return usb3_disable_pipe_n(usb3_ep);
  1330. }
  1331. static struct usb_request *__renesas_usb3_ep_alloc_request(gfp_t gfp_flags)
  1332. {
  1333. struct renesas_usb3_request *usb3_req;
  1334. usb3_req = kzalloc(sizeof(struct renesas_usb3_request), gfp_flags);
  1335. if (!usb3_req)
  1336. return NULL;
  1337. INIT_LIST_HEAD(&usb3_req->queue);
  1338. return &usb3_req->req;
  1339. }
  1340. static void __renesas_usb3_ep_free_request(struct usb_request *_req)
  1341. {
  1342. struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
  1343. kfree(usb3_req);
  1344. }
  1345. static struct usb_request *renesas_usb3_ep_alloc_request(struct usb_ep *_ep,
  1346. gfp_t gfp_flags)
  1347. {
  1348. return __renesas_usb3_ep_alloc_request(gfp_flags);
  1349. }
  1350. static void renesas_usb3_ep_free_request(struct usb_ep *_ep,
  1351. struct usb_request *_req)
  1352. {
  1353. __renesas_usb3_ep_free_request(_req);
  1354. }
  1355. static int renesas_usb3_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
  1356. {
  1357. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1358. struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
  1359. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1360. dev_dbg(usb3_to_dev(usb3), "ep_dequeue: ep%2d, %u\n", usb3_ep->num,
  1361. _req->length);
  1362. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, -ECONNRESET);
  1363. return 0;
  1364. }
  1365. static int renesas_usb3_ep_set_halt(struct usb_ep *_ep, int value)
  1366. {
  1367. return usb3_set_halt(usb_ep_to_usb3_ep(_ep), !!value, false);
  1368. }
  1369. static int renesas_usb3_ep_set_wedge(struct usb_ep *_ep)
  1370. {
  1371. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1372. usb3_ep->wedge = true;
  1373. return usb3_set_halt(usb3_ep, true, false);
  1374. }
  1375. static void renesas_usb3_ep_fifo_flush(struct usb_ep *_ep)
  1376. {
  1377. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1378. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1379. unsigned long flags;
  1380. if (usb3_ep->num) {
  1381. spin_lock_irqsave(&usb3->lock, flags);
  1382. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1383. usb3_pn_con_clear(usb3);
  1384. usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1385. }
  1386. spin_unlock_irqrestore(&usb3->lock, flags);
  1387. } else {
  1388. usb3_p0_con_clear_buffer(usb3);
  1389. }
  1390. }
  1391. static struct usb_ep_ops renesas_usb3_ep_ops = {
  1392. .enable = renesas_usb3_ep_enable,
  1393. .disable = renesas_usb3_ep_disable,
  1394. .alloc_request = renesas_usb3_ep_alloc_request,
  1395. .free_request = renesas_usb3_ep_free_request,
  1396. .queue = renesas_usb3_ep_queue,
  1397. .dequeue = renesas_usb3_ep_dequeue,
  1398. .set_halt = renesas_usb3_ep_set_halt,
  1399. .set_wedge = renesas_usb3_ep_set_wedge,
  1400. .fifo_flush = renesas_usb3_ep_fifo_flush,
  1401. };
  1402. /*------- usb_gadget_ops -------------------------------------------------*/
  1403. static int renesas_usb3_start(struct usb_gadget *gadget,
  1404. struct usb_gadget_driver *driver)
  1405. {
  1406. struct renesas_usb3 *usb3;
  1407. if (!driver || driver->max_speed < USB_SPEED_FULL ||
  1408. !driver->setup)
  1409. return -EINVAL;
  1410. usb3 = gadget_to_renesas_usb3(gadget);
  1411. /* hook up the driver */
  1412. usb3->driver = driver;
  1413. renesas_usb3_init_controller(usb3);
  1414. return 0;
  1415. }
  1416. static int renesas_usb3_stop(struct usb_gadget *gadget)
  1417. {
  1418. struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
  1419. unsigned long flags;
  1420. spin_lock_irqsave(&usb3->lock, flags);
  1421. usb3->softconnect = false;
  1422. usb3->gadget.speed = USB_SPEED_UNKNOWN;
  1423. usb3->driver = NULL;
  1424. renesas_usb3_stop_controller(usb3);
  1425. spin_unlock_irqrestore(&usb3->lock, flags);
  1426. return 0;
  1427. }
  1428. static int renesas_usb3_get_frame(struct usb_gadget *_gadget)
  1429. {
  1430. return -EOPNOTSUPP;
  1431. }
  1432. static int renesas_usb3_pullup(struct usb_gadget *gadget, int is_on)
  1433. {
  1434. struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
  1435. usb3->softconnect = !!is_on;
  1436. return 0;
  1437. }
  1438. static int renesas_usb3_set_selfpowered(struct usb_gadget *gadget, int is_self)
  1439. {
  1440. gadget->is_selfpowered = !!is_self;
  1441. return 0;
  1442. }
  1443. static const struct usb_gadget_ops renesas_usb3_gadget_ops = {
  1444. .get_frame = renesas_usb3_get_frame,
  1445. .udc_start = renesas_usb3_start,
  1446. .udc_stop = renesas_usb3_stop,
  1447. .pullup = renesas_usb3_pullup,
  1448. .set_selfpowered = renesas_usb3_set_selfpowered,
  1449. };
  1450. /*------- platform_driver ------------------------------------------------*/
  1451. static int renesas_usb3_remove(struct platform_device *pdev)
  1452. {
  1453. struct renesas_usb3 *usb3 = platform_get_drvdata(pdev);
  1454. pm_runtime_put(&pdev->dev);
  1455. pm_runtime_disable(&pdev->dev);
  1456. usb_del_gadget_udc(&usb3->gadget);
  1457. __renesas_usb3_ep_free_request(usb3->ep0_req);
  1458. return 0;
  1459. }
  1460. static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
  1461. const struct renesas_usb3_priv *priv)
  1462. {
  1463. struct renesas_usb3_ep *usb3_ep;
  1464. int i;
  1465. /* calculate num_usb3_eps from renesas_usb3_priv */
  1466. usb3->num_usb3_eps = priv->ramsize_per_ramif * priv->num_ramif * 2 /
  1467. priv->ramsize_per_pipe + 1;
  1468. if (usb3->num_usb3_eps > USB3_MAX_NUM_PIPES)
  1469. usb3->num_usb3_eps = USB3_MAX_NUM_PIPES;
  1470. usb3->usb3_ep = devm_kzalloc(dev, sizeof(*usb3_ep) * usb3->num_usb3_eps,
  1471. GFP_KERNEL);
  1472. if (!usb3->usb3_ep)
  1473. return -ENOMEM;
  1474. dev_dbg(dev, "%s: num_usb3_eps = %d\n", __func__, usb3->num_usb3_eps);
  1475. /*
  1476. * This driver prepares pipes as the followings:
  1477. * - odd pipes = IN pipe
  1478. * - even pipes = OUT pipe (except pipe 0)
  1479. */
  1480. usb3_for_each_ep(usb3_ep, usb3, i) {
  1481. snprintf(usb3_ep->ep_name, sizeof(usb3_ep->ep_name), "ep%d", i);
  1482. usb3_ep->usb3 = usb3;
  1483. usb3_ep->num = i;
  1484. usb3_ep->ep.name = usb3_ep->ep_name;
  1485. usb3_ep->ep.ops = &renesas_usb3_ep_ops;
  1486. INIT_LIST_HEAD(&usb3_ep->queue);
  1487. INIT_LIST_HEAD(&usb3_ep->ep.ep_list);
  1488. if (!i) {
  1489. /* for control pipe */
  1490. usb3->gadget.ep0 = &usb3_ep->ep;
  1491. usb_ep_set_maxpacket_limit(&usb3_ep->ep,
  1492. USB3_EP0_HSFS_MAX_PACKET_SIZE);
  1493. usb3_ep->ep.caps.type_control = true;
  1494. usb3_ep->ep.caps.dir_in = true;
  1495. usb3_ep->ep.caps.dir_out = true;
  1496. continue;
  1497. }
  1498. /* for bulk or interrupt pipe */
  1499. usb_ep_set_maxpacket_limit(&usb3_ep->ep, ~0);
  1500. list_add_tail(&usb3_ep->ep.ep_list, &usb3->gadget.ep_list);
  1501. usb3_ep->ep.caps.type_bulk = true;
  1502. usb3_ep->ep.caps.type_int = true;
  1503. if (i & 1)
  1504. usb3_ep->ep.caps.dir_in = true;
  1505. else
  1506. usb3_ep->ep.caps.dir_out = true;
  1507. }
  1508. return 0;
  1509. }
  1510. static void renesas_usb3_init_ram(struct renesas_usb3 *usb3, struct device *dev,
  1511. const struct renesas_usb3_priv *priv)
  1512. {
  1513. struct renesas_usb3_ep *usb3_ep;
  1514. int i;
  1515. u32 ramif[2], basead[2]; /* index 0 = for IN pipes */
  1516. u32 *cur_ramif, *cur_basead;
  1517. u32 val;
  1518. memset(ramif, 0, sizeof(ramif));
  1519. memset(basead, 0, sizeof(basead));
  1520. /*
  1521. * This driver prepares pipes as the followings:
  1522. * - all pipes = the same size as "ramsize_per_pipe"
  1523. * Please refer to the "Method of Specifying RAM Mapping"
  1524. */
  1525. usb3_for_each_ep(usb3_ep, usb3, i) {
  1526. if (!i)
  1527. continue; /* out of scope if ep num = 0 */
  1528. if (usb3_ep->ep.caps.dir_in) {
  1529. cur_ramif = &ramif[0];
  1530. cur_basead = &basead[0];
  1531. } else {
  1532. cur_ramif = &ramif[1];
  1533. cur_basead = &basead[1];
  1534. }
  1535. if (*cur_basead > priv->ramsize_per_ramif)
  1536. continue; /* out of memory for IN or OUT pipe */
  1537. /* calculate rammap_val */
  1538. val = PN_RAMMAP_RAMIF(*cur_ramif);
  1539. val |= usb3_calc_ramarea(priv->ramsize_per_pipe);
  1540. val |= PN_RAMMAP_BASEAD(*cur_basead);
  1541. usb3_ep->rammap_val = val;
  1542. dev_dbg(dev, "ep%2d: val = %08x, ramif = %d, base = %x\n",
  1543. i, val, *cur_ramif, *cur_basead);
  1544. /* update current ramif */
  1545. if (*cur_ramif + 1 == priv->num_ramif) {
  1546. *cur_ramif = 0;
  1547. *cur_basead += priv->ramsize_per_pipe;
  1548. } else {
  1549. (*cur_ramif)++;
  1550. }
  1551. }
  1552. }
  1553. static const struct renesas_usb3_priv renesas_usb3_priv_r8a7795 = {
  1554. .ramsize_per_ramif = SZ_16K,
  1555. .num_ramif = 2,
  1556. .ramsize_per_pipe = SZ_4K,
  1557. .workaround_for_vbus = true,
  1558. };
  1559. static const struct of_device_id usb3_of_match[] = {
  1560. {
  1561. .compatible = "renesas,r8a7795-usb3-peri",
  1562. .data = &renesas_usb3_priv_r8a7795,
  1563. },
  1564. { },
  1565. };
  1566. MODULE_DEVICE_TABLE(of, usb3_of_match);
  1567. static int renesas_usb3_probe(struct platform_device *pdev)
  1568. {
  1569. struct renesas_usb3 *usb3;
  1570. struct resource *res;
  1571. const struct of_device_id *match;
  1572. int irq, ret;
  1573. const struct renesas_usb3_priv *priv;
  1574. match = of_match_node(usb3_of_match, pdev->dev.of_node);
  1575. if (!match)
  1576. return -ENODEV;
  1577. priv = match->data;
  1578. irq = platform_get_irq(pdev, 0);
  1579. if (irq < 0)
  1580. return -ENODEV;
  1581. usb3 = devm_kzalloc(&pdev->dev, sizeof(*usb3), GFP_KERNEL);
  1582. if (!usb3)
  1583. return -ENOMEM;
  1584. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1585. usb3->reg = devm_ioremap_resource(&pdev->dev, res);
  1586. if (IS_ERR(usb3->reg))
  1587. return PTR_ERR(usb3->reg);
  1588. platform_set_drvdata(pdev, usb3);
  1589. spin_lock_init(&usb3->lock);
  1590. usb3->gadget.ops = &renesas_usb3_gadget_ops;
  1591. usb3->gadget.name = udc_name;
  1592. usb3->gadget.max_speed = USB_SPEED_SUPER;
  1593. INIT_LIST_HEAD(&usb3->gadget.ep_list);
  1594. ret = renesas_usb3_init_ep(usb3, &pdev->dev, priv);
  1595. if (ret < 0)
  1596. return ret;
  1597. renesas_usb3_init_ram(usb3, &pdev->dev, priv);
  1598. ret = devm_request_irq(&pdev->dev, irq, renesas_usb3_irq, 0,
  1599. dev_name(&pdev->dev), usb3);
  1600. if (ret < 0)
  1601. return ret;
  1602. /* for ep0 handling */
  1603. usb3->ep0_req = __renesas_usb3_ep_alloc_request(GFP_KERNEL);
  1604. if (!usb3->ep0_req)
  1605. return -ENOMEM;
  1606. ret = usb_add_gadget_udc(&pdev->dev, &usb3->gadget);
  1607. if (ret < 0)
  1608. goto err_add_udc;
  1609. usb3->workaround_for_vbus = priv->workaround_for_vbus;
  1610. pm_runtime_enable(&pdev->dev);
  1611. pm_runtime_get_sync(&pdev->dev);
  1612. dev_info(&pdev->dev, "probed\n");
  1613. return 0;
  1614. err_add_udc:
  1615. __renesas_usb3_ep_free_request(usb3->ep0_req);
  1616. return ret;
  1617. }
  1618. static struct platform_driver renesas_usb3_driver = {
  1619. .probe = renesas_usb3_probe,
  1620. .remove = renesas_usb3_remove,
  1621. .driver = {
  1622. .name = (char *)udc_name,
  1623. .of_match_table = of_match_ptr(usb3_of_match),
  1624. },
  1625. };
  1626. module_platform_driver(renesas_usb3_driver);
  1627. MODULE_DESCRIPTION("Renesas USB3.0 Peripheral driver");
  1628. MODULE_LICENSE("GPL v2");
  1629. MODULE_AUTHOR("Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>");
  1630. MODULE_ALIAS("platform:renesas_usb3");