renesas_usb3.c 69 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Renesas USB3.0 Peripheral driver (USB gadget)
  4. *
  5. * Copyright (C) 2015-2017 Renesas Electronics Corporation
  6. */
  7. #include <linux/debugfs.h>
  8. #include <linux/delay.h>
  9. #include <linux/dma-mapping.h>
  10. #include <linux/err.h>
  11. #include <linux/extcon-provider.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/phy/phy.h>
  17. #include <linux/platform_device.h>
  18. #include <linux/pm_runtime.h>
  19. #include <linux/sizes.h>
  20. #include <linux/slab.h>
  21. #include <linux/sys_soc.h>
  22. #include <linux/uaccess.h>
  23. #include <linux/usb/ch9.h>
  24. #include <linux/usb/gadget.h>
  25. /* register definitions */
  26. #define USB3_AXI_INT_STA 0x008
  27. #define USB3_AXI_INT_ENA 0x00c
  28. #define USB3_DMA_INT_STA 0x010
  29. #define USB3_DMA_INT_ENA 0x014
  30. #define USB3_DMA_CH0_CON(n) (0x030 + ((n) - 1) * 0x10) /* n = 1 to 4 */
  31. #define USB3_DMA_CH0_PRD_ADR(n) (0x034 + ((n) - 1) * 0x10) /* n = 1 to 4 */
  32. #define USB3_USB_COM_CON 0x200
  33. #define USB3_USB20_CON 0x204
  34. #define USB3_USB30_CON 0x208
  35. #define USB3_USB_STA 0x210
  36. #define USB3_DRD_CON 0x218
  37. #define USB3_USB_INT_STA_1 0x220
  38. #define USB3_USB_INT_STA_2 0x224
  39. #define USB3_USB_INT_ENA_1 0x228
  40. #define USB3_USB_INT_ENA_2 0x22c
  41. #define USB3_STUP_DAT_0 0x230
  42. #define USB3_STUP_DAT_1 0x234
  43. #define USB3_USB_OTG_STA 0x268
  44. #define USB3_USB_OTG_INT_STA 0x26c
  45. #define USB3_USB_OTG_INT_ENA 0x270
  46. #define USB3_P0_MOD 0x280
  47. #define USB3_P0_CON 0x288
  48. #define USB3_P0_STA 0x28c
  49. #define USB3_P0_INT_STA 0x290
  50. #define USB3_P0_INT_ENA 0x294
  51. #define USB3_P0_LNG 0x2a0
  52. #define USB3_P0_READ 0x2a4
  53. #define USB3_P0_WRITE 0x2a8
  54. #define USB3_PIPE_COM 0x2b0
  55. #define USB3_PN_MOD 0x2c0
  56. #define USB3_PN_RAMMAP 0x2c4
  57. #define USB3_PN_CON 0x2c8
  58. #define USB3_PN_STA 0x2cc
  59. #define USB3_PN_INT_STA 0x2d0
  60. #define USB3_PN_INT_ENA 0x2d4
  61. #define USB3_PN_LNG 0x2e0
  62. #define USB3_PN_READ 0x2e4
  63. #define USB3_PN_WRITE 0x2e8
  64. #define USB3_SSIFCMD 0x340
  65. /* AXI_INT_ENA and AXI_INT_STA */
  66. #define AXI_INT_DMAINT BIT(31)
  67. #define AXI_INT_EPCINT BIT(30)
  68. /* PRD's n = from 1 to 4 */
  69. #define AXI_INT_PRDEN_CLR_STA_SHIFT(n) (16 + (n) - 1)
  70. #define AXI_INT_PRDERR_STA_SHIFT(n) (0 + (n) - 1)
  71. #define AXI_INT_PRDEN_CLR_STA(n) (1 << AXI_INT_PRDEN_CLR_STA_SHIFT(n))
  72. #define AXI_INT_PRDERR_STA(n) (1 << AXI_INT_PRDERR_STA_SHIFT(n))
  73. /* DMA_INT_ENA and DMA_INT_STA */
  74. #define DMA_INT(n) BIT(n)
  75. /* DMA_CH0_CONn */
  76. #define DMA_CON_PIPE_DIR BIT(15) /* 1: In Transfer */
  77. #define DMA_CON_PIPE_NO_SHIFT 8
  78. #define DMA_CON_PIPE_NO_MASK GENMASK(12, DMA_CON_PIPE_NO_SHIFT)
  79. #define DMA_COM_PIPE_NO(n) (((n) << DMA_CON_PIPE_NO_SHIFT) & \
  80. DMA_CON_PIPE_NO_MASK)
  81. #define DMA_CON_PRD_EN BIT(0)
  82. /* LCLKSEL */
  83. #define LCLKSEL_LSEL BIT(18)
  84. /* USB_COM_CON */
  85. #define USB_COM_CON_CONF BIT(24)
  86. #define USB_COM_CON_PN_WDATAIF_NL BIT(23)
  87. #define USB_COM_CON_PN_RDATAIF_NL BIT(22)
  88. #define USB_COM_CON_PN_LSTTR_PP BIT(21)
  89. #define USB_COM_CON_SPD_MODE BIT(17)
  90. #define USB_COM_CON_EP0_EN BIT(16)
  91. #define USB_COM_CON_DEV_ADDR_SHIFT 8
  92. #define USB_COM_CON_DEV_ADDR_MASK GENMASK(14, USB_COM_CON_DEV_ADDR_SHIFT)
  93. #define USB_COM_CON_DEV_ADDR(n) (((n) << USB_COM_CON_DEV_ADDR_SHIFT) & \
  94. USB_COM_CON_DEV_ADDR_MASK)
  95. #define USB_COM_CON_RX_DETECTION BIT(1)
  96. #define USB_COM_CON_PIPE_CLR BIT(0)
  97. /* USB20_CON */
  98. #define USB20_CON_B2_PUE BIT(31)
  99. #define USB20_CON_B2_SUSPEND BIT(24)
  100. #define USB20_CON_B2_CONNECT BIT(17)
  101. #define USB20_CON_B2_TSTMOD_SHIFT 8
  102. #define USB20_CON_B2_TSTMOD_MASK GENMASK(10, USB20_CON_B2_TSTMOD_SHIFT)
  103. #define USB20_CON_B2_TSTMOD(n) (((n) << USB20_CON_B2_TSTMOD_SHIFT) & \
  104. USB20_CON_B2_TSTMOD_MASK)
  105. #define USB20_CON_B2_TSTMOD_EN BIT(0)
  106. /* USB30_CON */
  107. #define USB30_CON_POW_SEL_SHIFT 24
  108. #define USB30_CON_POW_SEL_MASK GENMASK(26, USB30_CON_POW_SEL_SHIFT)
  109. #define USB30_CON_POW_SEL_IN_U3 BIT(26)
  110. #define USB30_CON_POW_SEL_IN_DISCON 0
  111. #define USB30_CON_POW_SEL_P2_TO_P0 BIT(25)
  112. #define USB30_CON_POW_SEL_P0_TO_P3 BIT(24)
  113. #define USB30_CON_POW_SEL_P0_TO_P2 0
  114. #define USB30_CON_B3_PLLWAKE BIT(23)
  115. #define USB30_CON_B3_CONNECT BIT(17)
  116. #define USB30_CON_B3_HOTRST_CMP BIT(1)
  117. /* USB_STA */
  118. #define USB_STA_SPEED_MASK (BIT(2) | BIT(1))
  119. #define USB_STA_SPEED_HS BIT(2)
  120. #define USB_STA_SPEED_FS BIT(1)
  121. #define USB_STA_SPEED_SS 0
  122. #define USB_STA_VBUS_STA BIT(0)
  123. /* DRD_CON */
  124. #define DRD_CON_PERI_CON BIT(24)
  125. #define DRD_CON_VBOUT BIT(0)
  126. /* USB_INT_ENA_1 and USB_INT_STA_1 */
  127. #define USB_INT_1_B3_PLLWKUP BIT(31)
  128. #define USB_INT_1_B3_LUPSUCS BIT(30)
  129. #define USB_INT_1_B3_DISABLE BIT(27)
  130. #define USB_INT_1_B3_WRMRST BIT(21)
  131. #define USB_INT_1_B3_HOTRST BIT(20)
  132. #define USB_INT_1_B2_USBRST BIT(12)
  133. #define USB_INT_1_B2_L1SPND BIT(11)
  134. #define USB_INT_1_B2_SPND BIT(9)
  135. #define USB_INT_1_B2_RSUM BIT(8)
  136. #define USB_INT_1_SPEED BIT(1)
  137. #define USB_INT_1_VBUS_CNG BIT(0)
  138. /* USB_INT_ENA_2 and USB_INT_STA_2 */
  139. #define USB_INT_2_PIPE(n) BIT(n)
  140. /* USB_OTG_STA, USB_OTG_INT_STA and USB_OTG_INT_ENA */
  141. #define USB_OTG_IDMON BIT(4)
  142. /* P0_MOD */
  143. #define P0_MOD_DIR BIT(6)
  144. /* P0_CON and PN_CON */
  145. #define PX_CON_BYTE_EN_MASK (BIT(10) | BIT(9))
  146. #define PX_CON_BYTE_EN_SHIFT 9
  147. #define PX_CON_BYTE_EN_BYTES(n) (((n) << PX_CON_BYTE_EN_SHIFT) & \
  148. PX_CON_BYTE_EN_MASK)
  149. #define PX_CON_SEND BIT(8)
  150. /* P0_CON */
  151. #define P0_CON_ST_RES_MASK (BIT(27) | BIT(26))
  152. #define P0_CON_ST_RES_FORCE_STALL BIT(27)
  153. #define P0_CON_ST_RES_NORMAL BIT(26)
  154. #define P0_CON_ST_RES_FORCE_NRDY 0
  155. #define P0_CON_OT_RES_MASK (BIT(25) | BIT(24))
  156. #define P0_CON_OT_RES_FORCE_STALL BIT(25)
  157. #define P0_CON_OT_RES_NORMAL BIT(24)
  158. #define P0_CON_OT_RES_FORCE_NRDY 0
  159. #define P0_CON_IN_RES_MASK (BIT(17) | BIT(16))
  160. #define P0_CON_IN_RES_FORCE_STALL BIT(17)
  161. #define P0_CON_IN_RES_NORMAL BIT(16)
  162. #define P0_CON_IN_RES_FORCE_NRDY 0
  163. #define P0_CON_RES_WEN BIT(7)
  164. #define P0_CON_BCLR BIT(1)
  165. /* P0_STA and PN_STA */
  166. #define PX_STA_BUFSTS BIT(0)
  167. /* P0_INT_ENA and P0_INT_STA */
  168. #define P0_INT_STSED BIT(18)
  169. #define P0_INT_STSST BIT(17)
  170. #define P0_INT_SETUP BIT(16)
  171. #define P0_INT_RCVNL BIT(8)
  172. #define P0_INT_ERDY BIT(7)
  173. #define P0_INT_FLOW BIT(6)
  174. #define P0_INT_STALL BIT(2)
  175. #define P0_INT_NRDY BIT(1)
  176. #define P0_INT_BFRDY BIT(0)
  177. #define P0_INT_ALL_BITS (P0_INT_STSED | P0_INT_SETUP | P0_INT_BFRDY)
  178. /* PN_MOD */
  179. #define PN_MOD_DIR BIT(6)
  180. #define PN_MOD_TYPE_SHIFT 4
  181. #define PN_MOD_TYPE_MASK GENMASK(5, PN_MOD_TYPE_SHIFT)
  182. #define PN_MOD_TYPE(n) (((n) << PN_MOD_TYPE_SHIFT) & \
  183. PN_MOD_TYPE_MASK)
  184. #define PN_MOD_EPNUM_MASK GENMASK(3, 0)
  185. #define PN_MOD_EPNUM(n) ((n) & PN_MOD_EPNUM_MASK)
  186. /* PN_RAMMAP */
  187. #define PN_RAMMAP_RAMAREA_SHIFT 29
  188. #define PN_RAMMAP_RAMAREA_MASK GENMASK(31, PN_RAMMAP_RAMAREA_SHIFT)
  189. #define PN_RAMMAP_RAMAREA_16KB BIT(31)
  190. #define PN_RAMMAP_RAMAREA_8KB (BIT(30) | BIT(29))
  191. #define PN_RAMMAP_RAMAREA_4KB BIT(30)
  192. #define PN_RAMMAP_RAMAREA_2KB BIT(29)
  193. #define PN_RAMMAP_RAMAREA_1KB 0
  194. #define PN_RAMMAP_MPKT_SHIFT 16
  195. #define PN_RAMMAP_MPKT_MASK GENMASK(26, PN_RAMMAP_MPKT_SHIFT)
  196. #define PN_RAMMAP_MPKT(n) (((n) << PN_RAMMAP_MPKT_SHIFT) & \
  197. PN_RAMMAP_MPKT_MASK)
  198. #define PN_RAMMAP_RAMIF_SHIFT 14
  199. #define PN_RAMMAP_RAMIF_MASK GENMASK(15, PN_RAMMAP_RAMIF_SHIFT)
  200. #define PN_RAMMAP_RAMIF(n) (((n) << PN_RAMMAP_RAMIF_SHIFT) & \
  201. PN_RAMMAP_RAMIF_MASK)
  202. #define PN_RAMMAP_BASEAD_MASK GENMASK(13, 0)
  203. #define PN_RAMMAP_BASEAD(offs) (((offs) >> 3) & PN_RAMMAP_BASEAD_MASK)
  204. #define PN_RAMMAP_DATA(area, ramif, basead) ((PN_RAMMAP_##area) | \
  205. (PN_RAMMAP_RAMIF(ramif)) | \
  206. (PN_RAMMAP_BASEAD(basead)))
  207. /* PN_CON */
  208. #define PN_CON_EN BIT(31)
  209. #define PN_CON_DATAIF_EN BIT(30)
  210. #define PN_CON_RES_MASK (BIT(17) | BIT(16))
  211. #define PN_CON_RES_FORCE_STALL BIT(17)
  212. #define PN_CON_RES_NORMAL BIT(16)
  213. #define PN_CON_RES_FORCE_NRDY 0
  214. #define PN_CON_LAST BIT(11)
  215. #define PN_CON_RES_WEN BIT(7)
  216. #define PN_CON_CLR BIT(0)
  217. /* PN_INT_STA and PN_INT_ENA */
  218. #define PN_INT_LSTTR BIT(4)
  219. #define PN_INT_BFRDY BIT(0)
  220. /* USB3_SSIFCMD */
  221. #define SSIFCMD_URES_U2 BIT(9)
  222. #define SSIFCMD_URES_U1 BIT(8)
  223. #define SSIFCMD_UDIR_U2 BIT(7)
  224. #define SSIFCMD_UDIR_U1 BIT(6)
  225. #define SSIFCMD_UREQ_U2 BIT(5)
  226. #define SSIFCMD_UREQ_U1 BIT(4)
  227. #define USB3_EP0_SS_MAX_PACKET_SIZE 512
  228. #define USB3_EP0_HSFS_MAX_PACKET_SIZE 64
  229. #define USB3_EP0_BUF_SIZE 8
  230. #define USB3_MAX_NUM_PIPES 6 /* This includes PIPE 0 */
  231. #define USB3_WAIT_US 3
  232. #define USB3_DMA_NUM_SETTING_AREA 4
  233. /*
  234. * To avoid double-meaning of "0" (xferred 65536 bytes or received zlp if
  235. * buffer size is 65536), this driver uses the maximum size per a entry is
  236. * 32768 bytes.
  237. */
  238. #define USB3_DMA_MAX_XFER_SIZE 32768
  239. #define USB3_DMA_PRD_SIZE 4096
  240. struct renesas_usb3;
  241. /* Physical Region Descriptor Table */
  242. struct renesas_usb3_prd {
  243. u32 word1;
  244. #define USB3_PRD1_E BIT(30) /* the end of chain */
  245. #define USB3_PRD1_U BIT(29) /* completion of transfer */
  246. #define USB3_PRD1_D BIT(28) /* Error occurred */
  247. #define USB3_PRD1_INT BIT(27) /* Interrupt occurred */
  248. #define USB3_PRD1_LST BIT(26) /* Last Packet */
  249. #define USB3_PRD1_B_INC BIT(24)
  250. #define USB3_PRD1_MPS_8 0
  251. #define USB3_PRD1_MPS_16 BIT(21)
  252. #define USB3_PRD1_MPS_32 BIT(22)
  253. #define USB3_PRD1_MPS_64 (BIT(22) | BIT(21))
  254. #define USB3_PRD1_MPS_512 BIT(23)
  255. #define USB3_PRD1_MPS_1024 (BIT(23) | BIT(21))
  256. #define USB3_PRD1_MPS_RESERVED (BIT(23) | BIT(22) | BIT(21))
  257. #define USB3_PRD1_SIZE_MASK GENMASK(15, 0)
  258. u32 bap;
  259. };
  260. #define USB3_DMA_NUM_PRD_ENTRIES (USB3_DMA_PRD_SIZE / \
  261. sizeof(struct renesas_usb3_prd))
  262. #define USB3_DMA_MAX_XFER_SIZE_ALL_PRDS (USB3_DMA_PRD_SIZE / \
  263. sizeof(struct renesas_usb3_prd) * \
  264. USB3_DMA_MAX_XFER_SIZE)
  265. struct renesas_usb3_dma {
  266. struct renesas_usb3_prd *prd;
  267. dma_addr_t prd_dma;
  268. int num; /* Setting area number (from 1 to 4) */
  269. bool used;
  270. };
  271. struct renesas_usb3_request {
  272. struct usb_request req;
  273. struct list_head queue;
  274. };
  275. #define USB3_EP_NAME_SIZE 8
  276. struct renesas_usb3_ep {
  277. struct usb_ep ep;
  278. struct renesas_usb3 *usb3;
  279. struct renesas_usb3_dma *dma;
  280. int num;
  281. char ep_name[USB3_EP_NAME_SIZE];
  282. struct list_head queue;
  283. u32 rammap_val;
  284. bool dir_in;
  285. bool halt;
  286. bool wedge;
  287. bool started;
  288. };
  289. struct renesas_usb3_priv {
  290. int ramsize_per_ramif; /* unit = bytes */
  291. int num_ramif;
  292. int ramsize_per_pipe; /* unit = bytes */
  293. bool workaround_for_vbus; /* if true, don't check vbus signal */
  294. };
  295. struct renesas_usb3 {
  296. void __iomem *reg;
  297. struct usb_gadget gadget;
  298. struct usb_gadget_driver *driver;
  299. struct extcon_dev *extcon;
  300. struct work_struct extcon_work;
  301. struct phy *phy;
  302. struct dentry *dentry;
  303. struct renesas_usb3_ep *usb3_ep;
  304. int num_usb3_eps;
  305. struct renesas_usb3_dma dma[USB3_DMA_NUM_SETTING_AREA];
  306. spinlock_t lock;
  307. int disabled_count;
  308. struct usb_request *ep0_req;
  309. u16 test_mode;
  310. u8 ep0_buf[USB3_EP0_BUF_SIZE];
  311. bool softconnect;
  312. bool workaround_for_vbus;
  313. bool extcon_host; /* check id and set EXTCON_USB_HOST */
  314. bool extcon_usb; /* check vbus and set EXTCON_USB */
  315. bool forced_b_device;
  316. };
  317. #define gadget_to_renesas_usb3(_gadget) \
  318. container_of(_gadget, struct renesas_usb3, gadget)
  319. #define renesas_usb3_to_gadget(renesas_usb3) (&renesas_usb3->gadget)
  320. #define usb3_to_dev(_usb3) (_usb3->gadget.dev.parent)
  321. #define usb_ep_to_usb3_ep(_ep) container_of(_ep, struct renesas_usb3_ep, ep)
  322. #define usb3_ep_to_usb3(_usb3_ep) (_usb3_ep->usb3)
  323. #define usb_req_to_usb3_req(_req) container_of(_req, \
  324. struct renesas_usb3_request, req)
  325. #define usb3_get_ep(usb3, n) ((usb3)->usb3_ep + (n))
  326. #define usb3_for_each_ep(usb3_ep, usb3, i) \
  327. for ((i) = 0, usb3_ep = usb3_get_ep(usb3, (i)); \
  328. (i) < (usb3)->num_usb3_eps; \
  329. (i)++, usb3_ep = usb3_get_ep(usb3, (i)))
  330. #define usb3_get_dma(usb3, i) (&(usb3)->dma[i])
  331. #define usb3_for_each_dma(usb3, dma, i) \
  332. for ((i) = 0, dma = usb3_get_dma((usb3), (i)); \
  333. (i) < USB3_DMA_NUM_SETTING_AREA; \
  334. (i)++, dma = usb3_get_dma((usb3), (i)))
  335. static const char udc_name[] = "renesas_usb3";
  336. static bool use_dma = 1;
  337. module_param(use_dma, bool, 0644);
  338. MODULE_PARM_DESC(use_dma, "use dedicated DMAC");
  339. static void usb3_write(struct renesas_usb3 *usb3, u32 data, u32 offs)
  340. {
  341. iowrite32(data, usb3->reg + offs);
  342. }
  343. static u32 usb3_read(struct renesas_usb3 *usb3, u32 offs)
  344. {
  345. return ioread32(usb3->reg + offs);
  346. }
  347. static void usb3_set_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
  348. {
  349. u32 val = usb3_read(usb3, offs);
  350. val |= bits;
  351. usb3_write(usb3, val, offs);
  352. }
  353. static void usb3_clear_bit(struct renesas_usb3 *usb3, u32 bits, u32 offs)
  354. {
  355. u32 val = usb3_read(usb3, offs);
  356. val &= ~bits;
  357. usb3_write(usb3, val, offs);
  358. }
  359. static int usb3_wait(struct renesas_usb3 *usb3, u32 reg, u32 mask,
  360. u32 expected)
  361. {
  362. int i;
  363. for (i = 0; i < USB3_WAIT_US; i++) {
  364. if ((usb3_read(usb3, reg) & mask) == expected)
  365. return 0;
  366. udelay(1);
  367. }
  368. dev_dbg(usb3_to_dev(usb3), "%s: timed out (%8x, %08x, %08x)\n",
  369. __func__, reg, mask, expected);
  370. return -EBUSY;
  371. }
  372. static void renesas_usb3_extcon_work(struct work_struct *work)
  373. {
  374. struct renesas_usb3 *usb3 = container_of(work, struct renesas_usb3,
  375. extcon_work);
  376. extcon_set_state_sync(usb3->extcon, EXTCON_USB_HOST, usb3->extcon_host);
  377. extcon_set_state_sync(usb3->extcon, EXTCON_USB, usb3->extcon_usb);
  378. }
  379. static void usb3_enable_irq_1(struct renesas_usb3 *usb3, u32 bits)
  380. {
  381. usb3_set_bit(usb3, bits, USB3_USB_INT_ENA_1);
  382. }
  383. static void usb3_disable_irq_1(struct renesas_usb3 *usb3, u32 bits)
  384. {
  385. usb3_clear_bit(usb3, bits, USB3_USB_INT_ENA_1);
  386. }
  387. static void usb3_enable_pipe_irq(struct renesas_usb3 *usb3, int num)
  388. {
  389. usb3_set_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
  390. }
  391. static void usb3_disable_pipe_irq(struct renesas_usb3 *usb3, int num)
  392. {
  393. usb3_clear_bit(usb3, USB_INT_2_PIPE(num), USB3_USB_INT_ENA_2);
  394. }
  395. static bool usb3_is_host(struct renesas_usb3 *usb3)
  396. {
  397. return !(usb3_read(usb3, USB3_DRD_CON) & DRD_CON_PERI_CON);
  398. }
  399. static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)
  400. {
  401. /* Set AXI_INT */
  402. usb3_write(usb3, ~0, USB3_DMA_INT_STA);
  403. usb3_write(usb3, 0, USB3_DMA_INT_ENA);
  404. usb3_set_bit(usb3, AXI_INT_DMAINT | AXI_INT_EPCINT, USB3_AXI_INT_ENA);
  405. }
  406. static void usb3_init_epc_registers(struct renesas_usb3 *usb3)
  407. {
  408. usb3_write(usb3, ~0, USB3_USB_INT_STA_1);
  409. usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
  410. }
  411. static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3)
  412. {
  413. if (!(usb3_read(usb3, USB3_USB20_CON) & USB20_CON_B2_SUSPEND))
  414. return true; /* already waked it up */
  415. usb3_clear_bit(usb3, USB20_CON_B2_SUSPEND, USB3_USB20_CON);
  416. usb3_enable_irq_1(usb3, USB_INT_1_B2_RSUM);
  417. return false;
  418. }
  419. static void usb3_usb2_pullup(struct renesas_usb3 *usb3, int pullup)
  420. {
  421. u32 bits = USB20_CON_B2_PUE | USB20_CON_B2_CONNECT;
  422. if (usb3->softconnect && pullup)
  423. usb3_set_bit(usb3, bits, USB3_USB20_CON);
  424. else
  425. usb3_clear_bit(usb3, bits, USB3_USB20_CON);
  426. }
  427. static void usb3_set_test_mode(struct renesas_usb3 *usb3)
  428. {
  429. u32 val = usb3_read(usb3, USB3_USB20_CON);
  430. val &= ~USB20_CON_B2_TSTMOD_MASK;
  431. val |= USB20_CON_B2_TSTMOD(usb3->test_mode);
  432. usb3_write(usb3, val | USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
  433. if (!usb3->test_mode)
  434. usb3_clear_bit(usb3, USB20_CON_B2_TSTMOD_EN, USB3_USB20_CON);
  435. }
  436. static void usb3_start_usb2_connection(struct renesas_usb3 *usb3)
  437. {
  438. usb3->disabled_count++;
  439. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  440. usb3_set_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
  441. usb3_usb2_pullup(usb3, 1);
  442. }
  443. static int usb3_is_usb3_phy_in_u3(struct renesas_usb3 *usb3)
  444. {
  445. return usb3_read(usb3, USB3_USB30_CON) & USB30_CON_POW_SEL_IN_U3;
  446. }
  447. static bool usb3_wakeup_usb3_phy(struct renesas_usb3 *usb3)
  448. {
  449. if (!usb3_is_usb3_phy_in_u3(usb3))
  450. return true; /* already waked it up */
  451. usb3_set_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
  452. usb3_enable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
  453. return false;
  454. }
  455. static u16 usb3_feature_get_un_enabled(struct renesas_usb3 *usb3)
  456. {
  457. u32 mask_u2 = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
  458. u32 mask_u1 = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
  459. u32 val = usb3_read(usb3, USB3_SSIFCMD);
  460. u16 ret = 0;
  461. /* Enables {U2,U1} if the bits of UDIR and UREQ are set to 0 */
  462. if (!(val & mask_u2))
  463. ret |= 1 << USB_DEV_STAT_U2_ENABLED;
  464. if (!(val & mask_u1))
  465. ret |= 1 << USB_DEV_STAT_U1_ENABLED;
  466. return ret;
  467. }
  468. static void usb3_feature_u2_enable(struct renesas_usb3 *usb3, bool enable)
  469. {
  470. u32 bits = SSIFCMD_UDIR_U2 | SSIFCMD_UREQ_U2;
  471. /* Enables U2 if the bits of UDIR and UREQ are set to 0 */
  472. if (enable)
  473. usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
  474. else
  475. usb3_set_bit(usb3, bits, USB3_SSIFCMD);
  476. }
  477. static void usb3_feature_u1_enable(struct renesas_usb3 *usb3, bool enable)
  478. {
  479. u32 bits = SSIFCMD_UDIR_U1 | SSIFCMD_UREQ_U1;
  480. /* Enables U1 if the bits of UDIR and UREQ are set to 0 */
  481. if (enable)
  482. usb3_clear_bit(usb3, bits, USB3_SSIFCMD);
  483. else
  484. usb3_set_bit(usb3, bits, USB3_SSIFCMD);
  485. }
  486. static void usb3_start_operation_for_usb3(struct renesas_usb3 *usb3)
  487. {
  488. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  489. usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
  490. usb3_set_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
  491. }
  492. static void usb3_start_usb3_connection(struct renesas_usb3 *usb3)
  493. {
  494. usb3_start_operation_for_usb3(usb3);
  495. usb3_set_bit(usb3, USB_COM_CON_RX_DETECTION, USB3_USB_COM_CON);
  496. usb3_enable_irq_1(usb3, USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
  497. USB_INT_1_SPEED);
  498. }
  499. static void usb3_stop_usb3_connection(struct renesas_usb3 *usb3)
  500. {
  501. usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
  502. }
  503. static void usb3_transition_to_default_state(struct renesas_usb3 *usb3,
  504. bool is_usb3)
  505. {
  506. usb3_set_bit(usb3, USB_INT_2_PIPE(0), USB3_USB_INT_ENA_2);
  507. usb3_write(usb3, P0_INT_ALL_BITS, USB3_P0_INT_STA);
  508. usb3_set_bit(usb3, P0_INT_ALL_BITS, USB3_P0_INT_ENA);
  509. if (is_usb3)
  510. usb3_enable_irq_1(usb3, USB_INT_1_B3_WRMRST |
  511. USB_INT_1_B3_HOTRST);
  512. else
  513. usb3_enable_irq_1(usb3, USB_INT_1_B2_SPND |
  514. USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
  515. }
  516. static void usb3_connect(struct renesas_usb3 *usb3)
  517. {
  518. if (usb3_wakeup_usb3_phy(usb3))
  519. usb3_start_usb3_connection(usb3);
  520. }
  521. static void usb3_reset_epc(struct renesas_usb3 *usb3)
  522. {
  523. usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
  524. usb3_clear_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  525. usb3_set_bit(usb3, USB_COM_CON_PIPE_CLR, USB3_USB_COM_CON);
  526. usb3->test_mode = 0;
  527. usb3_set_test_mode(usb3);
  528. }
  529. static void usb3_disconnect(struct renesas_usb3 *usb3)
  530. {
  531. usb3->disabled_count = 0;
  532. usb3_usb2_pullup(usb3, 0);
  533. usb3_clear_bit(usb3, USB30_CON_B3_CONNECT, USB3_USB30_CON);
  534. usb3_reset_epc(usb3);
  535. usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM | USB_INT_1_B3_PLLWKUP |
  536. USB_INT_1_B3_LUPSUCS | USB_INT_1_B3_DISABLE |
  537. USB_INT_1_SPEED | USB_INT_1_B3_WRMRST |
  538. USB_INT_1_B3_HOTRST | USB_INT_1_B2_SPND |
  539. USB_INT_1_B2_L1SPND | USB_INT_1_B2_USBRST);
  540. usb3_clear_bit(usb3, USB_COM_CON_SPD_MODE, USB3_USB_COM_CON);
  541. usb3_init_epc_registers(usb3);
  542. if (usb3->driver)
  543. usb3->driver->disconnect(&usb3->gadget);
  544. }
  545. static void usb3_check_vbus(struct renesas_usb3 *usb3)
  546. {
  547. if (usb3->workaround_for_vbus) {
  548. usb3_connect(usb3);
  549. } else {
  550. usb3->extcon_usb = !!(usb3_read(usb3, USB3_USB_STA) &
  551. USB_STA_VBUS_STA);
  552. if (usb3->extcon_usb)
  553. usb3_connect(usb3);
  554. else
  555. usb3_disconnect(usb3);
  556. schedule_work(&usb3->extcon_work);
  557. }
  558. }
  559. static void usb3_set_mode(struct renesas_usb3 *usb3, bool host)
  560. {
  561. if (host)
  562. usb3_clear_bit(usb3, DRD_CON_PERI_CON, USB3_DRD_CON);
  563. else
  564. usb3_set_bit(usb3, DRD_CON_PERI_CON, USB3_DRD_CON);
  565. }
  566. static void usb3_vbus_out(struct renesas_usb3 *usb3, bool enable)
  567. {
  568. if (enable)
  569. usb3_set_bit(usb3, DRD_CON_VBOUT, USB3_DRD_CON);
  570. else
  571. usb3_clear_bit(usb3, DRD_CON_VBOUT, USB3_DRD_CON);
  572. }
  573. static void usb3_mode_config(struct renesas_usb3 *usb3, bool host, bool a_dev)
  574. {
  575. unsigned long flags;
  576. spin_lock_irqsave(&usb3->lock, flags);
  577. usb3_set_mode(usb3, host);
  578. usb3_vbus_out(usb3, a_dev);
  579. /* for A-Peripheral or forced B-device mode */
  580. if ((!host && a_dev) ||
  581. (usb3->workaround_for_vbus && usb3->forced_b_device))
  582. usb3_connect(usb3);
  583. spin_unlock_irqrestore(&usb3->lock, flags);
  584. }
  585. static bool usb3_is_a_device(struct renesas_usb3 *usb3)
  586. {
  587. return !(usb3_read(usb3, USB3_USB_OTG_STA) & USB_OTG_IDMON);
  588. }
  589. static void usb3_check_id(struct renesas_usb3 *usb3)
  590. {
  591. usb3->extcon_host = usb3_is_a_device(usb3);
  592. if (usb3->extcon_host && !usb3->forced_b_device)
  593. usb3_mode_config(usb3, true, true);
  594. else
  595. usb3_mode_config(usb3, false, false);
  596. schedule_work(&usb3->extcon_work);
  597. }
  598. static void renesas_usb3_init_controller(struct renesas_usb3 *usb3)
  599. {
  600. usb3_init_axi_bridge(usb3);
  601. usb3_init_epc_registers(usb3);
  602. usb3_set_bit(usb3, USB_COM_CON_PN_WDATAIF_NL |
  603. USB_COM_CON_PN_RDATAIF_NL | USB_COM_CON_PN_LSTTR_PP,
  604. USB3_USB_COM_CON);
  605. usb3_write(usb3, USB_OTG_IDMON, USB3_USB_OTG_INT_STA);
  606. usb3_write(usb3, USB_OTG_IDMON, USB3_USB_OTG_INT_ENA);
  607. usb3_check_id(usb3);
  608. usb3_check_vbus(usb3);
  609. }
  610. static void renesas_usb3_stop_controller(struct renesas_usb3 *usb3)
  611. {
  612. usb3_disconnect(usb3);
  613. usb3_write(usb3, 0, USB3_P0_INT_ENA);
  614. usb3_write(usb3, 0, USB3_USB_OTG_INT_ENA);
  615. usb3_write(usb3, 0, USB3_USB_INT_ENA_1);
  616. usb3_write(usb3, 0, USB3_USB_INT_ENA_2);
  617. usb3_write(usb3, 0, USB3_AXI_INT_ENA);
  618. }
  619. static void usb3_irq_epc_int_1_pll_wakeup(struct renesas_usb3 *usb3)
  620. {
  621. usb3_disable_irq_1(usb3, USB_INT_1_B3_PLLWKUP);
  622. usb3_clear_bit(usb3, USB30_CON_B3_PLLWAKE, USB3_USB30_CON);
  623. usb3_start_usb3_connection(usb3);
  624. }
  625. static void usb3_irq_epc_int_1_linkup_success(struct renesas_usb3 *usb3)
  626. {
  627. usb3_transition_to_default_state(usb3, true);
  628. }
  629. static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3)
  630. {
  631. usb3_disable_irq_1(usb3, USB_INT_1_B2_RSUM);
  632. usb3_start_usb2_connection(usb3);
  633. usb3_transition_to_default_state(usb3, false);
  634. }
  635. static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3)
  636. {
  637. usb3_stop_usb3_connection(usb3);
  638. if (usb3_wakeup_usb2_phy(usb3))
  639. usb3_irq_epc_int_1_resume(usb3);
  640. }
  641. static void usb3_irq_epc_int_1_bus_reset(struct renesas_usb3 *usb3)
  642. {
  643. usb3_reset_epc(usb3);
  644. if (usb3->disabled_count < 3)
  645. usb3_start_usb3_connection(usb3);
  646. else
  647. usb3_start_usb2_connection(usb3);
  648. }
  649. static void usb3_irq_epc_int_1_vbus_change(struct renesas_usb3 *usb3)
  650. {
  651. usb3_check_vbus(usb3);
  652. }
  653. static void usb3_irq_epc_int_1_hot_reset(struct renesas_usb3 *usb3)
  654. {
  655. usb3_reset_epc(usb3);
  656. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  657. /* This bit shall be set within 12ms from the start of HotReset */
  658. usb3_set_bit(usb3, USB30_CON_B3_HOTRST_CMP, USB3_USB30_CON);
  659. }
  660. static void usb3_irq_epc_int_1_warm_reset(struct renesas_usb3 *usb3)
  661. {
  662. usb3_reset_epc(usb3);
  663. usb3_set_bit(usb3, USB_COM_CON_EP0_EN, USB3_USB_COM_CON);
  664. usb3_start_operation_for_usb3(usb3);
  665. usb3_enable_irq_1(usb3, USB_INT_1_SPEED);
  666. }
  667. static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
  668. {
  669. u32 speed = usb3_read(usb3, USB3_USB_STA) & USB_STA_SPEED_MASK;
  670. switch (speed) {
  671. case USB_STA_SPEED_SS:
  672. usb3->gadget.speed = USB_SPEED_SUPER;
  673. break;
  674. case USB_STA_SPEED_HS:
  675. usb3->gadget.speed = USB_SPEED_HIGH;
  676. break;
  677. case USB_STA_SPEED_FS:
  678. usb3->gadget.speed = USB_SPEED_FULL;
  679. break;
  680. default:
  681. usb3->gadget.speed = USB_SPEED_UNKNOWN;
  682. break;
  683. }
  684. }
  685. static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1)
  686. {
  687. if (int_sta_1 & USB_INT_1_B3_PLLWKUP)
  688. usb3_irq_epc_int_1_pll_wakeup(usb3);
  689. if (int_sta_1 & USB_INT_1_B3_LUPSUCS)
  690. usb3_irq_epc_int_1_linkup_success(usb3);
  691. if (int_sta_1 & USB_INT_1_B3_HOTRST)
  692. usb3_irq_epc_int_1_hot_reset(usb3);
  693. if (int_sta_1 & USB_INT_1_B3_WRMRST)
  694. usb3_irq_epc_int_1_warm_reset(usb3);
  695. if (int_sta_1 & USB_INT_1_B3_DISABLE)
  696. usb3_irq_epc_int_1_disable(usb3);
  697. if (int_sta_1 & USB_INT_1_B2_USBRST)
  698. usb3_irq_epc_int_1_bus_reset(usb3);
  699. if (int_sta_1 & USB_INT_1_B2_RSUM)
  700. usb3_irq_epc_int_1_resume(usb3);
  701. if (int_sta_1 & USB_INT_1_SPEED)
  702. usb3_irq_epc_int_1_speed(usb3);
  703. if (int_sta_1 & USB_INT_1_VBUS_CNG)
  704. usb3_irq_epc_int_1_vbus_change(usb3);
  705. }
  706. static struct renesas_usb3_request *__usb3_get_request(struct renesas_usb3_ep
  707. *usb3_ep)
  708. {
  709. return list_first_entry_or_null(&usb3_ep->queue,
  710. struct renesas_usb3_request, queue);
  711. }
  712. static struct renesas_usb3_request *usb3_get_request(struct renesas_usb3_ep
  713. *usb3_ep)
  714. {
  715. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  716. struct renesas_usb3_request *usb3_req;
  717. unsigned long flags;
  718. spin_lock_irqsave(&usb3->lock, flags);
  719. usb3_req = __usb3_get_request(usb3_ep);
  720. spin_unlock_irqrestore(&usb3->lock, flags);
  721. return usb3_req;
  722. }
  723. static void __usb3_request_done(struct renesas_usb3_ep *usb3_ep,
  724. struct renesas_usb3_request *usb3_req,
  725. int status)
  726. {
  727. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  728. dev_dbg(usb3_to_dev(usb3), "giveback: ep%2d, %u, %u, %d\n",
  729. usb3_ep->num, usb3_req->req.length, usb3_req->req.actual,
  730. status);
  731. usb3_req->req.status = status;
  732. usb3_ep->started = false;
  733. list_del_init(&usb3_req->queue);
  734. spin_unlock(&usb3->lock);
  735. usb_gadget_giveback_request(&usb3_ep->ep, &usb3_req->req);
  736. spin_lock(&usb3->lock);
  737. }
  738. static void usb3_request_done(struct renesas_usb3_ep *usb3_ep,
  739. struct renesas_usb3_request *usb3_req, int status)
  740. {
  741. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  742. unsigned long flags;
  743. spin_lock_irqsave(&usb3->lock, flags);
  744. __usb3_request_done(usb3_ep, usb3_req, status);
  745. spin_unlock_irqrestore(&usb3->lock, flags);
  746. }
  747. static void usb3_irq_epc_pipe0_status_end(struct renesas_usb3 *usb3)
  748. {
  749. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  750. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  751. if (usb3_req)
  752. usb3_request_done(usb3_ep, usb3_req, 0);
  753. if (usb3->test_mode)
  754. usb3_set_test_mode(usb3);
  755. }
  756. static void usb3_get_setup_data(struct renesas_usb3 *usb3,
  757. struct usb_ctrlrequest *ctrl)
  758. {
  759. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  760. u32 *data = (u32 *)ctrl;
  761. *data++ = usb3_read(usb3, USB3_STUP_DAT_0);
  762. *data = usb3_read(usb3, USB3_STUP_DAT_1);
  763. /* update this driver's flag */
  764. usb3_ep->dir_in = !!(ctrl->bRequestType & USB_DIR_IN);
  765. }
  766. static void usb3_set_p0_con_update_res(struct renesas_usb3 *usb3, u32 res)
  767. {
  768. u32 val = usb3_read(usb3, USB3_P0_CON);
  769. val &= ~(P0_CON_ST_RES_MASK | P0_CON_OT_RES_MASK | P0_CON_IN_RES_MASK);
  770. val |= res | P0_CON_RES_WEN;
  771. usb3_write(usb3, val, USB3_P0_CON);
  772. }
  773. static void usb3_set_p0_con_for_ctrl_read_data(struct renesas_usb3 *usb3)
  774. {
  775. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
  776. P0_CON_OT_RES_FORCE_STALL |
  777. P0_CON_IN_RES_NORMAL);
  778. }
  779. static void usb3_set_p0_con_for_ctrl_read_status(struct renesas_usb3 *usb3)
  780. {
  781. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
  782. P0_CON_OT_RES_FORCE_STALL |
  783. P0_CON_IN_RES_NORMAL);
  784. }
  785. static void usb3_set_p0_con_for_ctrl_write_data(struct renesas_usb3 *usb3)
  786. {
  787. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
  788. P0_CON_OT_RES_NORMAL |
  789. P0_CON_IN_RES_FORCE_STALL);
  790. }
  791. static void usb3_set_p0_con_for_ctrl_write_status(struct renesas_usb3 *usb3)
  792. {
  793. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
  794. P0_CON_OT_RES_NORMAL |
  795. P0_CON_IN_RES_FORCE_STALL);
  796. }
  797. static void usb3_set_p0_con_for_no_data(struct renesas_usb3 *usb3)
  798. {
  799. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_NORMAL |
  800. P0_CON_OT_RES_FORCE_STALL |
  801. P0_CON_IN_RES_FORCE_STALL);
  802. }
  803. static void usb3_set_p0_con_stall(struct renesas_usb3 *usb3)
  804. {
  805. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_STALL |
  806. P0_CON_OT_RES_FORCE_STALL |
  807. P0_CON_IN_RES_FORCE_STALL);
  808. }
  809. static void usb3_set_p0_con_stop(struct renesas_usb3 *usb3)
  810. {
  811. usb3_set_p0_con_update_res(usb3, P0_CON_ST_RES_FORCE_NRDY |
  812. P0_CON_OT_RES_FORCE_NRDY |
  813. P0_CON_IN_RES_FORCE_NRDY);
  814. }
  815. static int usb3_pn_change(struct renesas_usb3 *usb3, int num)
  816. {
  817. if (num == 0 || num > usb3->num_usb3_eps)
  818. return -ENXIO;
  819. usb3_write(usb3, num, USB3_PIPE_COM);
  820. return 0;
  821. }
  822. static void usb3_set_pn_con_update_res(struct renesas_usb3 *usb3, u32 res)
  823. {
  824. u32 val = usb3_read(usb3, USB3_PN_CON);
  825. val &= ~PN_CON_RES_MASK;
  826. val |= res & PN_CON_RES_MASK;
  827. val |= PN_CON_RES_WEN;
  828. usb3_write(usb3, val, USB3_PN_CON);
  829. }
  830. static void usb3_pn_start(struct renesas_usb3 *usb3)
  831. {
  832. usb3_set_pn_con_update_res(usb3, PN_CON_RES_NORMAL);
  833. }
  834. static void usb3_pn_stop(struct renesas_usb3 *usb3)
  835. {
  836. usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_NRDY);
  837. }
  838. static void usb3_pn_stall(struct renesas_usb3 *usb3)
  839. {
  840. usb3_set_pn_con_update_res(usb3, PN_CON_RES_FORCE_STALL);
  841. }
  842. static int usb3_pn_con_clear(struct renesas_usb3 *usb3)
  843. {
  844. usb3_set_bit(usb3, PN_CON_CLR, USB3_PN_CON);
  845. return usb3_wait(usb3, USB3_PN_CON, PN_CON_CLR, 0);
  846. }
  847. static bool usb3_is_transfer_complete(struct renesas_usb3_ep *usb3_ep,
  848. struct renesas_usb3_request *usb3_req)
  849. {
  850. struct usb_request *req = &usb3_req->req;
  851. if ((!req->zero && req->actual == req->length) ||
  852. (req->actual % usb3_ep->ep.maxpacket) || (req->length == 0))
  853. return true;
  854. else
  855. return false;
  856. }
  857. static int usb3_wait_pipe_status(struct renesas_usb3_ep *usb3_ep, u32 mask)
  858. {
  859. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  860. u32 sta_reg = usb3_ep->num ? USB3_PN_STA : USB3_P0_STA;
  861. return usb3_wait(usb3, sta_reg, mask, mask);
  862. }
  863. static void usb3_set_px_con_send(struct renesas_usb3_ep *usb3_ep, int bytes,
  864. bool last)
  865. {
  866. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  867. u32 con_reg = usb3_ep->num ? USB3_PN_CON : USB3_P0_CON;
  868. u32 val = usb3_read(usb3, con_reg);
  869. val |= PX_CON_SEND | PX_CON_BYTE_EN_BYTES(bytes);
  870. val |= (usb3_ep->num && last) ? PN_CON_LAST : 0;
  871. usb3_write(usb3, val, con_reg);
  872. }
  873. static int usb3_write_pipe(struct renesas_usb3_ep *usb3_ep,
  874. struct renesas_usb3_request *usb3_req,
  875. u32 fifo_reg)
  876. {
  877. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  878. int i;
  879. int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
  880. usb3_ep->ep.maxpacket);
  881. u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
  882. u32 tmp = 0;
  883. bool is_last = !len ? true : false;
  884. if (usb3_wait_pipe_status(usb3_ep, PX_STA_BUFSTS) < 0)
  885. return -EBUSY;
  886. /* Update gadget driver parameter */
  887. usb3_req->req.actual += len;
  888. /* Write data to the register */
  889. if (len >= 4) {
  890. iowrite32_rep(usb3->reg + fifo_reg, buf, len / 4);
  891. buf += (len / 4) * 4;
  892. len %= 4; /* update len to use usb3_set_pX_con_send() */
  893. }
  894. if (len) {
  895. for (i = 0; i < len; i++)
  896. tmp |= buf[i] << (8 * i);
  897. usb3_write(usb3, tmp, fifo_reg);
  898. }
  899. if (!is_last)
  900. is_last = usb3_is_transfer_complete(usb3_ep, usb3_req);
  901. /* Send the data */
  902. usb3_set_px_con_send(usb3_ep, len, is_last);
  903. return is_last ? 0 : -EAGAIN;
  904. }
  905. static u32 usb3_get_received_length(struct renesas_usb3_ep *usb3_ep)
  906. {
  907. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  908. u32 lng_reg = usb3_ep->num ? USB3_PN_LNG : USB3_P0_LNG;
  909. return usb3_read(usb3, lng_reg);
  910. }
  911. static int usb3_read_pipe(struct renesas_usb3_ep *usb3_ep,
  912. struct renesas_usb3_request *usb3_req, u32 fifo_reg)
  913. {
  914. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  915. int i;
  916. int len = min_t(unsigned, usb3_req->req.length - usb3_req->req.actual,
  917. usb3_get_received_length(usb3_ep));
  918. u8 *buf = usb3_req->req.buf + usb3_req->req.actual;
  919. u32 tmp = 0;
  920. if (!len)
  921. return 0;
  922. /* Update gadget driver parameter */
  923. usb3_req->req.actual += len;
  924. /* Read data from the register */
  925. if (len >= 4) {
  926. ioread32_rep(usb3->reg + fifo_reg, buf, len / 4);
  927. buf += (len / 4) * 4;
  928. len %= 4;
  929. }
  930. if (len) {
  931. tmp = usb3_read(usb3, fifo_reg);
  932. for (i = 0; i < len; i++)
  933. buf[i] = (tmp >> (8 * i)) & 0xff;
  934. }
  935. return usb3_is_transfer_complete(usb3_ep, usb3_req) ? 0 : -EAGAIN;
  936. }
  937. static void usb3_set_status_stage(struct renesas_usb3_ep *usb3_ep,
  938. struct renesas_usb3_request *usb3_req)
  939. {
  940. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  941. if (usb3_ep->dir_in) {
  942. usb3_set_p0_con_for_ctrl_read_status(usb3);
  943. } else {
  944. if (!usb3_req->req.length)
  945. usb3_set_p0_con_for_no_data(usb3);
  946. else
  947. usb3_set_p0_con_for_ctrl_write_status(usb3);
  948. }
  949. }
  950. static void usb3_p0_xfer(struct renesas_usb3_ep *usb3_ep,
  951. struct renesas_usb3_request *usb3_req)
  952. {
  953. int ret = -EAGAIN;
  954. if (usb3_ep->dir_in)
  955. ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_P0_WRITE);
  956. else
  957. ret = usb3_read_pipe(usb3_ep, usb3_req, USB3_P0_READ);
  958. if (!ret)
  959. usb3_set_status_stage(usb3_ep, usb3_req);
  960. }
  961. static void usb3_start_pipe0(struct renesas_usb3_ep *usb3_ep,
  962. struct renesas_usb3_request *usb3_req)
  963. {
  964. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  965. if (usb3_ep->started)
  966. return;
  967. usb3_ep->started = true;
  968. if (usb3_ep->dir_in) {
  969. usb3_set_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
  970. usb3_set_p0_con_for_ctrl_read_data(usb3);
  971. } else {
  972. usb3_clear_bit(usb3, P0_MOD_DIR, USB3_P0_MOD);
  973. if (usb3_req->req.length)
  974. usb3_set_p0_con_for_ctrl_write_data(usb3);
  975. }
  976. usb3_p0_xfer(usb3_ep, usb3_req);
  977. }
  978. static void usb3_enable_dma_pipen(struct renesas_usb3 *usb3)
  979. {
  980. usb3_set_bit(usb3, PN_CON_DATAIF_EN, USB3_PN_CON);
  981. }
  982. static void usb3_disable_dma_pipen(struct renesas_usb3 *usb3)
  983. {
  984. usb3_clear_bit(usb3, PN_CON_DATAIF_EN, USB3_PN_CON);
  985. }
  986. static void usb3_enable_dma_irq(struct renesas_usb3 *usb3, int num)
  987. {
  988. usb3_set_bit(usb3, DMA_INT(num), USB3_DMA_INT_ENA);
  989. }
  990. static void usb3_disable_dma_irq(struct renesas_usb3 *usb3, int num)
  991. {
  992. usb3_clear_bit(usb3, DMA_INT(num), USB3_DMA_INT_ENA);
  993. }
  994. static u32 usb3_dma_mps_to_prd_word1(struct renesas_usb3_ep *usb3_ep)
  995. {
  996. switch (usb3_ep->ep.maxpacket) {
  997. case 8:
  998. return USB3_PRD1_MPS_8;
  999. case 16:
  1000. return USB3_PRD1_MPS_16;
  1001. case 32:
  1002. return USB3_PRD1_MPS_32;
  1003. case 64:
  1004. return USB3_PRD1_MPS_64;
  1005. case 512:
  1006. return USB3_PRD1_MPS_512;
  1007. case 1024:
  1008. return USB3_PRD1_MPS_1024;
  1009. default:
  1010. return USB3_PRD1_MPS_RESERVED;
  1011. }
  1012. }
  1013. static bool usb3_dma_get_setting_area(struct renesas_usb3_ep *usb3_ep,
  1014. struct renesas_usb3_request *usb3_req)
  1015. {
  1016. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1017. struct renesas_usb3_dma *dma;
  1018. int i;
  1019. bool ret = false;
  1020. if (usb3_req->req.length > USB3_DMA_MAX_XFER_SIZE_ALL_PRDS) {
  1021. dev_dbg(usb3_to_dev(usb3), "%s: the length is too big (%d)\n",
  1022. __func__, usb3_req->req.length);
  1023. return false;
  1024. }
  1025. /* The driver doesn't handle zero-length packet via dmac */
  1026. if (!usb3_req->req.length)
  1027. return false;
  1028. if (usb3_dma_mps_to_prd_word1(usb3_ep) == USB3_PRD1_MPS_RESERVED)
  1029. return false;
  1030. usb3_for_each_dma(usb3, dma, i) {
  1031. if (dma->used)
  1032. continue;
  1033. if (usb_gadget_map_request(&usb3->gadget, &usb3_req->req,
  1034. usb3_ep->dir_in) < 0)
  1035. break;
  1036. dma->used = true;
  1037. usb3_ep->dma = dma;
  1038. ret = true;
  1039. break;
  1040. }
  1041. return ret;
  1042. }
  1043. static void usb3_dma_put_setting_area(struct renesas_usb3_ep *usb3_ep,
  1044. struct renesas_usb3_request *usb3_req)
  1045. {
  1046. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1047. int i;
  1048. struct renesas_usb3_dma *dma;
  1049. usb3_for_each_dma(usb3, dma, i) {
  1050. if (usb3_ep->dma == dma) {
  1051. usb_gadget_unmap_request(&usb3->gadget, &usb3_req->req,
  1052. usb3_ep->dir_in);
  1053. dma->used = false;
  1054. usb3_ep->dma = NULL;
  1055. break;
  1056. }
  1057. }
  1058. }
  1059. static void usb3_dma_fill_prd(struct renesas_usb3_ep *usb3_ep,
  1060. struct renesas_usb3_request *usb3_req)
  1061. {
  1062. struct renesas_usb3_prd *cur_prd = usb3_ep->dma->prd;
  1063. u32 remain = usb3_req->req.length;
  1064. u32 dma = usb3_req->req.dma;
  1065. u32 len;
  1066. int i = 0;
  1067. do {
  1068. len = min_t(u32, remain, USB3_DMA_MAX_XFER_SIZE) &
  1069. USB3_PRD1_SIZE_MASK;
  1070. cur_prd->word1 = usb3_dma_mps_to_prd_word1(usb3_ep) |
  1071. USB3_PRD1_B_INC | len;
  1072. cur_prd->bap = dma;
  1073. remain -= len;
  1074. dma += len;
  1075. if (!remain || (i + 1) < USB3_DMA_NUM_PRD_ENTRIES)
  1076. break;
  1077. cur_prd++;
  1078. i++;
  1079. } while (1);
  1080. cur_prd->word1 |= USB3_PRD1_E | USB3_PRD1_INT;
  1081. if (usb3_ep->dir_in)
  1082. cur_prd->word1 |= USB3_PRD1_LST;
  1083. }
  1084. static void usb3_dma_kick_prd(struct renesas_usb3_ep *usb3_ep)
  1085. {
  1086. struct renesas_usb3_dma *dma = usb3_ep->dma;
  1087. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1088. u32 dma_con = DMA_COM_PIPE_NO(usb3_ep->num) | DMA_CON_PRD_EN;
  1089. if (usb3_ep->dir_in)
  1090. dma_con |= DMA_CON_PIPE_DIR;
  1091. wmb(); /* prd entries should be in system memory here */
  1092. usb3_write(usb3, 1 << usb3_ep->num, USB3_DMA_INT_STA);
  1093. usb3_write(usb3, AXI_INT_PRDEN_CLR_STA(dma->num) |
  1094. AXI_INT_PRDERR_STA(dma->num), USB3_AXI_INT_STA);
  1095. usb3_write(usb3, dma->prd_dma, USB3_DMA_CH0_PRD_ADR(dma->num));
  1096. usb3_write(usb3, dma_con, USB3_DMA_CH0_CON(dma->num));
  1097. usb3_enable_dma_irq(usb3, usb3_ep->num);
  1098. }
  1099. static void usb3_dma_stop_prd(struct renesas_usb3_ep *usb3_ep)
  1100. {
  1101. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1102. struct renesas_usb3_dma *dma = usb3_ep->dma;
  1103. usb3_disable_dma_irq(usb3, usb3_ep->num);
  1104. usb3_write(usb3, 0, USB3_DMA_CH0_CON(dma->num));
  1105. }
  1106. static int usb3_dma_update_status(struct renesas_usb3_ep *usb3_ep,
  1107. struct renesas_usb3_request *usb3_req)
  1108. {
  1109. struct renesas_usb3_prd *cur_prd = usb3_ep->dma->prd;
  1110. struct usb_request *req = &usb3_req->req;
  1111. u32 remain, len;
  1112. int i = 0;
  1113. int status = 0;
  1114. rmb(); /* The controller updated prd entries */
  1115. do {
  1116. if (cur_prd->word1 & USB3_PRD1_D)
  1117. status = -EIO;
  1118. if (cur_prd->word1 & USB3_PRD1_E)
  1119. len = req->length % USB3_DMA_MAX_XFER_SIZE;
  1120. else
  1121. len = USB3_DMA_MAX_XFER_SIZE;
  1122. remain = cur_prd->word1 & USB3_PRD1_SIZE_MASK;
  1123. req->actual += len - remain;
  1124. if (cur_prd->word1 & USB3_PRD1_E ||
  1125. (i + 1) < USB3_DMA_NUM_PRD_ENTRIES)
  1126. break;
  1127. cur_prd++;
  1128. i++;
  1129. } while (1);
  1130. return status;
  1131. }
  1132. static bool usb3_dma_try_start(struct renesas_usb3_ep *usb3_ep,
  1133. struct renesas_usb3_request *usb3_req)
  1134. {
  1135. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1136. if (!use_dma)
  1137. return false;
  1138. if (usb3_dma_get_setting_area(usb3_ep, usb3_req)) {
  1139. usb3_pn_stop(usb3);
  1140. usb3_enable_dma_pipen(usb3);
  1141. usb3_dma_fill_prd(usb3_ep, usb3_req);
  1142. usb3_dma_kick_prd(usb3_ep);
  1143. usb3_pn_start(usb3);
  1144. return true;
  1145. }
  1146. return false;
  1147. }
  1148. static int usb3_dma_try_stop(struct renesas_usb3_ep *usb3_ep,
  1149. struct renesas_usb3_request *usb3_req)
  1150. {
  1151. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1152. unsigned long flags;
  1153. int status = 0;
  1154. spin_lock_irqsave(&usb3->lock, flags);
  1155. if (!usb3_ep->dma)
  1156. goto out;
  1157. if (!usb3_pn_change(usb3, usb3_ep->num))
  1158. usb3_disable_dma_pipen(usb3);
  1159. usb3_dma_stop_prd(usb3_ep);
  1160. status = usb3_dma_update_status(usb3_ep, usb3_req);
  1161. usb3_dma_put_setting_area(usb3_ep, usb3_req);
  1162. out:
  1163. spin_unlock_irqrestore(&usb3->lock, flags);
  1164. return status;
  1165. }
  1166. static int renesas_usb3_dma_free_prd(struct renesas_usb3 *usb3,
  1167. struct device *dev)
  1168. {
  1169. int i;
  1170. struct renesas_usb3_dma *dma;
  1171. usb3_for_each_dma(usb3, dma, i) {
  1172. if (dma->prd) {
  1173. dma_free_coherent(dev, USB3_DMA_PRD_SIZE,
  1174. dma->prd, dma->prd_dma);
  1175. dma->prd = NULL;
  1176. }
  1177. }
  1178. return 0;
  1179. }
  1180. static int renesas_usb3_dma_alloc_prd(struct renesas_usb3 *usb3,
  1181. struct device *dev)
  1182. {
  1183. int i;
  1184. struct renesas_usb3_dma *dma;
  1185. if (!use_dma)
  1186. return 0;
  1187. usb3_for_each_dma(usb3, dma, i) {
  1188. dma->prd = dma_alloc_coherent(dev, USB3_DMA_PRD_SIZE,
  1189. &dma->prd_dma, GFP_KERNEL);
  1190. if (!dma->prd) {
  1191. renesas_usb3_dma_free_prd(usb3, dev);
  1192. return -ENOMEM;
  1193. }
  1194. dma->num = i + 1;
  1195. }
  1196. return 0;
  1197. }
  1198. static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep,
  1199. struct renesas_usb3_request *usb3_req)
  1200. {
  1201. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1202. struct renesas_usb3_request *usb3_req_first = usb3_get_request(usb3_ep);
  1203. unsigned long flags;
  1204. int ret = -EAGAIN;
  1205. u32 enable_bits = 0;
  1206. spin_lock_irqsave(&usb3->lock, flags);
  1207. if (usb3_ep->halt || usb3_ep->started)
  1208. goto out;
  1209. if (usb3_req != usb3_req_first)
  1210. goto out;
  1211. if (usb3_pn_change(usb3, usb3_ep->num) < 0)
  1212. goto out;
  1213. usb3_ep->started = true;
  1214. if (usb3_dma_try_start(usb3_ep, usb3_req))
  1215. goto out;
  1216. usb3_pn_start(usb3);
  1217. if (usb3_ep->dir_in) {
  1218. ret = usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE);
  1219. enable_bits |= PN_INT_LSTTR;
  1220. }
  1221. if (ret < 0)
  1222. enable_bits |= PN_INT_BFRDY;
  1223. if (enable_bits) {
  1224. usb3_set_bit(usb3, enable_bits, USB3_PN_INT_ENA);
  1225. usb3_enable_pipe_irq(usb3, usb3_ep->num);
  1226. }
  1227. out:
  1228. spin_unlock_irqrestore(&usb3->lock, flags);
  1229. }
  1230. static int renesas_usb3_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
  1231. gfp_t gfp_flags)
  1232. {
  1233. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1234. struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
  1235. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1236. unsigned long flags;
  1237. dev_dbg(usb3_to_dev(usb3), "ep_queue: ep%2d, %u\n", usb3_ep->num,
  1238. _req->length);
  1239. _req->status = -EINPROGRESS;
  1240. _req->actual = 0;
  1241. spin_lock_irqsave(&usb3->lock, flags);
  1242. list_add_tail(&usb3_req->queue, &usb3_ep->queue);
  1243. spin_unlock_irqrestore(&usb3->lock, flags);
  1244. if (!usb3_ep->num)
  1245. usb3_start_pipe0(usb3_ep, usb3_req);
  1246. else
  1247. usb3_start_pipen(usb3_ep, usb3_req);
  1248. return 0;
  1249. }
  1250. static void usb3_set_device_address(struct renesas_usb3 *usb3, u16 addr)
  1251. {
  1252. /* DEV_ADDR bit field is cleared by WarmReset, HotReset and BusReset */
  1253. usb3_set_bit(usb3, USB_COM_CON_DEV_ADDR(addr), USB3_USB_COM_CON);
  1254. }
  1255. static bool usb3_std_req_set_address(struct renesas_usb3 *usb3,
  1256. struct usb_ctrlrequest *ctrl)
  1257. {
  1258. if (ctrl->wValue >= 128)
  1259. return true; /* stall */
  1260. usb3_set_device_address(usb3, ctrl->wValue);
  1261. usb3_set_p0_con_for_no_data(usb3);
  1262. return false;
  1263. }
  1264. static void usb3_pipe0_internal_xfer(struct renesas_usb3 *usb3,
  1265. void *tx_data, size_t len,
  1266. void (*complete)(struct usb_ep *ep,
  1267. struct usb_request *req))
  1268. {
  1269. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  1270. if (tx_data)
  1271. memcpy(usb3->ep0_buf, tx_data,
  1272. min_t(size_t, len, USB3_EP0_BUF_SIZE));
  1273. usb3->ep0_req->buf = &usb3->ep0_buf;
  1274. usb3->ep0_req->length = len;
  1275. usb3->ep0_req->complete = complete;
  1276. renesas_usb3_ep_queue(&usb3_ep->ep, usb3->ep0_req, GFP_ATOMIC);
  1277. }
  1278. static void usb3_pipe0_get_status_completion(struct usb_ep *ep,
  1279. struct usb_request *req)
  1280. {
  1281. }
  1282. static bool usb3_std_req_get_status(struct renesas_usb3 *usb3,
  1283. struct usb_ctrlrequest *ctrl)
  1284. {
  1285. bool stall = false;
  1286. struct renesas_usb3_ep *usb3_ep;
  1287. int num;
  1288. u16 status = 0;
  1289. switch (ctrl->bRequestType & USB_RECIP_MASK) {
  1290. case USB_RECIP_DEVICE:
  1291. if (usb3->gadget.is_selfpowered)
  1292. status |= 1 << USB_DEVICE_SELF_POWERED;
  1293. if (usb3->gadget.speed == USB_SPEED_SUPER)
  1294. status |= usb3_feature_get_un_enabled(usb3);
  1295. break;
  1296. case USB_RECIP_INTERFACE:
  1297. break;
  1298. case USB_RECIP_ENDPOINT:
  1299. num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
  1300. usb3_ep = usb3_get_ep(usb3, num);
  1301. if (usb3_ep->halt)
  1302. status |= 1 << USB_ENDPOINT_HALT;
  1303. break;
  1304. default:
  1305. stall = true;
  1306. break;
  1307. }
  1308. if (!stall) {
  1309. status = cpu_to_le16(status);
  1310. dev_dbg(usb3_to_dev(usb3), "get_status: req = %p\n",
  1311. usb_req_to_usb3_req(usb3->ep0_req));
  1312. usb3_pipe0_internal_xfer(usb3, &status, sizeof(status),
  1313. usb3_pipe0_get_status_completion);
  1314. }
  1315. return stall;
  1316. }
  1317. static bool usb3_std_req_feature_device(struct renesas_usb3 *usb3,
  1318. struct usb_ctrlrequest *ctrl, bool set)
  1319. {
  1320. bool stall = true;
  1321. u16 w_value = le16_to_cpu(ctrl->wValue);
  1322. switch (w_value) {
  1323. case USB_DEVICE_TEST_MODE:
  1324. if (!set)
  1325. break;
  1326. usb3->test_mode = le16_to_cpu(ctrl->wIndex) >> 8;
  1327. stall = false;
  1328. break;
  1329. case USB_DEVICE_U1_ENABLE:
  1330. case USB_DEVICE_U2_ENABLE:
  1331. if (usb3->gadget.speed != USB_SPEED_SUPER)
  1332. break;
  1333. if (w_value == USB_DEVICE_U1_ENABLE)
  1334. usb3_feature_u1_enable(usb3, set);
  1335. if (w_value == USB_DEVICE_U2_ENABLE)
  1336. usb3_feature_u2_enable(usb3, set);
  1337. stall = false;
  1338. break;
  1339. default:
  1340. break;
  1341. }
  1342. return stall;
  1343. }
  1344. static int usb3_set_halt_p0(struct renesas_usb3_ep *usb3_ep, bool halt)
  1345. {
  1346. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1347. if (unlikely(usb3_ep->num))
  1348. return -EINVAL;
  1349. usb3_ep->halt = halt;
  1350. if (halt)
  1351. usb3_set_p0_con_stall(usb3);
  1352. else
  1353. usb3_set_p0_con_stop(usb3);
  1354. return 0;
  1355. }
  1356. static int usb3_set_halt_pn(struct renesas_usb3_ep *usb3_ep, bool halt,
  1357. bool is_clear_feature)
  1358. {
  1359. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1360. unsigned long flags;
  1361. spin_lock_irqsave(&usb3->lock, flags);
  1362. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1363. usb3_ep->halt = halt;
  1364. if (halt) {
  1365. usb3_pn_stall(usb3);
  1366. } else if (!is_clear_feature || !usb3_ep->wedge) {
  1367. usb3_pn_con_clear(usb3);
  1368. usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1369. usb3_pn_stop(usb3);
  1370. }
  1371. }
  1372. spin_unlock_irqrestore(&usb3->lock, flags);
  1373. return 0;
  1374. }
  1375. static int usb3_set_halt(struct renesas_usb3_ep *usb3_ep, bool halt,
  1376. bool is_clear_feature)
  1377. {
  1378. int ret = 0;
  1379. if (halt && usb3_ep->started)
  1380. return -EAGAIN;
  1381. if (usb3_ep->num)
  1382. ret = usb3_set_halt_pn(usb3_ep, halt, is_clear_feature);
  1383. else
  1384. ret = usb3_set_halt_p0(usb3_ep, halt);
  1385. return ret;
  1386. }
  1387. static bool usb3_std_req_feature_endpoint(struct renesas_usb3 *usb3,
  1388. struct usb_ctrlrequest *ctrl,
  1389. bool set)
  1390. {
  1391. int num = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
  1392. struct renesas_usb3_ep *usb3_ep;
  1393. struct renesas_usb3_request *usb3_req;
  1394. if (le16_to_cpu(ctrl->wValue) != USB_ENDPOINT_HALT)
  1395. return true; /* stall */
  1396. usb3_ep = usb3_get_ep(usb3, num);
  1397. usb3_set_halt(usb3_ep, set, true);
  1398. /* Restarts a queue if clear feature */
  1399. if (!set) {
  1400. usb3_ep->started = false;
  1401. usb3_req = usb3_get_request(usb3_ep);
  1402. if (usb3_req)
  1403. usb3_start_pipen(usb3_ep, usb3_req);
  1404. }
  1405. return false;
  1406. }
  1407. static bool usb3_std_req_feature(struct renesas_usb3 *usb3,
  1408. struct usb_ctrlrequest *ctrl, bool set)
  1409. {
  1410. bool stall = false;
  1411. switch (ctrl->bRequestType & USB_RECIP_MASK) {
  1412. case USB_RECIP_DEVICE:
  1413. stall = usb3_std_req_feature_device(usb3, ctrl, set);
  1414. break;
  1415. case USB_RECIP_INTERFACE:
  1416. break;
  1417. case USB_RECIP_ENDPOINT:
  1418. stall = usb3_std_req_feature_endpoint(usb3, ctrl, set);
  1419. break;
  1420. default:
  1421. stall = true;
  1422. break;
  1423. }
  1424. if (!stall)
  1425. usb3_set_p0_con_for_no_data(usb3);
  1426. return stall;
  1427. }
  1428. static void usb3_pipe0_set_sel_completion(struct usb_ep *ep,
  1429. struct usb_request *req)
  1430. {
  1431. /* TODO */
  1432. }
  1433. static bool usb3_std_req_set_sel(struct renesas_usb3 *usb3,
  1434. struct usb_ctrlrequest *ctrl)
  1435. {
  1436. u16 w_length = le16_to_cpu(ctrl->wLength);
  1437. if (w_length != 6)
  1438. return true; /* stall */
  1439. dev_dbg(usb3_to_dev(usb3), "set_sel: req = %p\n",
  1440. usb_req_to_usb3_req(usb3->ep0_req));
  1441. usb3_pipe0_internal_xfer(usb3, NULL, 6, usb3_pipe0_set_sel_completion);
  1442. return false;
  1443. }
  1444. static bool usb3_std_req_set_configuration(struct renesas_usb3 *usb3,
  1445. struct usb_ctrlrequest *ctrl)
  1446. {
  1447. if (ctrl->wValue > 0)
  1448. usb3_set_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
  1449. else
  1450. usb3_clear_bit(usb3, USB_COM_CON_CONF, USB3_USB_COM_CON);
  1451. return false;
  1452. }
  1453. /**
  1454. * usb3_handle_standard_request - handle some standard requests
  1455. * @usb3: the renesas_usb3 pointer
  1456. * @ctrl: a pointer of setup data
  1457. *
  1458. * Returns true if this function handled a standard request
  1459. */
  1460. static bool usb3_handle_standard_request(struct renesas_usb3 *usb3,
  1461. struct usb_ctrlrequest *ctrl)
  1462. {
  1463. bool ret = false;
  1464. bool stall = false;
  1465. if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
  1466. switch (ctrl->bRequest) {
  1467. case USB_REQ_SET_ADDRESS:
  1468. stall = usb3_std_req_set_address(usb3, ctrl);
  1469. ret = true;
  1470. break;
  1471. case USB_REQ_GET_STATUS:
  1472. stall = usb3_std_req_get_status(usb3, ctrl);
  1473. ret = true;
  1474. break;
  1475. case USB_REQ_CLEAR_FEATURE:
  1476. stall = usb3_std_req_feature(usb3, ctrl, false);
  1477. ret = true;
  1478. break;
  1479. case USB_REQ_SET_FEATURE:
  1480. stall = usb3_std_req_feature(usb3, ctrl, true);
  1481. ret = true;
  1482. break;
  1483. case USB_REQ_SET_SEL:
  1484. stall = usb3_std_req_set_sel(usb3, ctrl);
  1485. ret = true;
  1486. break;
  1487. case USB_REQ_SET_ISOCH_DELAY:
  1488. /* This hardware doesn't support Isochronous xfer */
  1489. stall = true;
  1490. ret = true;
  1491. break;
  1492. case USB_REQ_SET_CONFIGURATION:
  1493. usb3_std_req_set_configuration(usb3, ctrl);
  1494. break;
  1495. default:
  1496. break;
  1497. }
  1498. }
  1499. if (stall)
  1500. usb3_set_p0_con_stall(usb3);
  1501. return ret;
  1502. }
  1503. static int usb3_p0_con_clear_buffer(struct renesas_usb3 *usb3)
  1504. {
  1505. usb3_set_bit(usb3, P0_CON_BCLR, USB3_P0_CON);
  1506. return usb3_wait(usb3, USB3_P0_CON, P0_CON_BCLR, 0);
  1507. }
  1508. static void usb3_irq_epc_pipe0_setup(struct renesas_usb3 *usb3)
  1509. {
  1510. struct usb_ctrlrequest ctrl;
  1511. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  1512. /* Call giveback function if previous transfer is not completed */
  1513. if (usb3_ep->started)
  1514. usb3_request_done(usb3_ep, usb3_get_request(usb3_ep),
  1515. -ECONNRESET);
  1516. usb3_p0_con_clear_buffer(usb3);
  1517. usb3_get_setup_data(usb3, &ctrl);
  1518. if (!usb3_handle_standard_request(usb3, &ctrl))
  1519. if (usb3->driver->setup(&usb3->gadget, &ctrl) < 0)
  1520. usb3_set_p0_con_stall(usb3);
  1521. }
  1522. static void usb3_irq_epc_pipe0_bfrdy(struct renesas_usb3 *usb3)
  1523. {
  1524. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, 0);
  1525. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  1526. if (!usb3_req)
  1527. return;
  1528. usb3_p0_xfer(usb3_ep, usb3_req);
  1529. }
  1530. static void usb3_irq_epc_pipe0(struct renesas_usb3 *usb3)
  1531. {
  1532. u32 p0_int_sta = usb3_read(usb3, USB3_P0_INT_STA);
  1533. p0_int_sta &= usb3_read(usb3, USB3_P0_INT_ENA);
  1534. usb3_write(usb3, p0_int_sta, USB3_P0_INT_STA);
  1535. if (p0_int_sta & P0_INT_STSED)
  1536. usb3_irq_epc_pipe0_status_end(usb3);
  1537. if (p0_int_sta & P0_INT_SETUP)
  1538. usb3_irq_epc_pipe0_setup(usb3);
  1539. if (p0_int_sta & P0_INT_BFRDY)
  1540. usb3_irq_epc_pipe0_bfrdy(usb3);
  1541. }
  1542. static void usb3_request_done_pipen(struct renesas_usb3 *usb3,
  1543. struct renesas_usb3_ep *usb3_ep,
  1544. struct renesas_usb3_request *usb3_req,
  1545. int status)
  1546. {
  1547. unsigned long flags;
  1548. spin_lock_irqsave(&usb3->lock, flags);
  1549. if (usb3_pn_change(usb3, usb3_ep->num))
  1550. usb3_pn_stop(usb3);
  1551. spin_unlock_irqrestore(&usb3->lock, flags);
  1552. usb3_disable_pipe_irq(usb3, usb3_ep->num);
  1553. usb3_request_done(usb3_ep, usb3_req, status);
  1554. /* get next usb3_req */
  1555. usb3_req = usb3_get_request(usb3_ep);
  1556. if (usb3_req)
  1557. usb3_start_pipen(usb3_ep, usb3_req);
  1558. }
  1559. static void usb3_irq_epc_pipen_lsttr(struct renesas_usb3 *usb3, int num)
  1560. {
  1561. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
  1562. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  1563. if (!usb3_req)
  1564. return;
  1565. if (usb3_ep->dir_in) {
  1566. dev_dbg(usb3_to_dev(usb3), "%s: len = %u, actual = %u\n",
  1567. __func__, usb3_req->req.length, usb3_req->req.actual);
  1568. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
  1569. }
  1570. }
  1571. static void usb3_irq_epc_pipen_bfrdy(struct renesas_usb3 *usb3, int num)
  1572. {
  1573. struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
  1574. struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
  1575. bool done = false;
  1576. if (!usb3_req)
  1577. return;
  1578. spin_lock(&usb3->lock);
  1579. if (usb3_pn_change(usb3, num))
  1580. goto out;
  1581. if (usb3_ep->dir_in) {
  1582. /* Do not stop the IN pipe here to detect LSTTR interrupt */
  1583. if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
  1584. usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA);
  1585. } else {
  1586. if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
  1587. done = true;
  1588. }
  1589. out:
  1590. /* need to unlock because usb3_request_done_pipen() locks it */
  1591. spin_unlock(&usb3->lock);
  1592. if (done)
  1593. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
  1594. }
  1595. static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num)
  1596. {
  1597. u32 pn_int_sta;
  1598. spin_lock(&usb3->lock);
  1599. if (usb3_pn_change(usb3, num) < 0) {
  1600. spin_unlock(&usb3->lock);
  1601. return;
  1602. }
  1603. pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA);
  1604. pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA);
  1605. usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA);
  1606. spin_unlock(&usb3->lock);
  1607. if (pn_int_sta & PN_INT_LSTTR)
  1608. usb3_irq_epc_pipen_lsttr(usb3, num);
  1609. if (pn_int_sta & PN_INT_BFRDY)
  1610. usb3_irq_epc_pipen_bfrdy(usb3, num);
  1611. }
  1612. static void usb3_irq_epc_int_2(struct renesas_usb3 *usb3, u32 int_sta_2)
  1613. {
  1614. int i;
  1615. for (i = 0; i < usb3->num_usb3_eps; i++) {
  1616. if (int_sta_2 & USB_INT_2_PIPE(i)) {
  1617. if (!i)
  1618. usb3_irq_epc_pipe0(usb3);
  1619. else
  1620. usb3_irq_epc_pipen(usb3, i);
  1621. }
  1622. }
  1623. }
  1624. static void usb3_irq_idmon_change(struct renesas_usb3 *usb3)
  1625. {
  1626. usb3_check_id(usb3);
  1627. }
  1628. static void usb3_irq_otg_int(struct renesas_usb3 *usb3, u32 otg_int_sta)
  1629. {
  1630. if (otg_int_sta & USB_OTG_IDMON)
  1631. usb3_irq_idmon_change(usb3);
  1632. }
  1633. static void usb3_irq_epc(struct renesas_usb3 *usb3)
  1634. {
  1635. u32 int_sta_1 = usb3_read(usb3, USB3_USB_INT_STA_1);
  1636. u32 int_sta_2 = usb3_read(usb3, USB3_USB_INT_STA_2);
  1637. u32 otg_int_sta = usb3_read(usb3, USB3_USB_OTG_INT_STA);
  1638. int_sta_1 &= usb3_read(usb3, USB3_USB_INT_ENA_1);
  1639. if (int_sta_1) {
  1640. usb3_write(usb3, int_sta_1, USB3_USB_INT_STA_1);
  1641. usb3_irq_epc_int_1(usb3, int_sta_1);
  1642. }
  1643. int_sta_2 &= usb3_read(usb3, USB3_USB_INT_ENA_2);
  1644. if (int_sta_2)
  1645. usb3_irq_epc_int_2(usb3, int_sta_2);
  1646. otg_int_sta &= usb3_read(usb3, USB3_USB_OTG_INT_ENA);
  1647. if (otg_int_sta) {
  1648. usb3_write(usb3, otg_int_sta, USB3_USB_OTG_INT_STA);
  1649. usb3_irq_otg_int(usb3, otg_int_sta);
  1650. }
  1651. }
  1652. static void usb3_irq_dma_int(struct renesas_usb3 *usb3, u32 dma_sta)
  1653. {
  1654. struct renesas_usb3_ep *usb3_ep;
  1655. struct renesas_usb3_request *usb3_req;
  1656. int i, status;
  1657. for (i = 0; i < usb3->num_usb3_eps; i++) {
  1658. if (!(dma_sta & DMA_INT(i)))
  1659. continue;
  1660. usb3_ep = usb3_get_ep(usb3, i);
  1661. if (!(usb3_read(usb3, USB3_AXI_INT_STA) &
  1662. AXI_INT_PRDEN_CLR_STA(usb3_ep->dma->num)))
  1663. continue;
  1664. usb3_req = usb3_get_request(usb3_ep);
  1665. status = usb3_dma_try_stop(usb3_ep, usb3_req);
  1666. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, status);
  1667. }
  1668. }
  1669. static void usb3_irq_dma(struct renesas_usb3 *usb3)
  1670. {
  1671. u32 dma_sta = usb3_read(usb3, USB3_DMA_INT_STA);
  1672. dma_sta &= usb3_read(usb3, USB3_DMA_INT_ENA);
  1673. if (dma_sta) {
  1674. usb3_write(usb3, dma_sta, USB3_DMA_INT_STA);
  1675. usb3_irq_dma_int(usb3, dma_sta);
  1676. }
  1677. }
  1678. static irqreturn_t renesas_usb3_irq(int irq, void *_usb3)
  1679. {
  1680. struct renesas_usb3 *usb3 = _usb3;
  1681. irqreturn_t ret = IRQ_NONE;
  1682. u32 axi_int_sta = usb3_read(usb3, USB3_AXI_INT_STA);
  1683. if (axi_int_sta & AXI_INT_DMAINT) {
  1684. usb3_irq_dma(usb3);
  1685. ret = IRQ_HANDLED;
  1686. }
  1687. if (axi_int_sta & AXI_INT_EPCINT) {
  1688. usb3_irq_epc(usb3);
  1689. ret = IRQ_HANDLED;
  1690. }
  1691. return ret;
  1692. }
  1693. static void usb3_write_pn_mod(struct renesas_usb3_ep *usb3_ep,
  1694. const struct usb_endpoint_descriptor *desc)
  1695. {
  1696. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1697. u32 val = 0;
  1698. val |= usb3_ep->dir_in ? PN_MOD_DIR : 0;
  1699. val |= PN_MOD_TYPE(usb_endpoint_type(desc));
  1700. val |= PN_MOD_EPNUM(usb_endpoint_num(desc));
  1701. usb3_write(usb3, val, USB3_PN_MOD);
  1702. }
  1703. static u32 usb3_calc_ramarea(int ram_size)
  1704. {
  1705. WARN_ON(ram_size > SZ_16K);
  1706. if (ram_size <= SZ_1K)
  1707. return PN_RAMMAP_RAMAREA_1KB;
  1708. else if (ram_size <= SZ_2K)
  1709. return PN_RAMMAP_RAMAREA_2KB;
  1710. else if (ram_size <= SZ_4K)
  1711. return PN_RAMMAP_RAMAREA_4KB;
  1712. else if (ram_size <= SZ_8K)
  1713. return PN_RAMMAP_RAMAREA_8KB;
  1714. else
  1715. return PN_RAMMAP_RAMAREA_16KB;
  1716. }
  1717. static u32 usb3_calc_rammap_val(struct renesas_usb3_ep *usb3_ep,
  1718. const struct usb_endpoint_descriptor *desc)
  1719. {
  1720. int i;
  1721. static const u32 max_packet_array[] = {8, 16, 32, 64, 512};
  1722. u32 mpkt = PN_RAMMAP_MPKT(1024);
  1723. for (i = 0; i < ARRAY_SIZE(max_packet_array); i++) {
  1724. if (usb_endpoint_maxp(desc) <= max_packet_array[i])
  1725. mpkt = PN_RAMMAP_MPKT(max_packet_array[i]);
  1726. }
  1727. return usb3_ep->rammap_val | mpkt;
  1728. }
  1729. static int usb3_enable_pipe_n(struct renesas_usb3_ep *usb3_ep,
  1730. const struct usb_endpoint_descriptor *desc)
  1731. {
  1732. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1733. unsigned long flags;
  1734. usb3_ep->dir_in = usb_endpoint_dir_in(desc);
  1735. spin_lock_irqsave(&usb3->lock, flags);
  1736. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1737. usb3_write_pn_mod(usb3_ep, desc);
  1738. usb3_write(usb3, usb3_calc_rammap_val(usb3_ep, desc),
  1739. USB3_PN_RAMMAP);
  1740. usb3_pn_con_clear(usb3);
  1741. usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1742. }
  1743. spin_unlock_irqrestore(&usb3->lock, flags);
  1744. return 0;
  1745. }
  1746. static int usb3_disable_pipe_n(struct renesas_usb3_ep *usb3_ep)
  1747. {
  1748. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1749. unsigned long flags;
  1750. usb3_ep->halt = false;
  1751. spin_lock_irqsave(&usb3->lock, flags);
  1752. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1753. usb3_write(usb3, 0, USB3_PN_INT_ENA);
  1754. usb3_write(usb3, 0, USB3_PN_RAMMAP);
  1755. usb3_clear_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1756. }
  1757. spin_unlock_irqrestore(&usb3->lock, flags);
  1758. return 0;
  1759. }
  1760. /*------- usb_ep_ops -----------------------------------------------------*/
  1761. static int renesas_usb3_ep_enable(struct usb_ep *_ep,
  1762. const struct usb_endpoint_descriptor *desc)
  1763. {
  1764. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1765. return usb3_enable_pipe_n(usb3_ep, desc);
  1766. }
  1767. static int renesas_usb3_ep_disable(struct usb_ep *_ep)
  1768. {
  1769. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1770. struct renesas_usb3_request *usb3_req;
  1771. do {
  1772. usb3_req = usb3_get_request(usb3_ep);
  1773. if (!usb3_req)
  1774. break;
  1775. usb3_dma_try_stop(usb3_ep, usb3_req);
  1776. usb3_request_done(usb3_ep, usb3_req, -ESHUTDOWN);
  1777. } while (1);
  1778. return usb3_disable_pipe_n(usb3_ep);
  1779. }
  1780. static struct usb_request *__renesas_usb3_ep_alloc_request(gfp_t gfp_flags)
  1781. {
  1782. struct renesas_usb3_request *usb3_req;
  1783. usb3_req = kzalloc(sizeof(struct renesas_usb3_request), gfp_flags);
  1784. if (!usb3_req)
  1785. return NULL;
  1786. INIT_LIST_HEAD(&usb3_req->queue);
  1787. return &usb3_req->req;
  1788. }
  1789. static void __renesas_usb3_ep_free_request(struct usb_request *_req)
  1790. {
  1791. struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
  1792. kfree(usb3_req);
  1793. }
  1794. static struct usb_request *renesas_usb3_ep_alloc_request(struct usb_ep *_ep,
  1795. gfp_t gfp_flags)
  1796. {
  1797. return __renesas_usb3_ep_alloc_request(gfp_flags);
  1798. }
  1799. static void renesas_usb3_ep_free_request(struct usb_ep *_ep,
  1800. struct usb_request *_req)
  1801. {
  1802. __renesas_usb3_ep_free_request(_req);
  1803. }
  1804. static int renesas_usb3_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
  1805. {
  1806. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1807. struct renesas_usb3_request *usb3_req = usb_req_to_usb3_req(_req);
  1808. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1809. dev_dbg(usb3_to_dev(usb3), "ep_dequeue: ep%2d, %u\n", usb3_ep->num,
  1810. _req->length);
  1811. usb3_dma_try_stop(usb3_ep, usb3_req);
  1812. usb3_request_done_pipen(usb3, usb3_ep, usb3_req, -ECONNRESET);
  1813. return 0;
  1814. }
  1815. static int renesas_usb3_ep_set_halt(struct usb_ep *_ep, int value)
  1816. {
  1817. return usb3_set_halt(usb_ep_to_usb3_ep(_ep), !!value, false);
  1818. }
  1819. static int renesas_usb3_ep_set_wedge(struct usb_ep *_ep)
  1820. {
  1821. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1822. usb3_ep->wedge = true;
  1823. return usb3_set_halt(usb3_ep, true, false);
  1824. }
  1825. static void renesas_usb3_ep_fifo_flush(struct usb_ep *_ep)
  1826. {
  1827. struct renesas_usb3_ep *usb3_ep = usb_ep_to_usb3_ep(_ep);
  1828. struct renesas_usb3 *usb3 = usb3_ep_to_usb3(usb3_ep);
  1829. unsigned long flags;
  1830. if (usb3_ep->num) {
  1831. spin_lock_irqsave(&usb3->lock, flags);
  1832. if (!usb3_pn_change(usb3, usb3_ep->num)) {
  1833. usb3_pn_con_clear(usb3);
  1834. usb3_set_bit(usb3, PN_CON_EN, USB3_PN_CON);
  1835. }
  1836. spin_unlock_irqrestore(&usb3->lock, flags);
  1837. } else {
  1838. usb3_p0_con_clear_buffer(usb3);
  1839. }
  1840. }
  1841. static const struct usb_ep_ops renesas_usb3_ep_ops = {
  1842. .enable = renesas_usb3_ep_enable,
  1843. .disable = renesas_usb3_ep_disable,
  1844. .alloc_request = renesas_usb3_ep_alloc_request,
  1845. .free_request = renesas_usb3_ep_free_request,
  1846. .queue = renesas_usb3_ep_queue,
  1847. .dequeue = renesas_usb3_ep_dequeue,
  1848. .set_halt = renesas_usb3_ep_set_halt,
  1849. .set_wedge = renesas_usb3_ep_set_wedge,
  1850. .fifo_flush = renesas_usb3_ep_fifo_flush,
  1851. };
  1852. /*------- usb_gadget_ops -------------------------------------------------*/
  1853. static int renesas_usb3_start(struct usb_gadget *gadget,
  1854. struct usb_gadget_driver *driver)
  1855. {
  1856. struct renesas_usb3 *usb3;
  1857. if (!driver || driver->max_speed < USB_SPEED_FULL ||
  1858. !driver->setup)
  1859. return -EINVAL;
  1860. usb3 = gadget_to_renesas_usb3(gadget);
  1861. /* hook up the driver */
  1862. usb3->driver = driver;
  1863. if (usb3->phy)
  1864. phy_init(usb3->phy);
  1865. pm_runtime_get_sync(usb3_to_dev(usb3));
  1866. renesas_usb3_init_controller(usb3);
  1867. return 0;
  1868. }
  1869. static int renesas_usb3_stop(struct usb_gadget *gadget)
  1870. {
  1871. struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
  1872. usb3->softconnect = false;
  1873. usb3->gadget.speed = USB_SPEED_UNKNOWN;
  1874. usb3->driver = NULL;
  1875. renesas_usb3_stop_controller(usb3);
  1876. if (usb3->phy)
  1877. phy_exit(usb3->phy);
  1878. pm_runtime_put(usb3_to_dev(usb3));
  1879. return 0;
  1880. }
  1881. static int renesas_usb3_get_frame(struct usb_gadget *_gadget)
  1882. {
  1883. return -EOPNOTSUPP;
  1884. }
  1885. static int renesas_usb3_pullup(struct usb_gadget *gadget, int is_on)
  1886. {
  1887. struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
  1888. usb3->softconnect = !!is_on;
  1889. return 0;
  1890. }
  1891. static int renesas_usb3_set_selfpowered(struct usb_gadget *gadget, int is_self)
  1892. {
  1893. gadget->is_selfpowered = !!is_self;
  1894. return 0;
  1895. }
  1896. static const struct usb_gadget_ops renesas_usb3_gadget_ops = {
  1897. .get_frame = renesas_usb3_get_frame,
  1898. .udc_start = renesas_usb3_start,
  1899. .udc_stop = renesas_usb3_stop,
  1900. .pullup = renesas_usb3_pullup,
  1901. .set_selfpowered = renesas_usb3_set_selfpowered,
  1902. };
  1903. static ssize_t role_store(struct device *dev, struct device_attribute *attr,
  1904. const char *buf, size_t count)
  1905. {
  1906. struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
  1907. bool new_mode_is_host;
  1908. if (!usb3->driver)
  1909. return -ENODEV;
  1910. if (usb3->forced_b_device)
  1911. return -EBUSY;
  1912. if (!strncmp(buf, "host", strlen("host")))
  1913. new_mode_is_host = true;
  1914. else if (!strncmp(buf, "peripheral", strlen("peripheral")))
  1915. new_mode_is_host = false;
  1916. else
  1917. return -EINVAL;
  1918. if (new_mode_is_host == usb3_is_host(usb3))
  1919. return -EINVAL;
  1920. usb3_mode_config(usb3, new_mode_is_host, usb3_is_a_device(usb3));
  1921. return count;
  1922. }
  1923. static ssize_t role_show(struct device *dev, struct device_attribute *attr,
  1924. char *buf)
  1925. {
  1926. struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
  1927. if (!usb3->driver)
  1928. return -ENODEV;
  1929. return sprintf(buf, "%s\n", usb3_is_host(usb3) ? "host" : "peripheral");
  1930. }
  1931. static DEVICE_ATTR_RW(role);
  1932. static int renesas_usb3_b_device_show(struct seq_file *s, void *unused)
  1933. {
  1934. struct renesas_usb3 *usb3 = s->private;
  1935. seq_printf(s, "%d\n", usb3->forced_b_device);
  1936. return 0;
  1937. }
  1938. static int renesas_usb3_b_device_open(struct inode *inode, struct file *file)
  1939. {
  1940. return single_open(file, renesas_usb3_b_device_show, inode->i_private);
  1941. }
  1942. static ssize_t renesas_usb3_b_device_write(struct file *file,
  1943. const char __user *ubuf,
  1944. size_t count, loff_t *ppos)
  1945. {
  1946. struct seq_file *s = file->private_data;
  1947. struct renesas_usb3 *usb3 = s->private;
  1948. char buf[32];
  1949. if (!usb3->driver)
  1950. return -ENODEV;
  1951. if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
  1952. return -EFAULT;
  1953. if (!strncmp(buf, "1", 1))
  1954. usb3->forced_b_device = true;
  1955. else
  1956. usb3->forced_b_device = false;
  1957. /* Let this driver call usb3_connect() anyway */
  1958. usb3_check_id(usb3);
  1959. return count;
  1960. }
  1961. static const struct file_operations renesas_usb3_b_device_fops = {
  1962. .open = renesas_usb3_b_device_open,
  1963. .write = renesas_usb3_b_device_write,
  1964. .read = seq_read,
  1965. .llseek = seq_lseek,
  1966. .release = single_release,
  1967. };
  1968. static void renesas_usb3_debugfs_init(struct renesas_usb3 *usb3,
  1969. struct device *dev)
  1970. {
  1971. usb3->dentry = debugfs_create_dir(dev_name(dev), NULL);
  1972. debugfs_create_file("b_device", 0644, usb3->dentry, usb3,
  1973. &renesas_usb3_b_device_fops);
  1974. }
  1975. /*------- platform_driver ------------------------------------------------*/
  1976. static int renesas_usb3_remove(struct platform_device *pdev)
  1977. {
  1978. struct renesas_usb3 *usb3 = platform_get_drvdata(pdev);
  1979. debugfs_remove_recursive(usb3->dentry);
  1980. device_remove_file(&pdev->dev, &dev_attr_role);
  1981. usb_del_gadget_udc(&usb3->gadget);
  1982. renesas_usb3_dma_free_prd(usb3, &pdev->dev);
  1983. __renesas_usb3_ep_free_request(usb3->ep0_req);
  1984. pm_runtime_disable(&pdev->dev);
  1985. return 0;
  1986. }
  1987. static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
  1988. const struct renesas_usb3_priv *priv)
  1989. {
  1990. struct renesas_usb3_ep *usb3_ep;
  1991. int i;
  1992. /* calculate num_usb3_eps from renesas_usb3_priv */
  1993. usb3->num_usb3_eps = priv->ramsize_per_ramif * priv->num_ramif * 2 /
  1994. priv->ramsize_per_pipe + 1;
  1995. if (usb3->num_usb3_eps > USB3_MAX_NUM_PIPES)
  1996. usb3->num_usb3_eps = USB3_MAX_NUM_PIPES;
  1997. usb3->usb3_ep = devm_kcalloc(dev,
  1998. usb3->num_usb3_eps, sizeof(*usb3_ep),
  1999. GFP_KERNEL);
  2000. if (!usb3->usb3_ep)
  2001. return -ENOMEM;
  2002. dev_dbg(dev, "%s: num_usb3_eps = %d\n", __func__, usb3->num_usb3_eps);
  2003. /*
  2004. * This driver prepares pipes as follows:
  2005. * - odd pipes = IN pipe
  2006. * - even pipes = OUT pipe (except pipe 0)
  2007. */
  2008. usb3_for_each_ep(usb3_ep, usb3, i) {
  2009. snprintf(usb3_ep->ep_name, sizeof(usb3_ep->ep_name), "ep%d", i);
  2010. usb3_ep->usb3 = usb3;
  2011. usb3_ep->num = i;
  2012. usb3_ep->ep.name = usb3_ep->ep_name;
  2013. usb3_ep->ep.ops = &renesas_usb3_ep_ops;
  2014. INIT_LIST_HEAD(&usb3_ep->queue);
  2015. INIT_LIST_HEAD(&usb3_ep->ep.ep_list);
  2016. if (!i) {
  2017. /* for control pipe */
  2018. usb3->gadget.ep0 = &usb3_ep->ep;
  2019. usb_ep_set_maxpacket_limit(&usb3_ep->ep,
  2020. USB3_EP0_HSFS_MAX_PACKET_SIZE);
  2021. usb3_ep->ep.caps.type_control = true;
  2022. usb3_ep->ep.caps.dir_in = true;
  2023. usb3_ep->ep.caps.dir_out = true;
  2024. continue;
  2025. }
  2026. /* for bulk or interrupt pipe */
  2027. usb_ep_set_maxpacket_limit(&usb3_ep->ep, ~0);
  2028. list_add_tail(&usb3_ep->ep.ep_list, &usb3->gadget.ep_list);
  2029. usb3_ep->ep.caps.type_bulk = true;
  2030. usb3_ep->ep.caps.type_int = true;
  2031. if (i & 1)
  2032. usb3_ep->ep.caps.dir_in = true;
  2033. else
  2034. usb3_ep->ep.caps.dir_out = true;
  2035. }
  2036. return 0;
  2037. }
  2038. static void renesas_usb3_init_ram(struct renesas_usb3 *usb3, struct device *dev,
  2039. const struct renesas_usb3_priv *priv)
  2040. {
  2041. struct renesas_usb3_ep *usb3_ep;
  2042. int i;
  2043. u32 ramif[2], basead[2]; /* index 0 = for IN pipes */
  2044. u32 *cur_ramif, *cur_basead;
  2045. u32 val;
  2046. memset(ramif, 0, sizeof(ramif));
  2047. memset(basead, 0, sizeof(basead));
  2048. /*
  2049. * This driver prepares pipes as follows:
  2050. * - all pipes = the same size as "ramsize_per_pipe"
  2051. * Please refer to the "Method of Specifying RAM Mapping"
  2052. */
  2053. usb3_for_each_ep(usb3_ep, usb3, i) {
  2054. if (!i)
  2055. continue; /* out of scope if ep num = 0 */
  2056. if (usb3_ep->ep.caps.dir_in) {
  2057. cur_ramif = &ramif[0];
  2058. cur_basead = &basead[0];
  2059. } else {
  2060. cur_ramif = &ramif[1];
  2061. cur_basead = &basead[1];
  2062. }
  2063. if (*cur_basead > priv->ramsize_per_ramif)
  2064. continue; /* out of memory for IN or OUT pipe */
  2065. /* calculate rammap_val */
  2066. val = PN_RAMMAP_RAMIF(*cur_ramif);
  2067. val |= usb3_calc_ramarea(priv->ramsize_per_pipe);
  2068. val |= PN_RAMMAP_BASEAD(*cur_basead);
  2069. usb3_ep->rammap_val = val;
  2070. dev_dbg(dev, "ep%2d: val = %08x, ramif = %d, base = %x\n",
  2071. i, val, *cur_ramif, *cur_basead);
  2072. /* update current ramif */
  2073. if (*cur_ramif + 1 == priv->num_ramif) {
  2074. *cur_ramif = 0;
  2075. *cur_basead += priv->ramsize_per_pipe;
  2076. } else {
  2077. (*cur_ramif)++;
  2078. }
  2079. }
  2080. }
  2081. static const struct renesas_usb3_priv renesas_usb3_priv_r8a7795_es1 = {
  2082. .ramsize_per_ramif = SZ_16K,
  2083. .num_ramif = 2,
  2084. .ramsize_per_pipe = SZ_4K,
  2085. .workaround_for_vbus = true,
  2086. };
  2087. static const struct renesas_usb3_priv renesas_usb3_priv_gen3 = {
  2088. .ramsize_per_ramif = SZ_16K,
  2089. .num_ramif = 4,
  2090. .ramsize_per_pipe = SZ_4K,
  2091. };
  2092. static const struct of_device_id usb3_of_match[] = {
  2093. {
  2094. .compatible = "renesas,r8a7795-usb3-peri",
  2095. .data = &renesas_usb3_priv_gen3,
  2096. },
  2097. {
  2098. .compatible = "renesas,rcar-gen3-usb3-peri",
  2099. .data = &renesas_usb3_priv_gen3,
  2100. },
  2101. { },
  2102. };
  2103. MODULE_DEVICE_TABLE(of, usb3_of_match);
  2104. static const struct soc_device_attribute renesas_usb3_quirks_match[] = {
  2105. {
  2106. .soc_id = "r8a7795", .revision = "ES1.*",
  2107. .data = &renesas_usb3_priv_r8a7795_es1,
  2108. },
  2109. { /* sentinel */ },
  2110. };
  2111. static const unsigned int renesas_usb3_cable[] = {
  2112. EXTCON_USB,
  2113. EXTCON_USB_HOST,
  2114. EXTCON_NONE,
  2115. };
  2116. static int renesas_usb3_probe(struct platform_device *pdev)
  2117. {
  2118. struct renesas_usb3 *usb3;
  2119. struct resource *res;
  2120. int irq, ret;
  2121. const struct renesas_usb3_priv *priv;
  2122. const struct soc_device_attribute *attr;
  2123. attr = soc_device_match(renesas_usb3_quirks_match);
  2124. if (attr)
  2125. priv = attr->data;
  2126. else
  2127. priv = of_device_get_match_data(&pdev->dev);
  2128. irq = platform_get_irq(pdev, 0);
  2129. if (irq < 0) {
  2130. dev_err(&pdev->dev, "Failed to get IRQ: %d\n", irq);
  2131. return irq;
  2132. }
  2133. usb3 = devm_kzalloc(&pdev->dev, sizeof(*usb3), GFP_KERNEL);
  2134. if (!usb3)
  2135. return -ENOMEM;
  2136. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  2137. usb3->reg = devm_ioremap_resource(&pdev->dev, res);
  2138. if (IS_ERR(usb3->reg))
  2139. return PTR_ERR(usb3->reg);
  2140. platform_set_drvdata(pdev, usb3);
  2141. spin_lock_init(&usb3->lock);
  2142. usb3->gadget.ops = &renesas_usb3_gadget_ops;
  2143. usb3->gadget.name = udc_name;
  2144. usb3->gadget.max_speed = USB_SPEED_SUPER;
  2145. INIT_LIST_HEAD(&usb3->gadget.ep_list);
  2146. ret = renesas_usb3_init_ep(usb3, &pdev->dev, priv);
  2147. if (ret < 0)
  2148. return ret;
  2149. renesas_usb3_init_ram(usb3, &pdev->dev, priv);
  2150. ret = devm_request_irq(&pdev->dev, irq, renesas_usb3_irq, 0,
  2151. dev_name(&pdev->dev), usb3);
  2152. if (ret < 0)
  2153. return ret;
  2154. INIT_WORK(&usb3->extcon_work, renesas_usb3_extcon_work);
  2155. usb3->extcon = devm_extcon_dev_allocate(&pdev->dev, renesas_usb3_cable);
  2156. if (IS_ERR(usb3->extcon))
  2157. return PTR_ERR(usb3->extcon);
  2158. ret = devm_extcon_dev_register(&pdev->dev, usb3->extcon);
  2159. if (ret < 0) {
  2160. dev_err(&pdev->dev, "Failed to register extcon\n");
  2161. return ret;
  2162. }
  2163. /* for ep0 handling */
  2164. usb3->ep0_req = __renesas_usb3_ep_alloc_request(GFP_KERNEL);
  2165. if (!usb3->ep0_req)
  2166. return -ENOMEM;
  2167. ret = renesas_usb3_dma_alloc_prd(usb3, &pdev->dev);
  2168. if (ret < 0)
  2169. goto err_alloc_prd;
  2170. /*
  2171. * This is optional. So, if this driver cannot get a phy,
  2172. * this driver will not handle a phy anymore.
  2173. */
  2174. usb3->phy = devm_phy_optional_get(&pdev->dev, "usb");
  2175. if (IS_ERR(usb3->phy)) {
  2176. ret = PTR_ERR(usb3->phy);
  2177. goto err_add_udc;
  2178. }
  2179. pm_runtime_enable(&pdev->dev);
  2180. ret = usb_add_gadget_udc(&pdev->dev, &usb3->gadget);
  2181. if (ret < 0)
  2182. goto err_add_udc;
  2183. ret = device_create_file(&pdev->dev, &dev_attr_role);
  2184. if (ret < 0)
  2185. goto err_dev_create;
  2186. usb3->workaround_for_vbus = priv->workaround_for_vbus;
  2187. renesas_usb3_debugfs_init(usb3, &pdev->dev);
  2188. dev_info(&pdev->dev, "probed%s\n", usb3->phy ? " with phy" : "");
  2189. return 0;
  2190. err_dev_create:
  2191. usb_del_gadget_udc(&usb3->gadget);
  2192. err_add_udc:
  2193. renesas_usb3_dma_free_prd(usb3, &pdev->dev);
  2194. err_alloc_prd:
  2195. __renesas_usb3_ep_free_request(usb3->ep0_req);
  2196. return ret;
  2197. }
  2198. #ifdef CONFIG_PM_SLEEP
  2199. static int renesas_usb3_suspend(struct device *dev)
  2200. {
  2201. struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
  2202. /* Not started */
  2203. if (!usb3->driver)
  2204. return 0;
  2205. renesas_usb3_stop_controller(usb3);
  2206. if (usb3->phy)
  2207. phy_exit(usb3->phy);
  2208. pm_runtime_put(dev);
  2209. return 0;
  2210. }
  2211. static int renesas_usb3_resume(struct device *dev)
  2212. {
  2213. struct renesas_usb3 *usb3 = dev_get_drvdata(dev);
  2214. /* Not started */
  2215. if (!usb3->driver)
  2216. return 0;
  2217. if (usb3->phy)
  2218. phy_init(usb3->phy);
  2219. pm_runtime_get_sync(dev);
  2220. renesas_usb3_init_controller(usb3);
  2221. return 0;
  2222. }
  2223. #endif
  2224. static SIMPLE_DEV_PM_OPS(renesas_usb3_pm_ops, renesas_usb3_suspend,
  2225. renesas_usb3_resume);
  2226. static struct platform_driver renesas_usb3_driver = {
  2227. .probe = renesas_usb3_probe,
  2228. .remove = renesas_usb3_remove,
  2229. .driver = {
  2230. .name = (char *)udc_name,
  2231. .pm = &renesas_usb3_pm_ops,
  2232. .of_match_table = of_match_ptr(usb3_of_match),
  2233. },
  2234. };
  2235. module_platform_driver(renesas_usb3_driver);
  2236. MODULE_DESCRIPTION("Renesas USB3.0 Peripheral driver");
  2237. MODULE_LICENSE("GPL v2");
  2238. MODULE_AUTHOR("Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>");
  2239. MODULE_ALIAS("platform:renesas_usb3");