renesas_usb3.c 77 KB

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