phy-cadence-torrent.c 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Cadence Torrent SD0801 PHY driver.
  4. *
  5. * Based on the linux driver provided by Cadence
  6. *
  7. * Copyright (c) 2018 Cadence Design Systems
  8. *
  9. * Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/
  10. *
  11. */
  12. #include <common.h>
  13. #include <clk.h>
  14. #include <generic-phy.h>
  15. #include <reset.h>
  16. #include <dm/device.h>
  17. #include <dm/device_compat.h>
  18. #include <dm/device-internal.h>
  19. #include <dm/lists.h>
  20. #include <dm/read.h>
  21. #include <dm/uclass.h>
  22. #include <linux/io.h>
  23. #include <dt-bindings/phy/phy.h>
  24. #include <regmap.h>
  25. #include <linux/delay.h>
  26. #include <linux/string.h>
  27. #define REF_CLK_19_2MHz 19200000
  28. #define REF_CLK_25MHz 25000000
  29. #define MAX_NUM_LANES 4
  30. #define DEFAULT_MAX_BIT_RATE 8100 /* in Mbps*/
  31. #define NUM_SSC_MODE 3
  32. #define NUM_PHY_TYPE 6
  33. #define POLL_TIMEOUT_US 5000
  34. #define PLL_LOCK_TIMEOUT 100000
  35. #define TORRENT_COMMON_CDB_OFFSET 0x0
  36. #define TORRENT_TX_LANE_CDB_OFFSET(ln, block_offset, reg_offset) \
  37. ((0x4000 << (block_offset)) + \
  38. (((ln) << 9) << (reg_offset)))
  39. #define TORRENT_RX_LANE_CDB_OFFSET(ln, block_offset, reg_offset) \
  40. ((0x8000 << (block_offset)) + \
  41. (((ln) << 9) << (reg_offset)))
  42. #define TORRENT_PHY_PCS_COMMON_OFFSET(block_offset) \
  43. (0xC000 << (block_offset))
  44. #define TORRENT_PHY_PMA_COMMON_OFFSET(block_offset) \
  45. (0xE000 << (block_offset))
  46. /*
  47. * register offsets from SD0801 PHY register block base (i.e MHDP
  48. * register base + 0x500000)
  49. */
  50. #define CMN_SSM_BANDGAP_TMR 0x0021U
  51. #define CMN_SSM_BIAS_TMR 0x0022U
  52. #define CMN_PLLSM0_PLLPRE_TMR 0x002AU
  53. #define CMN_PLLSM0_PLLLOCK_TMR 0x002CU
  54. #define CMN_PLLSM1_PLLPRE_TMR 0x0032U
  55. #define CMN_PLLSM1_PLLLOCK_TMR 0x0034U
  56. #define CMN_CDIAG_CDB_PWRI_OVRD 0x0041U
  57. #define CMN_CDIAG_XCVRC_PWRI_OVRD 0x0047U
  58. #define CMN_BGCAL_INIT_TMR 0x0064U
  59. #define CMN_BGCAL_ITER_TMR 0x0065U
  60. #define CMN_IBCAL_INIT_TMR 0x0074U
  61. #define CMN_PLL0_VCOCAL_TCTRL 0x0082U
  62. #define CMN_PLL0_VCOCAL_INIT_TMR 0x0084U
  63. #define CMN_PLL0_VCOCAL_ITER_TMR 0x0085U
  64. #define CMN_PLL0_VCOCAL_REFTIM_START 0x0086U
  65. #define CMN_PLL0_VCOCAL_PLLCNT_START 0x0088U
  66. #define CMN_PLL0_INTDIV_M0 0x0090U
  67. #define CMN_PLL0_FRACDIVL_M0 0x0091U
  68. #define CMN_PLL0_FRACDIVH_M0 0x0092U
  69. #define CMN_PLL0_HIGH_THR_M0 0x0093U
  70. #define CMN_PLL0_DSM_DIAG_M0 0x0094U
  71. #define CMN_PLL0_SS_CTRL1_M0 0x0098U
  72. #define CMN_PLL0_SS_CTRL2_M0 0x0099U
  73. #define CMN_PLL0_SS_CTRL3_M0 0x009AU
  74. #define CMN_PLL0_SS_CTRL4_M0 0x009BU
  75. #define CMN_PLL0_LOCK_REFCNT_START 0x009CU
  76. #define CMN_PLL0_LOCK_PLLCNT_START 0x009EU
  77. #define CMN_PLL0_LOCK_PLLCNT_THR 0x009FU
  78. #define CMN_PLL0_INTDIV_M1 0x00A0U
  79. #define CMN_PLL0_FRACDIVH_M1 0x00A2U
  80. #define CMN_PLL0_HIGH_THR_M1 0x00A3U
  81. #define CMN_PLL0_DSM_DIAG_M1 0x00A4U
  82. #define CMN_PLL0_SS_CTRL1_M1 0x00A8U
  83. #define CMN_PLL0_SS_CTRL2_M1 0x00A9U
  84. #define CMN_PLL0_SS_CTRL3_M1 0x00AAU
  85. #define CMN_PLL0_SS_CTRL4_M1 0x00ABU
  86. #define CMN_PLL1_VCOCAL_TCTRL 0x00C2U
  87. #define CMN_PLL1_VCOCAL_INIT_TMR 0x00C4U
  88. #define CMN_PLL1_VCOCAL_ITER_TMR 0x00C5U
  89. #define CMN_PLL1_VCOCAL_REFTIM_START 0x00C6U
  90. #define CMN_PLL1_VCOCAL_PLLCNT_START 0x00C8U
  91. #define CMN_PLL1_INTDIV_M0 0x00D0U
  92. #define CMN_PLL1_FRACDIVL_M0 0x00D1U
  93. #define CMN_PLL1_FRACDIVH_M0 0x00D2U
  94. #define CMN_PLL1_HIGH_THR_M0 0x00D3U
  95. #define CMN_PLL1_DSM_DIAG_M0 0x00D4U
  96. #define CMN_PLL1_DSM_FBH_OVRD_M0 0x00D5U
  97. #define CMN_PLL1_DSM_FBL_OVRD_M0 0x00D6U
  98. #define CMN_PLL1_SS_CTRL1_M0 0x00D8U
  99. #define CMN_PLL1_SS_CTRL2_M0 0x00D9U
  100. #define CMN_PLL1_SS_CTRL3_M0 0x00DAU
  101. #define CMN_PLL1_SS_CTRL4_M0 0x00DBU
  102. #define CMN_PLL1_LOCK_REFCNT_START 0x00DCU
  103. #define CMN_PLL1_LOCK_PLLCNT_START 0x00DEU
  104. #define CMN_PLL1_LOCK_PLLCNT_THR 0x00DFU
  105. #define CMN_TXPUCAL_TUNE 0x0103U
  106. #define CMN_TXPUCAL_INIT_TMR 0x0104U
  107. #define CMN_TXPUCAL_ITER_TMR 0x0105U
  108. #define CMN_CMN_TXPDCAL_OVRD 0x0109U
  109. #define CMN_TXPDCAL_TUNE 0x010BU
  110. #define CMN_TXPDCAL_INIT_TMR 0x010CU
  111. #define CMN_TXPDCAL_ITER_TMR 0x010DU
  112. #define CMN_RXCAL_INIT_TMR 0x0114U
  113. #define CMN_RXCAL_ITER_TMR 0x0115U
  114. #define CMN_SD_CAL_INIT_TMR 0x0124U
  115. #define CMN_SD_CAL_ITER_TMR 0x0125U
  116. #define CMN_SD_CAL_REFTIM_START 0x0126U
  117. #define CMN_SD_CAL_PLLCNT_START 0x0128U
  118. #define CMN_PDIAG_PLL0_CTRL_M0 0x01A0U
  119. #define CMN_PDIAG_PLL0_CLK_SEL_M0 0x01A1U
  120. #define CMN_PDIAG_PLL0_CP_PADJ_M0 0x01A4U
  121. #define CMN_PDIAG_PLL0_CP_IADJ_M0 0x01A5U
  122. #define CMN_PDIAG_PLL0_FILT_PADJ_M0 0x01A6U
  123. #define CMN_PDIAG_PLL0_CTRL_M1 0x01B0U
  124. #define CMN_PDIAG_PLL0_CLK_SEL_M1 0x01B1U
  125. #define CMN_PDIAG_PLL0_CP_PADJ_M1 0x01B4U
  126. #define CMN_PDIAG_PLL0_CP_IADJ_M1 0x01B5U
  127. #define CMN_PDIAG_PLL0_FILT_PADJ_M1 0x01B6U
  128. #define CMN_PDIAG_PLL1_CTRL_M0 0x01C0U
  129. #define CMN_PDIAG_PLL1_CLK_SEL_M0 0x01C1U
  130. #define CMN_PDIAG_PLL1_CP_PADJ_M0 0x01C4U
  131. #define CMN_PDIAG_PLL1_CP_IADJ_M0 0x01C5U
  132. #define CMN_PDIAG_PLL1_FILT_PADJ_M0 0x01C6U
  133. #define CMN_DIAG_BIAS_OVRD1 0x01E1U
  134. /* PMA TX Lane registers */
  135. #define TX_TXCC_CTRL 0x0040U
  136. #define TX_TXCC_CPOST_MULT_00 0x004CU
  137. #define TX_TXCC_CPOST_MULT_01 0x004DU
  138. #define TX_TXCC_MGNFS_MULT_000 0x0050U
  139. #define TX_TXCC_MGNFS_MULT_100 0x0054U
  140. #define DRV_DIAG_TX_DRV 0x00C6U
  141. #define XCVR_DIAG_PLLDRC_CTRL 0x00E5U
  142. #define XCVR_DIAG_HSCLK_SEL 0x00E6U
  143. #define XCVR_DIAG_HSCLK_DIV 0x00E7U
  144. #define XCVR_DIAG_RXCLK_CTRL 0x00E9U
  145. #define XCVR_DIAG_BIDI_CTRL 0x00EAU
  146. #define XCVR_DIAG_PSC_OVRD 0x00EBU
  147. #define TX_PSC_A0 0x0100U
  148. #define TX_PSC_A1 0x0101U
  149. #define TX_PSC_A2 0x0102U
  150. #define TX_PSC_A3 0x0103U
  151. #define TX_RCVDET_ST_TMR 0x0123U
  152. #define TX_DIAG_ACYA 0x01E7U
  153. #define TX_DIAG_ACYA_HBDC_MASK 0x0001U
  154. /* PMA RX Lane registers */
  155. #define RX_PSC_A0 0x0000U
  156. #define RX_PSC_A1 0x0001U
  157. #define RX_PSC_A2 0x0002U
  158. #define RX_PSC_A3 0x0003U
  159. #define RX_PSC_CAL 0x0006U
  160. #define RX_CDRLF_CNFG 0x0080U
  161. #define RX_CDRLF_CNFG3 0x0082U
  162. #define RX_SIGDET_HL_FILT_TMR 0x0090U
  163. #define RX_REE_GCSM1_CTRL 0x0108U
  164. #define RX_REE_GCSM1_EQENM_PH1 0x0109U
  165. #define RX_REE_GCSM1_EQENM_PH2 0x010AU
  166. #define RX_REE_GCSM2_CTRL 0x0110U
  167. #define RX_REE_PERGCSM_CTRL 0x0118U
  168. #define RX_REE_ATTEN_THR 0x0149U
  169. #define RX_REE_TAP1_CLIP 0x0171U
  170. #define RX_REE_TAP2TON_CLIP 0x0172U
  171. #define RX_REE_SMGM_CTRL1 0x0177U
  172. #define RX_REE_SMGM_CTRL2 0x0178U
  173. #define RX_DIAG_DFE_CTRL 0x01E0U
  174. #define RX_DIAG_DFE_AMP_TUNE_2 0x01E2U
  175. #define RX_DIAG_DFE_AMP_TUNE_3 0x01E3U
  176. #define RX_DIAG_NQST_CTRL 0x01E5U
  177. #define RX_DIAG_SIGDET_TUNE 0x01E8U
  178. #define RX_DIAG_PI_RATE 0x01F4U
  179. #define RX_DIAG_PI_CAP 0x01F5U
  180. #define RX_DIAG_ACYA 0x01FFU
  181. /* PHY PCS common registers */
  182. #define PHY_PLL_CFG 0x000EU
  183. #define PHY_PIPE_USB3_GEN2_PRE_CFG0 0x0020U
  184. #define PHY_PIPE_USB3_GEN2_POST_CFG0 0x0022U
  185. #define PHY_PIPE_USB3_GEN2_POST_CFG1 0x0023U
  186. /* PHY PMA common registers */
  187. #define PHY_PMA_CMN_CTRL1 0x0000U
  188. #define PHY_PMA_CMN_CTRL2 0x0001U
  189. #define PHY_PMA_PLL_RAW_CTRL 0x0003U
  190. static const struct reg_field phy_pll_cfg = REG_FIELD(PHY_PLL_CFG, 0, 1);
  191. static const struct reg_field phy_pma_cmn_ctrl_1 =
  192. REG_FIELD(PHY_PMA_CMN_CTRL1, 0, 0);
  193. static const struct reg_field phy_pma_cmn_ctrl_2 =
  194. REG_FIELD(PHY_PMA_CMN_CTRL2, 0, 7);
  195. static const struct reg_field phy_pma_pll_raw_ctrl =
  196. REG_FIELD(PHY_PMA_PLL_RAW_CTRL, 0, 1);
  197. #define reset_control_assert reset_assert
  198. #define reset_control_deassert reset_deassert
  199. #define reset_control reset_ctl
  200. #define reset_control_put reset_free
  201. enum cdns_torrent_phy_type {
  202. TYPE_NONE,
  203. TYPE_DP,
  204. TYPE_PCIE,
  205. TYPE_SGMII,
  206. TYPE_QSGMII,
  207. TYPE_USB,
  208. };
  209. enum cdns_torrent_ssc_mode {
  210. NO_SSC,
  211. EXTERNAL_SSC,
  212. INTERNAL_SSC
  213. };
  214. struct cdns_torrent_inst {
  215. struct phy *phy;
  216. u32 mlane;
  217. enum cdns_torrent_phy_type phy_type;
  218. u32 num_lanes;
  219. struct reset_ctl_bulk *lnk_rst;
  220. enum cdns_torrent_ssc_mode ssc_mode;
  221. };
  222. struct cdns_torrent_phy {
  223. void __iomem *sd_base; /* SD0801 register base */
  224. size_t size;
  225. struct reset_control *phy_rst;
  226. struct udevice *dev;
  227. struct cdns_torrent_inst phys[MAX_NUM_LANES];
  228. int nsubnodes;
  229. const struct cdns_torrent_data *init_data;
  230. struct regmap *regmap;
  231. struct regmap *regmap_common_cdb;
  232. struct regmap *regmap_phy_pcs_common_cdb;
  233. struct regmap *regmap_phy_pma_common_cdb;
  234. struct regmap *regmap_tx_lane_cdb[MAX_NUM_LANES];
  235. struct regmap *regmap_rx_lane_cdb[MAX_NUM_LANES];
  236. struct regmap_field *phy_pll_cfg;
  237. struct regmap_field *phy_pma_cmn_ctrl_1;
  238. struct regmap_field *phy_pma_cmn_ctrl_2;
  239. struct regmap_field *phy_pma_pll_raw_ctrl;
  240. };
  241. struct cdns_reg_pairs {
  242. u32 val;
  243. u32 off;
  244. };
  245. struct cdns_torrent_vals {
  246. struct cdns_reg_pairs *reg_pairs;
  247. u32 num_regs;
  248. };
  249. struct cdns_torrent_data {
  250. u8 block_offset_shift;
  251. u8 reg_offset_shift;
  252. struct cdns_torrent_vals *link_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
  253. [NUM_SSC_MODE];
  254. struct cdns_torrent_vals *xcvr_diag_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
  255. [NUM_SSC_MODE];
  256. struct cdns_torrent_vals *pcs_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
  257. [NUM_SSC_MODE];
  258. struct cdns_torrent_vals *cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
  259. [NUM_SSC_MODE];
  260. struct cdns_torrent_vals *tx_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
  261. [NUM_SSC_MODE];
  262. struct cdns_torrent_vals *rx_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
  263. [NUM_SSC_MODE];
  264. };
  265. static inline struct cdns_torrent_inst *phy_get_drvdata(struct phy *phy)
  266. {
  267. struct cdns_torrent_phy *sp = dev_get_priv(phy->dev);
  268. int index;
  269. if (phy->id >= MAX_NUM_LANES)
  270. return NULL;
  271. for (index = 0; index < sp->nsubnodes; index++) {
  272. if (phy->id == sp->phys[index].mlane)
  273. return &sp->phys[index];
  274. }
  275. return NULL;
  276. }
  277. static struct regmap *cdns_regmap_init(struct udevice *dev, void __iomem *base,
  278. u32 block_offset,
  279. u8 reg_offset_shift)
  280. {
  281. struct cdns_torrent_phy *sp = dev_get_priv(dev);
  282. struct regmap_config config;
  283. config.r_start = (ulong)(base + block_offset);
  284. config.r_size = sp->size - block_offset;
  285. config.reg_offset_shift = reg_offset_shift;
  286. config.width = REGMAP_SIZE_16;
  287. return devm_regmap_init(dev, NULL, NULL, &config);
  288. }
  289. static int cdns_torrent_regfield_init(struct cdns_torrent_phy *cdns_phy)
  290. {
  291. struct udevice *dev = cdns_phy->dev;
  292. struct regmap_field *field;
  293. struct regmap *regmap;
  294. regmap = cdns_phy->regmap_phy_pcs_common_cdb;
  295. field = devm_regmap_field_alloc(dev, regmap, phy_pll_cfg);
  296. if (IS_ERR(field)) {
  297. dev_err(dev, "PHY_PLL_CFG reg field init failed\n");
  298. return PTR_ERR(field);
  299. }
  300. cdns_phy->phy_pll_cfg = field;
  301. regmap = cdns_phy->regmap_phy_pma_common_cdb;
  302. field = devm_regmap_field_alloc(dev, regmap, phy_pma_cmn_ctrl_1);
  303. if (IS_ERR(field)) {
  304. dev_err(dev, "PHY_PMA_CMN_CTRL1 reg field init failed\n");
  305. return PTR_ERR(field);
  306. }
  307. cdns_phy->phy_pma_cmn_ctrl_1 = field;
  308. regmap = cdns_phy->regmap_phy_pma_common_cdb;
  309. field = devm_regmap_field_alloc(dev, regmap, phy_pma_cmn_ctrl_2);
  310. if (IS_ERR(field)) {
  311. dev_err(dev, "PHY_PMA_CMN_CTRL2 reg field init failed\n");
  312. return PTR_ERR(field);
  313. }
  314. cdns_phy->phy_pma_cmn_ctrl_2 = field;
  315. regmap = cdns_phy->regmap_phy_pma_common_cdb;
  316. field = devm_regmap_field_alloc(dev, regmap, phy_pma_pll_raw_ctrl);
  317. if (IS_ERR(field)) {
  318. dev_err(dev, "PHY_PMA_PLL_RAW_CTRL reg field init failed\n");
  319. return PTR_ERR(field);
  320. }
  321. cdns_phy->phy_pma_pll_raw_ctrl = field;
  322. return 0;
  323. }
  324. static int cdns_torrent_regmap_init(struct cdns_torrent_phy *cdns_phy)
  325. {
  326. void __iomem *sd_base = cdns_phy->sd_base;
  327. u8 block_offset_shift, reg_offset_shift;
  328. struct udevice *dev = cdns_phy->dev;
  329. struct regmap *regmap;
  330. u32 block_offset;
  331. int i;
  332. block_offset_shift = cdns_phy->init_data->block_offset_shift;
  333. reg_offset_shift = cdns_phy->init_data->reg_offset_shift;
  334. for (i = 0; i < MAX_NUM_LANES; i++) {
  335. block_offset = TORRENT_TX_LANE_CDB_OFFSET(i, block_offset_shift,
  336. reg_offset_shift);
  337. regmap = cdns_regmap_init(dev, sd_base, block_offset,
  338. reg_offset_shift);
  339. if (IS_ERR(regmap)) {
  340. dev_err(dev, "Failed to init tx lane CDB regmap\n");
  341. return PTR_ERR(regmap);
  342. }
  343. cdns_phy->regmap_tx_lane_cdb[i] = regmap;
  344. block_offset = TORRENT_RX_LANE_CDB_OFFSET(i, block_offset_shift,
  345. reg_offset_shift);
  346. regmap = cdns_regmap_init(dev, sd_base, block_offset,
  347. reg_offset_shift);
  348. if (IS_ERR(regmap)) {
  349. dev_err(dev, "Failed to init rx lane CDB regmap");
  350. return PTR_ERR(regmap);
  351. }
  352. cdns_phy->regmap_rx_lane_cdb[i] = regmap;
  353. }
  354. block_offset = TORRENT_COMMON_CDB_OFFSET;
  355. regmap = cdns_regmap_init(dev, sd_base, block_offset,
  356. reg_offset_shift);
  357. if (IS_ERR(regmap)) {
  358. dev_err(dev, "Failed to init common CDB regmap\n");
  359. return PTR_ERR(regmap);
  360. }
  361. cdns_phy->regmap_common_cdb = regmap;
  362. block_offset = TORRENT_PHY_PCS_COMMON_OFFSET(block_offset_shift);
  363. regmap = cdns_regmap_init(dev, sd_base, block_offset,
  364. reg_offset_shift);
  365. if (IS_ERR(regmap)) {
  366. dev_err(dev, "Failed to init PHY PCS common CDB regmap\n");
  367. return PTR_ERR(regmap);
  368. }
  369. cdns_phy->regmap_phy_pcs_common_cdb = regmap;
  370. block_offset = TORRENT_PHY_PMA_COMMON_OFFSET(block_offset_shift);
  371. regmap = cdns_regmap_init(dev, sd_base, block_offset,
  372. reg_offset_shift);
  373. if (IS_ERR(regmap)) {
  374. dev_err(dev, "Failed to init PHY PMA common CDB regmap\n");
  375. return PTR_ERR(regmap);
  376. }
  377. cdns_phy->regmap_phy_pma_common_cdb = regmap;
  378. return 0;
  379. }
  380. static int cdns_torrent_phy_configure_multilink(struct cdns_torrent_phy *cdns_phy)
  381. {
  382. const struct cdns_torrent_data *init_data = cdns_phy->init_data;
  383. struct cdns_torrent_vals *cmn_vals, *tx_ln_vals, *rx_ln_vals;
  384. struct cdns_torrent_vals *link_cmn_vals, *xcvr_diag_vals;
  385. enum cdns_torrent_phy_type phy_t1, phy_t2, tmp_phy_type;
  386. struct cdns_torrent_vals *pcs_cmn_vals;
  387. int i, j, node, mlane, num_lanes, ret;
  388. struct cdns_reg_pairs *reg_pairs;
  389. enum cdns_torrent_ssc_mode ssc;
  390. struct regmap *regmap;
  391. u32 num_regs;
  392. /* Maximum 2 links (subnodes) are supported */
  393. if (cdns_phy->nsubnodes != 2)
  394. return -EINVAL;
  395. phy_t1 = cdns_phy->phys[0].phy_type;
  396. phy_t2 = cdns_phy->phys[1].phy_type;
  397. /*
  398. * First configure the PHY for first link with phy_t1. Geth the array
  399. * values are [phy_t1][phy_t2][ssc].
  400. */
  401. for (node = 0; node < cdns_phy->nsubnodes; node++) {
  402. if (node == 1) {
  403. /*
  404. * If fist link with phy_t1 is configured, then
  405. * configure the PHY for second link with phy_t2.
  406. * Get the array values as [phy_t2][phy_t1][ssc]
  407. */
  408. tmp_phy_type = phy_t1;
  409. phy_t1 = phy_t2;
  410. phy_t2 = tmp_phy_type;
  411. }
  412. mlane = cdns_phy->phys[node].mlane;
  413. ssc = cdns_phy->phys[node].ssc_mode;
  414. num_lanes = cdns_phy->phys[node].num_lanes;
  415. /**
  416. * PHY configuration specific registers:
  417. * link_cmn_vals depend on combination of PHY types being
  418. * configured and are common for both PHY types, so array
  419. * values should be same for [phy_t1][phy_t2][ssc] and
  420. * [phy_t2][phy_t1][ssc].
  421. * xcvr_diag_vals also depend on combination of PHY types
  422. * being configured, but these can be different for particular
  423. * PHY type and are per lane.
  424. */
  425. link_cmn_vals = init_data->link_cmn_vals[phy_t1][phy_t2][ssc];
  426. if (link_cmn_vals) {
  427. reg_pairs = link_cmn_vals->reg_pairs;
  428. num_regs = link_cmn_vals->num_regs;
  429. regmap = cdns_phy->regmap_common_cdb;
  430. /**
  431. * First array value in link_cmn_vals must be of
  432. * PHY_PLL_CFG register
  433. */
  434. regmap_field_write(cdns_phy->phy_pll_cfg,
  435. reg_pairs[0].val);
  436. for (i = 1; i < num_regs; i++)
  437. regmap_write(regmap, reg_pairs[i].off,
  438. reg_pairs[i].val);
  439. }
  440. xcvr_diag_vals = init_data->xcvr_diag_vals[phy_t1][phy_t2][ssc];
  441. if (xcvr_diag_vals) {
  442. reg_pairs = xcvr_diag_vals->reg_pairs;
  443. num_regs = xcvr_diag_vals->num_regs;
  444. for (i = 0; i < num_lanes; i++) {
  445. regmap = cdns_phy->regmap_tx_lane_cdb[i + mlane];
  446. for (j = 0; j < num_regs; j++)
  447. regmap_write(regmap, reg_pairs[j].off,
  448. reg_pairs[j].val);
  449. }
  450. }
  451. /* PHY PCS common registers configurations */
  452. pcs_cmn_vals = init_data->pcs_cmn_vals[phy_t1][phy_t2][ssc];
  453. if (pcs_cmn_vals) {
  454. reg_pairs = pcs_cmn_vals->reg_pairs;
  455. num_regs = pcs_cmn_vals->num_regs;
  456. regmap = cdns_phy->regmap_phy_pcs_common_cdb;
  457. for (i = 0; i < num_regs; i++)
  458. regmap_write(regmap, reg_pairs[i].off,
  459. reg_pairs[i].val);
  460. }
  461. /* PMA common registers configurations */
  462. cmn_vals = init_data->cmn_vals[phy_t1][phy_t2][ssc];
  463. if (cmn_vals) {
  464. reg_pairs = cmn_vals->reg_pairs;
  465. num_regs = cmn_vals->num_regs;
  466. regmap = cdns_phy->regmap_common_cdb;
  467. for (i = 0; i < num_regs; i++)
  468. regmap_write(regmap, reg_pairs[i].off,
  469. reg_pairs[i].val);
  470. }
  471. /* PMA TX lane registers configurations */
  472. tx_ln_vals = init_data->tx_ln_vals[phy_t1][phy_t2][ssc];
  473. if (tx_ln_vals) {
  474. reg_pairs = tx_ln_vals->reg_pairs;
  475. num_regs = tx_ln_vals->num_regs;
  476. for (i = 0; i < num_lanes; i++) {
  477. regmap = cdns_phy->regmap_tx_lane_cdb[i + mlane];
  478. for (j = 0; j < num_regs; j++)
  479. regmap_write(regmap, reg_pairs[j].off,
  480. reg_pairs[j].val);
  481. }
  482. }
  483. /* PMA RX lane registers configurations */
  484. rx_ln_vals = init_data->rx_ln_vals[phy_t1][phy_t2][ssc];
  485. if (rx_ln_vals) {
  486. reg_pairs = rx_ln_vals->reg_pairs;
  487. num_regs = rx_ln_vals->num_regs;
  488. for (i = 0; i < num_lanes; i++) {
  489. regmap = cdns_phy->regmap_rx_lane_cdb[i + mlane];
  490. for (j = 0; j < num_regs; j++)
  491. regmap_write(regmap, reg_pairs[j].off,
  492. reg_pairs[j].val);
  493. }
  494. }
  495. reset_deassert_bulk(cdns_phy->phys[node].lnk_rst);
  496. }
  497. /* Take the PHY out of reset */
  498. ret = reset_control_deassert(cdns_phy->phy_rst);
  499. if (ret)
  500. return ret;
  501. return 0;
  502. }
  503. static int cdns_torrent_phy_probe(struct udevice *dev)
  504. {
  505. struct cdns_torrent_phy *cdns_phy = dev_get_priv(dev);
  506. int ret, subnodes = 0, node = 0, i;
  507. struct cdns_torrent_data *data;
  508. u32 total_num_lanes = 0;
  509. struct clk *clk;
  510. ofnode child;
  511. u32 phy_type;
  512. cdns_phy->dev = dev;
  513. /* Get init data for this phy */
  514. data = (struct cdns_torrent_data *)dev_get_driver_data(dev);
  515. cdns_phy->init_data = data;
  516. cdns_phy->phy_rst = devm_reset_control_get_by_index(dev, 0);
  517. if (IS_ERR(cdns_phy->phy_rst)) {
  518. dev_err(dev, "failed to get reset\n");
  519. return PTR_ERR(cdns_phy->phy_rst);
  520. }
  521. clk = devm_clk_get(dev, "refclk");
  522. if (IS_ERR(clk)) {
  523. dev_err(dev, "phy ref clock not found\n");
  524. return PTR_ERR(clk);
  525. }
  526. ret = clk_prepare_enable(clk);
  527. if (ret) {
  528. dev_err(cdns_phy->dev, "Failed to prepare ref clock\n");
  529. return ret;
  530. }
  531. cdns_phy->sd_base = devfdt_remap_addr_index(dev, 0);
  532. if (IS_ERR(cdns_phy->sd_base))
  533. return PTR_ERR(cdns_phy->sd_base);
  534. devfdt_get_addr_size_index(dev, 0, (fdt_size_t *)&cdns_phy->size);
  535. dev_for_each_subnode(child, dev)
  536. subnodes++;
  537. if (subnodes == 0) {
  538. dev_err(dev, "No available link subnodes found\n");
  539. return -EINVAL;
  540. }
  541. ret = cdns_torrent_regmap_init(cdns_phy);
  542. if (ret)
  543. return ret;
  544. ret = cdns_torrent_regfield_init(cdns_phy);
  545. if (ret)
  546. return ret;
  547. /* Going through all the available subnodes or children*/
  548. ofnode_for_each_subnode(child, dev_ofnode(dev)) {
  549. /* PHY subnode name must be a 'phy' */
  550. if (!ofnode_name_eq(child, "phy"))
  551. continue;
  552. cdns_phy->phys[node].lnk_rst =
  553. devm_reset_bulk_get_by_node(dev, child);
  554. if (IS_ERR(cdns_phy->phys[node].lnk_rst)) {
  555. dev_err(dev, "%s: failed to get reset\n",
  556. ofnode_get_name(child));
  557. ret = PTR_ERR(cdns_phy->phys[node].lnk_rst);
  558. goto put_lnk_rst;
  559. }
  560. if (ofnode_read_u32(child, "reg",
  561. &cdns_phy->phys[node].mlane)) {
  562. dev_err(dev, "%s: No \"reg \" - property.\n",
  563. ofnode_get_name(child));
  564. ret = -EINVAL;
  565. goto put_child;
  566. }
  567. if (ofnode_read_u32(child, "cdns,phy-type", &phy_type)) {
  568. dev_err(dev, "%s: No \"cdns,phy-type \" - property.\n",
  569. ofnode_get_name(child));
  570. ret = -EINVAL;
  571. goto put_child;
  572. }
  573. switch (phy_type) {
  574. case PHY_TYPE_PCIE:
  575. cdns_phy->phys[node].phy_type = TYPE_PCIE;
  576. break;
  577. case PHY_TYPE_DP:
  578. cdns_phy->phys[node].phy_type = TYPE_DP;
  579. break;
  580. case PHY_TYPE_SGMII:
  581. cdns_phy->phys[node].phy_type = TYPE_SGMII;
  582. break;
  583. case PHY_TYPE_QSGMII:
  584. cdns_phy->phys[node].phy_type = TYPE_QSGMII;
  585. break;
  586. case PHY_TYPE_USB3:
  587. cdns_phy->phys[node].phy_type = TYPE_USB;
  588. break;
  589. default:
  590. dev_err(dev, "Unsupported protocol\n");
  591. ret = -EINVAL;
  592. goto put_child;
  593. }
  594. if (ofnode_read_u32(child, "cdns,num-lanes",
  595. &cdns_phy->phys[node].num_lanes)) {
  596. dev_err(dev, "%s: No \"cdns,num-lanes \" - property.\n",
  597. ofnode_get_name(child));
  598. ret = -EINVAL;
  599. goto put_child;
  600. }
  601. total_num_lanes += cdns_phy->phys[node].num_lanes;
  602. /* Get SSC mode */
  603. ofnode_read_u32(child, "cdns,ssc-mode",
  604. &cdns_phy->phys[node].ssc_mode);
  605. node++;
  606. }
  607. cdns_phy->nsubnodes = node;
  608. if (total_num_lanes > MAX_NUM_LANES) {
  609. dev_err(dev, "Invalid lane configuration\n");
  610. goto put_lnk_rst;
  611. }
  612. if (cdns_phy->nsubnodes > 1) {
  613. ret = cdns_torrent_phy_configure_multilink(cdns_phy);
  614. if (ret)
  615. goto put_lnk_rst;
  616. }
  617. reset_control_deassert(cdns_phy->phy_rst);
  618. return 0;
  619. put_child:
  620. node++;
  621. put_lnk_rst:
  622. for (i = 0; i < node; i++)
  623. reset_release_bulk(cdns_phy->phys[i].lnk_rst);
  624. return ret;
  625. }
  626. static int cdns_torrent_phy_on(struct phy *gphy)
  627. {
  628. struct cdns_torrent_inst *inst = phy_get_drvdata(gphy);
  629. struct cdns_torrent_phy *cdns_phy = dev_get_priv(gphy->dev);
  630. u32 read_val;
  631. int ret;
  632. if (cdns_phy->nsubnodes == 1) {
  633. /* Take the PHY lane group out of reset */
  634. reset_deassert_bulk(inst->lnk_rst);
  635. /* Take the PHY out of reset */
  636. ret = reset_control_deassert(cdns_phy->phy_rst);
  637. if (ret)
  638. return ret;
  639. }
  640. /*
  641. * Wait for cmn_ready assertion
  642. * PHY_PMA_CMN_CTRL1[0] == 1
  643. */
  644. ret = regmap_field_read_poll_timeout(cdns_phy->phy_pma_cmn_ctrl_1,
  645. read_val, read_val, 1000,
  646. PLL_LOCK_TIMEOUT);
  647. if (ret) {
  648. dev_err(cdns_phy->dev, "Timeout waiting for CMN ready\n");
  649. return ret;
  650. }
  651. mdelay(10);
  652. return 0;
  653. }
  654. static int cdns_torrent_phy_init(struct phy *phy)
  655. {
  656. struct cdns_torrent_phy *cdns_phy = dev_get_priv(phy->dev);
  657. const struct cdns_torrent_data *init_data = cdns_phy->init_data;
  658. struct cdns_torrent_vals *cmn_vals, *tx_ln_vals, *rx_ln_vals;
  659. struct cdns_torrent_vals *link_cmn_vals, *xcvr_diag_vals;
  660. struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
  661. enum cdns_torrent_phy_type phy_type = inst->phy_type;
  662. enum cdns_torrent_ssc_mode ssc = inst->ssc_mode;
  663. struct cdns_torrent_vals *pcs_cmn_vals;
  664. struct cdns_reg_pairs *reg_pairs;
  665. struct regmap *regmap;
  666. u32 num_regs;
  667. int i, j;
  668. if (cdns_phy->nsubnodes > 1)
  669. return 0;
  670. /**
  671. * Spread spectrum generation is not required or supported
  672. * for SGMII/QSGMII
  673. */
  674. if (phy_type == TYPE_SGMII || phy_type == TYPE_QSGMII)
  675. ssc = NO_SSC;
  676. /* PHY configuration specific registers for single link */
  677. link_cmn_vals = init_data->link_cmn_vals[phy_type][TYPE_NONE][ssc];
  678. if (link_cmn_vals) {
  679. reg_pairs = link_cmn_vals->reg_pairs;
  680. num_regs = link_cmn_vals->num_regs;
  681. regmap = cdns_phy->regmap_common_cdb;
  682. /**
  683. * First array value in link_cmn_vals must be of
  684. * PHY_PLL_CFG register
  685. */
  686. regmap_field_write(cdns_phy->phy_pll_cfg, reg_pairs[0].val);
  687. for (i = 1; i < num_regs; i++)
  688. regmap_write(regmap, reg_pairs[i].off,
  689. reg_pairs[i].val);
  690. }
  691. xcvr_diag_vals = init_data->xcvr_diag_vals[phy_type][TYPE_NONE][ssc];
  692. if (xcvr_diag_vals) {
  693. reg_pairs = xcvr_diag_vals->reg_pairs;
  694. num_regs = xcvr_diag_vals->num_regs;
  695. for (i = 0; i < inst->num_lanes; i++) {
  696. regmap = cdns_phy->regmap_tx_lane_cdb[i + inst->mlane];
  697. for (j = 0; j < num_regs; j++)
  698. regmap_write(regmap, reg_pairs[j].off,
  699. reg_pairs[j].val);
  700. }
  701. }
  702. /* PHY PCS common registers configurations */
  703. pcs_cmn_vals = init_data->pcs_cmn_vals[phy_type][TYPE_NONE][ssc];
  704. if (pcs_cmn_vals) {
  705. reg_pairs = pcs_cmn_vals->reg_pairs;
  706. num_regs = pcs_cmn_vals->num_regs;
  707. regmap = cdns_phy->regmap_phy_pcs_common_cdb;
  708. for (i = 0; i < num_regs; i++)
  709. regmap_write(regmap, reg_pairs[i].off,
  710. reg_pairs[i].val);
  711. }
  712. /* PMA common registers configurations */
  713. cmn_vals = init_data->cmn_vals[phy_type][TYPE_NONE][ssc];
  714. if (cmn_vals) {
  715. reg_pairs = cmn_vals->reg_pairs;
  716. num_regs = cmn_vals->num_regs;
  717. regmap = cdns_phy->regmap_common_cdb;
  718. for (i = 0; i < num_regs; i++)
  719. regmap_write(regmap, reg_pairs[i].off,
  720. reg_pairs[i].val);
  721. }
  722. /* PMA TX lane registers configurations */
  723. tx_ln_vals = init_data->tx_ln_vals[phy_type][TYPE_NONE][ssc];
  724. if (tx_ln_vals) {
  725. reg_pairs = tx_ln_vals->reg_pairs;
  726. num_regs = tx_ln_vals->num_regs;
  727. for (i = 0; i < inst->num_lanes; i++) {
  728. regmap = cdns_phy->regmap_tx_lane_cdb[i + inst->mlane];
  729. for (j = 0; j < num_regs; j++)
  730. regmap_write(regmap, reg_pairs[j].off,
  731. reg_pairs[j].val);
  732. }
  733. }
  734. /* PMA RX lane registers configurations */
  735. rx_ln_vals = init_data->rx_ln_vals[phy_type][TYPE_NONE][ssc];
  736. if (rx_ln_vals) {
  737. reg_pairs = rx_ln_vals->reg_pairs;
  738. num_regs = rx_ln_vals->num_regs;
  739. for (i = 0; i < inst->num_lanes; i++) {
  740. regmap = cdns_phy->regmap_rx_lane_cdb[i + inst->mlane];
  741. for (j = 0; j < num_regs; j++)
  742. regmap_write(regmap, reg_pairs[j].off,
  743. reg_pairs[j].val);
  744. }
  745. }
  746. return 0;
  747. }
  748. static int cdns_torrent_phy_off(struct phy *gphy)
  749. {
  750. struct cdns_torrent_inst *inst = phy_get_drvdata(gphy);
  751. struct cdns_torrent_phy *cdns_phy = dev_get_priv(gphy->dev);
  752. int ret;
  753. if (cdns_phy->nsubnodes != 1)
  754. return 0;
  755. ret = reset_control_assert(cdns_phy->phy_rst);
  756. if (ret)
  757. return ret;
  758. return reset_assert_bulk(inst->lnk_rst);
  759. }
  760. static int cdns_torrent_phy_remove(struct udevice *dev)
  761. {
  762. struct cdns_torrent_phy *cdns_phy = dev_get_priv(dev);
  763. int i;
  764. reset_control_assert(cdns_phy->phy_rst);
  765. for (i = 0; i < cdns_phy->nsubnodes; i++)
  766. reset_release_bulk(cdns_phy->phys[i].lnk_rst);
  767. return 0;
  768. }
  769. /* USB and SGMII/QSGMII link configuration */
  770. static struct cdns_reg_pairs usb_sgmii_link_cmn_regs[] = {
  771. {0x0002, PHY_PLL_CFG},
  772. {0x8600, CMN_PDIAG_PLL0_CLK_SEL_M0},
  773. {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0}
  774. };
  775. static struct cdns_reg_pairs usb_sgmii_xcvr_diag_ln_regs[] = {
  776. {0x0000, XCVR_DIAG_HSCLK_SEL},
  777. {0x0001, XCVR_DIAG_HSCLK_DIV},
  778. {0x0041, XCVR_DIAG_PLLDRC_CTRL}
  779. };
  780. static struct cdns_reg_pairs sgmii_usb_xcvr_diag_ln_regs[] = {
  781. {0x0011, XCVR_DIAG_HSCLK_SEL},
  782. {0x0003, XCVR_DIAG_HSCLK_DIV},
  783. {0x009B, XCVR_DIAG_PLLDRC_CTRL}
  784. };
  785. static struct cdns_torrent_vals usb_sgmii_link_cmn_vals = {
  786. .reg_pairs = usb_sgmii_link_cmn_regs,
  787. .num_regs = ARRAY_SIZE(usb_sgmii_link_cmn_regs),
  788. };
  789. static struct cdns_torrent_vals usb_sgmii_xcvr_diag_ln_vals = {
  790. .reg_pairs = usb_sgmii_xcvr_diag_ln_regs,
  791. .num_regs = ARRAY_SIZE(usb_sgmii_xcvr_diag_ln_regs),
  792. };
  793. static struct cdns_torrent_vals sgmii_usb_xcvr_diag_ln_vals = {
  794. .reg_pairs = sgmii_usb_xcvr_diag_ln_regs,
  795. .num_regs = ARRAY_SIZE(sgmii_usb_xcvr_diag_ln_regs),
  796. };
  797. /* PCIe and USB Unique SSC link configuration */
  798. static struct cdns_reg_pairs pcie_usb_link_cmn_regs[] = {
  799. {0x0003, PHY_PLL_CFG},
  800. {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0},
  801. {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M1},
  802. {0x8600, CMN_PDIAG_PLL1_CLK_SEL_M0}
  803. };
  804. static struct cdns_reg_pairs pcie_usb_xcvr_diag_ln_regs[] = {
  805. {0x0000, XCVR_DIAG_HSCLK_SEL},
  806. {0x0001, XCVR_DIAG_HSCLK_DIV},
  807. {0x0012, XCVR_DIAG_PLLDRC_CTRL}
  808. };
  809. static struct cdns_reg_pairs usb_pcie_xcvr_diag_ln_regs[] = {
  810. {0x0011, XCVR_DIAG_HSCLK_SEL},
  811. {0x0001, XCVR_DIAG_HSCLK_DIV},
  812. {0x00C9, XCVR_DIAG_PLLDRC_CTRL}
  813. };
  814. static struct cdns_torrent_vals pcie_usb_link_cmn_vals = {
  815. .reg_pairs = pcie_usb_link_cmn_regs,
  816. .num_regs = ARRAY_SIZE(pcie_usb_link_cmn_regs),
  817. };
  818. static struct cdns_torrent_vals pcie_usb_xcvr_diag_ln_vals = {
  819. .reg_pairs = pcie_usb_xcvr_diag_ln_regs,
  820. .num_regs = ARRAY_SIZE(pcie_usb_xcvr_diag_ln_regs),
  821. };
  822. static struct cdns_torrent_vals usb_pcie_xcvr_diag_ln_vals = {
  823. .reg_pairs = usb_pcie_xcvr_diag_ln_regs,
  824. .num_regs = ARRAY_SIZE(usb_pcie_xcvr_diag_ln_regs),
  825. };
  826. /* USB 100 MHz Ref clk, internal SSC */
  827. static struct cdns_reg_pairs usb_100_int_ssc_cmn_regs[] = {
  828. {0x0004, CMN_PLL0_DSM_DIAG_M0},
  829. {0x0004, CMN_PLL0_DSM_DIAG_M1},
  830. {0x0004, CMN_PLL1_DSM_DIAG_M0},
  831. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
  832. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
  833. {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
  834. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
  835. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
  836. {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
  837. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
  838. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
  839. {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
  840. {0x0064, CMN_PLL0_INTDIV_M0},
  841. {0x0050, CMN_PLL0_INTDIV_M1},
  842. {0x0064, CMN_PLL1_INTDIV_M0},
  843. {0x0002, CMN_PLL0_FRACDIVH_M0},
  844. {0x0002, CMN_PLL0_FRACDIVH_M1},
  845. {0x0002, CMN_PLL1_FRACDIVH_M0},
  846. {0x0044, CMN_PLL0_HIGH_THR_M0},
  847. {0x0036, CMN_PLL0_HIGH_THR_M1},
  848. {0x0044, CMN_PLL1_HIGH_THR_M0},
  849. {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
  850. {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
  851. {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
  852. {0x0001, CMN_PLL0_SS_CTRL1_M0},
  853. {0x0001, CMN_PLL0_SS_CTRL1_M1},
  854. {0x0001, CMN_PLL1_SS_CTRL1_M0},
  855. {0x011B, CMN_PLL0_SS_CTRL2_M0},
  856. {0x011B, CMN_PLL0_SS_CTRL2_M1},
  857. {0x011B, CMN_PLL1_SS_CTRL2_M0},
  858. {0x006E, CMN_PLL0_SS_CTRL3_M0},
  859. {0x0058, CMN_PLL0_SS_CTRL3_M1},
  860. {0x006E, CMN_PLL1_SS_CTRL3_M0},
  861. {0x000E, CMN_PLL0_SS_CTRL4_M0},
  862. {0x0012, CMN_PLL0_SS_CTRL4_M1},
  863. {0x000E, CMN_PLL1_SS_CTRL4_M0},
  864. {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
  865. {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
  866. {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
  867. {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
  868. {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
  869. {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
  870. {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
  871. {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
  872. {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
  873. {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
  874. {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
  875. {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD},
  876. {0x007F, CMN_TXPUCAL_TUNE},
  877. {0x007F, CMN_TXPDCAL_TUNE}
  878. };
  879. static struct cdns_torrent_vals usb_100_int_ssc_cmn_vals = {
  880. .reg_pairs = usb_100_int_ssc_cmn_regs,
  881. .num_regs = ARRAY_SIZE(usb_100_int_ssc_cmn_regs),
  882. };
  883. /* Single USB link configuration */
  884. static struct cdns_reg_pairs sl_usb_link_cmn_regs[] = {
  885. {0x0000, PHY_PLL_CFG},
  886. {0x8600, CMN_PDIAG_PLL0_CLK_SEL_M0}
  887. };
  888. static struct cdns_reg_pairs sl_usb_xcvr_diag_ln_regs[] = {
  889. {0x0000, XCVR_DIAG_HSCLK_SEL},
  890. {0x0001, XCVR_DIAG_HSCLK_DIV},
  891. {0x0041, XCVR_DIAG_PLLDRC_CTRL}
  892. };
  893. static struct cdns_torrent_vals sl_usb_link_cmn_vals = {
  894. .reg_pairs = sl_usb_link_cmn_regs,
  895. .num_regs = ARRAY_SIZE(sl_usb_link_cmn_regs),
  896. };
  897. static struct cdns_torrent_vals sl_usb_xcvr_diag_ln_vals = {
  898. .reg_pairs = sl_usb_xcvr_diag_ln_regs,
  899. .num_regs = ARRAY_SIZE(sl_usb_xcvr_diag_ln_regs),
  900. };
  901. /* USB PHY PCS common configuration */
  902. static struct cdns_reg_pairs usb_phy_pcs_cmn_regs[] = {
  903. {0x0A0A, PHY_PIPE_USB3_GEN2_PRE_CFG0},
  904. {0x1000, PHY_PIPE_USB3_GEN2_POST_CFG0},
  905. {0x0010, PHY_PIPE_USB3_GEN2_POST_CFG1}
  906. };
  907. static struct cdns_torrent_vals usb_phy_pcs_cmn_vals = {
  908. .reg_pairs = usb_phy_pcs_cmn_regs,
  909. .num_regs = ARRAY_SIZE(usb_phy_pcs_cmn_regs),
  910. };
  911. /* USB 100 MHz Ref clk, no SSC */
  912. static struct cdns_reg_pairs sl_usb_100_no_ssc_cmn_regs[] = {
  913. {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
  914. {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
  915. {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
  916. {0x0003, CMN_PLL0_VCOCAL_TCTRL},
  917. {0x0003, CMN_PLL1_VCOCAL_TCTRL},
  918. {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
  919. {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD}
  920. };
  921. static struct cdns_torrent_vals sl_usb_100_no_ssc_cmn_vals = {
  922. .reg_pairs = sl_usb_100_no_ssc_cmn_regs,
  923. .num_regs = ARRAY_SIZE(sl_usb_100_no_ssc_cmn_regs),
  924. };
  925. static struct cdns_reg_pairs usb_100_no_ssc_cmn_regs[] = {
  926. {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
  927. {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD},
  928. {0x007F, CMN_TXPUCAL_TUNE},
  929. {0x007F, CMN_TXPDCAL_TUNE}
  930. };
  931. static struct cdns_reg_pairs usb_100_no_ssc_tx_ln_regs[] = {
  932. {0x02FF, TX_PSC_A0},
  933. {0x06AF, TX_PSC_A1},
  934. {0x06AE, TX_PSC_A2},
  935. {0x06AE, TX_PSC_A3},
  936. {0x2A82, TX_TXCC_CTRL},
  937. {0x0014, TX_TXCC_CPOST_MULT_01},
  938. {0x0003, XCVR_DIAG_PSC_OVRD}
  939. };
  940. static struct cdns_reg_pairs usb_100_no_ssc_rx_ln_regs[] = {
  941. {0x0D1D, RX_PSC_A0},
  942. {0x0D1D, RX_PSC_A1},
  943. {0x0D00, RX_PSC_A2},
  944. {0x0500, RX_PSC_A3},
  945. {0x0013, RX_SIGDET_HL_FILT_TMR},
  946. {0x0000, RX_REE_GCSM1_CTRL},
  947. {0x0C02, RX_REE_ATTEN_THR},
  948. {0x0330, RX_REE_SMGM_CTRL1},
  949. {0x0300, RX_REE_SMGM_CTRL2},
  950. {0x0019, RX_REE_TAP1_CLIP},
  951. {0x0019, RX_REE_TAP2TON_CLIP},
  952. {0x1004, RX_DIAG_SIGDET_TUNE},
  953. {0x00F9, RX_DIAG_NQST_CTRL},
  954. {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
  955. {0x0002, RX_DIAG_DFE_AMP_TUNE_3},
  956. {0x0000, RX_DIAG_PI_CAP},
  957. {0x0031, RX_DIAG_PI_RATE},
  958. {0x0001, RX_DIAG_ACYA},
  959. {0x018C, RX_CDRLF_CNFG},
  960. {0x0003, RX_CDRLF_CNFG3}
  961. };
  962. static struct cdns_torrent_vals usb_100_no_ssc_cmn_vals = {
  963. .reg_pairs = usb_100_no_ssc_cmn_regs,
  964. .num_regs = ARRAY_SIZE(usb_100_no_ssc_cmn_regs),
  965. };
  966. static struct cdns_torrent_vals usb_100_no_ssc_tx_ln_vals = {
  967. .reg_pairs = usb_100_no_ssc_tx_ln_regs,
  968. .num_regs = ARRAY_SIZE(usb_100_no_ssc_tx_ln_regs),
  969. };
  970. static struct cdns_torrent_vals usb_100_no_ssc_rx_ln_vals = {
  971. .reg_pairs = usb_100_no_ssc_rx_ln_regs,
  972. .num_regs = ARRAY_SIZE(usb_100_no_ssc_rx_ln_regs),
  973. };
  974. /* Single link USB, 100 MHz Ref clk, internal SSC */
  975. static struct cdns_reg_pairs sl_usb_100_int_ssc_cmn_regs[] = {
  976. {0x0004, CMN_PLL0_DSM_DIAG_M0},
  977. {0x0004, CMN_PLL1_DSM_DIAG_M0},
  978. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
  979. {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
  980. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
  981. {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
  982. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
  983. {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
  984. {0x0064, CMN_PLL0_INTDIV_M0},
  985. {0x0064, CMN_PLL1_INTDIV_M0},
  986. {0x0002, CMN_PLL0_FRACDIVH_M0},
  987. {0x0002, CMN_PLL1_FRACDIVH_M0},
  988. {0x0044, CMN_PLL0_HIGH_THR_M0},
  989. {0x0044, CMN_PLL1_HIGH_THR_M0},
  990. {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
  991. {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
  992. {0x0001, CMN_PLL0_SS_CTRL1_M0},
  993. {0x0001, CMN_PLL1_SS_CTRL1_M0},
  994. {0x011B, CMN_PLL0_SS_CTRL2_M0},
  995. {0x011B, CMN_PLL1_SS_CTRL2_M0},
  996. {0x006E, CMN_PLL0_SS_CTRL3_M0},
  997. {0x006E, CMN_PLL1_SS_CTRL3_M0},
  998. {0x000E, CMN_PLL0_SS_CTRL4_M0},
  999. {0x000E, CMN_PLL1_SS_CTRL4_M0},
  1000. {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
  1001. {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
  1002. {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
  1003. {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
  1004. {0x0003, CMN_PLL0_VCOCAL_TCTRL},
  1005. {0x0003, CMN_PLL1_VCOCAL_TCTRL},
  1006. {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
  1007. {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
  1008. {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
  1009. {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
  1010. {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
  1011. {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
  1012. {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
  1013. {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD}
  1014. };
  1015. static struct cdns_torrent_vals sl_usb_100_int_ssc_cmn_vals = {
  1016. .reg_pairs = sl_usb_100_int_ssc_cmn_regs,
  1017. .num_regs = ARRAY_SIZE(sl_usb_100_int_ssc_cmn_regs),
  1018. };
  1019. /* PCIe and SGMII/QSGMII Unique SSC link configuration */
  1020. static struct cdns_reg_pairs pcie_sgmii_link_cmn_regs[] = {
  1021. {0x0003, PHY_PLL_CFG},
  1022. {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0},
  1023. {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M1},
  1024. {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0}
  1025. };
  1026. static struct cdns_reg_pairs pcie_sgmii_xcvr_diag_ln_regs[] = {
  1027. {0x0000, XCVR_DIAG_HSCLK_SEL},
  1028. {0x0001, XCVR_DIAG_HSCLK_DIV},
  1029. {0x0012, XCVR_DIAG_PLLDRC_CTRL}
  1030. };
  1031. static struct cdns_reg_pairs sgmii_pcie_xcvr_diag_ln_regs[] = {
  1032. {0x0011, XCVR_DIAG_HSCLK_SEL},
  1033. {0x0003, XCVR_DIAG_HSCLK_DIV},
  1034. {0x009B, XCVR_DIAG_PLLDRC_CTRL}
  1035. };
  1036. static struct cdns_torrent_vals pcie_sgmii_link_cmn_vals = {
  1037. .reg_pairs = pcie_sgmii_link_cmn_regs,
  1038. .num_regs = ARRAY_SIZE(pcie_sgmii_link_cmn_regs),
  1039. };
  1040. static struct cdns_torrent_vals pcie_sgmii_xcvr_diag_ln_vals = {
  1041. .reg_pairs = pcie_sgmii_xcvr_diag_ln_regs,
  1042. .num_regs = ARRAY_SIZE(pcie_sgmii_xcvr_diag_ln_regs),
  1043. };
  1044. static struct cdns_torrent_vals sgmii_pcie_xcvr_diag_ln_vals = {
  1045. .reg_pairs = sgmii_pcie_xcvr_diag_ln_regs,
  1046. .num_regs = ARRAY_SIZE(sgmii_pcie_xcvr_diag_ln_regs),
  1047. };
  1048. /* SGMII 100 MHz Ref clk, no SSC */
  1049. static struct cdns_reg_pairs sl_sgmii_100_no_ssc_cmn_regs[] = {
  1050. {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1051. {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
  1052. {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
  1053. {0x0003, CMN_PLL0_VCOCAL_TCTRL},
  1054. {0x0003, CMN_PLL1_VCOCAL_TCTRL}
  1055. };
  1056. static struct cdns_torrent_vals sl_sgmii_100_no_ssc_cmn_vals = {
  1057. .reg_pairs = sl_sgmii_100_no_ssc_cmn_regs,
  1058. .num_regs = ARRAY_SIZE(sl_sgmii_100_no_ssc_cmn_regs),
  1059. };
  1060. static struct cdns_reg_pairs sgmii_100_no_ssc_cmn_regs[] = {
  1061. {0x007F, CMN_TXPUCAL_TUNE},
  1062. {0x007F, CMN_TXPDCAL_TUNE}
  1063. };
  1064. static struct cdns_reg_pairs sgmii_100_no_ssc_tx_ln_regs[] = {
  1065. {0x00F3, TX_PSC_A0},
  1066. {0x04A2, TX_PSC_A2},
  1067. {0x04A2, TX_PSC_A3},
  1068. {0x0000, TX_TXCC_CPOST_MULT_00},
  1069. {0x00B3, DRV_DIAG_TX_DRV}
  1070. };
  1071. static struct cdns_reg_pairs ti_sgmii_100_no_ssc_tx_ln_regs[] = {
  1072. {0x00F3, TX_PSC_A0},
  1073. {0x04A2, TX_PSC_A2},
  1074. {0x04A2, TX_PSC_A3},
  1075. {0x0000, TX_TXCC_CPOST_MULT_00},
  1076. {0x00B3, DRV_DIAG_TX_DRV},
  1077. {0x4000, XCVR_DIAG_RXCLK_CTRL},
  1078. };
  1079. static struct cdns_reg_pairs sgmii_100_no_ssc_rx_ln_regs[] = {
  1080. {0x091D, RX_PSC_A0},
  1081. {0x0900, RX_PSC_A2},
  1082. {0x0100, RX_PSC_A3},
  1083. {0x03C7, RX_REE_GCSM1_EQENM_PH1},
  1084. {0x01C7, RX_REE_GCSM1_EQENM_PH2},
  1085. {0x0000, RX_DIAG_DFE_CTRL},
  1086. {0x0019, RX_REE_TAP1_CLIP},
  1087. {0x0019, RX_REE_TAP2TON_CLIP},
  1088. {0x0098, RX_DIAG_NQST_CTRL},
  1089. {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
  1090. {0x0000, RX_DIAG_DFE_AMP_TUNE_3},
  1091. {0x0000, RX_DIAG_PI_CAP},
  1092. {0x0010, RX_DIAG_PI_RATE},
  1093. {0x0001, RX_DIAG_ACYA},
  1094. {0x018C, RX_CDRLF_CNFG},
  1095. };
  1096. static struct cdns_torrent_vals sgmii_100_no_ssc_cmn_vals = {
  1097. .reg_pairs = sgmii_100_no_ssc_cmn_regs,
  1098. .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_cmn_regs),
  1099. };
  1100. static struct cdns_torrent_vals sgmii_100_no_ssc_tx_ln_vals = {
  1101. .reg_pairs = sgmii_100_no_ssc_tx_ln_regs,
  1102. .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_tx_ln_regs),
  1103. };
  1104. static struct cdns_torrent_vals ti_sgmii_100_no_ssc_tx_ln_vals = {
  1105. .reg_pairs = ti_sgmii_100_no_ssc_tx_ln_regs,
  1106. .num_regs = ARRAY_SIZE(ti_sgmii_100_no_ssc_tx_ln_regs),
  1107. };
  1108. static struct cdns_torrent_vals sgmii_100_no_ssc_rx_ln_vals = {
  1109. .reg_pairs = sgmii_100_no_ssc_rx_ln_regs,
  1110. .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_rx_ln_regs),
  1111. };
  1112. /* SGMII 100 MHz Ref clk, internal SSC */
  1113. static struct cdns_reg_pairs sgmii_100_int_ssc_cmn_regs[] = {
  1114. {0x0004, CMN_PLL0_DSM_DIAG_M0},
  1115. {0x0004, CMN_PLL0_DSM_DIAG_M1},
  1116. {0x0004, CMN_PLL1_DSM_DIAG_M0},
  1117. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
  1118. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
  1119. {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1120. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
  1121. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
  1122. {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
  1123. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
  1124. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
  1125. {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
  1126. {0x0064, CMN_PLL0_INTDIV_M0},
  1127. {0x0050, CMN_PLL0_INTDIV_M1},
  1128. {0x0064, CMN_PLL1_INTDIV_M0},
  1129. {0x0002, CMN_PLL0_FRACDIVH_M0},
  1130. {0x0002, CMN_PLL0_FRACDIVH_M1},
  1131. {0x0002, CMN_PLL1_FRACDIVH_M0},
  1132. {0x0044, CMN_PLL0_HIGH_THR_M0},
  1133. {0x0036, CMN_PLL0_HIGH_THR_M1},
  1134. {0x0044, CMN_PLL1_HIGH_THR_M0},
  1135. {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
  1136. {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
  1137. {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
  1138. {0x0001, CMN_PLL0_SS_CTRL1_M0},
  1139. {0x0001, CMN_PLL0_SS_CTRL1_M1},
  1140. {0x0001, CMN_PLL1_SS_CTRL1_M0},
  1141. {0x011B, CMN_PLL0_SS_CTRL2_M0},
  1142. {0x011B, CMN_PLL0_SS_CTRL2_M1},
  1143. {0x011B, CMN_PLL1_SS_CTRL2_M0},
  1144. {0x006E, CMN_PLL0_SS_CTRL3_M0},
  1145. {0x0058, CMN_PLL0_SS_CTRL3_M1},
  1146. {0x006E, CMN_PLL1_SS_CTRL3_M0},
  1147. {0x000E, CMN_PLL0_SS_CTRL4_M0},
  1148. {0x0012, CMN_PLL0_SS_CTRL4_M1},
  1149. {0x000E, CMN_PLL1_SS_CTRL4_M0},
  1150. {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
  1151. {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
  1152. {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
  1153. {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
  1154. {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
  1155. {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
  1156. {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
  1157. {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
  1158. {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
  1159. {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
  1160. {0x007F, CMN_TXPUCAL_TUNE},
  1161. {0x007F, CMN_TXPDCAL_TUNE}
  1162. };
  1163. static struct cdns_torrent_vals sgmii_100_int_ssc_cmn_vals = {
  1164. .reg_pairs = sgmii_100_int_ssc_cmn_regs,
  1165. .num_regs = ARRAY_SIZE(sgmii_100_int_ssc_cmn_regs),
  1166. };
  1167. /* QSGMII 100 MHz Ref clk, no SSC */
  1168. static struct cdns_reg_pairs sl_qsgmii_100_no_ssc_cmn_regs[] = {
  1169. {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1170. {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
  1171. {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
  1172. {0x0003, CMN_PLL0_VCOCAL_TCTRL},
  1173. {0x0003, CMN_PLL1_VCOCAL_TCTRL}
  1174. };
  1175. static struct cdns_torrent_vals sl_qsgmii_100_no_ssc_cmn_vals = {
  1176. .reg_pairs = sl_qsgmii_100_no_ssc_cmn_regs,
  1177. .num_regs = ARRAY_SIZE(sl_qsgmii_100_no_ssc_cmn_regs),
  1178. };
  1179. static struct cdns_reg_pairs qsgmii_100_no_ssc_cmn_regs[] = {
  1180. {0x007F, CMN_TXPUCAL_TUNE},
  1181. {0x007F, CMN_TXPDCAL_TUNE}
  1182. };
  1183. static struct cdns_reg_pairs qsgmii_100_no_ssc_tx_ln_regs[] = {
  1184. {0x00F3, TX_PSC_A0},
  1185. {0x04A2, TX_PSC_A2},
  1186. {0x04A2, TX_PSC_A3},
  1187. {0x0000, TX_TXCC_CPOST_MULT_00},
  1188. {0x0011, TX_TXCC_MGNFS_MULT_100},
  1189. {0x0003, DRV_DIAG_TX_DRV}
  1190. };
  1191. static struct cdns_reg_pairs ti_qsgmii_100_no_ssc_tx_ln_regs[] = {
  1192. {0x00F3, TX_PSC_A0},
  1193. {0x04A2, TX_PSC_A2},
  1194. {0x04A2, TX_PSC_A3},
  1195. {0x0000, TX_TXCC_CPOST_MULT_00},
  1196. {0x0011, TX_TXCC_MGNFS_MULT_100},
  1197. {0x0003, DRV_DIAG_TX_DRV},
  1198. {0x4000, XCVR_DIAG_RXCLK_CTRL},
  1199. };
  1200. static struct cdns_reg_pairs qsgmii_100_no_ssc_rx_ln_regs[] = {
  1201. {0x091D, RX_PSC_A0},
  1202. {0x0900, RX_PSC_A2},
  1203. {0x0100, RX_PSC_A3},
  1204. {0x03C7, RX_REE_GCSM1_EQENM_PH1},
  1205. {0x01C7, RX_REE_GCSM1_EQENM_PH2},
  1206. {0x0000, RX_DIAG_DFE_CTRL},
  1207. {0x0019, RX_REE_TAP1_CLIP},
  1208. {0x0019, RX_REE_TAP2TON_CLIP},
  1209. {0x0098, RX_DIAG_NQST_CTRL},
  1210. {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
  1211. {0x0000, RX_DIAG_DFE_AMP_TUNE_3},
  1212. {0x0000, RX_DIAG_PI_CAP},
  1213. {0x0010, RX_DIAG_PI_RATE},
  1214. {0x0001, RX_DIAG_ACYA},
  1215. {0x018C, RX_CDRLF_CNFG},
  1216. };
  1217. static struct cdns_torrent_vals qsgmii_100_no_ssc_cmn_vals = {
  1218. .reg_pairs = qsgmii_100_no_ssc_cmn_regs,
  1219. .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_cmn_regs),
  1220. };
  1221. static struct cdns_torrent_vals qsgmii_100_no_ssc_tx_ln_vals = {
  1222. .reg_pairs = qsgmii_100_no_ssc_tx_ln_regs,
  1223. .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_tx_ln_regs),
  1224. };
  1225. static struct cdns_torrent_vals ti_qsgmii_100_no_ssc_tx_ln_vals = {
  1226. .reg_pairs = ti_qsgmii_100_no_ssc_tx_ln_regs,
  1227. .num_regs = ARRAY_SIZE(ti_qsgmii_100_no_ssc_tx_ln_regs),
  1228. };
  1229. static struct cdns_torrent_vals qsgmii_100_no_ssc_rx_ln_vals = {
  1230. .reg_pairs = qsgmii_100_no_ssc_rx_ln_regs,
  1231. .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_rx_ln_regs),
  1232. };
  1233. /* QSGMII 100 MHz Ref clk, internal SSC */
  1234. static struct cdns_reg_pairs qsgmii_100_int_ssc_cmn_regs[] = {
  1235. {0x0004, CMN_PLL0_DSM_DIAG_M0},
  1236. {0x0004, CMN_PLL0_DSM_DIAG_M1},
  1237. {0x0004, CMN_PLL1_DSM_DIAG_M0},
  1238. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
  1239. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
  1240. {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1241. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
  1242. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
  1243. {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
  1244. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
  1245. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
  1246. {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
  1247. {0x0064, CMN_PLL0_INTDIV_M0},
  1248. {0x0050, CMN_PLL0_INTDIV_M1},
  1249. {0x0064, CMN_PLL1_INTDIV_M0},
  1250. {0x0002, CMN_PLL0_FRACDIVH_M0},
  1251. {0x0002, CMN_PLL0_FRACDIVH_M1},
  1252. {0x0002, CMN_PLL1_FRACDIVH_M0},
  1253. {0x0044, CMN_PLL0_HIGH_THR_M0},
  1254. {0x0036, CMN_PLL0_HIGH_THR_M1},
  1255. {0x0044, CMN_PLL1_HIGH_THR_M0},
  1256. {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
  1257. {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
  1258. {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
  1259. {0x0001, CMN_PLL0_SS_CTRL1_M0},
  1260. {0x0001, CMN_PLL0_SS_CTRL1_M1},
  1261. {0x0001, CMN_PLL1_SS_CTRL1_M0},
  1262. {0x011B, CMN_PLL0_SS_CTRL2_M0},
  1263. {0x011B, CMN_PLL0_SS_CTRL2_M1},
  1264. {0x011B, CMN_PLL1_SS_CTRL2_M0},
  1265. {0x006E, CMN_PLL0_SS_CTRL3_M0},
  1266. {0x0058, CMN_PLL0_SS_CTRL3_M1},
  1267. {0x006E, CMN_PLL1_SS_CTRL3_M0},
  1268. {0x000E, CMN_PLL0_SS_CTRL4_M0},
  1269. {0x0012, CMN_PLL0_SS_CTRL4_M1},
  1270. {0x000E, CMN_PLL1_SS_CTRL4_M0},
  1271. {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
  1272. {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
  1273. {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
  1274. {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
  1275. {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
  1276. {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
  1277. {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
  1278. {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
  1279. {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
  1280. {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
  1281. {0x007F, CMN_TXPUCAL_TUNE},
  1282. {0x007F, CMN_TXPDCAL_TUNE}
  1283. };
  1284. static struct cdns_torrent_vals qsgmii_100_int_ssc_cmn_vals = {
  1285. .reg_pairs = qsgmii_100_int_ssc_cmn_regs,
  1286. .num_regs = ARRAY_SIZE(qsgmii_100_int_ssc_cmn_regs),
  1287. };
  1288. /* Single SGMII/QSGMII link configuration */
  1289. static struct cdns_reg_pairs sl_sgmii_link_cmn_regs[] = {
  1290. {0x0000, PHY_PLL_CFG},
  1291. {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0}
  1292. };
  1293. static struct cdns_reg_pairs sl_sgmii_xcvr_diag_ln_regs[] = {
  1294. {0x0000, XCVR_DIAG_HSCLK_SEL},
  1295. {0x0003, XCVR_DIAG_HSCLK_DIV},
  1296. {0x0013, XCVR_DIAG_PLLDRC_CTRL}
  1297. };
  1298. static struct cdns_torrent_vals sl_sgmii_link_cmn_vals = {
  1299. .reg_pairs = sl_sgmii_link_cmn_regs,
  1300. .num_regs = ARRAY_SIZE(sl_sgmii_link_cmn_regs),
  1301. };
  1302. static struct cdns_torrent_vals sl_sgmii_xcvr_diag_ln_vals = {
  1303. .reg_pairs = sl_sgmii_xcvr_diag_ln_regs,
  1304. .num_regs = ARRAY_SIZE(sl_sgmii_xcvr_diag_ln_regs),
  1305. };
  1306. /* Multi link PCIe, 100 MHz Ref clk, internal SSC */
  1307. static struct cdns_reg_pairs pcie_100_int_ssc_cmn_regs[] = {
  1308. {0x0004, CMN_PLL0_DSM_DIAG_M0},
  1309. {0x0004, CMN_PLL0_DSM_DIAG_M1},
  1310. {0x0004, CMN_PLL1_DSM_DIAG_M0},
  1311. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
  1312. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
  1313. {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1314. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
  1315. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
  1316. {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
  1317. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
  1318. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
  1319. {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
  1320. {0x0064, CMN_PLL0_INTDIV_M0},
  1321. {0x0050, CMN_PLL0_INTDIV_M1},
  1322. {0x0064, CMN_PLL1_INTDIV_M0},
  1323. {0x0002, CMN_PLL0_FRACDIVH_M0},
  1324. {0x0002, CMN_PLL0_FRACDIVH_M1},
  1325. {0x0002, CMN_PLL1_FRACDIVH_M0},
  1326. {0x0044, CMN_PLL0_HIGH_THR_M0},
  1327. {0x0036, CMN_PLL0_HIGH_THR_M1},
  1328. {0x0044, CMN_PLL1_HIGH_THR_M0},
  1329. {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
  1330. {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
  1331. {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
  1332. {0x0001, CMN_PLL0_SS_CTRL1_M0},
  1333. {0x0001, CMN_PLL0_SS_CTRL1_M1},
  1334. {0x0001, CMN_PLL1_SS_CTRL1_M0},
  1335. {0x011B, CMN_PLL0_SS_CTRL2_M0},
  1336. {0x011B, CMN_PLL0_SS_CTRL2_M1},
  1337. {0x011B, CMN_PLL1_SS_CTRL2_M0},
  1338. {0x006E, CMN_PLL0_SS_CTRL3_M0},
  1339. {0x0058, CMN_PLL0_SS_CTRL3_M1},
  1340. {0x006E, CMN_PLL1_SS_CTRL3_M0},
  1341. {0x000E, CMN_PLL0_SS_CTRL4_M0},
  1342. {0x0012, CMN_PLL0_SS_CTRL4_M1},
  1343. {0x000E, CMN_PLL1_SS_CTRL4_M0},
  1344. {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
  1345. {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
  1346. {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
  1347. {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
  1348. {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
  1349. {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
  1350. {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
  1351. {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
  1352. {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
  1353. {0x0005, CMN_PLL1_LOCK_PLLCNT_THR}
  1354. };
  1355. static struct cdns_torrent_vals pcie_100_int_ssc_cmn_vals = {
  1356. .reg_pairs = pcie_100_int_ssc_cmn_regs,
  1357. .num_regs = ARRAY_SIZE(pcie_100_int_ssc_cmn_regs),
  1358. };
  1359. /* Single link PCIe, 100 MHz Ref clk, internal SSC */
  1360. static struct cdns_reg_pairs sl_pcie_100_int_ssc_cmn_regs[] = {
  1361. {0x0004, CMN_PLL0_DSM_DIAG_M0},
  1362. {0x0004, CMN_PLL0_DSM_DIAG_M1},
  1363. {0x0004, CMN_PLL1_DSM_DIAG_M0},
  1364. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
  1365. {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
  1366. {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1367. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
  1368. {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
  1369. {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
  1370. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
  1371. {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
  1372. {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
  1373. {0x0064, CMN_PLL0_INTDIV_M0},
  1374. {0x0050, CMN_PLL0_INTDIV_M1},
  1375. {0x0050, CMN_PLL1_INTDIV_M0},
  1376. {0x0002, CMN_PLL0_FRACDIVH_M0},
  1377. {0x0002, CMN_PLL0_FRACDIVH_M1},
  1378. {0x0002, CMN_PLL1_FRACDIVH_M0},
  1379. {0x0044, CMN_PLL0_HIGH_THR_M0},
  1380. {0x0036, CMN_PLL0_HIGH_THR_M1},
  1381. {0x0036, CMN_PLL1_HIGH_THR_M0},
  1382. {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
  1383. {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
  1384. {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
  1385. {0x0001, CMN_PLL0_SS_CTRL1_M0},
  1386. {0x0001, CMN_PLL0_SS_CTRL1_M1},
  1387. {0x0001, CMN_PLL1_SS_CTRL1_M0},
  1388. {0x011B, CMN_PLL0_SS_CTRL2_M0},
  1389. {0x011B, CMN_PLL0_SS_CTRL2_M1},
  1390. {0x011B, CMN_PLL1_SS_CTRL2_M0},
  1391. {0x006E, CMN_PLL0_SS_CTRL3_M0},
  1392. {0x0058, CMN_PLL0_SS_CTRL3_M1},
  1393. {0x0058, CMN_PLL1_SS_CTRL3_M0},
  1394. {0x000E, CMN_PLL0_SS_CTRL4_M0},
  1395. {0x0012, CMN_PLL0_SS_CTRL4_M1},
  1396. {0x0012, CMN_PLL1_SS_CTRL4_M0},
  1397. {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
  1398. {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
  1399. {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
  1400. {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
  1401. {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
  1402. {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
  1403. {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
  1404. {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
  1405. {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
  1406. {0x0005, CMN_PLL1_LOCK_PLLCNT_THR}
  1407. };
  1408. static struct cdns_torrent_vals sl_pcie_100_int_ssc_cmn_vals = {
  1409. .reg_pairs = sl_pcie_100_int_ssc_cmn_regs,
  1410. .num_regs = ARRAY_SIZE(sl_pcie_100_int_ssc_cmn_regs),
  1411. };
  1412. /* PCIe, 100 MHz Ref clk, no SSC & external SSC */
  1413. static struct cdns_reg_pairs pcie_100_ext_no_ssc_cmn_regs[] = {
  1414. {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
  1415. {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
  1416. {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0}
  1417. };
  1418. static struct cdns_reg_pairs pcie_100_ext_no_ssc_rx_ln_regs[] = {
  1419. {0x0019, RX_REE_TAP1_CLIP},
  1420. {0x0019, RX_REE_TAP2TON_CLIP},
  1421. {0x0001, RX_DIAG_ACYA}
  1422. };
  1423. static struct cdns_torrent_vals pcie_100_no_ssc_cmn_vals = {
  1424. .reg_pairs = pcie_100_ext_no_ssc_cmn_regs,
  1425. .num_regs = ARRAY_SIZE(pcie_100_ext_no_ssc_cmn_regs),
  1426. };
  1427. static struct cdns_torrent_vals pcie_100_no_ssc_rx_ln_vals = {
  1428. .reg_pairs = pcie_100_ext_no_ssc_rx_ln_regs,
  1429. .num_regs = ARRAY_SIZE(pcie_100_ext_no_ssc_rx_ln_regs),
  1430. };
  1431. static const struct cdns_torrent_data cdns_map_torrent = {
  1432. .block_offset_shift = 0x2,
  1433. .reg_offset_shift = 0x2,
  1434. .link_cmn_vals = {
  1435. [TYPE_PCIE] = {
  1436. [TYPE_NONE] = {
  1437. [NO_SSC] = NULL,
  1438. [EXTERNAL_SSC] = NULL,
  1439. [INTERNAL_SSC] = NULL,
  1440. },
  1441. [TYPE_SGMII] = {
  1442. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1443. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1444. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1445. },
  1446. [TYPE_QSGMII] = {
  1447. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1448. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1449. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1450. },
  1451. [TYPE_USB] = {
  1452. [NO_SSC] = &pcie_usb_link_cmn_vals,
  1453. [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1454. [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1455. },
  1456. },
  1457. [TYPE_SGMII] = {
  1458. [TYPE_NONE] = {
  1459. [NO_SSC] = &sl_sgmii_link_cmn_vals,
  1460. },
  1461. [TYPE_PCIE] = {
  1462. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1463. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1464. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1465. },
  1466. [TYPE_USB] = {
  1467. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1468. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1469. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1470. },
  1471. },
  1472. [TYPE_QSGMII] = {
  1473. [TYPE_NONE] = {
  1474. [NO_SSC] = &sl_sgmii_link_cmn_vals,
  1475. },
  1476. [TYPE_PCIE] = {
  1477. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1478. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1479. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1480. },
  1481. [TYPE_USB] = {
  1482. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1483. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1484. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1485. },
  1486. },
  1487. [TYPE_USB] = {
  1488. [TYPE_NONE] = {
  1489. [NO_SSC] = &sl_usb_link_cmn_vals,
  1490. [EXTERNAL_SSC] = &sl_usb_link_cmn_vals,
  1491. [INTERNAL_SSC] = &sl_usb_link_cmn_vals,
  1492. },
  1493. [TYPE_PCIE] = {
  1494. [NO_SSC] = &pcie_usb_link_cmn_vals,
  1495. [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1496. [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1497. },
  1498. [TYPE_SGMII] = {
  1499. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1500. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1501. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1502. },
  1503. [TYPE_QSGMII] = {
  1504. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1505. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1506. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1507. },
  1508. },
  1509. },
  1510. .xcvr_diag_vals = {
  1511. [TYPE_PCIE] = {
  1512. [TYPE_NONE] = {
  1513. [NO_SSC] = NULL,
  1514. [EXTERNAL_SSC] = NULL,
  1515. [INTERNAL_SSC] = NULL,
  1516. },
  1517. [TYPE_SGMII] = {
  1518. [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1519. [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1520. [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1521. },
  1522. [TYPE_QSGMII] = {
  1523. [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1524. [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1525. [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1526. },
  1527. [TYPE_USB] = {
  1528. [NO_SSC] = &pcie_usb_xcvr_diag_ln_vals,
  1529. [EXTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
  1530. [INTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
  1531. },
  1532. },
  1533. [TYPE_SGMII] = {
  1534. [TYPE_NONE] = {
  1535. [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
  1536. },
  1537. [TYPE_PCIE] = {
  1538. [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1539. [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1540. [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1541. },
  1542. [TYPE_USB] = {
  1543. [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1544. [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1545. [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1546. },
  1547. },
  1548. [TYPE_QSGMII] = {
  1549. [TYPE_NONE] = {
  1550. [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
  1551. },
  1552. [TYPE_PCIE] = {
  1553. [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1554. [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1555. [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1556. },
  1557. [TYPE_USB] = {
  1558. [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1559. [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1560. [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1561. },
  1562. },
  1563. [TYPE_USB] = {
  1564. [TYPE_NONE] = {
  1565. [NO_SSC] = &sl_usb_xcvr_diag_ln_vals,
  1566. [EXTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
  1567. [INTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
  1568. },
  1569. [TYPE_PCIE] = {
  1570. [NO_SSC] = &usb_pcie_xcvr_diag_ln_vals,
  1571. [EXTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
  1572. [INTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
  1573. },
  1574. [TYPE_SGMII] = {
  1575. [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1576. [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1577. [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1578. },
  1579. [TYPE_QSGMII] = {
  1580. [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1581. [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1582. [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1583. },
  1584. },
  1585. },
  1586. .pcs_cmn_vals = {
  1587. [TYPE_USB] = {
  1588. [TYPE_NONE] = {
  1589. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  1590. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1591. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1592. },
  1593. [TYPE_PCIE] = {
  1594. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  1595. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1596. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1597. },
  1598. [TYPE_SGMII] = {
  1599. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  1600. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1601. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1602. },
  1603. [TYPE_QSGMII] = {
  1604. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  1605. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1606. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1607. },
  1608. },
  1609. },
  1610. .cmn_vals = {
  1611. [TYPE_PCIE] = {
  1612. [TYPE_NONE] = {
  1613. [NO_SSC] = NULL,
  1614. [EXTERNAL_SSC] = NULL,
  1615. [INTERNAL_SSC] = &sl_pcie_100_int_ssc_cmn_vals,
  1616. },
  1617. [TYPE_SGMII] = {
  1618. [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
  1619. [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
  1620. [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
  1621. },
  1622. [TYPE_QSGMII] = {
  1623. [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
  1624. [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
  1625. [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
  1626. },
  1627. [TYPE_USB] = {
  1628. [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
  1629. [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
  1630. [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
  1631. },
  1632. },
  1633. [TYPE_SGMII] = {
  1634. [TYPE_NONE] = {
  1635. [NO_SSC] = &sl_sgmii_100_no_ssc_cmn_vals,
  1636. },
  1637. [TYPE_PCIE] = {
  1638. [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
  1639. [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
  1640. [INTERNAL_SSC] = &sgmii_100_int_ssc_cmn_vals,
  1641. },
  1642. [TYPE_USB] = {
  1643. [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
  1644. [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
  1645. [INTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
  1646. },
  1647. },
  1648. [TYPE_QSGMII] = {
  1649. [TYPE_NONE] = {
  1650. [NO_SSC] = &sl_qsgmii_100_no_ssc_cmn_vals,
  1651. },
  1652. [TYPE_PCIE] = {
  1653. [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  1654. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  1655. [INTERNAL_SSC] = &qsgmii_100_int_ssc_cmn_vals,
  1656. },
  1657. [TYPE_USB] = {
  1658. [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  1659. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  1660. [INTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  1661. },
  1662. },
  1663. [TYPE_USB] = {
  1664. [TYPE_NONE] = {
  1665. [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  1666. [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  1667. [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
  1668. },
  1669. [TYPE_PCIE] = {
  1670. [NO_SSC] = &usb_100_no_ssc_cmn_vals,
  1671. [EXTERNAL_SSC] = &usb_100_no_ssc_cmn_vals,
  1672. [INTERNAL_SSC] = &usb_100_int_ssc_cmn_vals,
  1673. },
  1674. [TYPE_SGMII] = {
  1675. [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  1676. [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  1677. [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
  1678. },
  1679. [TYPE_QSGMII] = {
  1680. [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  1681. [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  1682. [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
  1683. },
  1684. },
  1685. },
  1686. .tx_ln_vals = {
  1687. [TYPE_PCIE] = {
  1688. [TYPE_NONE] = {
  1689. [NO_SSC] = NULL,
  1690. [EXTERNAL_SSC] = NULL,
  1691. [INTERNAL_SSC] = NULL,
  1692. },
  1693. [TYPE_SGMII] = {
  1694. [NO_SSC] = NULL,
  1695. [EXTERNAL_SSC] = NULL,
  1696. [INTERNAL_SSC] = NULL,
  1697. },
  1698. [TYPE_QSGMII] = {
  1699. [NO_SSC] = NULL,
  1700. [EXTERNAL_SSC] = NULL,
  1701. [INTERNAL_SSC] = NULL,
  1702. },
  1703. [TYPE_USB] = {
  1704. [NO_SSC] = NULL,
  1705. [EXTERNAL_SSC] = NULL,
  1706. [INTERNAL_SSC] = NULL,
  1707. },
  1708. },
  1709. [TYPE_SGMII] = {
  1710. [TYPE_NONE] = {
  1711. [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1712. },
  1713. [TYPE_PCIE] = {
  1714. [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1715. [EXTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1716. [INTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1717. },
  1718. [TYPE_USB] = {
  1719. [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1720. [EXTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1721. [INTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
  1722. },
  1723. },
  1724. [TYPE_QSGMII] = {
  1725. [TYPE_NONE] = {
  1726. [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1727. },
  1728. [TYPE_PCIE] = {
  1729. [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1730. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1731. [INTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1732. },
  1733. [TYPE_USB] = {
  1734. [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1735. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1736. [INTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
  1737. },
  1738. },
  1739. [TYPE_USB] = {
  1740. [TYPE_NONE] = {
  1741. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1742. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1743. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1744. },
  1745. [TYPE_PCIE] = {
  1746. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1747. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1748. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1749. },
  1750. [TYPE_SGMII] = {
  1751. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1752. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1753. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1754. },
  1755. [TYPE_QSGMII] = {
  1756. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1757. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1758. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  1759. },
  1760. },
  1761. },
  1762. .rx_ln_vals = {
  1763. [TYPE_PCIE] = {
  1764. [TYPE_NONE] = {
  1765. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1766. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1767. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1768. },
  1769. [TYPE_SGMII] = {
  1770. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1771. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1772. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1773. },
  1774. [TYPE_QSGMII] = {
  1775. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1776. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1777. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1778. },
  1779. [TYPE_USB] = {
  1780. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1781. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1782. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  1783. },
  1784. },
  1785. [TYPE_SGMII] = {
  1786. [TYPE_NONE] = {
  1787. [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1788. },
  1789. [TYPE_PCIE] = {
  1790. [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1791. [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1792. [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1793. },
  1794. [TYPE_USB] = {
  1795. [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1796. [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1797. [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  1798. },
  1799. },
  1800. [TYPE_QSGMII] = {
  1801. [TYPE_NONE] = {
  1802. [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1803. },
  1804. [TYPE_PCIE] = {
  1805. [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1806. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1807. [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1808. },
  1809. [TYPE_USB] = {
  1810. [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1811. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1812. [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  1813. },
  1814. },
  1815. [TYPE_USB] = {
  1816. [TYPE_NONE] = {
  1817. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1818. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1819. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1820. },
  1821. [TYPE_PCIE] = {
  1822. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1823. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1824. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1825. },
  1826. [TYPE_SGMII] = {
  1827. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1828. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1829. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1830. },
  1831. [TYPE_QSGMII] = {
  1832. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1833. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1834. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  1835. },
  1836. },
  1837. },
  1838. };
  1839. static const struct cdns_torrent_data ti_j721e_map_torrent = {
  1840. .block_offset_shift = 0x0,
  1841. .reg_offset_shift = 0x1,
  1842. .link_cmn_vals = {
  1843. [TYPE_PCIE] = {
  1844. [TYPE_NONE] = {
  1845. [NO_SSC] = NULL,
  1846. [EXTERNAL_SSC] = NULL,
  1847. [INTERNAL_SSC] = NULL,
  1848. },
  1849. [TYPE_SGMII] = {
  1850. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1851. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1852. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1853. },
  1854. [TYPE_QSGMII] = {
  1855. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1856. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1857. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1858. },
  1859. [TYPE_USB] = {
  1860. [NO_SSC] = &pcie_usb_link_cmn_vals,
  1861. [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1862. [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1863. },
  1864. },
  1865. [TYPE_SGMII] = {
  1866. [TYPE_NONE] = {
  1867. [NO_SSC] = &sl_sgmii_link_cmn_vals,
  1868. },
  1869. [TYPE_PCIE] = {
  1870. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1871. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1872. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1873. },
  1874. [TYPE_USB] = {
  1875. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1876. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1877. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1878. },
  1879. },
  1880. [TYPE_QSGMII] = {
  1881. [TYPE_NONE] = {
  1882. [NO_SSC] = &sl_sgmii_link_cmn_vals,
  1883. },
  1884. [TYPE_PCIE] = {
  1885. [NO_SSC] = &pcie_sgmii_link_cmn_vals,
  1886. [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1887. [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
  1888. },
  1889. [TYPE_USB] = {
  1890. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1891. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1892. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1893. },
  1894. },
  1895. [TYPE_USB] = {
  1896. [TYPE_NONE] = {
  1897. [NO_SSC] = &sl_usb_link_cmn_vals,
  1898. [EXTERNAL_SSC] = &sl_usb_link_cmn_vals,
  1899. [INTERNAL_SSC] = &sl_usb_link_cmn_vals,
  1900. },
  1901. [TYPE_PCIE] = {
  1902. [NO_SSC] = &pcie_usb_link_cmn_vals,
  1903. [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1904. [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
  1905. },
  1906. [TYPE_SGMII] = {
  1907. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1908. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1909. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1910. },
  1911. [TYPE_QSGMII] = {
  1912. [NO_SSC] = &usb_sgmii_link_cmn_vals,
  1913. [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1914. [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
  1915. },
  1916. },
  1917. },
  1918. .xcvr_diag_vals = {
  1919. [TYPE_PCIE] = {
  1920. [TYPE_NONE] = {
  1921. [NO_SSC] = NULL,
  1922. [EXTERNAL_SSC] = NULL,
  1923. [INTERNAL_SSC] = NULL,
  1924. },
  1925. [TYPE_SGMII] = {
  1926. [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1927. [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1928. [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1929. },
  1930. [TYPE_QSGMII] = {
  1931. [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1932. [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1933. [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
  1934. },
  1935. [TYPE_USB] = {
  1936. [NO_SSC] = &pcie_usb_xcvr_diag_ln_vals,
  1937. [EXTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
  1938. [INTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
  1939. },
  1940. },
  1941. [TYPE_SGMII] = {
  1942. [TYPE_NONE] = {
  1943. [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
  1944. },
  1945. [TYPE_PCIE] = {
  1946. [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1947. [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1948. [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1949. },
  1950. [TYPE_USB] = {
  1951. [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1952. [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1953. [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1954. },
  1955. },
  1956. [TYPE_QSGMII] = {
  1957. [TYPE_NONE] = {
  1958. [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
  1959. },
  1960. [TYPE_PCIE] = {
  1961. [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1962. [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1963. [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
  1964. },
  1965. [TYPE_USB] = {
  1966. [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1967. [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1968. [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
  1969. },
  1970. },
  1971. [TYPE_USB] = {
  1972. [TYPE_NONE] = {
  1973. [NO_SSC] = &sl_usb_xcvr_diag_ln_vals,
  1974. [EXTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
  1975. [INTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
  1976. },
  1977. [TYPE_PCIE] = {
  1978. [NO_SSC] = &usb_pcie_xcvr_diag_ln_vals,
  1979. [EXTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
  1980. [INTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
  1981. },
  1982. [TYPE_SGMII] = {
  1983. [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1984. [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1985. [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1986. },
  1987. [TYPE_QSGMII] = {
  1988. [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1989. [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1990. [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
  1991. },
  1992. },
  1993. },
  1994. .pcs_cmn_vals = {
  1995. [TYPE_USB] = {
  1996. [TYPE_NONE] = {
  1997. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  1998. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  1999. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2000. },
  2001. [TYPE_PCIE] = {
  2002. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  2003. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2004. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2005. },
  2006. [TYPE_SGMII] = {
  2007. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  2008. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2009. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2010. },
  2011. [TYPE_QSGMII] = {
  2012. [NO_SSC] = &usb_phy_pcs_cmn_vals,
  2013. [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2014. [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
  2015. },
  2016. },
  2017. },
  2018. .cmn_vals = {
  2019. [TYPE_PCIE] = {
  2020. [TYPE_NONE] = {
  2021. [NO_SSC] = NULL,
  2022. [EXTERNAL_SSC] = NULL,
  2023. [INTERNAL_SSC] = &sl_pcie_100_int_ssc_cmn_vals,
  2024. },
  2025. [TYPE_SGMII] = {
  2026. [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
  2027. [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
  2028. [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
  2029. },
  2030. [TYPE_QSGMII] = {
  2031. [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
  2032. [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
  2033. [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
  2034. },
  2035. [TYPE_USB] = {
  2036. [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
  2037. [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
  2038. [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
  2039. },
  2040. },
  2041. [TYPE_SGMII] = {
  2042. [TYPE_NONE] = {
  2043. [NO_SSC] = &sl_sgmii_100_no_ssc_cmn_vals,
  2044. },
  2045. [TYPE_PCIE] = {
  2046. [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
  2047. [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
  2048. [INTERNAL_SSC] = &sgmii_100_int_ssc_cmn_vals,
  2049. },
  2050. [TYPE_USB] = {
  2051. [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
  2052. [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
  2053. [INTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
  2054. },
  2055. },
  2056. [TYPE_QSGMII] = {
  2057. [TYPE_NONE] = {
  2058. [NO_SSC] = &sl_qsgmii_100_no_ssc_cmn_vals,
  2059. },
  2060. [TYPE_PCIE] = {
  2061. [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  2062. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  2063. [INTERNAL_SSC] = &qsgmii_100_int_ssc_cmn_vals,
  2064. },
  2065. [TYPE_USB] = {
  2066. [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  2067. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  2068. [INTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
  2069. },
  2070. },
  2071. [TYPE_USB] = {
  2072. [TYPE_NONE] = {
  2073. [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  2074. [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  2075. [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
  2076. },
  2077. [TYPE_PCIE] = {
  2078. [NO_SSC] = &usb_100_no_ssc_cmn_vals,
  2079. [EXTERNAL_SSC] = &usb_100_no_ssc_cmn_vals,
  2080. [INTERNAL_SSC] = &usb_100_int_ssc_cmn_vals,
  2081. },
  2082. [TYPE_SGMII] = {
  2083. [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  2084. [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  2085. [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
  2086. },
  2087. [TYPE_QSGMII] = {
  2088. [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  2089. [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
  2090. [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
  2091. },
  2092. },
  2093. },
  2094. .tx_ln_vals = {
  2095. [TYPE_PCIE] = {
  2096. [TYPE_NONE] = {
  2097. [NO_SSC] = NULL,
  2098. [EXTERNAL_SSC] = NULL,
  2099. [INTERNAL_SSC] = NULL,
  2100. },
  2101. [TYPE_SGMII] = {
  2102. [NO_SSC] = NULL,
  2103. [EXTERNAL_SSC] = NULL,
  2104. [INTERNAL_SSC] = NULL,
  2105. },
  2106. [TYPE_QSGMII] = {
  2107. [NO_SSC] = NULL,
  2108. [EXTERNAL_SSC] = NULL,
  2109. [INTERNAL_SSC] = NULL,
  2110. },
  2111. [TYPE_USB] = {
  2112. [NO_SSC] = NULL,
  2113. [EXTERNAL_SSC] = NULL,
  2114. [INTERNAL_SSC] = NULL,
  2115. },
  2116. },
  2117. [TYPE_SGMII] = {
  2118. [TYPE_NONE] = {
  2119. [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2120. },
  2121. [TYPE_PCIE] = {
  2122. [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2123. [EXTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2124. [INTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2125. },
  2126. [TYPE_USB] = {
  2127. [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2128. [EXTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2129. [INTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
  2130. },
  2131. },
  2132. [TYPE_QSGMII] = {
  2133. [TYPE_NONE] = {
  2134. [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2135. },
  2136. [TYPE_PCIE] = {
  2137. [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2138. [EXTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2139. [INTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2140. },
  2141. [TYPE_USB] = {
  2142. [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2143. [EXTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2144. [INTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
  2145. },
  2146. },
  2147. [TYPE_USB] = {
  2148. [TYPE_NONE] = {
  2149. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2150. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2151. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2152. },
  2153. [TYPE_PCIE] = {
  2154. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2155. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2156. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2157. },
  2158. [TYPE_SGMII] = {
  2159. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2160. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2161. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2162. },
  2163. [TYPE_QSGMII] = {
  2164. [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2165. [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2166. [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
  2167. },
  2168. },
  2169. },
  2170. .rx_ln_vals = {
  2171. [TYPE_PCIE] = {
  2172. [TYPE_NONE] = {
  2173. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2174. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2175. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2176. },
  2177. [TYPE_SGMII] = {
  2178. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2179. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2180. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2181. },
  2182. [TYPE_QSGMII] = {
  2183. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2184. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2185. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2186. },
  2187. [TYPE_USB] = {
  2188. [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2189. [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2190. [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
  2191. },
  2192. },
  2193. [TYPE_SGMII] = {
  2194. [TYPE_NONE] = {
  2195. [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2196. },
  2197. [TYPE_PCIE] = {
  2198. [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2199. [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2200. [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2201. },
  2202. [TYPE_USB] = {
  2203. [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2204. [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2205. [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
  2206. },
  2207. },
  2208. [TYPE_QSGMII] = {
  2209. [TYPE_NONE] = {
  2210. [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2211. },
  2212. [TYPE_PCIE] = {
  2213. [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2214. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2215. [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2216. },
  2217. [TYPE_USB] = {
  2218. [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2219. [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2220. [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
  2221. },
  2222. },
  2223. [TYPE_USB] = {
  2224. [TYPE_NONE] = {
  2225. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2226. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2227. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2228. },
  2229. [TYPE_PCIE] = {
  2230. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2231. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2232. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2233. },
  2234. [TYPE_SGMII] = {
  2235. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2236. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2237. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2238. },
  2239. [TYPE_QSGMII] = {
  2240. [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2241. [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2242. [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
  2243. },
  2244. },
  2245. },
  2246. };
  2247. static int cdns_torrent_phy_reset(struct phy *gphy)
  2248. {
  2249. struct cdns_torrent_phy *sp = dev_get_priv(gphy->dev);
  2250. reset_control_assert(sp->phy_rst);
  2251. reset_control_deassert(sp->phy_rst);
  2252. return 0;
  2253. }
  2254. static const struct udevice_id cdns_torrent_id_table[] = {
  2255. {
  2256. .compatible = "cdns,torrent-phy",
  2257. .data = (ulong)&cdns_map_torrent,
  2258. },
  2259. {
  2260. .compatible = "ti,j721e-serdes-10g",
  2261. .data = (ulong)&ti_j721e_map_torrent,
  2262. },
  2263. {}
  2264. };
  2265. static const struct phy_ops cdns_torrent_phy_ops = {
  2266. .init = cdns_torrent_phy_init,
  2267. .power_on = cdns_torrent_phy_on,
  2268. .power_off = cdns_torrent_phy_off,
  2269. .reset = cdns_torrent_phy_reset,
  2270. };
  2271. U_BOOT_DRIVER(torrent_phy_provider) = {
  2272. .name = "cdns,torrent",
  2273. .id = UCLASS_PHY,
  2274. .of_match = cdns_torrent_id_table,
  2275. .probe = cdns_torrent_phy_probe,
  2276. .remove = cdns_torrent_phy_remove,
  2277. .ops = &cdns_torrent_phy_ops,
  2278. .priv_auto = sizeof(struct cdns_torrent_phy),
  2279. };