xgbe-phy-v2.c 84 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234
  1. /*
  2. * AMD 10Gb Ethernet driver
  3. *
  4. * This file is available to you under your choice of the following two
  5. * licenses:
  6. *
  7. * License 1: GPLv2
  8. *
  9. * Copyright (c) 2016 Advanced Micro Devices, Inc.
  10. *
  11. * This file is free software; you may copy, redistribute and/or modify
  12. * it under the terms of the GNU General Public License as published by
  13. * the Free Software Foundation, either version 2 of the License, or (at
  14. * your option) any later version.
  15. *
  16. * This file is distributed in the hope that it will be useful, but
  17. * WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19. * General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU General Public License
  22. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  23. *
  24. * This file incorporates work covered by the following copyright and
  25. * permission notice:
  26. * The Synopsys DWC ETHER XGMAC Software Driver and documentation
  27. * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
  28. * Inc. unless otherwise expressly agreed to in writing between Synopsys
  29. * and you.
  30. *
  31. * The Software IS NOT an item of Licensed Software or Licensed Product
  32. * under any End User Software License Agreement or Agreement for Licensed
  33. * Product with Synopsys or any supplement thereto. Permission is hereby
  34. * granted, free of charge, to any person obtaining a copy of this software
  35. * annotated with this license and the Software, to deal in the Software
  36. * without restriction, including without limitation the rights to use,
  37. * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
  38. * of the Software, and to permit persons to whom the Software is furnished
  39. * to do so, subject to the following conditions:
  40. *
  41. * The above copyright notice and this permission notice shall be included
  42. * in all copies or substantial portions of the Software.
  43. *
  44. * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
  45. * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  46. * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  47. * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
  48. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  49. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  50. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  51. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  52. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  53. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  54. * THE POSSIBILITY OF SUCH DAMAGE.
  55. *
  56. *
  57. * License 2: Modified BSD
  58. *
  59. * Copyright (c) 2016 Advanced Micro Devices, Inc.
  60. * All rights reserved.
  61. *
  62. * Redistribution and use in source and binary forms, with or without
  63. * modification, are permitted provided that the following conditions are met:
  64. * * Redistributions of source code must retain the above copyright
  65. * notice, this list of conditions and the following disclaimer.
  66. * * Redistributions in binary form must reproduce the above copyright
  67. * notice, this list of conditions and the following disclaimer in the
  68. * documentation and/or other materials provided with the distribution.
  69. * * Neither the name of Advanced Micro Devices, Inc. nor the
  70. * names of its contributors may be used to endorse or promote products
  71. * derived from this software without specific prior written permission.
  72. *
  73. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  74. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  75. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  76. * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
  77. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  78. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  79. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  80. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  81. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  82. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  83. *
  84. * This file incorporates work covered by the following copyright and
  85. * permission notice:
  86. * The Synopsys DWC ETHER XGMAC Software Driver and documentation
  87. * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
  88. * Inc. unless otherwise expressly agreed to in writing between Synopsys
  89. * and you.
  90. *
  91. * The Software IS NOT an item of Licensed Software or Licensed Product
  92. * under any End User Software License Agreement or Agreement for Licensed
  93. * Product with Synopsys or any supplement thereto. Permission is hereby
  94. * granted, free of charge, to any person obtaining a copy of this software
  95. * annotated with this license and the Software, to deal in the Software
  96. * without restriction, including without limitation the rights to use,
  97. * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
  98. * of the Software, and to permit persons to whom the Software is furnished
  99. * to do so, subject to the following conditions:
  100. *
  101. * The above copyright notice and this permission notice shall be included
  102. * in all copies or substantial portions of the Software.
  103. *
  104. * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
  105. * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  106. * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  107. * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
  108. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  109. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  110. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  111. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  112. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  113. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  114. * THE POSSIBILITY OF SUCH DAMAGE.
  115. */
  116. #include <linux/module.h>
  117. #include <linux/device.h>
  118. #include <linux/kmod.h>
  119. #include <linux/mdio.h>
  120. #include <linux/phy.h>
  121. #include "xgbe.h"
  122. #include "xgbe-common.h"
  123. #define XGBE_PHY_PORT_SPEED_100 BIT(0)
  124. #define XGBE_PHY_PORT_SPEED_1000 BIT(1)
  125. #define XGBE_PHY_PORT_SPEED_2500 BIT(2)
  126. #define XGBE_PHY_PORT_SPEED_10000 BIT(3)
  127. #define XGBE_MUTEX_RELEASE 0x80000000
  128. #define XGBE_SFP_DIRECT 7
  129. /* I2C target addresses */
  130. #define XGBE_SFP_SERIAL_ID_ADDRESS 0x50
  131. #define XGBE_SFP_DIAG_INFO_ADDRESS 0x51
  132. #define XGBE_SFP_PHY_ADDRESS 0x56
  133. #define XGBE_GPIO_ADDRESS_PCA9555 0x20
  134. /* SFP sideband signal indicators */
  135. #define XGBE_GPIO_NO_TX_FAULT BIT(0)
  136. #define XGBE_GPIO_NO_RATE_SELECT BIT(1)
  137. #define XGBE_GPIO_NO_MOD_ABSENT BIT(2)
  138. #define XGBE_GPIO_NO_RX_LOS BIT(3)
  139. /* Rate-change complete wait/retry count */
  140. #define XGBE_RATECHANGE_COUNT 500
  141. /* CDR delay values for KR support (in usec) */
  142. #define XGBE_CDR_DELAY_INIT 10000
  143. #define XGBE_CDR_DELAY_INC 10000
  144. #define XGBE_CDR_DELAY_MAX 100000
  145. /* RRC frequency during link status check */
  146. #define XGBE_RRC_FREQUENCY 10
  147. enum xgbe_port_mode {
  148. XGBE_PORT_MODE_RSVD = 0,
  149. XGBE_PORT_MODE_BACKPLANE,
  150. XGBE_PORT_MODE_BACKPLANE_2500,
  151. XGBE_PORT_MODE_1000BASE_T,
  152. XGBE_PORT_MODE_1000BASE_X,
  153. XGBE_PORT_MODE_NBASE_T,
  154. XGBE_PORT_MODE_10GBASE_T,
  155. XGBE_PORT_MODE_10GBASE_R,
  156. XGBE_PORT_MODE_SFP,
  157. XGBE_PORT_MODE_MAX,
  158. };
  159. enum xgbe_conn_type {
  160. XGBE_CONN_TYPE_NONE = 0,
  161. XGBE_CONN_TYPE_SFP,
  162. XGBE_CONN_TYPE_MDIO,
  163. XGBE_CONN_TYPE_RSVD1,
  164. XGBE_CONN_TYPE_BACKPLANE,
  165. XGBE_CONN_TYPE_MAX,
  166. };
  167. /* SFP/SFP+ related definitions */
  168. enum xgbe_sfp_comm {
  169. XGBE_SFP_COMM_DIRECT = 0,
  170. XGBE_SFP_COMM_PCA9545,
  171. };
  172. enum xgbe_sfp_cable {
  173. XGBE_SFP_CABLE_UNKNOWN = 0,
  174. XGBE_SFP_CABLE_ACTIVE,
  175. XGBE_SFP_CABLE_PASSIVE,
  176. };
  177. enum xgbe_sfp_base {
  178. XGBE_SFP_BASE_UNKNOWN = 0,
  179. XGBE_SFP_BASE_1000_T,
  180. XGBE_SFP_BASE_1000_SX,
  181. XGBE_SFP_BASE_1000_LX,
  182. XGBE_SFP_BASE_1000_CX,
  183. XGBE_SFP_BASE_10000_SR,
  184. XGBE_SFP_BASE_10000_LR,
  185. XGBE_SFP_BASE_10000_LRM,
  186. XGBE_SFP_BASE_10000_ER,
  187. XGBE_SFP_BASE_10000_CR,
  188. };
  189. enum xgbe_sfp_speed {
  190. XGBE_SFP_SPEED_UNKNOWN = 0,
  191. XGBE_SFP_SPEED_100_1000,
  192. XGBE_SFP_SPEED_1000,
  193. XGBE_SFP_SPEED_10000,
  194. };
  195. /* SFP Serial ID Base ID values relative to an offset of 0 */
  196. #define XGBE_SFP_BASE_ID 0
  197. #define XGBE_SFP_ID_SFP 0x03
  198. #define XGBE_SFP_BASE_EXT_ID 1
  199. #define XGBE_SFP_EXT_ID_SFP 0x04
  200. #define XGBE_SFP_BASE_10GBE_CC 3
  201. #define XGBE_SFP_BASE_10GBE_CC_SR BIT(4)
  202. #define XGBE_SFP_BASE_10GBE_CC_LR BIT(5)
  203. #define XGBE_SFP_BASE_10GBE_CC_LRM BIT(6)
  204. #define XGBE_SFP_BASE_10GBE_CC_ER BIT(7)
  205. #define XGBE_SFP_BASE_1GBE_CC 6
  206. #define XGBE_SFP_BASE_1GBE_CC_SX BIT(0)
  207. #define XGBE_SFP_BASE_1GBE_CC_LX BIT(1)
  208. #define XGBE_SFP_BASE_1GBE_CC_CX BIT(2)
  209. #define XGBE_SFP_BASE_1GBE_CC_T BIT(3)
  210. #define XGBE_SFP_BASE_CABLE 8
  211. #define XGBE_SFP_BASE_CABLE_PASSIVE BIT(2)
  212. #define XGBE_SFP_BASE_CABLE_ACTIVE BIT(3)
  213. #define XGBE_SFP_BASE_BR 12
  214. #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a
  215. #define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d
  216. #define XGBE_SFP_BASE_BR_10GBE_MIN 0x64
  217. #define XGBE_SFP_BASE_BR_10GBE_MAX 0x68
  218. #define XGBE_SFP_BASE_CU_CABLE_LEN 18
  219. #define XGBE_SFP_BASE_VENDOR_NAME 20
  220. #define XGBE_SFP_BASE_VENDOR_NAME_LEN 16
  221. #define XGBE_SFP_BASE_VENDOR_PN 40
  222. #define XGBE_SFP_BASE_VENDOR_PN_LEN 16
  223. #define XGBE_SFP_BASE_VENDOR_REV 56
  224. #define XGBE_SFP_BASE_VENDOR_REV_LEN 4
  225. #define XGBE_SFP_BASE_CC 63
  226. /* SFP Serial ID Extended ID values relative to an offset of 64 */
  227. #define XGBE_SFP_BASE_VENDOR_SN 4
  228. #define XGBE_SFP_BASE_VENDOR_SN_LEN 16
  229. #define XGBE_SFP_EXTD_OPT1 1
  230. #define XGBE_SFP_EXTD_OPT1_RX_LOS BIT(1)
  231. #define XGBE_SFP_EXTD_OPT1_TX_FAULT BIT(3)
  232. #define XGBE_SFP_EXTD_DIAG 28
  233. #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE BIT(2)
  234. #define XGBE_SFP_EXTD_SFF_8472 30
  235. #define XGBE_SFP_EXTD_CC 31
  236. struct xgbe_sfp_eeprom {
  237. u8 base[64];
  238. u8 extd[32];
  239. u8 vendor[32];
  240. };
  241. #define XGBE_BEL_FUSE_VENDOR "BEL-FUSE "
  242. #define XGBE_BEL_FUSE_PARTNO "1GBT-SFP06 "
  243. struct xgbe_sfp_ascii {
  244. union {
  245. char vendor[XGBE_SFP_BASE_VENDOR_NAME_LEN + 1];
  246. char partno[XGBE_SFP_BASE_VENDOR_PN_LEN + 1];
  247. char rev[XGBE_SFP_BASE_VENDOR_REV_LEN + 1];
  248. char serno[XGBE_SFP_BASE_VENDOR_SN_LEN + 1];
  249. } u;
  250. };
  251. /* MDIO PHY reset types */
  252. enum xgbe_mdio_reset {
  253. XGBE_MDIO_RESET_NONE = 0,
  254. XGBE_MDIO_RESET_I2C_GPIO,
  255. XGBE_MDIO_RESET_INT_GPIO,
  256. XGBE_MDIO_RESET_MAX,
  257. };
  258. /* Re-driver related definitions */
  259. enum xgbe_phy_redrv_if {
  260. XGBE_PHY_REDRV_IF_MDIO = 0,
  261. XGBE_PHY_REDRV_IF_I2C,
  262. XGBE_PHY_REDRV_IF_MAX,
  263. };
  264. enum xgbe_phy_redrv_model {
  265. XGBE_PHY_REDRV_MODEL_4223 = 0,
  266. XGBE_PHY_REDRV_MODEL_4227,
  267. XGBE_PHY_REDRV_MODEL_MAX,
  268. };
  269. enum xgbe_phy_redrv_mode {
  270. XGBE_PHY_REDRV_MODE_CX = 5,
  271. XGBE_PHY_REDRV_MODE_SR = 9,
  272. };
  273. #define XGBE_PHY_REDRV_MODE_REG 0x12b0
  274. /* PHY related configuration information */
  275. struct xgbe_phy_data {
  276. enum xgbe_port_mode port_mode;
  277. unsigned int port_id;
  278. unsigned int port_speeds;
  279. enum xgbe_conn_type conn_type;
  280. enum xgbe_mode cur_mode;
  281. enum xgbe_mode start_mode;
  282. unsigned int rrc_count;
  283. unsigned int mdio_addr;
  284. unsigned int comm_owned;
  285. /* SFP Support */
  286. enum xgbe_sfp_comm sfp_comm;
  287. unsigned int sfp_mux_address;
  288. unsigned int sfp_mux_channel;
  289. unsigned int sfp_gpio_address;
  290. unsigned int sfp_gpio_mask;
  291. unsigned int sfp_gpio_inputs;
  292. unsigned int sfp_gpio_rx_los;
  293. unsigned int sfp_gpio_tx_fault;
  294. unsigned int sfp_gpio_mod_absent;
  295. unsigned int sfp_gpio_rate_select;
  296. unsigned int sfp_rx_los;
  297. unsigned int sfp_tx_fault;
  298. unsigned int sfp_mod_absent;
  299. unsigned int sfp_diags;
  300. unsigned int sfp_changed;
  301. unsigned int sfp_phy_avail;
  302. unsigned int sfp_cable_len;
  303. enum xgbe_sfp_base sfp_base;
  304. enum xgbe_sfp_cable sfp_cable;
  305. enum xgbe_sfp_speed sfp_speed;
  306. struct xgbe_sfp_eeprom sfp_eeprom;
  307. /* External PHY support */
  308. enum xgbe_mdio_mode phydev_mode;
  309. struct mii_bus *mii;
  310. struct phy_device *phydev;
  311. enum xgbe_mdio_reset mdio_reset;
  312. unsigned int mdio_reset_addr;
  313. unsigned int mdio_reset_gpio;
  314. /* Re-driver support */
  315. unsigned int redrv;
  316. unsigned int redrv_if;
  317. unsigned int redrv_addr;
  318. unsigned int redrv_lane;
  319. unsigned int redrv_model;
  320. /* KR AN support */
  321. unsigned int phy_cdr_notrack;
  322. unsigned int phy_cdr_delay;
  323. };
  324. /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */
  325. static DEFINE_MUTEX(xgbe_phy_comm_lock);
  326. static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata);
  327. static int xgbe_phy_i2c_xfer(struct xgbe_prv_data *pdata,
  328. struct xgbe_i2c_op *i2c_op)
  329. {
  330. struct xgbe_phy_data *phy_data = pdata->phy_data;
  331. /* Be sure we own the bus */
  332. if (WARN_ON(!phy_data->comm_owned))
  333. return -EIO;
  334. return pdata->i2c_if.i2c_xfer(pdata, i2c_op);
  335. }
  336. static int xgbe_phy_redrv_write(struct xgbe_prv_data *pdata, unsigned int reg,
  337. unsigned int val)
  338. {
  339. struct xgbe_phy_data *phy_data = pdata->phy_data;
  340. struct xgbe_i2c_op i2c_op;
  341. __be16 *redrv_val;
  342. u8 redrv_data[5], csum;
  343. unsigned int i, retry;
  344. int ret;
  345. /* High byte of register contains read/write indicator */
  346. redrv_data[0] = ((reg >> 8) & 0xff) << 1;
  347. redrv_data[1] = reg & 0xff;
  348. redrv_val = (__be16 *)&redrv_data[2];
  349. *redrv_val = cpu_to_be16(val);
  350. /* Calculate 1 byte checksum */
  351. csum = 0;
  352. for (i = 0; i < 4; i++) {
  353. csum += redrv_data[i];
  354. if (redrv_data[i] > csum)
  355. csum++;
  356. }
  357. redrv_data[4] = ~csum;
  358. retry = 1;
  359. again1:
  360. i2c_op.cmd = XGBE_I2C_CMD_WRITE;
  361. i2c_op.target = phy_data->redrv_addr;
  362. i2c_op.len = sizeof(redrv_data);
  363. i2c_op.buf = redrv_data;
  364. ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
  365. if (ret) {
  366. if ((ret == -EAGAIN) && retry--)
  367. goto again1;
  368. return ret;
  369. }
  370. retry = 1;
  371. again2:
  372. i2c_op.cmd = XGBE_I2C_CMD_READ;
  373. i2c_op.target = phy_data->redrv_addr;
  374. i2c_op.len = 1;
  375. i2c_op.buf = redrv_data;
  376. ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
  377. if (ret) {
  378. if ((ret == -EAGAIN) && retry--)
  379. goto again2;
  380. return ret;
  381. }
  382. if (redrv_data[0] != 0xff) {
  383. netif_dbg(pdata, drv, pdata->netdev,
  384. "Redriver write checksum error\n");
  385. ret = -EIO;
  386. }
  387. return ret;
  388. }
  389. static int xgbe_phy_i2c_write(struct xgbe_prv_data *pdata, unsigned int target,
  390. void *val, unsigned int val_len)
  391. {
  392. struct xgbe_i2c_op i2c_op;
  393. int retry, ret;
  394. retry = 1;
  395. again:
  396. /* Write the specfied register */
  397. i2c_op.cmd = XGBE_I2C_CMD_WRITE;
  398. i2c_op.target = target;
  399. i2c_op.len = val_len;
  400. i2c_op.buf = val;
  401. ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
  402. if ((ret == -EAGAIN) && retry--)
  403. goto again;
  404. return ret;
  405. }
  406. static int xgbe_phy_i2c_read(struct xgbe_prv_data *pdata, unsigned int target,
  407. void *reg, unsigned int reg_len,
  408. void *val, unsigned int val_len)
  409. {
  410. struct xgbe_i2c_op i2c_op;
  411. int retry, ret;
  412. retry = 1;
  413. again1:
  414. /* Set the specified register to read */
  415. i2c_op.cmd = XGBE_I2C_CMD_WRITE;
  416. i2c_op.target = target;
  417. i2c_op.len = reg_len;
  418. i2c_op.buf = reg;
  419. ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
  420. if (ret) {
  421. if ((ret == -EAGAIN) && retry--)
  422. goto again1;
  423. return ret;
  424. }
  425. retry = 1;
  426. again2:
  427. /* Read the specfied register */
  428. i2c_op.cmd = XGBE_I2C_CMD_READ;
  429. i2c_op.target = target;
  430. i2c_op.len = val_len;
  431. i2c_op.buf = val;
  432. ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
  433. if ((ret == -EAGAIN) && retry--)
  434. goto again2;
  435. return ret;
  436. }
  437. static int xgbe_phy_sfp_put_mux(struct xgbe_prv_data *pdata)
  438. {
  439. struct xgbe_phy_data *phy_data = pdata->phy_data;
  440. struct xgbe_i2c_op i2c_op;
  441. u8 mux_channel;
  442. if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT)
  443. return 0;
  444. /* Select no mux channels */
  445. mux_channel = 0;
  446. i2c_op.cmd = XGBE_I2C_CMD_WRITE;
  447. i2c_op.target = phy_data->sfp_mux_address;
  448. i2c_op.len = sizeof(mux_channel);
  449. i2c_op.buf = &mux_channel;
  450. return xgbe_phy_i2c_xfer(pdata, &i2c_op);
  451. }
  452. static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data *pdata)
  453. {
  454. struct xgbe_phy_data *phy_data = pdata->phy_data;
  455. struct xgbe_i2c_op i2c_op;
  456. u8 mux_channel;
  457. if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT)
  458. return 0;
  459. /* Select desired mux channel */
  460. mux_channel = 1 << phy_data->sfp_mux_channel;
  461. i2c_op.cmd = XGBE_I2C_CMD_WRITE;
  462. i2c_op.target = phy_data->sfp_mux_address;
  463. i2c_op.len = sizeof(mux_channel);
  464. i2c_op.buf = &mux_channel;
  465. return xgbe_phy_i2c_xfer(pdata, &i2c_op);
  466. }
  467. static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data *pdata)
  468. {
  469. struct xgbe_phy_data *phy_data = pdata->phy_data;
  470. phy_data->comm_owned = 0;
  471. mutex_unlock(&xgbe_phy_comm_lock);
  472. }
  473. static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata)
  474. {
  475. struct xgbe_phy_data *phy_data = pdata->phy_data;
  476. unsigned long timeout;
  477. unsigned int mutex_id;
  478. if (phy_data->comm_owned)
  479. return 0;
  480. /* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
  481. * the driver needs to take the software mutex and then the hardware
  482. * mutexes before being able to use the busses.
  483. */
  484. mutex_lock(&xgbe_phy_comm_lock);
  485. /* Clear the mutexes */
  486. XP_IOWRITE(pdata, XP_I2C_MUTEX, XGBE_MUTEX_RELEASE);
  487. XP_IOWRITE(pdata, XP_MDIO_MUTEX, XGBE_MUTEX_RELEASE);
  488. /* Mutex formats are the same for I2C and MDIO/GPIO */
  489. mutex_id = 0;
  490. XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id);
  491. XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ACTIVE, 1);
  492. timeout = jiffies + (5 * HZ);
  493. while (time_before(jiffies, timeout)) {
  494. /* Must be all zeroes in order to obtain the mutex */
  495. if (XP_IOREAD(pdata, XP_I2C_MUTEX) ||
  496. XP_IOREAD(pdata, XP_MDIO_MUTEX)) {
  497. usleep_range(100, 200);
  498. continue;
  499. }
  500. /* Obtain the mutex */
  501. XP_IOWRITE(pdata, XP_I2C_MUTEX, mutex_id);
  502. XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id);
  503. phy_data->comm_owned = 1;
  504. return 0;
  505. }
  506. mutex_unlock(&xgbe_phy_comm_lock);
  507. netdev_err(pdata->netdev, "unable to obtain hardware mutexes\n");
  508. return -ETIMEDOUT;
  509. }
  510. static int xgbe_phy_mdio_mii_write(struct xgbe_prv_data *pdata, int addr,
  511. int reg, u16 val)
  512. {
  513. struct xgbe_phy_data *phy_data = pdata->phy_data;
  514. if (reg & MII_ADDR_C45) {
  515. if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45)
  516. return -ENOTSUPP;
  517. } else {
  518. if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22)
  519. return -ENOTSUPP;
  520. }
  521. return pdata->hw_if.write_ext_mii_regs(pdata, addr, reg, val);
  522. }
  523. static int xgbe_phy_i2c_mii_write(struct xgbe_prv_data *pdata, int reg, u16 val)
  524. {
  525. __be16 *mii_val;
  526. u8 mii_data[3];
  527. int ret;
  528. ret = xgbe_phy_sfp_get_mux(pdata);
  529. if (ret)
  530. return ret;
  531. mii_data[0] = reg & 0xff;
  532. mii_val = (__be16 *)&mii_data[1];
  533. *mii_val = cpu_to_be16(val);
  534. ret = xgbe_phy_i2c_write(pdata, XGBE_SFP_PHY_ADDRESS,
  535. mii_data, sizeof(mii_data));
  536. xgbe_phy_sfp_put_mux(pdata);
  537. return ret;
  538. }
  539. static int xgbe_phy_mii_write(struct mii_bus *mii, int addr, int reg, u16 val)
  540. {
  541. struct xgbe_prv_data *pdata = mii->priv;
  542. struct xgbe_phy_data *phy_data = pdata->phy_data;
  543. int ret;
  544. ret = xgbe_phy_get_comm_ownership(pdata);
  545. if (ret)
  546. return ret;
  547. if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
  548. ret = xgbe_phy_i2c_mii_write(pdata, reg, val);
  549. else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO)
  550. ret = xgbe_phy_mdio_mii_write(pdata, addr, reg, val);
  551. else
  552. ret = -ENOTSUPP;
  553. xgbe_phy_put_comm_ownership(pdata);
  554. return ret;
  555. }
  556. static int xgbe_phy_mdio_mii_read(struct xgbe_prv_data *pdata, int addr,
  557. int reg)
  558. {
  559. struct xgbe_phy_data *phy_data = pdata->phy_data;
  560. if (reg & MII_ADDR_C45) {
  561. if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45)
  562. return -ENOTSUPP;
  563. } else {
  564. if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22)
  565. return -ENOTSUPP;
  566. }
  567. return pdata->hw_if.read_ext_mii_regs(pdata, addr, reg);
  568. }
  569. static int xgbe_phy_i2c_mii_read(struct xgbe_prv_data *pdata, int reg)
  570. {
  571. __be16 mii_val;
  572. u8 mii_reg;
  573. int ret;
  574. ret = xgbe_phy_sfp_get_mux(pdata);
  575. if (ret)
  576. return ret;
  577. mii_reg = reg;
  578. ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_PHY_ADDRESS,
  579. &mii_reg, sizeof(mii_reg),
  580. &mii_val, sizeof(mii_val));
  581. if (!ret)
  582. ret = be16_to_cpu(mii_val);
  583. xgbe_phy_sfp_put_mux(pdata);
  584. return ret;
  585. }
  586. static int xgbe_phy_mii_read(struct mii_bus *mii, int addr, int reg)
  587. {
  588. struct xgbe_prv_data *pdata = mii->priv;
  589. struct xgbe_phy_data *phy_data = pdata->phy_data;
  590. int ret;
  591. ret = xgbe_phy_get_comm_ownership(pdata);
  592. if (ret)
  593. return ret;
  594. if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
  595. ret = xgbe_phy_i2c_mii_read(pdata, reg);
  596. else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO)
  597. ret = xgbe_phy_mdio_mii_read(pdata, addr, reg);
  598. else
  599. ret = -ENOTSUPP;
  600. xgbe_phy_put_comm_ownership(pdata);
  601. return ret;
  602. }
  603. static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata)
  604. {
  605. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  606. struct xgbe_phy_data *phy_data = pdata->phy_data;
  607. if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed)
  608. return;
  609. XGBE_ZERO_SUP(lks);
  610. if (phy_data->sfp_mod_absent) {
  611. pdata->phy.speed = SPEED_UNKNOWN;
  612. pdata->phy.duplex = DUPLEX_UNKNOWN;
  613. pdata->phy.autoneg = AUTONEG_ENABLE;
  614. pdata->phy.pause_autoneg = AUTONEG_ENABLE;
  615. XGBE_SET_SUP(lks, Autoneg);
  616. XGBE_SET_SUP(lks, Pause);
  617. XGBE_SET_SUP(lks, Asym_Pause);
  618. XGBE_SET_SUP(lks, TP);
  619. XGBE_SET_SUP(lks, FIBRE);
  620. XGBE_LM_COPY(lks, advertising, lks, supported);
  621. return;
  622. }
  623. switch (phy_data->sfp_base) {
  624. case XGBE_SFP_BASE_1000_T:
  625. case XGBE_SFP_BASE_1000_SX:
  626. case XGBE_SFP_BASE_1000_LX:
  627. case XGBE_SFP_BASE_1000_CX:
  628. pdata->phy.speed = SPEED_UNKNOWN;
  629. pdata->phy.duplex = DUPLEX_UNKNOWN;
  630. pdata->phy.autoneg = AUTONEG_ENABLE;
  631. pdata->phy.pause_autoneg = AUTONEG_ENABLE;
  632. XGBE_SET_SUP(lks, Autoneg);
  633. XGBE_SET_SUP(lks, Pause);
  634. XGBE_SET_SUP(lks, Asym_Pause);
  635. if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) {
  636. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100)
  637. XGBE_SET_SUP(lks, 100baseT_Full);
  638. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
  639. XGBE_SET_SUP(lks, 1000baseT_Full);
  640. } else {
  641. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
  642. XGBE_SET_SUP(lks, 1000baseX_Full);
  643. }
  644. break;
  645. case XGBE_SFP_BASE_10000_SR:
  646. case XGBE_SFP_BASE_10000_LR:
  647. case XGBE_SFP_BASE_10000_LRM:
  648. case XGBE_SFP_BASE_10000_ER:
  649. case XGBE_SFP_BASE_10000_CR:
  650. pdata->phy.speed = SPEED_10000;
  651. pdata->phy.duplex = DUPLEX_FULL;
  652. pdata->phy.autoneg = AUTONEG_DISABLE;
  653. pdata->phy.pause_autoneg = AUTONEG_DISABLE;
  654. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
  655. switch (phy_data->sfp_base) {
  656. case XGBE_SFP_BASE_10000_SR:
  657. XGBE_SET_SUP(lks, 10000baseSR_Full);
  658. break;
  659. case XGBE_SFP_BASE_10000_LR:
  660. XGBE_SET_SUP(lks, 10000baseLR_Full);
  661. break;
  662. case XGBE_SFP_BASE_10000_LRM:
  663. XGBE_SET_SUP(lks, 10000baseLRM_Full);
  664. break;
  665. case XGBE_SFP_BASE_10000_ER:
  666. XGBE_SET_SUP(lks, 10000baseER_Full);
  667. break;
  668. case XGBE_SFP_BASE_10000_CR:
  669. XGBE_SET_SUP(lks, 10000baseCR_Full);
  670. break;
  671. default:
  672. break;
  673. }
  674. }
  675. break;
  676. default:
  677. pdata->phy.speed = SPEED_UNKNOWN;
  678. pdata->phy.duplex = DUPLEX_UNKNOWN;
  679. pdata->phy.autoneg = AUTONEG_DISABLE;
  680. pdata->phy.pause_autoneg = AUTONEG_DISABLE;
  681. break;
  682. }
  683. switch (phy_data->sfp_base) {
  684. case XGBE_SFP_BASE_1000_T:
  685. case XGBE_SFP_BASE_1000_CX:
  686. case XGBE_SFP_BASE_10000_CR:
  687. XGBE_SET_SUP(lks, TP);
  688. break;
  689. default:
  690. XGBE_SET_SUP(lks, FIBRE);
  691. break;
  692. }
  693. XGBE_LM_COPY(lks, advertising, lks, supported);
  694. }
  695. static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,
  696. enum xgbe_sfp_speed sfp_speed)
  697. {
  698. u8 *sfp_base, min, max;
  699. sfp_base = sfp_eeprom->base;
  700. switch (sfp_speed) {
  701. case XGBE_SFP_SPEED_1000:
  702. min = XGBE_SFP_BASE_BR_1GBE_MIN;
  703. max = XGBE_SFP_BASE_BR_1GBE_MAX;
  704. break;
  705. case XGBE_SFP_SPEED_10000:
  706. min = XGBE_SFP_BASE_BR_10GBE_MIN;
  707. max = XGBE_SFP_BASE_BR_10GBE_MAX;
  708. break;
  709. default:
  710. return false;
  711. }
  712. return ((sfp_base[XGBE_SFP_BASE_BR] >= min) &&
  713. (sfp_base[XGBE_SFP_BASE_BR] <= max));
  714. }
  715. static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
  716. {
  717. struct xgbe_phy_data *phy_data = pdata->phy_data;
  718. if (phy_data->phydev) {
  719. phy_detach(phy_data->phydev);
  720. phy_device_remove(phy_data->phydev);
  721. phy_device_free(phy_data->phydev);
  722. phy_data->phydev = NULL;
  723. }
  724. }
  725. static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
  726. {
  727. struct xgbe_phy_data *phy_data = pdata->phy_data;
  728. unsigned int phy_id = phy_data->phydev->phy_id;
  729. if ((phy_id & 0xfffffff0) != 0x01ff0cc0)
  730. return false;
  731. /* Enable Base-T AN */
  732. phy_write(phy_data->phydev, 0x16, 0x0001);
  733. phy_write(phy_data->phydev, 0x00, 0x9140);
  734. phy_write(phy_data->phydev, 0x16, 0x0000);
  735. /* Enable SGMII at 100Base-T/1000Base-T Full Duplex */
  736. phy_write(phy_data->phydev, 0x1b, 0x9084);
  737. phy_write(phy_data->phydev, 0x09, 0x0e00);
  738. phy_write(phy_data->phydev, 0x00, 0x8140);
  739. phy_write(phy_data->phydev, 0x04, 0x0d01);
  740. phy_write(phy_data->phydev, 0x00, 0x9140);
  741. phy_data->phydev->supported = PHY_GBIT_FEATURES;
  742. phy_data->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
  743. phy_data->phydev->advertising = phy_data->phydev->supported;
  744. netif_dbg(pdata, drv, pdata->netdev,
  745. "Finisar PHY quirk in place\n");
  746. return true;
  747. }
  748. static void xgbe_phy_external_phy_quirks(struct xgbe_prv_data *pdata)
  749. {
  750. if (xgbe_phy_finisar_phy_quirks(pdata))
  751. return;
  752. }
  753. static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata)
  754. {
  755. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  756. struct xgbe_phy_data *phy_data = pdata->phy_data;
  757. struct phy_device *phydev;
  758. u32 advertising;
  759. int ret;
  760. /* If we already have a PHY, just return */
  761. if (phy_data->phydev)
  762. return 0;
  763. /* Check for the use of an external PHY */
  764. if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE)
  765. return 0;
  766. /* For SFP, only use an external PHY if available */
  767. if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) &&
  768. !phy_data->sfp_phy_avail)
  769. return 0;
  770. /* Set the proper MDIO mode for the PHY */
  771. ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr,
  772. phy_data->phydev_mode);
  773. if (ret) {
  774. netdev_err(pdata->netdev,
  775. "mdio port/clause not compatible (%u/%u)\n",
  776. phy_data->mdio_addr, phy_data->phydev_mode);
  777. return ret;
  778. }
  779. /* Create and connect to the PHY device */
  780. phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr,
  781. (phy_data->phydev_mode == XGBE_MDIO_MODE_CL45));
  782. if (IS_ERR(phydev)) {
  783. netdev_err(pdata->netdev, "get_phy_device failed\n");
  784. return -ENODEV;
  785. }
  786. netif_dbg(pdata, drv, pdata->netdev, "external PHY id is %#010x\n",
  787. phydev->phy_id);
  788. /*TODO: If c45, add request_module based on one of the MMD ids? */
  789. ret = phy_device_register(phydev);
  790. if (ret) {
  791. netdev_err(pdata->netdev, "phy_device_register failed\n");
  792. phy_device_free(phydev);
  793. return ret;
  794. }
  795. ret = phy_attach_direct(pdata->netdev, phydev, phydev->dev_flags,
  796. PHY_INTERFACE_MODE_SGMII);
  797. if (ret) {
  798. netdev_err(pdata->netdev, "phy_attach_direct failed\n");
  799. phy_device_remove(phydev);
  800. phy_device_free(phydev);
  801. return ret;
  802. }
  803. phy_data->phydev = phydev;
  804. xgbe_phy_external_phy_quirks(pdata);
  805. ethtool_convert_link_mode_to_legacy_u32(&advertising,
  806. lks->link_modes.advertising);
  807. phydev->advertising &= advertising;
  808. phy_start_aneg(phy_data->phydev);
  809. return 0;
  810. }
  811. static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data *pdata)
  812. {
  813. struct xgbe_phy_data *phy_data = pdata->phy_data;
  814. int ret;
  815. if (!phy_data->sfp_changed)
  816. return;
  817. phy_data->sfp_phy_avail = 0;
  818. if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
  819. return;
  820. /* Check access to the PHY by reading CTRL1 */
  821. ret = xgbe_phy_i2c_mii_read(pdata, MII_BMCR);
  822. if (ret < 0)
  823. return;
  824. /* Successfully accessed the PHY */
  825. phy_data->sfp_phy_avail = 1;
  826. }
  827. static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data)
  828. {
  829. u8 *sfp_extd = phy_data->sfp_eeprom.extd;
  830. if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_RX_LOS))
  831. return false;
  832. if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS)
  833. return false;
  834. if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los))
  835. return true;
  836. return false;
  837. }
  838. static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data)
  839. {
  840. u8 *sfp_extd = phy_data->sfp_eeprom.extd;
  841. if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_TX_FAULT))
  842. return false;
  843. if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT)
  844. return false;
  845. if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault))
  846. return true;
  847. return false;
  848. }
  849. static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data)
  850. {
  851. if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT)
  852. return false;
  853. if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent))
  854. return true;
  855. return false;
  856. }
  857. static bool xgbe_phy_belfuse_parse_quirks(struct xgbe_prv_data *pdata)
  858. {
  859. struct xgbe_phy_data *phy_data = pdata->phy_data;
  860. struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom;
  861. if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
  862. XGBE_BEL_FUSE_VENDOR, XGBE_SFP_BASE_VENDOR_NAME_LEN))
  863. return false;
  864. if (!memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_PN],
  865. XGBE_BEL_FUSE_PARTNO, XGBE_SFP_BASE_VENDOR_PN_LEN)) {
  866. phy_data->sfp_base = XGBE_SFP_BASE_1000_SX;
  867. phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE;
  868. phy_data->sfp_speed = XGBE_SFP_SPEED_1000;
  869. if (phy_data->sfp_changed)
  870. netif_dbg(pdata, drv, pdata->netdev,
  871. "Bel-Fuse SFP quirk in place\n");
  872. return true;
  873. }
  874. return false;
  875. }
  876. static bool xgbe_phy_sfp_parse_quirks(struct xgbe_prv_data *pdata)
  877. {
  878. if (xgbe_phy_belfuse_parse_quirks(pdata))
  879. return true;
  880. return false;
  881. }
  882. static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata)
  883. {
  884. struct xgbe_phy_data *phy_data = pdata->phy_data;
  885. struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom;
  886. u8 *sfp_base;
  887. sfp_base = sfp_eeprom->base;
  888. if (sfp_base[XGBE_SFP_BASE_ID] != XGBE_SFP_ID_SFP)
  889. return;
  890. if (sfp_base[XGBE_SFP_BASE_EXT_ID] != XGBE_SFP_EXT_ID_SFP)
  891. return;
  892. /* Update transceiver signals (eeprom extd/options) */
  893. phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data);
  894. phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data);
  895. if (xgbe_phy_sfp_parse_quirks(pdata))
  896. return;
  897. /* Assume ACTIVE cable unless told it is PASSIVE */
  898. if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_PASSIVE) {
  899. phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE;
  900. phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN];
  901. } else {
  902. phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE;
  903. }
  904. /* Determine the type of SFP */
  905. if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR)
  906. phy_data->sfp_base = XGBE_SFP_BASE_10000_SR;
  907. else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LR)
  908. phy_data->sfp_base = XGBE_SFP_BASE_10000_LR;
  909. else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LRM)
  910. phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM;
  911. else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_ER)
  912. phy_data->sfp_base = XGBE_SFP_BASE_10000_ER;
  913. else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_SX)
  914. phy_data->sfp_base = XGBE_SFP_BASE_1000_SX;
  915. else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_LX)
  916. phy_data->sfp_base = XGBE_SFP_BASE_1000_LX;
  917. else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_CX)
  918. phy_data->sfp_base = XGBE_SFP_BASE_1000_CX;
  919. else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_T)
  920. phy_data->sfp_base = XGBE_SFP_BASE_1000_T;
  921. else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) &&
  922. xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000))
  923. phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;
  924. switch (phy_data->sfp_base) {
  925. case XGBE_SFP_BASE_1000_T:
  926. phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000;
  927. break;
  928. case XGBE_SFP_BASE_1000_SX:
  929. case XGBE_SFP_BASE_1000_LX:
  930. case XGBE_SFP_BASE_1000_CX:
  931. phy_data->sfp_speed = XGBE_SFP_SPEED_1000;
  932. break;
  933. case XGBE_SFP_BASE_10000_SR:
  934. case XGBE_SFP_BASE_10000_LR:
  935. case XGBE_SFP_BASE_10000_LRM:
  936. case XGBE_SFP_BASE_10000_ER:
  937. case XGBE_SFP_BASE_10000_CR:
  938. phy_data->sfp_speed = XGBE_SFP_SPEED_10000;
  939. break;
  940. default:
  941. break;
  942. }
  943. }
  944. static void xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data *pdata,
  945. struct xgbe_sfp_eeprom *sfp_eeprom)
  946. {
  947. struct xgbe_sfp_ascii sfp_ascii;
  948. char *sfp_data = (char *)&sfp_ascii;
  949. netif_dbg(pdata, drv, pdata->netdev, "SFP detected:\n");
  950. memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
  951. XGBE_SFP_BASE_VENDOR_NAME_LEN);
  952. sfp_data[XGBE_SFP_BASE_VENDOR_NAME_LEN] = '\0';
  953. netif_dbg(pdata, drv, pdata->netdev, " vendor: %s\n",
  954. sfp_data);
  955. memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_PN],
  956. XGBE_SFP_BASE_VENDOR_PN_LEN);
  957. sfp_data[XGBE_SFP_BASE_VENDOR_PN_LEN] = '\0';
  958. netif_dbg(pdata, drv, pdata->netdev, " part number: %s\n",
  959. sfp_data);
  960. memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_REV],
  961. XGBE_SFP_BASE_VENDOR_REV_LEN);
  962. sfp_data[XGBE_SFP_BASE_VENDOR_REV_LEN] = '\0';
  963. netif_dbg(pdata, drv, pdata->netdev, " revision level: %s\n",
  964. sfp_data);
  965. memcpy(sfp_data, &sfp_eeprom->extd[XGBE_SFP_BASE_VENDOR_SN],
  966. XGBE_SFP_BASE_VENDOR_SN_LEN);
  967. sfp_data[XGBE_SFP_BASE_VENDOR_SN_LEN] = '\0';
  968. netif_dbg(pdata, drv, pdata->netdev, " serial number: %s\n",
  969. sfp_data);
  970. }
  971. static bool xgbe_phy_sfp_verify_eeprom(u8 cc_in, u8 *buf, unsigned int len)
  972. {
  973. u8 cc;
  974. for (cc = 0; len; buf++, len--)
  975. cc += *buf;
  976. return (cc == cc_in) ? true : false;
  977. }
  978. static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata)
  979. {
  980. struct xgbe_phy_data *phy_data = pdata->phy_data;
  981. struct xgbe_sfp_eeprom sfp_eeprom;
  982. u8 eeprom_addr;
  983. int ret;
  984. ret = xgbe_phy_sfp_get_mux(pdata);
  985. if (ret) {
  986. dev_err_once(pdata->dev, "%s: I2C error setting SFP MUX\n",
  987. netdev_name(pdata->netdev));
  988. return ret;
  989. }
  990. /* Read the SFP serial ID eeprom */
  991. eeprom_addr = 0;
  992. ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_SERIAL_ID_ADDRESS,
  993. &eeprom_addr, sizeof(eeprom_addr),
  994. &sfp_eeprom, sizeof(sfp_eeprom));
  995. if (ret) {
  996. dev_err_once(pdata->dev, "%s: I2C error reading SFP EEPROM\n",
  997. netdev_name(pdata->netdev));
  998. goto put;
  999. }
  1000. /* Validate the contents read */
  1001. if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom.base[XGBE_SFP_BASE_CC],
  1002. sfp_eeprom.base,
  1003. sizeof(sfp_eeprom.base) - 1)) {
  1004. ret = -EINVAL;
  1005. goto put;
  1006. }
  1007. if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom.extd[XGBE_SFP_EXTD_CC],
  1008. sfp_eeprom.extd,
  1009. sizeof(sfp_eeprom.extd) - 1)) {
  1010. ret = -EINVAL;
  1011. goto put;
  1012. }
  1013. /* Check for an added or changed SFP */
  1014. if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) {
  1015. phy_data->sfp_changed = 1;
  1016. if (netif_msg_drv(pdata))
  1017. xgbe_phy_sfp_eeprom_info(pdata, &sfp_eeprom);
  1018. memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom));
  1019. if (sfp_eeprom.extd[XGBE_SFP_EXTD_SFF_8472]) {
  1020. u8 diag_type = sfp_eeprom.extd[XGBE_SFP_EXTD_DIAG];
  1021. if (!(diag_type & XGBE_SFP_EXTD_DIAG_ADDR_CHANGE))
  1022. phy_data->sfp_diags = 1;
  1023. }
  1024. xgbe_phy_free_phy_device(pdata);
  1025. } else {
  1026. phy_data->sfp_changed = 0;
  1027. }
  1028. put:
  1029. xgbe_phy_sfp_put_mux(pdata);
  1030. return ret;
  1031. }
  1032. static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata)
  1033. {
  1034. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1035. u8 gpio_reg, gpio_ports[2];
  1036. int ret;
  1037. /* Read the input port registers */
  1038. gpio_reg = 0;
  1039. ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address,
  1040. &gpio_reg, sizeof(gpio_reg),
  1041. gpio_ports, sizeof(gpio_ports));
  1042. if (ret) {
  1043. dev_err_once(pdata->dev, "%s: I2C error reading SFP GPIOs\n",
  1044. netdev_name(pdata->netdev));
  1045. return;
  1046. }
  1047. phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0];
  1048. phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data);
  1049. }
  1050. static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata)
  1051. {
  1052. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1053. xgbe_phy_free_phy_device(pdata);
  1054. phy_data->sfp_mod_absent = 1;
  1055. phy_data->sfp_phy_avail = 0;
  1056. memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom));
  1057. }
  1058. static void xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data)
  1059. {
  1060. phy_data->sfp_rx_los = 0;
  1061. phy_data->sfp_tx_fault = 0;
  1062. phy_data->sfp_mod_absent = 1;
  1063. phy_data->sfp_diags = 0;
  1064. phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN;
  1065. phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN;
  1066. phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN;
  1067. }
  1068. static void xgbe_phy_sfp_detect(struct xgbe_prv_data *pdata)
  1069. {
  1070. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1071. int ret;
  1072. /* Reset the SFP signals and info */
  1073. xgbe_phy_sfp_reset(phy_data);
  1074. ret = xgbe_phy_get_comm_ownership(pdata);
  1075. if (ret)
  1076. return;
  1077. /* Read the SFP signals and check for module presence */
  1078. xgbe_phy_sfp_signals(pdata);
  1079. if (phy_data->sfp_mod_absent) {
  1080. xgbe_phy_sfp_mod_absent(pdata);
  1081. goto put;
  1082. }
  1083. ret = xgbe_phy_sfp_read_eeprom(pdata);
  1084. if (ret) {
  1085. /* Treat any error as if there isn't an SFP plugged in */
  1086. xgbe_phy_sfp_reset(phy_data);
  1087. xgbe_phy_sfp_mod_absent(pdata);
  1088. goto put;
  1089. }
  1090. xgbe_phy_sfp_parse_eeprom(pdata);
  1091. xgbe_phy_sfp_external_phy(pdata);
  1092. put:
  1093. xgbe_phy_sfp_phy_settings(pdata);
  1094. xgbe_phy_put_comm_ownership(pdata);
  1095. }
  1096. static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data *pdata)
  1097. {
  1098. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1099. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1100. u16 lcl_adv = 0, rmt_adv = 0;
  1101. u8 fc;
  1102. pdata->phy.tx_pause = 0;
  1103. pdata->phy.rx_pause = 0;
  1104. if (!phy_data->phydev)
  1105. return;
  1106. if (phy_data->phydev->advertising & ADVERTISED_Pause)
  1107. lcl_adv |= ADVERTISE_PAUSE_CAP;
  1108. if (phy_data->phydev->advertising & ADVERTISED_Asym_Pause)
  1109. lcl_adv |= ADVERTISE_PAUSE_ASYM;
  1110. if (phy_data->phydev->pause) {
  1111. XGBE_SET_LP_ADV(lks, Pause);
  1112. rmt_adv |= LPA_PAUSE_CAP;
  1113. }
  1114. if (phy_data->phydev->asym_pause) {
  1115. XGBE_SET_LP_ADV(lks, Asym_Pause);
  1116. rmt_adv |= LPA_PAUSE_ASYM;
  1117. }
  1118. fc = mii_resolve_flowctrl_fdx(lcl_adv, rmt_adv);
  1119. if (fc & FLOW_CTRL_TX)
  1120. pdata->phy.tx_pause = 1;
  1121. if (fc & FLOW_CTRL_RX)
  1122. pdata->phy.rx_pause = 1;
  1123. }
  1124. static enum xgbe_mode xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data *pdata)
  1125. {
  1126. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1127. enum xgbe_mode mode;
  1128. XGBE_SET_LP_ADV(lks, Autoneg);
  1129. XGBE_SET_LP_ADV(lks, TP);
  1130. /* Use external PHY to determine flow control */
  1131. if (pdata->phy.pause_autoneg)
  1132. xgbe_phy_phydev_flowctrl(pdata);
  1133. switch (pdata->an_status & XGBE_SGMII_AN_LINK_SPEED) {
  1134. case XGBE_SGMII_AN_LINK_SPEED_100:
  1135. if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) {
  1136. XGBE_SET_LP_ADV(lks, 100baseT_Full);
  1137. mode = XGBE_MODE_SGMII_100;
  1138. } else {
  1139. /* Half-duplex not supported */
  1140. XGBE_SET_LP_ADV(lks, 100baseT_Half);
  1141. mode = XGBE_MODE_UNKNOWN;
  1142. }
  1143. break;
  1144. case XGBE_SGMII_AN_LINK_SPEED_1000:
  1145. if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) {
  1146. XGBE_SET_LP_ADV(lks, 1000baseT_Full);
  1147. mode = XGBE_MODE_SGMII_1000;
  1148. } else {
  1149. /* Half-duplex not supported */
  1150. XGBE_SET_LP_ADV(lks, 1000baseT_Half);
  1151. mode = XGBE_MODE_UNKNOWN;
  1152. }
  1153. break;
  1154. default:
  1155. mode = XGBE_MODE_UNKNOWN;
  1156. }
  1157. return mode;
  1158. }
  1159. static enum xgbe_mode xgbe_phy_an37_outcome(struct xgbe_prv_data *pdata)
  1160. {
  1161. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1162. enum xgbe_mode mode;
  1163. unsigned int ad_reg, lp_reg;
  1164. XGBE_SET_LP_ADV(lks, Autoneg);
  1165. XGBE_SET_LP_ADV(lks, FIBRE);
  1166. /* Compare Advertisement and Link Partner register */
  1167. ad_reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_ADVERTISE);
  1168. lp_reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_LP_ABILITY);
  1169. if (lp_reg & 0x100)
  1170. XGBE_SET_LP_ADV(lks, Pause);
  1171. if (lp_reg & 0x80)
  1172. XGBE_SET_LP_ADV(lks, Asym_Pause);
  1173. if (pdata->phy.pause_autoneg) {
  1174. /* Set flow control based on auto-negotiation result */
  1175. pdata->phy.tx_pause = 0;
  1176. pdata->phy.rx_pause = 0;
  1177. if (ad_reg & lp_reg & 0x100) {
  1178. pdata->phy.tx_pause = 1;
  1179. pdata->phy.rx_pause = 1;
  1180. } else if (ad_reg & lp_reg & 0x80) {
  1181. if (ad_reg & 0x100)
  1182. pdata->phy.rx_pause = 1;
  1183. else if (lp_reg & 0x100)
  1184. pdata->phy.tx_pause = 1;
  1185. }
  1186. }
  1187. if (lp_reg & 0x20)
  1188. XGBE_SET_LP_ADV(lks, 1000baseX_Full);
  1189. /* Half duplex is not supported */
  1190. ad_reg &= lp_reg;
  1191. mode = (ad_reg & 0x20) ? XGBE_MODE_X : XGBE_MODE_UNKNOWN;
  1192. return mode;
  1193. }
  1194. static enum xgbe_mode xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data *pdata)
  1195. {
  1196. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1197. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1198. enum xgbe_mode mode;
  1199. unsigned int ad_reg, lp_reg;
  1200. XGBE_SET_LP_ADV(lks, Autoneg);
  1201. XGBE_SET_LP_ADV(lks, Backplane);
  1202. /* Use external PHY to determine flow control */
  1203. if (pdata->phy.pause_autoneg)
  1204. xgbe_phy_phydev_flowctrl(pdata);
  1205. /* Compare Advertisement and Link Partner register 2 */
  1206. ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1);
  1207. lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 1);
  1208. if (lp_reg & 0x80)
  1209. XGBE_SET_LP_ADV(lks, 10000baseKR_Full);
  1210. if (lp_reg & 0x20)
  1211. XGBE_SET_LP_ADV(lks, 1000baseKX_Full);
  1212. ad_reg &= lp_reg;
  1213. if (ad_reg & 0x80) {
  1214. switch (phy_data->port_mode) {
  1215. case XGBE_PORT_MODE_BACKPLANE:
  1216. mode = XGBE_MODE_KR;
  1217. break;
  1218. default:
  1219. mode = XGBE_MODE_SFI;
  1220. break;
  1221. }
  1222. } else if (ad_reg & 0x20) {
  1223. switch (phy_data->port_mode) {
  1224. case XGBE_PORT_MODE_BACKPLANE:
  1225. mode = XGBE_MODE_KX_1000;
  1226. break;
  1227. case XGBE_PORT_MODE_1000BASE_X:
  1228. mode = XGBE_MODE_X;
  1229. break;
  1230. case XGBE_PORT_MODE_SFP:
  1231. switch (phy_data->sfp_base) {
  1232. case XGBE_SFP_BASE_1000_T:
  1233. if (phy_data->phydev &&
  1234. (phy_data->phydev->speed == SPEED_100))
  1235. mode = XGBE_MODE_SGMII_100;
  1236. else
  1237. mode = XGBE_MODE_SGMII_1000;
  1238. break;
  1239. case XGBE_SFP_BASE_1000_SX:
  1240. case XGBE_SFP_BASE_1000_LX:
  1241. case XGBE_SFP_BASE_1000_CX:
  1242. default:
  1243. mode = XGBE_MODE_X;
  1244. break;
  1245. }
  1246. break;
  1247. default:
  1248. if (phy_data->phydev &&
  1249. (phy_data->phydev->speed == SPEED_100))
  1250. mode = XGBE_MODE_SGMII_100;
  1251. else
  1252. mode = XGBE_MODE_SGMII_1000;
  1253. break;
  1254. }
  1255. } else {
  1256. mode = XGBE_MODE_UNKNOWN;
  1257. }
  1258. /* Compare Advertisement and Link Partner register 3 */
  1259. ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2);
  1260. lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 2);
  1261. if (lp_reg & 0xc000)
  1262. XGBE_SET_LP_ADV(lks, 10000baseR_FEC);
  1263. return mode;
  1264. }
  1265. static enum xgbe_mode xgbe_phy_an73_outcome(struct xgbe_prv_data *pdata)
  1266. {
  1267. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1268. enum xgbe_mode mode;
  1269. unsigned int ad_reg, lp_reg;
  1270. XGBE_SET_LP_ADV(lks, Autoneg);
  1271. XGBE_SET_LP_ADV(lks, Backplane);
  1272. /* Compare Advertisement and Link Partner register 1 */
  1273. ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE);
  1274. lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA);
  1275. if (lp_reg & 0x400)
  1276. XGBE_SET_LP_ADV(lks, Pause);
  1277. if (lp_reg & 0x800)
  1278. XGBE_SET_LP_ADV(lks, Asym_Pause);
  1279. if (pdata->phy.pause_autoneg) {
  1280. /* Set flow control based on auto-negotiation result */
  1281. pdata->phy.tx_pause = 0;
  1282. pdata->phy.rx_pause = 0;
  1283. if (ad_reg & lp_reg & 0x400) {
  1284. pdata->phy.tx_pause = 1;
  1285. pdata->phy.rx_pause = 1;
  1286. } else if (ad_reg & lp_reg & 0x800) {
  1287. if (ad_reg & 0x400)
  1288. pdata->phy.rx_pause = 1;
  1289. else if (lp_reg & 0x400)
  1290. pdata->phy.tx_pause = 1;
  1291. }
  1292. }
  1293. /* Compare Advertisement and Link Partner register 2 */
  1294. ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1);
  1295. lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 1);
  1296. if (lp_reg & 0x80)
  1297. XGBE_SET_LP_ADV(lks, 10000baseKR_Full);
  1298. if (lp_reg & 0x20)
  1299. XGBE_SET_LP_ADV(lks, 1000baseKX_Full);
  1300. ad_reg &= lp_reg;
  1301. if (ad_reg & 0x80)
  1302. mode = XGBE_MODE_KR;
  1303. else if (ad_reg & 0x20)
  1304. mode = XGBE_MODE_KX_1000;
  1305. else
  1306. mode = XGBE_MODE_UNKNOWN;
  1307. /* Compare Advertisement and Link Partner register 3 */
  1308. ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2);
  1309. lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 2);
  1310. if (lp_reg & 0xc000)
  1311. XGBE_SET_LP_ADV(lks, 10000baseR_FEC);
  1312. return mode;
  1313. }
  1314. static enum xgbe_mode xgbe_phy_an_outcome(struct xgbe_prv_data *pdata)
  1315. {
  1316. switch (pdata->an_mode) {
  1317. case XGBE_AN_MODE_CL73:
  1318. return xgbe_phy_an73_outcome(pdata);
  1319. case XGBE_AN_MODE_CL73_REDRV:
  1320. return xgbe_phy_an73_redrv_outcome(pdata);
  1321. case XGBE_AN_MODE_CL37:
  1322. return xgbe_phy_an37_outcome(pdata);
  1323. case XGBE_AN_MODE_CL37_SGMII:
  1324. return xgbe_phy_an37_sgmii_outcome(pdata);
  1325. default:
  1326. return XGBE_MODE_UNKNOWN;
  1327. }
  1328. }
  1329. static void xgbe_phy_an_advertising(struct xgbe_prv_data *pdata,
  1330. struct ethtool_link_ksettings *dlks)
  1331. {
  1332. struct ethtool_link_ksettings *slks = &pdata->phy.lks;
  1333. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1334. XGBE_LM_COPY(dlks, advertising, slks, advertising);
  1335. /* Without a re-driver, just return current advertising */
  1336. if (!phy_data->redrv)
  1337. return;
  1338. /* With the KR re-driver we need to advertise a single speed */
  1339. XGBE_CLR_ADV(dlks, 1000baseKX_Full);
  1340. XGBE_CLR_ADV(dlks, 10000baseKR_Full);
  1341. switch (phy_data->port_mode) {
  1342. case XGBE_PORT_MODE_BACKPLANE:
  1343. XGBE_SET_ADV(dlks, 10000baseKR_Full);
  1344. break;
  1345. case XGBE_PORT_MODE_BACKPLANE_2500:
  1346. XGBE_SET_ADV(dlks, 1000baseKX_Full);
  1347. break;
  1348. case XGBE_PORT_MODE_1000BASE_T:
  1349. case XGBE_PORT_MODE_1000BASE_X:
  1350. case XGBE_PORT_MODE_NBASE_T:
  1351. XGBE_SET_ADV(dlks, 1000baseKX_Full);
  1352. break;
  1353. case XGBE_PORT_MODE_10GBASE_T:
  1354. if (phy_data->phydev &&
  1355. (phy_data->phydev->speed == SPEED_10000))
  1356. XGBE_SET_ADV(dlks, 10000baseKR_Full);
  1357. else
  1358. XGBE_SET_ADV(dlks, 1000baseKX_Full);
  1359. break;
  1360. case XGBE_PORT_MODE_10GBASE_R:
  1361. XGBE_SET_ADV(dlks, 10000baseKR_Full);
  1362. break;
  1363. case XGBE_PORT_MODE_SFP:
  1364. switch (phy_data->sfp_base) {
  1365. case XGBE_SFP_BASE_1000_T:
  1366. case XGBE_SFP_BASE_1000_SX:
  1367. case XGBE_SFP_BASE_1000_LX:
  1368. case XGBE_SFP_BASE_1000_CX:
  1369. XGBE_SET_ADV(dlks, 1000baseKX_Full);
  1370. break;
  1371. default:
  1372. XGBE_SET_ADV(dlks, 10000baseKR_Full);
  1373. break;
  1374. }
  1375. break;
  1376. default:
  1377. XGBE_SET_ADV(dlks, 10000baseKR_Full);
  1378. break;
  1379. }
  1380. }
  1381. static int xgbe_phy_an_config(struct xgbe_prv_data *pdata)
  1382. {
  1383. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1384. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1385. u32 advertising;
  1386. int ret;
  1387. ret = xgbe_phy_find_phy_device(pdata);
  1388. if (ret)
  1389. return ret;
  1390. if (!phy_data->phydev)
  1391. return 0;
  1392. ethtool_convert_link_mode_to_legacy_u32(&advertising,
  1393. lks->link_modes.advertising);
  1394. phy_data->phydev->autoneg = pdata->phy.autoneg;
  1395. phy_data->phydev->advertising = phy_data->phydev->supported &
  1396. advertising;
  1397. if (pdata->phy.autoneg != AUTONEG_ENABLE) {
  1398. phy_data->phydev->speed = pdata->phy.speed;
  1399. phy_data->phydev->duplex = pdata->phy.duplex;
  1400. }
  1401. ret = phy_start_aneg(phy_data->phydev);
  1402. return ret;
  1403. }
  1404. static enum xgbe_an_mode xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data)
  1405. {
  1406. switch (phy_data->sfp_base) {
  1407. case XGBE_SFP_BASE_1000_T:
  1408. return XGBE_AN_MODE_CL37_SGMII;
  1409. case XGBE_SFP_BASE_1000_SX:
  1410. case XGBE_SFP_BASE_1000_LX:
  1411. case XGBE_SFP_BASE_1000_CX:
  1412. return XGBE_AN_MODE_CL37;
  1413. default:
  1414. return XGBE_AN_MODE_NONE;
  1415. }
  1416. }
  1417. static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata)
  1418. {
  1419. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1420. /* A KR re-driver will always require CL73 AN */
  1421. if (phy_data->redrv)
  1422. return XGBE_AN_MODE_CL73_REDRV;
  1423. switch (phy_data->port_mode) {
  1424. case XGBE_PORT_MODE_BACKPLANE:
  1425. return XGBE_AN_MODE_CL73;
  1426. case XGBE_PORT_MODE_BACKPLANE_2500:
  1427. return XGBE_AN_MODE_NONE;
  1428. case XGBE_PORT_MODE_1000BASE_T:
  1429. return XGBE_AN_MODE_CL37_SGMII;
  1430. case XGBE_PORT_MODE_1000BASE_X:
  1431. return XGBE_AN_MODE_CL37;
  1432. case XGBE_PORT_MODE_NBASE_T:
  1433. return XGBE_AN_MODE_CL37_SGMII;
  1434. case XGBE_PORT_MODE_10GBASE_T:
  1435. return XGBE_AN_MODE_CL73;
  1436. case XGBE_PORT_MODE_10GBASE_R:
  1437. return XGBE_AN_MODE_NONE;
  1438. case XGBE_PORT_MODE_SFP:
  1439. return xgbe_phy_an_sfp_mode(phy_data);
  1440. default:
  1441. return XGBE_AN_MODE_NONE;
  1442. }
  1443. }
  1444. static int xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data *pdata,
  1445. enum xgbe_phy_redrv_mode mode)
  1446. {
  1447. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1448. u16 redrv_reg, redrv_val;
  1449. redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000);
  1450. redrv_val = (u16)mode;
  1451. return pdata->hw_if.write_ext_mii_regs(pdata, phy_data->redrv_addr,
  1452. redrv_reg, redrv_val);
  1453. }
  1454. static int xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data *pdata,
  1455. enum xgbe_phy_redrv_mode mode)
  1456. {
  1457. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1458. unsigned int redrv_reg;
  1459. int ret;
  1460. /* Calculate the register to write */
  1461. redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000);
  1462. ret = xgbe_phy_redrv_write(pdata, redrv_reg, mode);
  1463. return ret;
  1464. }
  1465. static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data *pdata)
  1466. {
  1467. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1468. enum xgbe_phy_redrv_mode mode;
  1469. int ret;
  1470. if (!phy_data->redrv)
  1471. return;
  1472. mode = XGBE_PHY_REDRV_MODE_CX;
  1473. if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) &&
  1474. (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) &&
  1475. (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR))
  1476. mode = XGBE_PHY_REDRV_MODE_SR;
  1477. ret = xgbe_phy_get_comm_ownership(pdata);
  1478. if (ret)
  1479. return;
  1480. if (phy_data->redrv_if)
  1481. xgbe_phy_set_redrv_mode_i2c(pdata, mode);
  1482. else
  1483. xgbe_phy_set_redrv_mode_mdio(pdata, mode);
  1484. xgbe_phy_put_comm_ownership(pdata);
  1485. }
  1486. static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
  1487. unsigned int cmd, unsigned int sub_cmd)
  1488. {
  1489. unsigned int s0 = 0;
  1490. unsigned int wait;
  1491. /* Log if a previous command did not complete */
  1492. if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))
  1493. netif_dbg(pdata, link, pdata->netdev,
  1494. "firmware mailbox not ready for command\n");
  1495. /* Construct the command */
  1496. XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, COMMAND, cmd);
  1497. XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, SUB_COMMAND, sub_cmd);
  1498. /* Issue the command */
  1499. XP_IOWRITE(pdata, XP_DRIVER_SCRATCH_0, s0);
  1500. XP_IOWRITE(pdata, XP_DRIVER_SCRATCH_1, 0);
  1501. XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1);
  1502. /* Wait for command to complete */
  1503. wait = XGBE_RATECHANGE_COUNT;
  1504. while (wait--) {
  1505. if (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))
  1506. return;
  1507. usleep_range(1000, 2000);
  1508. }
  1509. netif_dbg(pdata, link, pdata->netdev,
  1510. "firmware mailbox command did not complete\n");
  1511. }
  1512. static void xgbe_phy_rrc(struct xgbe_prv_data *pdata)
  1513. {
  1514. /* Receiver Reset Cycle */
  1515. xgbe_phy_perform_ratechange(pdata, 5, 0);
  1516. netif_dbg(pdata, link, pdata->netdev, "receiver reset complete\n");
  1517. }
  1518. static void xgbe_phy_power_off(struct xgbe_prv_data *pdata)
  1519. {
  1520. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1521. /* Power off */
  1522. xgbe_phy_perform_ratechange(pdata, 0, 0);
  1523. phy_data->cur_mode = XGBE_MODE_UNKNOWN;
  1524. netif_dbg(pdata, link, pdata->netdev, "phy powered off\n");
  1525. }
  1526. static void xgbe_phy_sfi_mode(struct xgbe_prv_data *pdata)
  1527. {
  1528. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1529. xgbe_phy_set_redrv_mode(pdata);
  1530. /* 10G/SFI */
  1531. if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) {
  1532. xgbe_phy_perform_ratechange(pdata, 3, 0);
  1533. } else {
  1534. if (phy_data->sfp_cable_len <= 1)
  1535. xgbe_phy_perform_ratechange(pdata, 3, 1);
  1536. else if (phy_data->sfp_cable_len <= 3)
  1537. xgbe_phy_perform_ratechange(pdata, 3, 2);
  1538. else
  1539. xgbe_phy_perform_ratechange(pdata, 3, 3);
  1540. }
  1541. phy_data->cur_mode = XGBE_MODE_SFI;
  1542. netif_dbg(pdata, link, pdata->netdev, "10GbE SFI mode set\n");
  1543. }
  1544. static void xgbe_phy_x_mode(struct xgbe_prv_data *pdata)
  1545. {
  1546. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1547. xgbe_phy_set_redrv_mode(pdata);
  1548. /* 1G/X */
  1549. xgbe_phy_perform_ratechange(pdata, 1, 3);
  1550. phy_data->cur_mode = XGBE_MODE_X;
  1551. netif_dbg(pdata, link, pdata->netdev, "1GbE X mode set\n");
  1552. }
  1553. static void xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data *pdata)
  1554. {
  1555. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1556. xgbe_phy_set_redrv_mode(pdata);
  1557. /* 1G/SGMII */
  1558. xgbe_phy_perform_ratechange(pdata, 1, 2);
  1559. phy_data->cur_mode = XGBE_MODE_SGMII_1000;
  1560. netif_dbg(pdata, link, pdata->netdev, "1GbE SGMII mode set\n");
  1561. }
  1562. static void xgbe_phy_sgmii_100_mode(struct xgbe_prv_data *pdata)
  1563. {
  1564. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1565. xgbe_phy_set_redrv_mode(pdata);
  1566. /* 100M/SGMII */
  1567. xgbe_phy_perform_ratechange(pdata, 1, 1);
  1568. phy_data->cur_mode = XGBE_MODE_SGMII_100;
  1569. netif_dbg(pdata, link, pdata->netdev, "100MbE SGMII mode set\n");
  1570. }
  1571. static void xgbe_phy_kr_mode(struct xgbe_prv_data *pdata)
  1572. {
  1573. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1574. xgbe_phy_set_redrv_mode(pdata);
  1575. /* 10G/KR */
  1576. xgbe_phy_perform_ratechange(pdata, 4, 0);
  1577. phy_data->cur_mode = XGBE_MODE_KR;
  1578. netif_dbg(pdata, link, pdata->netdev, "10GbE KR mode set\n");
  1579. }
  1580. static void xgbe_phy_kx_2500_mode(struct xgbe_prv_data *pdata)
  1581. {
  1582. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1583. xgbe_phy_set_redrv_mode(pdata);
  1584. /* 2.5G/KX */
  1585. xgbe_phy_perform_ratechange(pdata, 2, 0);
  1586. phy_data->cur_mode = XGBE_MODE_KX_2500;
  1587. netif_dbg(pdata, link, pdata->netdev, "2.5GbE KX mode set\n");
  1588. }
  1589. static void xgbe_phy_kx_1000_mode(struct xgbe_prv_data *pdata)
  1590. {
  1591. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1592. xgbe_phy_set_redrv_mode(pdata);
  1593. /* 1G/KX */
  1594. xgbe_phy_perform_ratechange(pdata, 1, 3);
  1595. phy_data->cur_mode = XGBE_MODE_KX_1000;
  1596. netif_dbg(pdata, link, pdata->netdev, "1GbE KX mode set\n");
  1597. }
  1598. static enum xgbe_mode xgbe_phy_cur_mode(struct xgbe_prv_data *pdata)
  1599. {
  1600. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1601. return phy_data->cur_mode;
  1602. }
  1603. static enum xgbe_mode xgbe_phy_switch_baset_mode(struct xgbe_prv_data *pdata)
  1604. {
  1605. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1606. /* No switching if not 10GBase-T */
  1607. if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T)
  1608. return xgbe_phy_cur_mode(pdata);
  1609. switch (xgbe_phy_cur_mode(pdata)) {
  1610. case XGBE_MODE_SGMII_100:
  1611. case XGBE_MODE_SGMII_1000:
  1612. return XGBE_MODE_KR;
  1613. case XGBE_MODE_KR:
  1614. default:
  1615. return XGBE_MODE_SGMII_1000;
  1616. }
  1617. }
  1618. static enum xgbe_mode xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data *pdata)
  1619. {
  1620. return XGBE_MODE_KX_2500;
  1621. }
  1622. static enum xgbe_mode xgbe_phy_switch_bp_mode(struct xgbe_prv_data *pdata)
  1623. {
  1624. /* If we are in KR switch to KX, and vice-versa */
  1625. switch (xgbe_phy_cur_mode(pdata)) {
  1626. case XGBE_MODE_KX_1000:
  1627. return XGBE_MODE_KR;
  1628. case XGBE_MODE_KR:
  1629. default:
  1630. return XGBE_MODE_KX_1000;
  1631. }
  1632. }
  1633. static enum xgbe_mode xgbe_phy_switch_mode(struct xgbe_prv_data *pdata)
  1634. {
  1635. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1636. switch (phy_data->port_mode) {
  1637. case XGBE_PORT_MODE_BACKPLANE:
  1638. return xgbe_phy_switch_bp_mode(pdata);
  1639. case XGBE_PORT_MODE_BACKPLANE_2500:
  1640. return xgbe_phy_switch_bp_2500_mode(pdata);
  1641. case XGBE_PORT_MODE_1000BASE_T:
  1642. case XGBE_PORT_MODE_NBASE_T:
  1643. case XGBE_PORT_MODE_10GBASE_T:
  1644. return xgbe_phy_switch_baset_mode(pdata);
  1645. case XGBE_PORT_MODE_1000BASE_X:
  1646. case XGBE_PORT_MODE_10GBASE_R:
  1647. case XGBE_PORT_MODE_SFP:
  1648. /* No switching, so just return current mode */
  1649. return xgbe_phy_cur_mode(pdata);
  1650. default:
  1651. return XGBE_MODE_UNKNOWN;
  1652. }
  1653. }
  1654. static enum xgbe_mode xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data,
  1655. int speed)
  1656. {
  1657. switch (speed) {
  1658. case SPEED_1000:
  1659. return XGBE_MODE_X;
  1660. case SPEED_10000:
  1661. return XGBE_MODE_KR;
  1662. default:
  1663. return XGBE_MODE_UNKNOWN;
  1664. }
  1665. }
  1666. static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data,
  1667. int speed)
  1668. {
  1669. switch (speed) {
  1670. case SPEED_100:
  1671. return XGBE_MODE_SGMII_100;
  1672. case SPEED_1000:
  1673. return XGBE_MODE_SGMII_1000;
  1674. case SPEED_2500:
  1675. return XGBE_MODE_KX_2500;
  1676. case SPEED_10000:
  1677. return XGBE_MODE_KR;
  1678. default:
  1679. return XGBE_MODE_UNKNOWN;
  1680. }
  1681. }
  1682. static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data,
  1683. int speed)
  1684. {
  1685. switch (speed) {
  1686. case SPEED_100:
  1687. return XGBE_MODE_SGMII_100;
  1688. case SPEED_1000:
  1689. if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T)
  1690. return XGBE_MODE_SGMII_1000;
  1691. else
  1692. return XGBE_MODE_X;
  1693. case SPEED_10000:
  1694. case SPEED_UNKNOWN:
  1695. return XGBE_MODE_SFI;
  1696. default:
  1697. return XGBE_MODE_UNKNOWN;
  1698. }
  1699. }
  1700. static enum xgbe_mode xgbe_phy_get_bp_2500_mode(int speed)
  1701. {
  1702. switch (speed) {
  1703. case SPEED_2500:
  1704. return XGBE_MODE_KX_2500;
  1705. default:
  1706. return XGBE_MODE_UNKNOWN;
  1707. }
  1708. }
  1709. static enum xgbe_mode xgbe_phy_get_bp_mode(int speed)
  1710. {
  1711. switch (speed) {
  1712. case SPEED_1000:
  1713. return XGBE_MODE_KX_1000;
  1714. case SPEED_10000:
  1715. return XGBE_MODE_KR;
  1716. default:
  1717. return XGBE_MODE_UNKNOWN;
  1718. }
  1719. }
  1720. static enum xgbe_mode xgbe_phy_get_mode(struct xgbe_prv_data *pdata,
  1721. int speed)
  1722. {
  1723. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1724. switch (phy_data->port_mode) {
  1725. case XGBE_PORT_MODE_BACKPLANE:
  1726. return xgbe_phy_get_bp_mode(speed);
  1727. case XGBE_PORT_MODE_BACKPLANE_2500:
  1728. return xgbe_phy_get_bp_2500_mode(speed);
  1729. case XGBE_PORT_MODE_1000BASE_T:
  1730. case XGBE_PORT_MODE_NBASE_T:
  1731. case XGBE_PORT_MODE_10GBASE_T:
  1732. return xgbe_phy_get_baset_mode(phy_data, speed);
  1733. case XGBE_PORT_MODE_1000BASE_X:
  1734. case XGBE_PORT_MODE_10GBASE_R:
  1735. return xgbe_phy_get_basex_mode(phy_data, speed);
  1736. case XGBE_PORT_MODE_SFP:
  1737. return xgbe_phy_get_sfp_mode(phy_data, speed);
  1738. default:
  1739. return XGBE_MODE_UNKNOWN;
  1740. }
  1741. }
  1742. static void xgbe_phy_set_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
  1743. {
  1744. switch (mode) {
  1745. case XGBE_MODE_KX_1000:
  1746. xgbe_phy_kx_1000_mode(pdata);
  1747. break;
  1748. case XGBE_MODE_KX_2500:
  1749. xgbe_phy_kx_2500_mode(pdata);
  1750. break;
  1751. case XGBE_MODE_KR:
  1752. xgbe_phy_kr_mode(pdata);
  1753. break;
  1754. case XGBE_MODE_SGMII_100:
  1755. xgbe_phy_sgmii_100_mode(pdata);
  1756. break;
  1757. case XGBE_MODE_SGMII_1000:
  1758. xgbe_phy_sgmii_1000_mode(pdata);
  1759. break;
  1760. case XGBE_MODE_X:
  1761. xgbe_phy_x_mode(pdata);
  1762. break;
  1763. case XGBE_MODE_SFI:
  1764. xgbe_phy_sfi_mode(pdata);
  1765. break;
  1766. default:
  1767. break;
  1768. }
  1769. }
  1770. static bool xgbe_phy_check_mode(struct xgbe_prv_data *pdata,
  1771. enum xgbe_mode mode, bool advert)
  1772. {
  1773. if (pdata->phy.autoneg == AUTONEG_ENABLE) {
  1774. return advert;
  1775. } else {
  1776. enum xgbe_mode cur_mode;
  1777. cur_mode = xgbe_phy_get_mode(pdata, pdata->phy.speed);
  1778. if (cur_mode == mode)
  1779. return true;
  1780. }
  1781. return false;
  1782. }
  1783. static bool xgbe_phy_use_basex_mode(struct xgbe_prv_data *pdata,
  1784. enum xgbe_mode mode)
  1785. {
  1786. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1787. switch (mode) {
  1788. case XGBE_MODE_X:
  1789. return xgbe_phy_check_mode(pdata, mode,
  1790. XGBE_ADV(lks, 1000baseX_Full));
  1791. case XGBE_MODE_KR:
  1792. return xgbe_phy_check_mode(pdata, mode,
  1793. XGBE_ADV(lks, 10000baseKR_Full));
  1794. default:
  1795. return false;
  1796. }
  1797. }
  1798. static bool xgbe_phy_use_baset_mode(struct xgbe_prv_data *pdata,
  1799. enum xgbe_mode mode)
  1800. {
  1801. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1802. switch (mode) {
  1803. case XGBE_MODE_SGMII_100:
  1804. return xgbe_phy_check_mode(pdata, mode,
  1805. XGBE_ADV(lks, 100baseT_Full));
  1806. case XGBE_MODE_SGMII_1000:
  1807. return xgbe_phy_check_mode(pdata, mode,
  1808. XGBE_ADV(lks, 1000baseT_Full));
  1809. case XGBE_MODE_KX_2500:
  1810. return xgbe_phy_check_mode(pdata, mode,
  1811. XGBE_ADV(lks, 2500baseT_Full));
  1812. case XGBE_MODE_KR:
  1813. return xgbe_phy_check_mode(pdata, mode,
  1814. XGBE_ADV(lks, 10000baseT_Full));
  1815. default:
  1816. return false;
  1817. }
  1818. }
  1819. static bool xgbe_phy_use_sfp_mode(struct xgbe_prv_data *pdata,
  1820. enum xgbe_mode mode)
  1821. {
  1822. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1823. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1824. switch (mode) {
  1825. case XGBE_MODE_X:
  1826. if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T)
  1827. return false;
  1828. return xgbe_phy_check_mode(pdata, mode,
  1829. XGBE_ADV(lks, 1000baseX_Full));
  1830. case XGBE_MODE_SGMII_100:
  1831. if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
  1832. return false;
  1833. return xgbe_phy_check_mode(pdata, mode,
  1834. XGBE_ADV(lks, 100baseT_Full));
  1835. case XGBE_MODE_SGMII_1000:
  1836. if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
  1837. return false;
  1838. return xgbe_phy_check_mode(pdata, mode,
  1839. XGBE_ADV(lks, 1000baseT_Full));
  1840. case XGBE_MODE_SFI:
  1841. if (phy_data->sfp_mod_absent)
  1842. return true;
  1843. return xgbe_phy_check_mode(pdata, mode,
  1844. XGBE_ADV(lks, 10000baseSR_Full) ||
  1845. XGBE_ADV(lks, 10000baseLR_Full) ||
  1846. XGBE_ADV(lks, 10000baseLRM_Full) ||
  1847. XGBE_ADV(lks, 10000baseER_Full) ||
  1848. XGBE_ADV(lks, 10000baseCR_Full));
  1849. default:
  1850. return false;
  1851. }
  1852. }
  1853. static bool xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data *pdata,
  1854. enum xgbe_mode mode)
  1855. {
  1856. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1857. switch (mode) {
  1858. case XGBE_MODE_KX_2500:
  1859. return xgbe_phy_check_mode(pdata, mode,
  1860. XGBE_ADV(lks, 2500baseX_Full));
  1861. default:
  1862. return false;
  1863. }
  1864. }
  1865. static bool xgbe_phy_use_bp_mode(struct xgbe_prv_data *pdata,
  1866. enum xgbe_mode mode)
  1867. {
  1868. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  1869. switch (mode) {
  1870. case XGBE_MODE_KX_1000:
  1871. return xgbe_phy_check_mode(pdata, mode,
  1872. XGBE_ADV(lks, 1000baseKX_Full));
  1873. case XGBE_MODE_KR:
  1874. return xgbe_phy_check_mode(pdata, mode,
  1875. XGBE_ADV(lks, 10000baseKR_Full));
  1876. default:
  1877. return false;
  1878. }
  1879. }
  1880. static bool xgbe_phy_use_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
  1881. {
  1882. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1883. switch (phy_data->port_mode) {
  1884. case XGBE_PORT_MODE_BACKPLANE:
  1885. return xgbe_phy_use_bp_mode(pdata, mode);
  1886. case XGBE_PORT_MODE_BACKPLANE_2500:
  1887. return xgbe_phy_use_bp_2500_mode(pdata, mode);
  1888. case XGBE_PORT_MODE_1000BASE_T:
  1889. case XGBE_PORT_MODE_NBASE_T:
  1890. case XGBE_PORT_MODE_10GBASE_T:
  1891. return xgbe_phy_use_baset_mode(pdata, mode);
  1892. case XGBE_PORT_MODE_1000BASE_X:
  1893. case XGBE_PORT_MODE_10GBASE_R:
  1894. return xgbe_phy_use_basex_mode(pdata, mode);
  1895. case XGBE_PORT_MODE_SFP:
  1896. return xgbe_phy_use_sfp_mode(pdata, mode);
  1897. default:
  1898. return false;
  1899. }
  1900. }
  1901. static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data,
  1902. int speed)
  1903. {
  1904. switch (speed) {
  1905. case SPEED_1000:
  1906. return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X);
  1907. case SPEED_10000:
  1908. return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R);
  1909. default:
  1910. return false;
  1911. }
  1912. }
  1913. static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data *phy_data,
  1914. int speed)
  1915. {
  1916. switch (speed) {
  1917. case SPEED_100:
  1918. case SPEED_1000:
  1919. return true;
  1920. case SPEED_2500:
  1921. return (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T);
  1922. case SPEED_10000:
  1923. return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T);
  1924. default:
  1925. return false;
  1926. }
  1927. }
  1928. static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data *phy_data,
  1929. int speed)
  1930. {
  1931. switch (speed) {
  1932. case SPEED_100:
  1933. return (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000);
  1934. case SPEED_1000:
  1935. return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) ||
  1936. (phy_data->sfp_speed == XGBE_SFP_SPEED_1000));
  1937. case SPEED_10000:
  1938. return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000);
  1939. default:
  1940. return false;
  1941. }
  1942. }
  1943. static bool xgbe_phy_valid_speed_bp_2500_mode(int speed)
  1944. {
  1945. switch (speed) {
  1946. case SPEED_2500:
  1947. return true;
  1948. default:
  1949. return false;
  1950. }
  1951. }
  1952. static bool xgbe_phy_valid_speed_bp_mode(int speed)
  1953. {
  1954. switch (speed) {
  1955. case SPEED_1000:
  1956. case SPEED_10000:
  1957. return true;
  1958. default:
  1959. return false;
  1960. }
  1961. }
  1962. static bool xgbe_phy_valid_speed(struct xgbe_prv_data *pdata, int speed)
  1963. {
  1964. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1965. switch (phy_data->port_mode) {
  1966. case XGBE_PORT_MODE_BACKPLANE:
  1967. return xgbe_phy_valid_speed_bp_mode(speed);
  1968. case XGBE_PORT_MODE_BACKPLANE_2500:
  1969. return xgbe_phy_valid_speed_bp_2500_mode(speed);
  1970. case XGBE_PORT_MODE_1000BASE_T:
  1971. case XGBE_PORT_MODE_NBASE_T:
  1972. case XGBE_PORT_MODE_10GBASE_T:
  1973. return xgbe_phy_valid_speed_baset_mode(phy_data, speed);
  1974. case XGBE_PORT_MODE_1000BASE_X:
  1975. case XGBE_PORT_MODE_10GBASE_R:
  1976. return xgbe_phy_valid_speed_basex_mode(phy_data, speed);
  1977. case XGBE_PORT_MODE_SFP:
  1978. return xgbe_phy_valid_speed_sfp_mode(phy_data, speed);
  1979. default:
  1980. return false;
  1981. }
  1982. }
  1983. static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)
  1984. {
  1985. struct xgbe_phy_data *phy_data = pdata->phy_data;
  1986. unsigned int reg;
  1987. int ret;
  1988. *an_restart = 0;
  1989. if (phy_data->port_mode == XGBE_PORT_MODE_SFP) {
  1990. /* Check SFP signals */
  1991. xgbe_phy_sfp_detect(pdata);
  1992. if (phy_data->sfp_changed) {
  1993. *an_restart = 1;
  1994. return 0;
  1995. }
  1996. if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los)
  1997. return 0;
  1998. }
  1999. if (phy_data->phydev) {
  2000. /* Check external PHY */
  2001. ret = phy_read_status(phy_data->phydev);
  2002. if (ret < 0)
  2003. return 0;
  2004. if ((pdata->phy.autoneg == AUTONEG_ENABLE) &&
  2005. !phy_aneg_done(phy_data->phydev))
  2006. return 0;
  2007. if (!phy_data->phydev->link)
  2008. return 0;
  2009. }
  2010. /* Link status is latched low, so read once to clear
  2011. * and then read again to get current state
  2012. */
  2013. reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
  2014. reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
  2015. if (reg & MDIO_STAT1_LSTATUS)
  2016. return 1;
  2017. /* No link, attempt a receiver reset cycle */
  2018. if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) {
  2019. phy_data->rrc_count = 0;
  2020. xgbe_phy_rrc(pdata);
  2021. }
  2022. return 0;
  2023. }
  2024. static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data *pdata)
  2025. {
  2026. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2027. unsigned int reg;
  2028. reg = XP_IOREAD(pdata, XP_PROP_3);
  2029. phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 +
  2030. XP_GET_BITS(reg, XP_PROP_3, GPIO_ADDR);
  2031. phy_data->sfp_gpio_mask = XP_GET_BITS(reg, XP_PROP_3, GPIO_MASK);
  2032. phy_data->sfp_gpio_rx_los = XP_GET_BITS(reg, XP_PROP_3,
  2033. GPIO_RX_LOS);
  2034. phy_data->sfp_gpio_tx_fault = XP_GET_BITS(reg, XP_PROP_3,
  2035. GPIO_TX_FAULT);
  2036. phy_data->sfp_gpio_mod_absent = XP_GET_BITS(reg, XP_PROP_3,
  2037. GPIO_MOD_ABS);
  2038. phy_data->sfp_gpio_rate_select = XP_GET_BITS(reg, XP_PROP_3,
  2039. GPIO_RATE_SELECT);
  2040. if (netif_msg_probe(pdata)) {
  2041. dev_dbg(pdata->dev, "SFP: gpio_address=%#x\n",
  2042. phy_data->sfp_gpio_address);
  2043. dev_dbg(pdata->dev, "SFP: gpio_mask=%#x\n",
  2044. phy_data->sfp_gpio_mask);
  2045. dev_dbg(pdata->dev, "SFP: gpio_rx_los=%u\n",
  2046. phy_data->sfp_gpio_rx_los);
  2047. dev_dbg(pdata->dev, "SFP: gpio_tx_fault=%u\n",
  2048. phy_data->sfp_gpio_tx_fault);
  2049. dev_dbg(pdata->dev, "SFP: gpio_mod_absent=%u\n",
  2050. phy_data->sfp_gpio_mod_absent);
  2051. dev_dbg(pdata->dev, "SFP: gpio_rate_select=%u\n",
  2052. phy_data->sfp_gpio_rate_select);
  2053. }
  2054. }
  2055. static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data *pdata)
  2056. {
  2057. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2058. unsigned int reg, mux_addr_hi, mux_addr_lo;
  2059. reg = XP_IOREAD(pdata, XP_PROP_4);
  2060. mux_addr_hi = XP_GET_BITS(reg, XP_PROP_4, MUX_ADDR_HI);
  2061. mux_addr_lo = XP_GET_BITS(reg, XP_PROP_4, MUX_ADDR_LO);
  2062. if (mux_addr_lo == XGBE_SFP_DIRECT)
  2063. return;
  2064. phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545;
  2065. phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo;
  2066. phy_data->sfp_mux_channel = XP_GET_BITS(reg, XP_PROP_4, MUX_CHAN);
  2067. if (netif_msg_probe(pdata)) {
  2068. dev_dbg(pdata->dev, "SFP: mux_address=%#x\n",
  2069. phy_data->sfp_mux_address);
  2070. dev_dbg(pdata->dev, "SFP: mux_channel=%u\n",
  2071. phy_data->sfp_mux_channel);
  2072. }
  2073. }
  2074. static void xgbe_phy_sfp_setup(struct xgbe_prv_data *pdata)
  2075. {
  2076. xgbe_phy_sfp_comm_setup(pdata);
  2077. xgbe_phy_sfp_gpio_setup(pdata);
  2078. }
  2079. static int xgbe_phy_int_mdio_reset(struct xgbe_prv_data *pdata)
  2080. {
  2081. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2082. unsigned int ret;
  2083. ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio);
  2084. if (ret)
  2085. return ret;
  2086. ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio);
  2087. return ret;
  2088. }
  2089. static int xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data *pdata)
  2090. {
  2091. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2092. u8 gpio_reg, gpio_ports[2], gpio_data[3];
  2093. int ret;
  2094. /* Read the output port registers */
  2095. gpio_reg = 2;
  2096. ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr,
  2097. &gpio_reg, sizeof(gpio_reg),
  2098. gpio_ports, sizeof(gpio_ports));
  2099. if (ret)
  2100. return ret;
  2101. /* Prepare to write the GPIO data */
  2102. gpio_data[0] = 2;
  2103. gpio_data[1] = gpio_ports[0];
  2104. gpio_data[2] = gpio_ports[1];
  2105. /* Set the GPIO pin */
  2106. if (phy_data->mdio_reset_gpio < 8)
  2107. gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8));
  2108. else
  2109. gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8));
  2110. /* Write the output port registers */
  2111. ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr,
  2112. gpio_data, sizeof(gpio_data));
  2113. if (ret)
  2114. return ret;
  2115. /* Clear the GPIO pin */
  2116. if (phy_data->mdio_reset_gpio < 8)
  2117. gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8));
  2118. else
  2119. gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8));
  2120. /* Write the output port registers */
  2121. ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr,
  2122. gpio_data, sizeof(gpio_data));
  2123. return ret;
  2124. }
  2125. static int xgbe_phy_mdio_reset(struct xgbe_prv_data *pdata)
  2126. {
  2127. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2128. int ret;
  2129. if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO)
  2130. return 0;
  2131. ret = xgbe_phy_get_comm_ownership(pdata);
  2132. if (ret)
  2133. return ret;
  2134. if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO)
  2135. ret = xgbe_phy_i2c_mdio_reset(pdata);
  2136. else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO)
  2137. ret = xgbe_phy_int_mdio_reset(pdata);
  2138. xgbe_phy_put_comm_ownership(pdata);
  2139. return ret;
  2140. }
  2141. static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data)
  2142. {
  2143. if (!phy_data->redrv)
  2144. return false;
  2145. if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX)
  2146. return true;
  2147. switch (phy_data->redrv_model) {
  2148. case XGBE_PHY_REDRV_MODEL_4223:
  2149. if (phy_data->redrv_lane > 3)
  2150. return true;
  2151. break;
  2152. case XGBE_PHY_REDRV_MODEL_4227:
  2153. if (phy_data->redrv_lane > 1)
  2154. return true;
  2155. break;
  2156. default:
  2157. return true;
  2158. }
  2159. return false;
  2160. }
  2161. static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data *pdata)
  2162. {
  2163. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2164. unsigned int reg;
  2165. if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO)
  2166. return 0;
  2167. reg = XP_IOREAD(pdata, XP_PROP_3);
  2168. phy_data->mdio_reset = XP_GET_BITS(reg, XP_PROP_3, MDIO_RESET);
  2169. switch (phy_data->mdio_reset) {
  2170. case XGBE_MDIO_RESET_NONE:
  2171. case XGBE_MDIO_RESET_I2C_GPIO:
  2172. case XGBE_MDIO_RESET_INT_GPIO:
  2173. break;
  2174. default:
  2175. dev_err(pdata->dev, "unsupported MDIO reset (%#x)\n",
  2176. phy_data->mdio_reset);
  2177. return -EINVAL;
  2178. }
  2179. if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) {
  2180. phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 +
  2181. XP_GET_BITS(reg, XP_PROP_3,
  2182. MDIO_RESET_I2C_ADDR);
  2183. phy_data->mdio_reset_gpio = XP_GET_BITS(reg, XP_PROP_3,
  2184. MDIO_RESET_I2C_GPIO);
  2185. } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) {
  2186. phy_data->mdio_reset_gpio = XP_GET_BITS(reg, XP_PROP_3,
  2187. MDIO_RESET_INT_GPIO);
  2188. }
  2189. return 0;
  2190. }
  2191. static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data *pdata)
  2192. {
  2193. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2194. switch (phy_data->port_mode) {
  2195. case XGBE_PORT_MODE_BACKPLANE:
  2196. if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
  2197. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
  2198. return false;
  2199. break;
  2200. case XGBE_PORT_MODE_BACKPLANE_2500:
  2201. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)
  2202. return false;
  2203. break;
  2204. case XGBE_PORT_MODE_1000BASE_T:
  2205. if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
  2206. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000))
  2207. return false;
  2208. break;
  2209. case XGBE_PORT_MODE_1000BASE_X:
  2210. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
  2211. return false;
  2212. break;
  2213. case XGBE_PORT_MODE_NBASE_T:
  2214. if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
  2215. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
  2216. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500))
  2217. return false;
  2218. break;
  2219. case XGBE_PORT_MODE_10GBASE_T:
  2220. if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
  2221. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
  2222. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
  2223. return false;
  2224. break;
  2225. case XGBE_PORT_MODE_10GBASE_R:
  2226. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)
  2227. return false;
  2228. break;
  2229. case XGBE_PORT_MODE_SFP:
  2230. if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
  2231. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
  2232. (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
  2233. return false;
  2234. break;
  2235. default:
  2236. break;
  2237. }
  2238. return true;
  2239. }
  2240. static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data *pdata)
  2241. {
  2242. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2243. switch (phy_data->port_mode) {
  2244. case XGBE_PORT_MODE_BACKPLANE:
  2245. case XGBE_PORT_MODE_BACKPLANE_2500:
  2246. if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE)
  2247. return false;
  2248. break;
  2249. case XGBE_PORT_MODE_1000BASE_T:
  2250. case XGBE_PORT_MODE_1000BASE_X:
  2251. case XGBE_PORT_MODE_NBASE_T:
  2252. case XGBE_PORT_MODE_10GBASE_T:
  2253. case XGBE_PORT_MODE_10GBASE_R:
  2254. if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO)
  2255. return false;
  2256. break;
  2257. case XGBE_PORT_MODE_SFP:
  2258. if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
  2259. return false;
  2260. break;
  2261. default:
  2262. break;
  2263. }
  2264. return true;
  2265. }
  2266. static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata)
  2267. {
  2268. unsigned int reg;
  2269. reg = XP_IOREAD(pdata, XP_PROP_0);
  2270. if (!XP_GET_BITS(reg, XP_PROP_0, PORT_SPEEDS))
  2271. return false;
  2272. if (!XP_GET_BITS(reg, XP_PROP_0, CONN_TYPE))
  2273. return false;
  2274. return true;
  2275. }
  2276. static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata)
  2277. {
  2278. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2279. if (!pdata->debugfs_an_cdr_workaround)
  2280. return;
  2281. if (!phy_data->phy_cdr_notrack)
  2282. return;
  2283. usleep_range(phy_data->phy_cdr_delay,
  2284. phy_data->phy_cdr_delay + 500);
  2285. XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL,
  2286. XGBE_PMA_CDR_TRACK_EN_MASK,
  2287. XGBE_PMA_CDR_TRACK_EN_ON);
  2288. phy_data->phy_cdr_notrack = 0;
  2289. }
  2290. static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata)
  2291. {
  2292. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2293. if (!pdata->debugfs_an_cdr_workaround)
  2294. return;
  2295. if (phy_data->phy_cdr_notrack)
  2296. return;
  2297. XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL,
  2298. XGBE_PMA_CDR_TRACK_EN_MASK,
  2299. XGBE_PMA_CDR_TRACK_EN_OFF);
  2300. xgbe_phy_rrc(pdata);
  2301. phy_data->phy_cdr_notrack = 1;
  2302. }
  2303. static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata)
  2304. {
  2305. if (!pdata->debugfs_an_cdr_track_early)
  2306. xgbe_phy_cdr_track(pdata);
  2307. }
  2308. static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata)
  2309. {
  2310. if (pdata->debugfs_an_cdr_track_early)
  2311. xgbe_phy_cdr_track(pdata);
  2312. }
  2313. static void xgbe_phy_an_post(struct xgbe_prv_data *pdata)
  2314. {
  2315. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2316. switch (pdata->an_mode) {
  2317. case XGBE_AN_MODE_CL73:
  2318. case XGBE_AN_MODE_CL73_REDRV:
  2319. if (phy_data->cur_mode != XGBE_MODE_KR)
  2320. break;
  2321. xgbe_phy_cdr_track(pdata);
  2322. switch (pdata->an_result) {
  2323. case XGBE_AN_READY:
  2324. case XGBE_AN_COMPLETE:
  2325. break;
  2326. default:
  2327. if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX)
  2328. phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC;
  2329. else
  2330. phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT;
  2331. break;
  2332. }
  2333. break;
  2334. default:
  2335. break;
  2336. }
  2337. }
  2338. static void xgbe_phy_an_pre(struct xgbe_prv_data *pdata)
  2339. {
  2340. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2341. switch (pdata->an_mode) {
  2342. case XGBE_AN_MODE_CL73:
  2343. case XGBE_AN_MODE_CL73_REDRV:
  2344. if (phy_data->cur_mode != XGBE_MODE_KR)
  2345. break;
  2346. xgbe_phy_cdr_notrack(pdata);
  2347. break;
  2348. default:
  2349. break;
  2350. }
  2351. }
  2352. static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
  2353. {
  2354. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2355. /* If we have an external PHY, free it */
  2356. xgbe_phy_free_phy_device(pdata);
  2357. /* Reset SFP data */
  2358. xgbe_phy_sfp_reset(phy_data);
  2359. xgbe_phy_sfp_mod_absent(pdata);
  2360. /* Reset CDR support */
  2361. xgbe_phy_cdr_track(pdata);
  2362. /* Power off the PHY */
  2363. xgbe_phy_power_off(pdata);
  2364. /* Stop the I2C controller */
  2365. pdata->i2c_if.i2c_stop(pdata);
  2366. }
  2367. static int xgbe_phy_start(struct xgbe_prv_data *pdata)
  2368. {
  2369. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2370. int ret;
  2371. /* Start the I2C controller */
  2372. ret = pdata->i2c_if.i2c_start(pdata);
  2373. if (ret)
  2374. return ret;
  2375. /* Set the proper MDIO mode for the re-driver */
  2376. if (phy_data->redrv && !phy_data->redrv_if) {
  2377. ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr,
  2378. XGBE_MDIO_MODE_CL22);
  2379. if (ret) {
  2380. netdev_err(pdata->netdev,
  2381. "redriver mdio port not compatible (%u)\n",
  2382. phy_data->redrv_addr);
  2383. return ret;
  2384. }
  2385. }
  2386. /* Start in highest supported mode */
  2387. xgbe_phy_set_mode(pdata, phy_data->start_mode);
  2388. /* Reset CDR support */
  2389. xgbe_phy_cdr_track(pdata);
  2390. /* After starting the I2C controller, we can check for an SFP */
  2391. switch (phy_data->port_mode) {
  2392. case XGBE_PORT_MODE_SFP:
  2393. xgbe_phy_sfp_detect(pdata);
  2394. break;
  2395. default:
  2396. break;
  2397. }
  2398. /* If we have an external PHY, start it */
  2399. ret = xgbe_phy_find_phy_device(pdata);
  2400. if (ret)
  2401. goto err_i2c;
  2402. return 0;
  2403. err_i2c:
  2404. pdata->i2c_if.i2c_stop(pdata);
  2405. return ret;
  2406. }
  2407. static int xgbe_phy_reset(struct xgbe_prv_data *pdata)
  2408. {
  2409. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2410. enum xgbe_mode cur_mode;
  2411. int ret;
  2412. /* Reset by power cycling the PHY */
  2413. cur_mode = phy_data->cur_mode;
  2414. xgbe_phy_power_off(pdata);
  2415. xgbe_phy_set_mode(pdata, cur_mode);
  2416. if (!phy_data->phydev)
  2417. return 0;
  2418. /* Reset the external PHY */
  2419. ret = xgbe_phy_mdio_reset(pdata);
  2420. if (ret)
  2421. return ret;
  2422. return phy_init_hw(phy_data->phydev);
  2423. }
  2424. static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
  2425. {
  2426. struct xgbe_phy_data *phy_data = pdata->phy_data;
  2427. /* Unregister for driving external PHYs */
  2428. mdiobus_unregister(phy_data->mii);
  2429. }
  2430. static int xgbe_phy_init(struct xgbe_prv_data *pdata)
  2431. {
  2432. struct ethtool_link_ksettings *lks = &pdata->phy.lks;
  2433. struct xgbe_phy_data *phy_data;
  2434. struct mii_bus *mii;
  2435. unsigned int reg;
  2436. int ret;
  2437. /* Check if enabled */
  2438. if (!xgbe_phy_port_enabled(pdata)) {
  2439. dev_info(pdata->dev, "device is not enabled\n");
  2440. return -ENODEV;
  2441. }
  2442. /* Initialize the I2C controller */
  2443. ret = pdata->i2c_if.i2c_init(pdata);
  2444. if (ret)
  2445. return ret;
  2446. phy_data = devm_kzalloc(pdata->dev, sizeof(*phy_data), GFP_KERNEL);
  2447. if (!phy_data)
  2448. return -ENOMEM;
  2449. pdata->phy_data = phy_data;
  2450. reg = XP_IOREAD(pdata, XP_PROP_0);
  2451. phy_data->port_mode = XP_GET_BITS(reg, XP_PROP_0, PORT_MODE);
  2452. phy_data->port_id = XP_GET_BITS(reg, XP_PROP_0, PORT_ID);
  2453. phy_data->port_speeds = XP_GET_BITS(reg, XP_PROP_0, PORT_SPEEDS);
  2454. phy_data->conn_type = XP_GET_BITS(reg, XP_PROP_0, CONN_TYPE);
  2455. phy_data->mdio_addr = XP_GET_BITS(reg, XP_PROP_0, MDIO_ADDR);
  2456. if (netif_msg_probe(pdata)) {
  2457. dev_dbg(pdata->dev, "port mode=%u\n", phy_data->port_mode);
  2458. dev_dbg(pdata->dev, "port id=%u\n", phy_data->port_id);
  2459. dev_dbg(pdata->dev, "port speeds=%#x\n", phy_data->port_speeds);
  2460. dev_dbg(pdata->dev, "conn type=%u\n", phy_data->conn_type);
  2461. dev_dbg(pdata->dev, "mdio addr=%u\n", phy_data->mdio_addr);
  2462. }
  2463. reg = XP_IOREAD(pdata, XP_PROP_4);
  2464. phy_data->redrv = XP_GET_BITS(reg, XP_PROP_4, REDRV_PRESENT);
  2465. phy_data->redrv_if = XP_GET_BITS(reg, XP_PROP_4, REDRV_IF);
  2466. phy_data->redrv_addr = XP_GET_BITS(reg, XP_PROP_4, REDRV_ADDR);
  2467. phy_data->redrv_lane = XP_GET_BITS(reg, XP_PROP_4, REDRV_LANE);
  2468. phy_data->redrv_model = XP_GET_BITS(reg, XP_PROP_4, REDRV_MODEL);
  2469. if (phy_data->redrv && netif_msg_probe(pdata)) {
  2470. dev_dbg(pdata->dev, "redrv present\n");
  2471. dev_dbg(pdata->dev, "redrv i/f=%u\n", phy_data->redrv_if);
  2472. dev_dbg(pdata->dev, "redrv addr=%#x\n", phy_data->redrv_addr);
  2473. dev_dbg(pdata->dev, "redrv lane=%u\n", phy_data->redrv_lane);
  2474. dev_dbg(pdata->dev, "redrv model=%u\n", phy_data->redrv_model);
  2475. }
  2476. /* Validate the connection requested */
  2477. if (xgbe_phy_conn_type_mismatch(pdata)) {
  2478. dev_err(pdata->dev, "phy mode/connection mismatch (%#x/%#x)\n",
  2479. phy_data->port_mode, phy_data->conn_type);
  2480. return -EINVAL;
  2481. }
  2482. /* Validate the mode requested */
  2483. if (xgbe_phy_port_mode_mismatch(pdata)) {
  2484. dev_err(pdata->dev, "phy mode/speed mismatch (%#x/%#x)\n",
  2485. phy_data->port_mode, phy_data->port_speeds);
  2486. return -EINVAL;
  2487. }
  2488. /* Check for and validate MDIO reset support */
  2489. ret = xgbe_phy_mdio_reset_setup(pdata);
  2490. if (ret)
  2491. return ret;
  2492. /* Validate the re-driver information */
  2493. if (xgbe_phy_redrv_error(phy_data)) {
  2494. dev_err(pdata->dev, "phy re-driver settings error\n");
  2495. return -EINVAL;
  2496. }
  2497. pdata->kr_redrv = phy_data->redrv;
  2498. /* Indicate current mode is unknown */
  2499. phy_data->cur_mode = XGBE_MODE_UNKNOWN;
  2500. /* Initialize supported features */
  2501. XGBE_ZERO_SUP(lks);
  2502. switch (phy_data->port_mode) {
  2503. /* Backplane support */
  2504. case XGBE_PORT_MODE_BACKPLANE:
  2505. XGBE_SET_SUP(lks, Autoneg);
  2506. XGBE_SET_SUP(lks, Pause);
  2507. XGBE_SET_SUP(lks, Asym_Pause);
  2508. XGBE_SET_SUP(lks, Backplane);
  2509. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
  2510. XGBE_SET_SUP(lks, 1000baseKX_Full);
  2511. phy_data->start_mode = XGBE_MODE_KX_1000;
  2512. }
  2513. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
  2514. XGBE_SET_SUP(lks, 10000baseKR_Full);
  2515. if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE)
  2516. XGBE_SET_SUP(lks, 10000baseR_FEC);
  2517. phy_data->start_mode = XGBE_MODE_KR;
  2518. }
  2519. phy_data->phydev_mode = XGBE_MDIO_MODE_NONE;
  2520. break;
  2521. case XGBE_PORT_MODE_BACKPLANE_2500:
  2522. XGBE_SET_SUP(lks, Pause);
  2523. XGBE_SET_SUP(lks, Asym_Pause);
  2524. XGBE_SET_SUP(lks, Backplane);
  2525. XGBE_SET_SUP(lks, 2500baseX_Full);
  2526. phy_data->start_mode = XGBE_MODE_KX_2500;
  2527. phy_data->phydev_mode = XGBE_MDIO_MODE_NONE;
  2528. break;
  2529. /* MDIO 1GBase-T support */
  2530. case XGBE_PORT_MODE_1000BASE_T:
  2531. XGBE_SET_SUP(lks, Autoneg);
  2532. XGBE_SET_SUP(lks, Pause);
  2533. XGBE_SET_SUP(lks, Asym_Pause);
  2534. XGBE_SET_SUP(lks, TP);
  2535. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) {
  2536. XGBE_SET_SUP(lks, 100baseT_Full);
  2537. phy_data->start_mode = XGBE_MODE_SGMII_100;
  2538. }
  2539. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
  2540. XGBE_SET_SUP(lks, 1000baseT_Full);
  2541. phy_data->start_mode = XGBE_MODE_SGMII_1000;
  2542. }
  2543. phy_data->phydev_mode = XGBE_MDIO_MODE_CL22;
  2544. break;
  2545. /* MDIO Base-X support */
  2546. case XGBE_PORT_MODE_1000BASE_X:
  2547. XGBE_SET_SUP(lks, Autoneg);
  2548. XGBE_SET_SUP(lks, Pause);
  2549. XGBE_SET_SUP(lks, Asym_Pause);
  2550. XGBE_SET_SUP(lks, FIBRE);
  2551. XGBE_SET_SUP(lks, 1000baseX_Full);
  2552. phy_data->start_mode = XGBE_MODE_X;
  2553. phy_data->phydev_mode = XGBE_MDIO_MODE_CL22;
  2554. break;
  2555. /* MDIO NBase-T support */
  2556. case XGBE_PORT_MODE_NBASE_T:
  2557. XGBE_SET_SUP(lks, Autoneg);
  2558. XGBE_SET_SUP(lks, Pause);
  2559. XGBE_SET_SUP(lks, Asym_Pause);
  2560. XGBE_SET_SUP(lks, TP);
  2561. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) {
  2562. XGBE_SET_SUP(lks, 100baseT_Full);
  2563. phy_data->start_mode = XGBE_MODE_SGMII_100;
  2564. }
  2565. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
  2566. XGBE_SET_SUP(lks, 1000baseT_Full);
  2567. phy_data->start_mode = XGBE_MODE_SGMII_1000;
  2568. }
  2569. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) {
  2570. XGBE_SET_SUP(lks, 2500baseT_Full);
  2571. phy_data->start_mode = XGBE_MODE_KX_2500;
  2572. }
  2573. phy_data->phydev_mode = XGBE_MDIO_MODE_CL45;
  2574. break;
  2575. /* 10GBase-T support */
  2576. case XGBE_PORT_MODE_10GBASE_T:
  2577. XGBE_SET_SUP(lks, Autoneg);
  2578. XGBE_SET_SUP(lks, Pause);
  2579. XGBE_SET_SUP(lks, Asym_Pause);
  2580. XGBE_SET_SUP(lks, TP);
  2581. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) {
  2582. XGBE_SET_SUP(lks, 100baseT_Full);
  2583. phy_data->start_mode = XGBE_MODE_SGMII_100;
  2584. }
  2585. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
  2586. XGBE_SET_SUP(lks, 1000baseT_Full);
  2587. phy_data->start_mode = XGBE_MODE_SGMII_1000;
  2588. }
  2589. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
  2590. XGBE_SET_SUP(lks, 10000baseT_Full);
  2591. phy_data->start_mode = XGBE_MODE_KR;
  2592. }
  2593. phy_data->phydev_mode = XGBE_MDIO_MODE_CL45;
  2594. break;
  2595. /* 10GBase-R support */
  2596. case XGBE_PORT_MODE_10GBASE_R:
  2597. XGBE_SET_SUP(lks, Autoneg);
  2598. XGBE_SET_SUP(lks, Pause);
  2599. XGBE_SET_SUP(lks, Asym_Pause);
  2600. XGBE_SET_SUP(lks, FIBRE);
  2601. XGBE_SET_SUP(lks, 10000baseSR_Full);
  2602. XGBE_SET_SUP(lks, 10000baseLR_Full);
  2603. XGBE_SET_SUP(lks, 10000baseLRM_Full);
  2604. XGBE_SET_SUP(lks, 10000baseER_Full);
  2605. if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE)
  2606. XGBE_SET_SUP(lks, 10000baseR_FEC);
  2607. phy_data->start_mode = XGBE_MODE_SFI;
  2608. phy_data->phydev_mode = XGBE_MDIO_MODE_NONE;
  2609. break;
  2610. /* SFP support */
  2611. case XGBE_PORT_MODE_SFP:
  2612. XGBE_SET_SUP(lks, Autoneg);
  2613. XGBE_SET_SUP(lks, Pause);
  2614. XGBE_SET_SUP(lks, Asym_Pause);
  2615. XGBE_SET_SUP(lks, TP);
  2616. XGBE_SET_SUP(lks, FIBRE);
  2617. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100)
  2618. phy_data->start_mode = XGBE_MODE_SGMII_100;
  2619. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
  2620. phy_data->start_mode = XGBE_MODE_SGMII_1000;
  2621. if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)
  2622. phy_data->start_mode = XGBE_MODE_SFI;
  2623. phy_data->phydev_mode = XGBE_MDIO_MODE_CL22;
  2624. xgbe_phy_sfp_setup(pdata);
  2625. break;
  2626. default:
  2627. return -EINVAL;
  2628. }
  2629. if (netif_msg_probe(pdata))
  2630. dev_dbg(pdata->dev, "phy supported=0x%*pb\n",
  2631. __ETHTOOL_LINK_MODE_MASK_NBITS,
  2632. lks->link_modes.supported);
  2633. if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) &&
  2634. (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) {
  2635. ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr,
  2636. phy_data->phydev_mode);
  2637. if (ret) {
  2638. dev_err(pdata->dev,
  2639. "mdio port/clause not compatible (%d/%u)\n",
  2640. phy_data->mdio_addr, phy_data->phydev_mode);
  2641. return -EINVAL;
  2642. }
  2643. }
  2644. if (phy_data->redrv && !phy_data->redrv_if) {
  2645. ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr,
  2646. XGBE_MDIO_MODE_CL22);
  2647. if (ret) {
  2648. dev_err(pdata->dev,
  2649. "redriver mdio port not compatible (%u)\n",
  2650. phy_data->redrv_addr);
  2651. return -EINVAL;
  2652. }
  2653. }
  2654. phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT;
  2655. /* Register for driving external PHYs */
  2656. mii = devm_mdiobus_alloc(pdata->dev);
  2657. if (!mii) {
  2658. dev_err(pdata->dev, "mdiobus_alloc failed\n");
  2659. return -ENOMEM;
  2660. }
  2661. mii->priv = pdata;
  2662. mii->name = "amd-xgbe-mii";
  2663. mii->read = xgbe_phy_mii_read;
  2664. mii->write = xgbe_phy_mii_write;
  2665. mii->parent = pdata->dev;
  2666. mii->phy_mask = ~0;
  2667. snprintf(mii->id, sizeof(mii->id), "%s", dev_name(pdata->dev));
  2668. ret = mdiobus_register(mii);
  2669. if (ret) {
  2670. dev_err(pdata->dev, "mdiobus_register failed\n");
  2671. return ret;
  2672. }
  2673. phy_data->mii = mii;
  2674. return 0;
  2675. }
  2676. void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if)
  2677. {
  2678. struct xgbe_phy_impl_if *phy_impl = &phy_if->phy_impl;
  2679. phy_impl->init = xgbe_phy_init;
  2680. phy_impl->exit = xgbe_phy_exit;
  2681. phy_impl->reset = xgbe_phy_reset;
  2682. phy_impl->start = xgbe_phy_start;
  2683. phy_impl->stop = xgbe_phy_stop;
  2684. phy_impl->link_status = xgbe_phy_link_status;
  2685. phy_impl->valid_speed = xgbe_phy_valid_speed;
  2686. phy_impl->use_mode = xgbe_phy_use_mode;
  2687. phy_impl->set_mode = xgbe_phy_set_mode;
  2688. phy_impl->get_mode = xgbe_phy_get_mode;
  2689. phy_impl->switch_mode = xgbe_phy_switch_mode;
  2690. phy_impl->cur_mode = xgbe_phy_cur_mode;
  2691. phy_impl->an_mode = xgbe_phy_an_mode;
  2692. phy_impl->an_config = xgbe_phy_an_config;
  2693. phy_impl->an_advertising = xgbe_phy_an_advertising;
  2694. phy_impl->an_outcome = xgbe_phy_an_outcome;
  2695. phy_impl->an_pre = xgbe_phy_an_pre;
  2696. phy_impl->an_post = xgbe_phy_an_post;
  2697. phy_impl->kr_training_pre = xgbe_phy_kr_training_pre;
  2698. phy_impl->kr_training_post = xgbe_phy_kr_training_post;
  2699. }