xgbe-phy-v2.c 91 KB

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