micrel.c 189 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * drivers/net/phy/micrel.c
  4. *
  5. * Driver for Micrel PHYs
  6. *
  7. * Author: David J. Choi
  8. *
  9. * Copyright (c) 2010-2013 Micrel, Inc.
  10. * Copyright (c) 2014 Johan Hovold <johan@kernel.org>
  11. *
  12. * Support : Micrel Phys:
  13. * Giga phys: ksz9021, ksz9031, ksz9131, lan8841, lan8814
  14. * 100/10 Phys : ksz8001, ksz8721, ksz8737, ksz8041
  15. * ksz8021, ksz8031, ksz8051,
  16. * ksz8081, ksz8091,
  17. * ksz8061,
  18. * Switch : ksz8873, ksz886x
  19. * ksz9477, lan8804
  20. */
  21. #include <linux/bitfield.h>
  22. #include <linux/ethtool_netlink.h>
  23. #include <linux/kernel.h>
  24. #include <linux/module.h>
  25. #include <linux/phy.h>
  26. #include <linux/micrel_phy.h>
  27. #include <linux/of.h>
  28. #include <linux/clk.h>
  29. #include <linux/delay.h>
  30. #include <linux/ptp_clock_kernel.h>
  31. #include <linux/ptp_clock.h>
  32. #include <linux/ptp_classify.h>
  33. #include <linux/net_tstamp.h>
  34. #include <linux/gpio/consumer.h>
  35. #include "phylib.h"
  36. /* Operation Mode Strap Override */
  37. #define MII_KSZPHY_OMSO 0x16
  38. #define KSZPHY_OMSO_FACTORY_TEST BIT(15)
  39. #define KSZPHY_OMSO_B_CAST_OFF BIT(9)
  40. #define KSZPHY_OMSO_NAND_TREE_ON BIT(5)
  41. #define KSZPHY_OMSO_RMII_OVERRIDE BIT(1)
  42. #define KSZPHY_OMSO_MII_OVERRIDE BIT(0)
  43. /* general Interrupt control/status reg in vendor specific block. */
  44. #define MII_KSZPHY_INTCS 0x1B
  45. #define KSZPHY_INTCS_JABBER BIT(15)
  46. #define KSZPHY_INTCS_RECEIVE_ERR BIT(14)
  47. #define KSZPHY_INTCS_PAGE_RECEIVE BIT(13)
  48. #define KSZPHY_INTCS_PARELLEL BIT(12)
  49. #define KSZPHY_INTCS_LINK_PARTNER_ACK BIT(11)
  50. #define KSZPHY_INTCS_LINK_DOWN BIT(10)
  51. #define KSZPHY_INTCS_REMOTE_FAULT BIT(9)
  52. #define KSZPHY_INTCS_LINK_UP BIT(8)
  53. #define KSZPHY_INTCS_ALL (KSZPHY_INTCS_LINK_UP |\
  54. KSZPHY_INTCS_LINK_DOWN)
  55. #define KSZPHY_INTCS_LINK_DOWN_STATUS BIT(2)
  56. #define KSZPHY_INTCS_LINK_UP_STATUS BIT(0)
  57. #define KSZPHY_INTCS_STATUS (KSZPHY_INTCS_LINK_DOWN_STATUS |\
  58. KSZPHY_INTCS_LINK_UP_STATUS)
  59. /* LinkMD Control/Status */
  60. #define KSZ8081_LMD 0x1d
  61. #define KSZ8081_LMD_ENABLE_TEST BIT(15)
  62. #define KSZ8081_LMD_STAT_NORMAL 0
  63. #define KSZ8081_LMD_STAT_OPEN 1
  64. #define KSZ8081_LMD_STAT_SHORT 2
  65. #define KSZ8081_LMD_STAT_FAIL 3
  66. #define KSZ8081_LMD_STAT_MASK GENMASK(14, 13)
  67. /* Short cable (<10 meter) has been detected by LinkMD */
  68. #define KSZ8081_LMD_SHORT_INDICATOR BIT(12)
  69. #define KSZ8081_LMD_DELTA_TIME_MASK GENMASK(8, 0)
  70. #define KSZ9x31_LMD 0x12
  71. #define KSZ9x31_LMD_VCT_EN BIT(15)
  72. #define KSZ9x31_LMD_VCT_DIS_TX BIT(14)
  73. #define KSZ9x31_LMD_VCT_PAIR(n) (((n) & 0x3) << 12)
  74. #define KSZ9x31_LMD_VCT_SEL_RESULT 0
  75. #define KSZ9x31_LMD_VCT_SEL_THRES_HI BIT(10)
  76. #define KSZ9x31_LMD_VCT_SEL_THRES_LO BIT(11)
  77. #define KSZ9x31_LMD_VCT_SEL_MASK GENMASK(11, 10)
  78. #define KSZ9x31_LMD_VCT_ST_NORMAL 0
  79. #define KSZ9x31_LMD_VCT_ST_OPEN 1
  80. #define KSZ9x31_LMD_VCT_ST_SHORT 2
  81. #define KSZ9x31_LMD_VCT_ST_FAIL 3
  82. #define KSZ9x31_LMD_VCT_ST_MASK GENMASK(9, 8)
  83. #define KSZ9x31_LMD_VCT_DATA_REFLECTED_INVALID BIT(7)
  84. #define KSZ9x31_LMD_VCT_DATA_SIG_WAIT_TOO_LONG BIT(6)
  85. #define KSZ9x31_LMD_VCT_DATA_MASK100 BIT(5)
  86. #define KSZ9x31_LMD_VCT_DATA_NLP_FLP BIT(4)
  87. #define KSZ9x31_LMD_VCT_DATA_LO_PULSE_MASK GENMASK(3, 2)
  88. #define KSZ9x31_LMD_VCT_DATA_HI_PULSE_MASK GENMASK(1, 0)
  89. #define KSZ9x31_LMD_VCT_DATA_MASK GENMASK(7, 0)
  90. #define KSZPHY_WIRE_PAIR_MASK 0x3
  91. #define LAN8814_CABLE_DIAG 0x12
  92. #define LAN8814_CABLE_DIAG_STAT_MASK GENMASK(9, 8)
  93. #define LAN8814_CABLE_DIAG_VCT_DATA_MASK GENMASK(7, 0)
  94. #define LAN8814_PAIR_BIT_SHIFT 12
  95. /* KSZ9x31 remote loopback register */
  96. #define KSZ9x31_REMOTE_LOOPBACK 0x11
  97. /* This is an undocumented bit of the KSZ9131RNX.
  98. * It was reported by NXP in cooperation with Micrel.
  99. */
  100. #define KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE BIT(2)
  101. #define KSZ9x31_REMOTE_LOOPBACK_EN BIT(8)
  102. #define LAN8814_SKUS 0xB
  103. #define LAN8814_WIRE_PAIR_MASK 0xF
  104. /* Lan8814 general Interrupt control/status reg in GPHY specific block. */
  105. #define LAN8814_INTC 0x18
  106. #define LAN8814_INTS 0x1B
  107. #define LAN8814_INT_FLF BIT(15)
  108. #define LAN8814_INT_LINK_DOWN BIT(2)
  109. #define LAN8814_INT_LINK_UP BIT(0)
  110. #define LAN8814_INT_LINK (LAN8814_INT_LINK_UP |\
  111. LAN8814_INT_LINK_DOWN)
  112. #define LAN8814_INTR_CTRL_REG 0x34
  113. #define LAN8814_INTR_CTRL_REG_POLARITY BIT(1)
  114. #define LAN8814_INTR_CTRL_REG_INTR_ENABLE BIT(0)
  115. #define LAN8814_EEE_STATE 0x38
  116. #define LAN8814_EEE_STATE_MASK2P5P BIT(10)
  117. #define LAN8814_PD_CONTROLS 0x9d
  118. #define LAN8814_PD_CONTROLS_PD_MEAS_TIME_MASK GENMASK(3, 0)
  119. #define LAN8814_PD_CONTROLS_PD_MEAS_TIME_VAL 0xb
  120. /* Represents 1ppm adjustment in 2^32 format with
  121. * each nsec contains 4 clock cycles.
  122. * The value is calculated as following: (1/1000000)/((2^-32)/4)
  123. */
  124. #define LAN8814_1PPM_FORMAT 17179
  125. /* Represents 1ppm adjustment in 2^32 format with
  126. * each nsec contains 8 clock cycles.
  127. * The value is calculated as following: (1/1000000)/((2^-32)/8)
  128. */
  129. #define LAN8841_1PPM_FORMAT 34360
  130. #define PTP_RX_VERSION 0x0248
  131. #define PTP_TX_VERSION 0x0288
  132. #define PTP_MAX_VERSION(x) (((x) & GENMASK(7, 0)) << 8)
  133. #define PTP_MIN_VERSION(x) ((x) & GENMASK(7, 0))
  134. #define PTP_RX_MOD 0x024F
  135. #define PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3)
  136. #define PTP_RX_TIMESTAMP_EN 0x024D
  137. #define PTP_TX_TIMESTAMP_EN 0x028D
  138. #define PTP_TIMESTAMP_EN_SYNC_ BIT(0)
  139. #define PTP_TIMESTAMP_EN_DREQ_ BIT(1)
  140. #define PTP_TIMESTAMP_EN_PDREQ_ BIT(2)
  141. #define PTP_TIMESTAMP_EN_PDRES_ BIT(3)
  142. #define PTP_TX_PARSE_L2_ADDR_EN 0x0284
  143. #define PTP_RX_PARSE_L2_ADDR_EN 0x0244
  144. #define PTP_TX_PARSE_IP_ADDR_EN 0x0285
  145. #define PTP_RX_PARSE_IP_ADDR_EN 0x0245
  146. #define LTC_HARD_RESET 0x023F
  147. #define LTC_HARD_RESET_ BIT(0)
  148. #define TSU_HARD_RESET 0x02C1
  149. #define TSU_HARD_RESET_ BIT(0)
  150. #define PTP_CMD_CTL 0x0200
  151. #define PTP_CMD_CTL_PTP_DISABLE_ BIT(0)
  152. #define PTP_CMD_CTL_PTP_ENABLE_ BIT(1)
  153. #define PTP_CMD_CTL_PTP_CLOCK_READ_ BIT(3)
  154. #define PTP_CMD_CTL_PTP_CLOCK_LOAD_ BIT(4)
  155. #define PTP_CMD_CTL_PTP_LTC_STEP_SEC_ BIT(5)
  156. #define PTP_CMD_CTL_PTP_LTC_STEP_NSEC_ BIT(6)
  157. #define PTP_COMMON_INT_ENA 0x0204
  158. #define PTP_COMMON_INT_ENA_GPIO_CAP_EN BIT(2)
  159. #define PTP_CLOCK_SET_SEC_HI 0x0205
  160. #define PTP_CLOCK_SET_SEC_MID 0x0206
  161. #define PTP_CLOCK_SET_SEC_LO 0x0207
  162. #define PTP_CLOCK_SET_NS_HI 0x0208
  163. #define PTP_CLOCK_SET_NS_LO 0x0209
  164. #define PTP_CLOCK_READ_SEC_HI 0x0229
  165. #define PTP_CLOCK_READ_SEC_MID 0x022A
  166. #define PTP_CLOCK_READ_SEC_LO 0x022B
  167. #define PTP_CLOCK_READ_NS_HI 0x022C
  168. #define PTP_CLOCK_READ_NS_LO 0x022D
  169. #define PTP_GPIO_SEL 0x0230
  170. #define PTP_GPIO_SEL_GPIO_SEL(pin) ((pin) << 8)
  171. #define PTP_GPIO_CAP_MAP_LO 0x0232
  172. #define PTP_GPIO_CAP_EN 0x0233
  173. #define PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(gpio) BIT(gpio)
  174. #define PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(gpio) (BIT(gpio) << 8)
  175. #define PTP_GPIO_RE_LTC_SEC_HI_CAP 0x0235
  176. #define PTP_GPIO_RE_LTC_SEC_LO_CAP 0x0236
  177. #define PTP_GPIO_RE_LTC_NS_HI_CAP 0x0237
  178. #define PTP_GPIO_RE_LTC_NS_LO_CAP 0x0238
  179. #define PTP_GPIO_FE_LTC_SEC_HI_CAP 0x0239
  180. #define PTP_GPIO_FE_LTC_SEC_LO_CAP 0x023A
  181. #define PTP_GPIO_FE_LTC_NS_HI_CAP 0x023B
  182. #define PTP_GPIO_FE_LTC_NS_LO_CAP 0x023C
  183. #define PTP_GPIO_CAP_STS 0x023D
  184. #define PTP_GPIO_CAP_STS_PTP_GPIO_RE_STS(gpio) BIT(gpio)
  185. #define PTP_GPIO_CAP_STS_PTP_GPIO_FE_STS(gpio) (BIT(gpio) << 8)
  186. #define PTP_OPERATING_MODE 0x0241
  187. #define PTP_OPERATING_MODE_STANDALONE_ BIT(0)
  188. #define PTP_TX_MOD 0x028F
  189. #define PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_ BIT(12)
  190. #define PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3)
  191. #define PTP_RX_PARSE_CONFIG 0x0242
  192. #define PTP_RX_PARSE_CONFIG_LAYER2_EN_ BIT(0)
  193. #define PTP_RX_PARSE_CONFIG_IPV4_EN_ BIT(1)
  194. #define PTP_RX_PARSE_CONFIG_IPV6_EN_ BIT(2)
  195. #define PTP_TX_PARSE_CONFIG 0x0282
  196. #define PTP_TX_PARSE_CONFIG_LAYER2_EN_ BIT(0)
  197. #define PTP_TX_PARSE_CONFIG_IPV4_EN_ BIT(1)
  198. #define PTP_TX_PARSE_CONFIG_IPV6_EN_ BIT(2)
  199. #define PTP_CLOCK_RATE_ADJ_HI 0x020C
  200. #define PTP_CLOCK_RATE_ADJ_LO 0x020D
  201. #define PTP_CLOCK_RATE_ADJ_DIR_ BIT(15)
  202. #define PTP_LTC_STEP_ADJ_HI 0x0212
  203. #define PTP_LTC_STEP_ADJ_LO 0x0213
  204. #define PTP_LTC_STEP_ADJ_DIR_ BIT(15)
  205. #define LAN8814_INTR_STS_REG 0x0033
  206. #define LAN8814_INTR_STS_REG_1588_TSU0_ BIT(0)
  207. #define LAN8814_INTR_STS_REG_1588_TSU1_ BIT(1)
  208. #define LAN8814_INTR_STS_REG_1588_TSU2_ BIT(2)
  209. #define LAN8814_INTR_STS_REG_1588_TSU3_ BIT(3)
  210. #define PTP_CAP_INFO 0x022A
  211. #define PTP_CAP_INFO_TX_TS_CNT_GET_(reg_val) (((reg_val) & 0x0f00) >> 8)
  212. #define PTP_CAP_INFO_RX_TS_CNT_GET_(reg_val) ((reg_val) & 0x000f)
  213. #define PTP_TX_EGRESS_SEC_HI 0x0296
  214. #define PTP_TX_EGRESS_SEC_LO 0x0297
  215. #define PTP_TX_EGRESS_NS_HI 0x0294
  216. #define PTP_TX_EGRESS_NS_LO 0x0295
  217. #define PTP_TX_MSG_HEADER2 0x0299
  218. #define PTP_RX_INGRESS_SEC_HI 0x0256
  219. #define PTP_RX_INGRESS_SEC_LO 0x0257
  220. #define PTP_RX_INGRESS_NS_HI 0x0254
  221. #define PTP_RX_INGRESS_NS_LO 0x0255
  222. #define PTP_RX_MSG_HEADER2 0x0259
  223. #define PTP_TSU_INT_EN 0x0200
  224. #define PTP_TSU_INT_EN_PTP_TX_TS_OVRFL_EN_ BIT(3)
  225. #define PTP_TSU_INT_EN_PTP_TX_TS_EN_ BIT(2)
  226. #define PTP_TSU_INT_EN_PTP_RX_TS_OVRFL_EN_ BIT(1)
  227. #define PTP_TSU_INT_EN_PTP_RX_TS_EN_ BIT(0)
  228. #define PTP_TSU_INT_STS 0x0201
  229. #define PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_ BIT(3)
  230. #define PTP_TSU_INT_STS_PTP_TX_TS_EN_ BIT(2)
  231. #define PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_ BIT(1)
  232. #define PTP_TSU_INT_STS_PTP_RX_TS_EN_ BIT(0)
  233. #define LAN8814_LED_CTRL_1 0x0
  234. #define LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_ BIT(6)
  235. #define LAN8814_LED_CTRL_2 0x1
  236. #define LAN8814_LED_CTRL_2_LED1_COM_DIS BIT(8)
  237. /* PHY Control 1 */
  238. #define MII_KSZPHY_CTRL_1 0x1e
  239. #define KSZ8081_CTRL1_MDIX_STAT BIT(4)
  240. /* PHY Control 2 / PHY Control (if no PHY Control 1) */
  241. #define MII_KSZPHY_CTRL_2 0x1f
  242. #define MII_KSZPHY_CTRL MII_KSZPHY_CTRL_2
  243. /* bitmap of PHY register to set interrupt mode */
  244. #define KSZ8081_CTRL2_HP_MDIX BIT(15)
  245. #define KSZ8081_CTRL2_MDI_MDI_X_SELECT BIT(14)
  246. #define KSZ8081_CTRL2_DISABLE_AUTO_MDIX BIT(13)
  247. #define KSZ8081_CTRL2_FORCE_LINK BIT(11)
  248. #define KSZ8081_CTRL2_POWER_SAVING BIT(10)
  249. #define KSZPHY_CTRL_INT_ACTIVE_HIGH BIT(9)
  250. #define KSZPHY_RMII_REF_CLK_SEL BIT(7)
  251. /* Write/read to/from extended registers */
  252. #define MII_KSZPHY_EXTREG 0x0b
  253. #define KSZPHY_EXTREG_WRITE 0x8000
  254. #define MII_KSZPHY_EXTREG_WRITE 0x0c
  255. #define MII_KSZPHY_EXTREG_READ 0x0d
  256. /* Extended registers */
  257. #define MII_KSZPHY_CLK_CONTROL_PAD_SKEW 0x104
  258. #define MII_KSZPHY_RX_DATA_PAD_SKEW 0x105
  259. #define MII_KSZPHY_TX_DATA_PAD_SKEW 0x106
  260. #define PS_TO_REG 200
  261. #define FIFO_SIZE 8
  262. #define LAN8814_PTP_GPIO_NUM 24
  263. #define LAN8814_PTP_PEROUT_NUM 2
  264. #define LAN8814_PTP_EXTTS_NUM 3
  265. #define LAN8814_BUFFER_TIME 2
  266. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_200MS 13
  267. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100MS 12
  268. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50MS 11
  269. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10MS 10
  270. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5MS 9
  271. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1MS 8
  272. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500US 7
  273. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100US 6
  274. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50US 5
  275. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10US 4
  276. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5US 3
  277. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1US 2
  278. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500NS 1
  279. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS 0
  280. #define LAN8814_GPIO_EN1 0x20
  281. #define LAN8814_GPIO_EN2 0x21
  282. #define LAN8814_GPIO_DIR1 0x22
  283. #define LAN8814_GPIO_DIR2 0x23
  284. #define LAN8814_GPIO_BUF1 0x24
  285. #define LAN8814_GPIO_BUF2 0x25
  286. #define LAN8814_GPIO_EN_ADDR(pin) \
  287. ((pin) > 15 ? LAN8814_GPIO_EN1 : LAN8814_GPIO_EN2)
  288. #define LAN8814_GPIO_EN_BIT(pin) BIT(pin)
  289. #define LAN8814_GPIO_DIR_ADDR(pin) \
  290. ((pin) > 15 ? LAN8814_GPIO_DIR1 : LAN8814_GPIO_DIR2)
  291. #define LAN8814_GPIO_DIR_BIT(pin) BIT(pin)
  292. #define LAN8814_GPIO_BUF_ADDR(pin) \
  293. ((pin) > 15 ? LAN8814_GPIO_BUF1 : LAN8814_GPIO_BUF2)
  294. #define LAN8814_GPIO_BUF_BIT(pin) BIT(pin)
  295. #define LAN8814_EVENT_A 0
  296. #define LAN8814_EVENT_B 1
  297. #define LAN8814_PTP_GENERAL_CONFIG 0x0201
  298. #define LAN8814_PTP_GENERAL_CONFIG_LTC_EVENT_MASK(event) \
  299. ((event) ? GENMASK(11, 8) : GENMASK(7, 4))
  300. #define LAN8814_PTP_GENERAL_CONFIG_LTC_EVENT_SET(event, value) \
  301. (((value) & GENMASK(3, 0)) << (4 + ((event) << 2)))
  302. #define LAN8814_PTP_GENERAL_CONFIG_RELOAD_ADD_X(event) \
  303. ((event) ? BIT(2) : BIT(0))
  304. #define LAN8814_PTP_GENERAL_CONFIG_POLARITY_X(event) \
  305. ((event) ? BIT(3) : BIT(1))
  306. #define LAN8814_PTP_CLOCK_TARGET_SEC_HI(event) ((event) ? 0x21F : 0x215)
  307. #define LAN8814_PTP_CLOCK_TARGET_SEC_LO(event) ((event) ? 0x220 : 0x216)
  308. #define LAN8814_PTP_CLOCK_TARGET_NS_HI(event) ((event) ? 0x221 : 0x217)
  309. #define LAN8814_PTP_CLOCK_TARGET_NS_LO(event) ((event) ? 0x222 : 0x218)
  310. #define LAN8814_PTP_CLOCK_TARGET_RELOAD_SEC_HI(event) ((event) ? 0x223 : 0x219)
  311. #define LAN8814_PTP_CLOCK_TARGET_RELOAD_SEC_LO(event) ((event) ? 0x224 : 0x21A)
  312. #define LAN8814_PTP_CLOCK_TARGET_RELOAD_NS_HI(event) ((event) ? 0x225 : 0x21B)
  313. #define LAN8814_PTP_CLOCK_TARGET_RELOAD_NS_LO(event) ((event) ? 0x226 : 0x21C)
  314. /* Delay used to get the second part from the LTC */
  315. #define LAN8841_GET_SEC_LTC_DELAY (500 * NSEC_PER_MSEC)
  316. #define LAN8842_REV_8832 0x8832
  317. #define LAN8814_REV_LAN8814 0x8814
  318. #define LAN8814_REV_LAN8818 0x8818
  319. struct kszphy_hw_stat {
  320. const char *string;
  321. u8 reg;
  322. u8 bits;
  323. };
  324. static struct kszphy_hw_stat kszphy_hw_stats[] = {
  325. { "phy_receive_errors", 21, 16},
  326. { "phy_idle_errors", 10, 8 },
  327. };
  328. struct kszphy_type {
  329. u32 led_mode_reg;
  330. u16 interrupt_level_mask;
  331. u16 cable_diag_reg;
  332. unsigned long pair_mask;
  333. u16 disable_dll_tx_bit;
  334. u16 disable_dll_rx_bit;
  335. u16 disable_dll_mask;
  336. bool has_broadcast_disable;
  337. bool has_nand_tree_disable;
  338. bool has_rmii_ref_clk_sel;
  339. };
  340. /* Shared structure between the PHYs of the same package. */
  341. struct lan8814_shared_priv {
  342. struct phy_device *phydev;
  343. struct ptp_clock *ptp_clock;
  344. struct ptp_clock_info ptp_clock_info;
  345. struct ptp_pin_desc *pin_config;
  346. /* Lock for ptp_clock */
  347. struct mutex shared_lock;
  348. };
  349. struct lan8814_ptp_rx_ts {
  350. struct list_head list;
  351. u32 seconds;
  352. u32 nsec;
  353. u16 seq_id;
  354. };
  355. struct kszphy_ptp_priv {
  356. struct mii_timestamper mii_ts;
  357. struct phy_device *phydev;
  358. struct sk_buff_head tx_queue;
  359. struct sk_buff_head rx_queue;
  360. struct list_head rx_ts_list;
  361. /* Lock for Rx ts fifo */
  362. spinlock_t rx_ts_lock;
  363. int hwts_tx_type;
  364. enum hwtstamp_rx_filters rx_filter;
  365. int layer;
  366. int version;
  367. struct ptp_clock *ptp_clock;
  368. struct ptp_clock_info ptp_clock_info;
  369. /* Lock for ptp_clock */
  370. struct mutex ptp_lock;
  371. struct ptp_pin_desc *pin_config;
  372. s64 seconds;
  373. /* Lock for accessing seconds */
  374. spinlock_t seconds_lock;
  375. };
  376. struct kszphy_phy_stats {
  377. u64 rx_err_pkt_cnt;
  378. };
  379. struct kszphy_priv {
  380. struct kszphy_ptp_priv ptp_priv;
  381. const struct kszphy_type *type;
  382. struct clk *clk;
  383. int led_mode;
  384. u16 vct_ctrl1000;
  385. bool rmii_ref_clk_sel;
  386. bool rmii_ref_clk_sel_val;
  387. bool clk_enable;
  388. bool is_ptp_available;
  389. u64 stats[ARRAY_SIZE(kszphy_hw_stats)];
  390. struct kszphy_phy_stats phy_stats;
  391. };
  392. struct lan8842_phy_stats {
  393. u64 rx_packets;
  394. u64 rx_errors;
  395. u64 tx_packets;
  396. u64 tx_errors;
  397. };
  398. struct lan8842_priv {
  399. struct lan8842_phy_stats phy_stats;
  400. struct kszphy_ptp_priv ptp_priv;
  401. u16 rev;
  402. };
  403. struct lanphy_reg_data {
  404. int page;
  405. u16 addr;
  406. u16 val;
  407. };
  408. static const struct kszphy_type lan8814_type = {
  409. .led_mode_reg = ~LAN8814_LED_CTRL_1,
  410. .cable_diag_reg = LAN8814_CABLE_DIAG,
  411. .pair_mask = LAN8814_WIRE_PAIR_MASK,
  412. };
  413. static const struct kszphy_type ksz886x_type = {
  414. .cable_diag_reg = KSZ8081_LMD,
  415. .pair_mask = KSZPHY_WIRE_PAIR_MASK,
  416. };
  417. static const struct kszphy_type ksz8021_type = {
  418. .led_mode_reg = MII_KSZPHY_CTRL_2,
  419. .has_broadcast_disable = true,
  420. .has_nand_tree_disable = true,
  421. .has_rmii_ref_clk_sel = true,
  422. };
  423. static const struct kszphy_type ksz8041_type = {
  424. .led_mode_reg = MII_KSZPHY_CTRL_1,
  425. };
  426. static const struct kszphy_type ksz8051_type = {
  427. .led_mode_reg = MII_KSZPHY_CTRL_2,
  428. .has_nand_tree_disable = true,
  429. };
  430. static const struct kszphy_type ksz8081_type = {
  431. .led_mode_reg = MII_KSZPHY_CTRL_2,
  432. .cable_diag_reg = KSZ8081_LMD,
  433. .pair_mask = KSZPHY_WIRE_PAIR_MASK,
  434. .has_broadcast_disable = true,
  435. .has_nand_tree_disable = true,
  436. .has_rmii_ref_clk_sel = true,
  437. };
  438. static const struct kszphy_type ks8737_type = {
  439. .interrupt_level_mask = BIT(14),
  440. };
  441. static const struct kszphy_type ksz9021_type = {
  442. .interrupt_level_mask = BIT(14),
  443. };
  444. static const struct kszphy_type ksz9131_type = {
  445. .interrupt_level_mask = BIT(14),
  446. .disable_dll_tx_bit = BIT(12),
  447. .disable_dll_rx_bit = BIT(12),
  448. .disable_dll_mask = BIT_MASK(12),
  449. };
  450. static const struct kszphy_type lan8841_type = {
  451. .disable_dll_tx_bit = BIT(14),
  452. .disable_dll_rx_bit = BIT(14),
  453. .disable_dll_mask = BIT_MASK(14),
  454. .cable_diag_reg = LAN8814_CABLE_DIAG,
  455. .pair_mask = LAN8814_WIRE_PAIR_MASK,
  456. };
  457. static int kszphy_extended_write(struct phy_device *phydev,
  458. u32 regnum, u16 val)
  459. {
  460. phy_write(phydev, MII_KSZPHY_EXTREG, KSZPHY_EXTREG_WRITE | regnum);
  461. return phy_write(phydev, MII_KSZPHY_EXTREG_WRITE, val);
  462. }
  463. static int kszphy_extended_read(struct phy_device *phydev,
  464. u32 regnum)
  465. {
  466. phy_write(phydev, MII_KSZPHY_EXTREG, regnum);
  467. return phy_read(phydev, MII_KSZPHY_EXTREG_READ);
  468. }
  469. static int kszphy_ack_interrupt(struct phy_device *phydev)
  470. {
  471. /* bit[7..0] int status, which is a read and clear register. */
  472. int rc;
  473. rc = phy_read(phydev, MII_KSZPHY_INTCS);
  474. return (rc < 0) ? rc : 0;
  475. }
  476. static int kszphy_config_intr(struct phy_device *phydev)
  477. {
  478. const struct kszphy_type *type = phydev->drv->driver_data;
  479. int temp, err;
  480. u16 mask;
  481. if (type && type->interrupt_level_mask)
  482. mask = type->interrupt_level_mask;
  483. else
  484. mask = KSZPHY_CTRL_INT_ACTIVE_HIGH;
  485. /* set the interrupt pin active low */
  486. temp = phy_read(phydev, MII_KSZPHY_CTRL);
  487. if (temp < 0)
  488. return temp;
  489. temp &= ~mask;
  490. phy_write(phydev, MII_KSZPHY_CTRL, temp);
  491. /* enable / disable interrupts */
  492. if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
  493. err = kszphy_ack_interrupt(phydev);
  494. if (err)
  495. return err;
  496. err = phy_write(phydev, MII_KSZPHY_INTCS, KSZPHY_INTCS_ALL);
  497. } else {
  498. err = phy_write(phydev, MII_KSZPHY_INTCS, 0);
  499. if (err)
  500. return err;
  501. err = kszphy_ack_interrupt(phydev);
  502. }
  503. return err;
  504. }
  505. static irqreturn_t kszphy_handle_interrupt(struct phy_device *phydev)
  506. {
  507. int irq_status;
  508. irq_status = phy_read(phydev, MII_KSZPHY_INTCS);
  509. if (irq_status < 0) {
  510. phy_error(phydev);
  511. return IRQ_NONE;
  512. }
  513. if (!(irq_status & KSZPHY_INTCS_STATUS))
  514. return IRQ_NONE;
  515. phy_trigger_machine(phydev);
  516. return IRQ_HANDLED;
  517. }
  518. static int kszphy_rmii_clk_sel(struct phy_device *phydev, bool val)
  519. {
  520. int ctrl;
  521. ctrl = phy_read(phydev, MII_KSZPHY_CTRL);
  522. if (ctrl < 0)
  523. return ctrl;
  524. if (val)
  525. ctrl |= KSZPHY_RMII_REF_CLK_SEL;
  526. else
  527. ctrl &= ~KSZPHY_RMII_REF_CLK_SEL;
  528. return phy_write(phydev, MII_KSZPHY_CTRL, ctrl);
  529. }
  530. static int kszphy_setup_led(struct phy_device *phydev, u32 reg, int val)
  531. {
  532. int rc, temp, shift;
  533. switch (reg) {
  534. case MII_KSZPHY_CTRL_1:
  535. shift = 14;
  536. break;
  537. case MII_KSZPHY_CTRL_2:
  538. shift = 4;
  539. break;
  540. default:
  541. return -EINVAL;
  542. }
  543. temp = phy_read(phydev, reg);
  544. if (temp < 0) {
  545. rc = temp;
  546. goto out;
  547. }
  548. temp &= ~(3 << shift);
  549. temp |= val << shift;
  550. rc = phy_write(phydev, reg, temp);
  551. out:
  552. if (rc < 0)
  553. phydev_err(phydev, "failed to set led mode\n");
  554. return rc;
  555. }
  556. /* Disable PHY address 0 as the broadcast address, so that it can be used as a
  557. * unique (non-broadcast) address on a shared bus.
  558. */
  559. static int kszphy_broadcast_disable(struct phy_device *phydev)
  560. {
  561. int ret;
  562. ret = phy_read(phydev, MII_KSZPHY_OMSO);
  563. if (ret < 0)
  564. goto out;
  565. ret = phy_write(phydev, MII_KSZPHY_OMSO, ret | KSZPHY_OMSO_B_CAST_OFF);
  566. out:
  567. if (ret)
  568. phydev_err(phydev, "failed to disable broadcast address\n");
  569. return ret;
  570. }
  571. static int kszphy_nand_tree_disable(struct phy_device *phydev)
  572. {
  573. int ret;
  574. ret = phy_read(phydev, MII_KSZPHY_OMSO);
  575. if (ret < 0)
  576. goto out;
  577. if (!(ret & KSZPHY_OMSO_NAND_TREE_ON))
  578. return 0;
  579. ret = phy_write(phydev, MII_KSZPHY_OMSO,
  580. ret & ~KSZPHY_OMSO_NAND_TREE_ON);
  581. out:
  582. if (ret)
  583. phydev_err(phydev, "failed to disable NAND tree mode\n");
  584. return ret;
  585. }
  586. /* Some config bits need to be set again on resume, handle them here. */
  587. static int kszphy_config_reset(struct phy_device *phydev)
  588. {
  589. struct kszphy_priv *priv = phydev->priv;
  590. int ret;
  591. if (priv->rmii_ref_clk_sel) {
  592. ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val);
  593. if (ret) {
  594. phydev_err(phydev,
  595. "failed to set rmii reference clock\n");
  596. return ret;
  597. }
  598. }
  599. if (priv->type && priv->led_mode >= 0)
  600. kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
  601. return 0;
  602. }
  603. static int kszphy_config_init(struct phy_device *phydev)
  604. {
  605. struct kszphy_priv *priv = phydev->priv;
  606. const struct kszphy_type *type;
  607. if (!priv)
  608. return 0;
  609. type = priv->type;
  610. if (type && type->has_broadcast_disable)
  611. kszphy_broadcast_disable(phydev);
  612. if (type && type->has_nand_tree_disable)
  613. kszphy_nand_tree_disable(phydev);
  614. return kszphy_config_reset(phydev);
  615. }
  616. static int ksz8041_fiber_mode(struct phy_device *phydev)
  617. {
  618. struct device_node *of_node = phydev->mdio.dev.of_node;
  619. return of_property_read_bool(of_node, "micrel,fiber-mode");
  620. }
  621. static int ksz8041_config_init(struct phy_device *phydev)
  622. {
  623. __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
  624. /* Limit supported and advertised modes in fiber mode */
  625. if (ksz8041_fiber_mode(phydev)) {
  626. phydev->dev_flags |= MICREL_PHY_FXEN;
  627. linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, mask);
  628. linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, mask);
  629. linkmode_and(phydev->supported, phydev->supported, mask);
  630. linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT,
  631. phydev->supported);
  632. linkmode_and(phydev->advertising, phydev->advertising, mask);
  633. linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT,
  634. phydev->advertising);
  635. phydev->autoneg = AUTONEG_DISABLE;
  636. }
  637. return kszphy_config_init(phydev);
  638. }
  639. static int ksz8041_config_aneg(struct phy_device *phydev)
  640. {
  641. /* Skip auto-negotiation in fiber mode */
  642. if (phydev->dev_flags & MICREL_PHY_FXEN) {
  643. phydev->speed = SPEED_100;
  644. return 0;
  645. }
  646. return genphy_config_aneg(phydev);
  647. }
  648. static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
  649. const bool ksz_8051)
  650. {
  651. int ret;
  652. if (!phy_id_compare(phydev->phy_id, PHY_ID_KSZ8051, MICREL_PHY_ID_MASK))
  653. return 0;
  654. ret = phy_read(phydev, MII_BMSR);
  655. if (ret < 0)
  656. return ret;
  657. /* KSZ8051 PHY and KSZ8794/KSZ8795/KSZ8765 switch share the same
  658. * exact PHY ID. However, they can be told apart by the extended
  659. * capability registers presence. The KSZ8051 PHY has them while
  660. * the switch does not.
  661. */
  662. ret &= BMSR_ERCAP;
  663. if (ksz_8051)
  664. return ret;
  665. else
  666. return !ret;
  667. }
  668. static int ksz8051_match_phy_device(struct phy_device *phydev,
  669. const struct phy_driver *phydrv)
  670. {
  671. return ksz8051_ksz8795_match_phy_device(phydev, true);
  672. }
  673. static int ksz8081_config_init(struct phy_device *phydev)
  674. {
  675. /* KSZPHY_OMSO_FACTORY_TEST is set at de-assertion of the reset line
  676. * based on the RXER (KSZ8081RNA/RND) or TXC (KSZ8081MNX/RNB) pin. If a
  677. * pull-down is missing, the factory test mode should be cleared by
  678. * manually writing a 0.
  679. */
  680. phy_clear_bits(phydev, MII_KSZPHY_OMSO, KSZPHY_OMSO_FACTORY_TEST);
  681. return kszphy_config_init(phydev);
  682. }
  683. static int ksz8081_config_mdix(struct phy_device *phydev, u8 ctrl)
  684. {
  685. u16 val;
  686. switch (ctrl) {
  687. case ETH_TP_MDI:
  688. val = KSZ8081_CTRL2_DISABLE_AUTO_MDIX;
  689. break;
  690. case ETH_TP_MDI_X:
  691. val = KSZ8081_CTRL2_DISABLE_AUTO_MDIX |
  692. KSZ8081_CTRL2_MDI_MDI_X_SELECT;
  693. break;
  694. case ETH_TP_MDI_AUTO:
  695. val = 0;
  696. break;
  697. default:
  698. return 0;
  699. }
  700. return phy_modify(phydev, MII_KSZPHY_CTRL_2,
  701. KSZ8081_CTRL2_HP_MDIX |
  702. KSZ8081_CTRL2_MDI_MDI_X_SELECT |
  703. KSZ8081_CTRL2_DISABLE_AUTO_MDIX,
  704. KSZ8081_CTRL2_HP_MDIX | val);
  705. }
  706. static int ksz8081_config_aneg(struct phy_device *phydev)
  707. {
  708. int ret;
  709. ret = genphy_config_aneg(phydev);
  710. if (ret)
  711. return ret;
  712. /* The MDI-X configuration is automatically changed by the PHY after
  713. * switching from autoneg off to on. So, take MDI-X configuration under
  714. * own control and set it after autoneg configuration was done.
  715. */
  716. return ksz8081_config_mdix(phydev, phydev->mdix_ctrl);
  717. }
  718. static int ksz8081_mdix_update(struct phy_device *phydev)
  719. {
  720. int ret;
  721. ret = phy_read(phydev, MII_KSZPHY_CTRL_2);
  722. if (ret < 0)
  723. return ret;
  724. if (ret & KSZ8081_CTRL2_DISABLE_AUTO_MDIX) {
  725. if (ret & KSZ8081_CTRL2_MDI_MDI_X_SELECT)
  726. phydev->mdix_ctrl = ETH_TP_MDI_X;
  727. else
  728. phydev->mdix_ctrl = ETH_TP_MDI;
  729. } else {
  730. phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
  731. }
  732. ret = phy_read(phydev, MII_KSZPHY_CTRL_1);
  733. if (ret < 0)
  734. return ret;
  735. if (ret & KSZ8081_CTRL1_MDIX_STAT)
  736. phydev->mdix = ETH_TP_MDI;
  737. else
  738. phydev->mdix = ETH_TP_MDI_X;
  739. return 0;
  740. }
  741. static int ksz8081_read_status(struct phy_device *phydev)
  742. {
  743. int ret;
  744. ret = ksz8081_mdix_update(phydev);
  745. if (ret < 0)
  746. return ret;
  747. return genphy_read_status(phydev);
  748. }
  749. static int ksz8061_config_init(struct phy_device *phydev)
  750. {
  751. int ret;
  752. /* Chip can be powered down by the bootstrap code. */
  753. ret = phy_read(phydev, MII_BMCR);
  754. if (ret < 0)
  755. return ret;
  756. if (ret & BMCR_PDOWN) {
  757. ret = phy_write(phydev, MII_BMCR, ret & ~BMCR_PDOWN);
  758. if (ret < 0)
  759. return ret;
  760. usleep_range(1000, 2000);
  761. }
  762. ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_DEVID1, 0xB61A);
  763. if (ret)
  764. return ret;
  765. return kszphy_config_init(phydev);
  766. }
  767. static int ksz8795_match_phy_device(struct phy_device *phydev,
  768. const struct phy_driver *phydrv)
  769. {
  770. return ksz8051_ksz8795_match_phy_device(phydev, false);
  771. }
  772. static int ksz9021_load_values_from_of(struct phy_device *phydev,
  773. const struct device_node *of_node,
  774. u16 reg,
  775. const char *field1, const char *field2,
  776. const char *field3, const char *field4)
  777. {
  778. int val1 = -1;
  779. int val2 = -2;
  780. int val3 = -3;
  781. int val4 = -4;
  782. int newval;
  783. int matches = 0;
  784. if (!of_property_read_u32(of_node, field1, &val1))
  785. matches++;
  786. if (!of_property_read_u32(of_node, field2, &val2))
  787. matches++;
  788. if (!of_property_read_u32(of_node, field3, &val3))
  789. matches++;
  790. if (!of_property_read_u32(of_node, field4, &val4))
  791. matches++;
  792. if (!matches)
  793. return 0;
  794. if (matches < 4)
  795. newval = kszphy_extended_read(phydev, reg);
  796. else
  797. newval = 0;
  798. if (val1 != -1)
  799. newval = ((newval & 0xfff0) | ((val1 / PS_TO_REG) & 0xf) << 0);
  800. if (val2 != -2)
  801. newval = ((newval & 0xff0f) | ((val2 / PS_TO_REG) & 0xf) << 4);
  802. if (val3 != -3)
  803. newval = ((newval & 0xf0ff) | ((val3 / PS_TO_REG) & 0xf) << 8);
  804. if (val4 != -4)
  805. newval = ((newval & 0x0fff) | ((val4 / PS_TO_REG) & 0xf) << 12);
  806. return kszphy_extended_write(phydev, reg, newval);
  807. }
  808. static int ksz9021_config_init(struct phy_device *phydev)
  809. {
  810. const struct device_node *of_node;
  811. const struct device *dev_walker;
  812. /* The Micrel driver has a deprecated option to place phy OF
  813. * properties in the MAC node. Walk up the tree of devices to
  814. * find a device with an OF node.
  815. */
  816. dev_walker = &phydev->mdio.dev;
  817. do {
  818. of_node = dev_walker->of_node;
  819. dev_walker = dev_walker->parent;
  820. } while (!of_node && dev_walker);
  821. if (of_node) {
  822. ksz9021_load_values_from_of(phydev, of_node,
  823. MII_KSZPHY_CLK_CONTROL_PAD_SKEW,
  824. "txen-skew-ps", "txc-skew-ps",
  825. "rxdv-skew-ps", "rxc-skew-ps");
  826. ksz9021_load_values_from_of(phydev, of_node,
  827. MII_KSZPHY_RX_DATA_PAD_SKEW,
  828. "rxd0-skew-ps", "rxd1-skew-ps",
  829. "rxd2-skew-ps", "rxd3-skew-ps");
  830. ksz9021_load_values_from_of(phydev, of_node,
  831. MII_KSZPHY_TX_DATA_PAD_SKEW,
  832. "txd0-skew-ps", "txd1-skew-ps",
  833. "txd2-skew-ps", "txd3-skew-ps");
  834. }
  835. return 0;
  836. }
  837. #define KSZ9031_PS_TO_REG 60
  838. /* Extended registers */
  839. /* MMD Address 0x0 */
  840. #define MII_KSZ9031RN_FLP_BURST_TX_LO 3
  841. #define MII_KSZ9031RN_FLP_BURST_TX_HI 4
  842. /* MMD Address 0x2 */
  843. #define MII_KSZ9031RN_CONTROL_PAD_SKEW 4
  844. #define MII_KSZ9031RN_RX_CTL_M GENMASK(7, 4)
  845. #define MII_KSZ9031RN_TX_CTL_M GENMASK(3, 0)
  846. #define MII_KSZ9031RN_RX_DATA_PAD_SKEW 5
  847. #define MII_KSZ9031RN_RXD3 GENMASK(15, 12)
  848. #define MII_KSZ9031RN_RXD2 GENMASK(11, 8)
  849. #define MII_KSZ9031RN_RXD1 GENMASK(7, 4)
  850. #define MII_KSZ9031RN_RXD0 GENMASK(3, 0)
  851. #define MII_KSZ9031RN_TX_DATA_PAD_SKEW 6
  852. #define MII_KSZ9031RN_TXD3 GENMASK(15, 12)
  853. #define MII_KSZ9031RN_TXD2 GENMASK(11, 8)
  854. #define MII_KSZ9031RN_TXD1 GENMASK(7, 4)
  855. #define MII_KSZ9031RN_TXD0 GENMASK(3, 0)
  856. #define MII_KSZ9031RN_CLK_PAD_SKEW 8
  857. #define MII_KSZ9031RN_GTX_CLK GENMASK(9, 5)
  858. #define MII_KSZ9031RN_RX_CLK GENMASK(4, 0)
  859. /* KSZ9031 has internal RGMII_IDRX = 1.2ns and RGMII_IDTX = 0ns. To
  860. * provide different RGMII options we need to configure delay offset
  861. * for each pad relative to build in delay.
  862. */
  863. /* keep rx as "No delay adjustment" and set rx_clk to +0.60ns to get delays of
  864. * 1.80ns
  865. */
  866. #define RX_ID 0x7
  867. #define RX_CLK_ID 0x19
  868. /* set rx to +0.30ns and rx_clk to -0.90ns to compensate the
  869. * internal 1.2ns delay.
  870. */
  871. #define RX_ND 0xc
  872. #define RX_CLK_ND 0x0
  873. /* set tx to -0.42ns and tx_clk to +0.96ns to get 1.38ns delay */
  874. #define TX_ID 0x0
  875. #define TX_CLK_ID 0x1f
  876. /* set tx and tx_clk to "No delay adjustment" to keep 0ns
  877. * delay
  878. */
  879. #define TX_ND 0x7
  880. #define TX_CLK_ND 0xf
  881. /* MMD Address 0x1C */
  882. #define MII_KSZ9031RN_EDPD 0x23
  883. #define MII_KSZ9031RN_EDPD_ENABLE BIT(0)
  884. static int ksz9031_set_loopback(struct phy_device *phydev, bool enable,
  885. int speed)
  886. {
  887. u16 ctl = BMCR_LOOPBACK;
  888. int val;
  889. if (!enable)
  890. return genphy_loopback(phydev, enable, 0);
  891. if (speed == SPEED_10 || speed == SPEED_100 || speed == SPEED_1000)
  892. phydev->speed = speed;
  893. else if (speed)
  894. return -EINVAL;
  895. phydev->duplex = DUPLEX_FULL;
  896. ctl |= mii_bmcr_encode_fixed(phydev->speed, phydev->duplex);
  897. phy_write(phydev, MII_BMCR, ctl);
  898. return phy_read_poll_timeout(phydev, MII_BMSR, val, val & BMSR_LSTATUS,
  899. 5000, 500000, true);
  900. }
  901. static int ksz9031_of_load_skew_values(struct phy_device *phydev,
  902. const struct device_node *of_node,
  903. u16 reg, size_t field_sz,
  904. const char *field[], u8 numfields,
  905. bool *update)
  906. {
  907. int val[4] = {-1, -2, -3, -4};
  908. int matches = 0;
  909. u16 mask;
  910. u16 maxval;
  911. u16 newval;
  912. int i;
  913. for (i = 0; i < numfields; i++)
  914. if (!of_property_read_u32(of_node, field[i], val + i))
  915. matches++;
  916. if (!matches)
  917. return 0;
  918. *update |= true;
  919. if (matches < numfields)
  920. newval = phy_read_mmd(phydev, 2, reg);
  921. else
  922. newval = 0;
  923. maxval = (field_sz == 4) ? 0xf : 0x1f;
  924. for (i = 0; i < numfields; i++)
  925. if (val[i] != -(i + 1)) {
  926. mask = 0xffff;
  927. mask ^= maxval << (field_sz * i);
  928. newval = (newval & mask) |
  929. (((val[i] / KSZ9031_PS_TO_REG) & maxval)
  930. << (field_sz * i));
  931. }
  932. return phy_write_mmd(phydev, 2, reg, newval);
  933. }
  934. /* Center KSZ9031RNX FLP timing at 16ms. */
  935. static int ksz9031_center_flp_timing(struct phy_device *phydev)
  936. {
  937. int result;
  938. result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_HI,
  939. 0x0006);
  940. if (result)
  941. return result;
  942. result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_LO,
  943. 0x1A80);
  944. if (result)
  945. return result;
  946. return genphy_restart_aneg(phydev);
  947. }
  948. /* Enable energy-detect power-down mode */
  949. static int ksz9031_enable_edpd(struct phy_device *phydev)
  950. {
  951. int reg;
  952. reg = phy_read_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD);
  953. if (reg < 0)
  954. return reg;
  955. return phy_write_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD,
  956. reg | MII_KSZ9031RN_EDPD_ENABLE);
  957. }
  958. static int ksz9031_config_rgmii_delay(struct phy_device *phydev)
  959. {
  960. u16 rx, tx, rx_clk, tx_clk;
  961. int ret;
  962. switch (phydev->interface) {
  963. case PHY_INTERFACE_MODE_RGMII:
  964. tx = TX_ND;
  965. tx_clk = TX_CLK_ND;
  966. rx = RX_ND;
  967. rx_clk = RX_CLK_ND;
  968. break;
  969. case PHY_INTERFACE_MODE_RGMII_ID:
  970. tx = TX_ID;
  971. tx_clk = TX_CLK_ID;
  972. rx = RX_ID;
  973. rx_clk = RX_CLK_ID;
  974. break;
  975. case PHY_INTERFACE_MODE_RGMII_RXID:
  976. tx = TX_ND;
  977. tx_clk = TX_CLK_ND;
  978. rx = RX_ID;
  979. rx_clk = RX_CLK_ID;
  980. break;
  981. case PHY_INTERFACE_MODE_RGMII_TXID:
  982. tx = TX_ID;
  983. tx_clk = TX_CLK_ID;
  984. rx = RX_ND;
  985. rx_clk = RX_CLK_ND;
  986. break;
  987. default:
  988. return 0;
  989. }
  990. ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_CONTROL_PAD_SKEW,
  991. FIELD_PREP(MII_KSZ9031RN_RX_CTL_M, rx) |
  992. FIELD_PREP(MII_KSZ9031RN_TX_CTL_M, tx));
  993. if (ret < 0)
  994. return ret;
  995. ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_RX_DATA_PAD_SKEW,
  996. FIELD_PREP(MII_KSZ9031RN_RXD3, rx) |
  997. FIELD_PREP(MII_KSZ9031RN_RXD2, rx) |
  998. FIELD_PREP(MII_KSZ9031RN_RXD1, rx) |
  999. FIELD_PREP(MII_KSZ9031RN_RXD0, rx));
  1000. if (ret < 0)
  1001. return ret;
  1002. ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_TX_DATA_PAD_SKEW,
  1003. FIELD_PREP(MII_KSZ9031RN_TXD3, tx) |
  1004. FIELD_PREP(MII_KSZ9031RN_TXD2, tx) |
  1005. FIELD_PREP(MII_KSZ9031RN_TXD1, tx) |
  1006. FIELD_PREP(MII_KSZ9031RN_TXD0, tx));
  1007. if (ret < 0)
  1008. return ret;
  1009. return phy_write_mmd(phydev, 2, MII_KSZ9031RN_CLK_PAD_SKEW,
  1010. FIELD_PREP(MII_KSZ9031RN_GTX_CLK, tx_clk) |
  1011. FIELD_PREP(MII_KSZ9031RN_RX_CLK, rx_clk));
  1012. }
  1013. static int ksz9031_config_init(struct phy_device *phydev)
  1014. {
  1015. const struct device_node *of_node;
  1016. static const char *clk_skews[2] = {"rxc-skew-ps", "txc-skew-ps"};
  1017. static const char *rx_data_skews[4] = {
  1018. "rxd0-skew-ps", "rxd1-skew-ps",
  1019. "rxd2-skew-ps", "rxd3-skew-ps"
  1020. };
  1021. static const char *tx_data_skews[4] = {
  1022. "txd0-skew-ps", "txd1-skew-ps",
  1023. "txd2-skew-ps", "txd3-skew-ps"
  1024. };
  1025. static const char *control_skews[2] = {"txen-skew-ps", "rxdv-skew-ps"};
  1026. const struct device *dev_walker;
  1027. int result;
  1028. result = ksz9031_enable_edpd(phydev);
  1029. if (result < 0)
  1030. return result;
  1031. /* The Micrel driver has a deprecated option to place phy OF
  1032. * properties in the MAC node. Walk up the tree of devices to
  1033. * find a device with an OF node.
  1034. */
  1035. dev_walker = &phydev->mdio.dev;
  1036. do {
  1037. of_node = dev_walker->of_node;
  1038. dev_walker = dev_walker->parent;
  1039. } while (!of_node && dev_walker);
  1040. if (of_node) {
  1041. bool update = false;
  1042. if (phy_interface_is_rgmii(phydev)) {
  1043. result = ksz9031_config_rgmii_delay(phydev);
  1044. if (result < 0)
  1045. return result;
  1046. }
  1047. ksz9031_of_load_skew_values(phydev, of_node,
  1048. MII_KSZ9031RN_CLK_PAD_SKEW, 5,
  1049. clk_skews, 2, &update);
  1050. ksz9031_of_load_skew_values(phydev, of_node,
  1051. MII_KSZ9031RN_CONTROL_PAD_SKEW, 4,
  1052. control_skews, 2, &update);
  1053. ksz9031_of_load_skew_values(phydev, of_node,
  1054. MII_KSZ9031RN_RX_DATA_PAD_SKEW, 4,
  1055. rx_data_skews, 4, &update);
  1056. ksz9031_of_load_skew_values(phydev, of_node,
  1057. MII_KSZ9031RN_TX_DATA_PAD_SKEW, 4,
  1058. tx_data_skews, 4, &update);
  1059. if (update && !phy_interface_is_rgmii(phydev))
  1060. phydev_warn(phydev,
  1061. "*-skew-ps values should be used only with RGMII PHY modes\n");
  1062. /* Silicon Errata Sheet (DS80000691D or DS80000692D):
  1063. * When the device links in the 1000BASE-T slave mode only,
  1064. * the optional 125MHz reference output clock (CLK125_NDO)
  1065. * has wide duty cycle variation.
  1066. *
  1067. * The optional CLK125_NDO clock does not meet the RGMII
  1068. * 45/55 percent (min/max) duty cycle requirement and therefore
  1069. * cannot be used directly by the MAC side for clocking
  1070. * applications that have setup/hold time requirements on
  1071. * rising and falling clock edges.
  1072. *
  1073. * Workaround:
  1074. * Force the phy to be the master to receive a stable clock
  1075. * which meets the duty cycle requirement.
  1076. */
  1077. if (of_property_read_bool(of_node, "micrel,force-master")) {
  1078. result = phy_read(phydev, MII_CTRL1000);
  1079. if (result < 0)
  1080. goto err_force_master;
  1081. /* enable master mode, config & prefer master */
  1082. result |= CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER;
  1083. result = phy_write(phydev, MII_CTRL1000, result);
  1084. if (result < 0)
  1085. goto err_force_master;
  1086. }
  1087. }
  1088. return ksz9031_center_flp_timing(phydev);
  1089. err_force_master:
  1090. phydev_err(phydev, "failed to force the phy to master mode\n");
  1091. return result;
  1092. }
  1093. #define KSZ9131_SKEW_5BIT_MAX 2400
  1094. #define KSZ9131_SKEW_4BIT_MAX 800
  1095. #define KSZ9131_OFFSET 700
  1096. #define KSZ9131_STEP 100
  1097. static int ksz9131_of_load_skew_values(struct phy_device *phydev,
  1098. struct device_node *of_node,
  1099. u16 reg, size_t field_sz,
  1100. char *field[], u8 numfields)
  1101. {
  1102. int val[4] = {-(1 + KSZ9131_OFFSET), -(2 + KSZ9131_OFFSET),
  1103. -(3 + KSZ9131_OFFSET), -(4 + KSZ9131_OFFSET)};
  1104. int skewval, skewmax = 0;
  1105. int matches = 0;
  1106. u16 maxval;
  1107. u16 newval;
  1108. u16 mask;
  1109. int i;
  1110. /* psec properties in dts should mean x pico seconds */
  1111. if (field_sz == 5)
  1112. skewmax = KSZ9131_SKEW_5BIT_MAX;
  1113. else
  1114. skewmax = KSZ9131_SKEW_4BIT_MAX;
  1115. for (i = 0; i < numfields; i++)
  1116. if (!of_property_read_s32(of_node, field[i], &skewval)) {
  1117. if (skewval < -KSZ9131_OFFSET)
  1118. skewval = -KSZ9131_OFFSET;
  1119. else if (skewval > skewmax)
  1120. skewval = skewmax;
  1121. val[i] = skewval + KSZ9131_OFFSET;
  1122. matches++;
  1123. }
  1124. if (!matches)
  1125. return 0;
  1126. if (matches < numfields)
  1127. newval = phy_read_mmd(phydev, 2, reg);
  1128. else
  1129. newval = 0;
  1130. maxval = (field_sz == 4) ? 0xf : 0x1f;
  1131. for (i = 0; i < numfields; i++)
  1132. if (val[i] != -(i + 1 + KSZ9131_OFFSET)) {
  1133. mask = 0xffff;
  1134. mask ^= maxval << (field_sz * i);
  1135. newval = (newval & mask) |
  1136. (((val[i] / KSZ9131_STEP) & maxval)
  1137. << (field_sz * i));
  1138. }
  1139. return phy_write_mmd(phydev, 2, reg, newval);
  1140. }
  1141. #define KSZ9131RN_MMD_COMMON_CTRL_REG 2
  1142. #define KSZ9131RN_RXC_DLL_CTRL 76
  1143. #define KSZ9131RN_TXC_DLL_CTRL 77
  1144. #define KSZ9131RN_DLL_ENABLE_DELAY 0
  1145. static int ksz9131_config_rgmii_delay(struct phy_device *phydev)
  1146. {
  1147. const struct kszphy_type *type = phydev->drv->driver_data;
  1148. u16 rxcdll_val, txcdll_val;
  1149. int ret;
  1150. switch (phydev->interface) {
  1151. case PHY_INTERFACE_MODE_RGMII:
  1152. rxcdll_val = type->disable_dll_rx_bit;
  1153. txcdll_val = type->disable_dll_tx_bit;
  1154. break;
  1155. case PHY_INTERFACE_MODE_RGMII_ID:
  1156. rxcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
  1157. txcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
  1158. break;
  1159. case PHY_INTERFACE_MODE_RGMII_RXID:
  1160. rxcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
  1161. txcdll_val = type->disable_dll_tx_bit;
  1162. break;
  1163. case PHY_INTERFACE_MODE_RGMII_TXID:
  1164. rxcdll_val = type->disable_dll_rx_bit;
  1165. txcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
  1166. break;
  1167. default:
  1168. return 0;
  1169. }
  1170. ret = phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  1171. KSZ9131RN_RXC_DLL_CTRL, type->disable_dll_mask,
  1172. rxcdll_val);
  1173. if (ret < 0)
  1174. return ret;
  1175. return phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  1176. KSZ9131RN_TXC_DLL_CTRL, type->disable_dll_mask,
  1177. txcdll_val);
  1178. }
  1179. /* Silicon Errata DS80000693B
  1180. *
  1181. * When LEDs are configured in Individual Mode, LED1 is ON in a no-link
  1182. * condition. Workaround is to set register 0x1e, bit 9, this way LED1 behaves
  1183. * according to the datasheet (off if there is no link).
  1184. */
  1185. static int ksz9131_led_errata(struct phy_device *phydev)
  1186. {
  1187. int reg;
  1188. reg = phy_read_mmd(phydev, 2, 0);
  1189. if (reg < 0)
  1190. return reg;
  1191. if (!(reg & BIT(4)))
  1192. return 0;
  1193. return phy_set_bits(phydev, 0x1e, BIT(9));
  1194. }
  1195. static int ksz9131_config_init(struct phy_device *phydev)
  1196. {
  1197. struct device_node *of_node;
  1198. char *clk_skews[2] = {"rxc-skew-psec", "txc-skew-psec"};
  1199. char *rx_data_skews[4] = {
  1200. "rxd0-skew-psec", "rxd1-skew-psec",
  1201. "rxd2-skew-psec", "rxd3-skew-psec"
  1202. };
  1203. char *tx_data_skews[4] = {
  1204. "txd0-skew-psec", "txd1-skew-psec",
  1205. "txd2-skew-psec", "txd3-skew-psec"
  1206. };
  1207. char *control_skews[2] = {"txen-skew-psec", "rxdv-skew-psec"};
  1208. const struct device *dev_walker;
  1209. int ret;
  1210. phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
  1211. dev_walker = &phydev->mdio.dev;
  1212. do {
  1213. of_node = dev_walker->of_node;
  1214. dev_walker = dev_walker->parent;
  1215. } while (!of_node && dev_walker);
  1216. if (!of_node)
  1217. return 0;
  1218. if (phy_interface_is_rgmii(phydev)) {
  1219. ret = ksz9131_config_rgmii_delay(phydev);
  1220. if (ret < 0)
  1221. return ret;
  1222. }
  1223. ret = ksz9131_of_load_skew_values(phydev, of_node,
  1224. MII_KSZ9031RN_CLK_PAD_SKEW, 5,
  1225. clk_skews, 2);
  1226. if (ret < 0)
  1227. return ret;
  1228. ret = ksz9131_of_load_skew_values(phydev, of_node,
  1229. MII_KSZ9031RN_CONTROL_PAD_SKEW, 4,
  1230. control_skews, 2);
  1231. if (ret < 0)
  1232. return ret;
  1233. ret = ksz9131_of_load_skew_values(phydev, of_node,
  1234. MII_KSZ9031RN_RX_DATA_PAD_SKEW, 4,
  1235. rx_data_skews, 4);
  1236. if (ret < 0)
  1237. return ret;
  1238. ret = ksz9131_of_load_skew_values(phydev, of_node,
  1239. MII_KSZ9031RN_TX_DATA_PAD_SKEW, 4,
  1240. tx_data_skews, 4);
  1241. if (ret < 0)
  1242. return ret;
  1243. ret = ksz9131_led_errata(phydev);
  1244. if (ret < 0)
  1245. return ret;
  1246. if (phydev->dev_flags & PHY_F_KEEP_PREAMBLE_BEFORE_SFD)
  1247. ret = phy_modify(phydev, KSZ9x31_REMOTE_LOOPBACK, 0,
  1248. KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE);
  1249. return ret;
  1250. }
  1251. #define MII_KSZ9131_AUTO_MDIX 0x1C
  1252. #define MII_KSZ9131_AUTO_MDI_SET BIT(7)
  1253. #define MII_KSZ9131_AUTO_MDIX_SWAP_OFF BIT(6)
  1254. #define MII_KSZ9131_DIG_AXAN_STS 0x14
  1255. #define MII_KSZ9131_DIG_AXAN_STS_LINK_DET BIT(14)
  1256. #define MII_KSZ9131_DIG_AXAN_STS_A_SELECT BIT(12)
  1257. static int ksz9131_mdix_update(struct phy_device *phydev)
  1258. {
  1259. int ret;
  1260. if (phydev->mdix_ctrl != ETH_TP_MDI_AUTO) {
  1261. phydev->mdix = phydev->mdix_ctrl;
  1262. } else {
  1263. ret = phy_read(phydev, MII_KSZ9131_DIG_AXAN_STS);
  1264. if (ret < 0)
  1265. return ret;
  1266. if (ret & MII_KSZ9131_DIG_AXAN_STS_LINK_DET) {
  1267. if (ret & MII_KSZ9131_DIG_AXAN_STS_A_SELECT)
  1268. phydev->mdix = ETH_TP_MDI;
  1269. else
  1270. phydev->mdix = ETH_TP_MDI_X;
  1271. } else {
  1272. phydev->mdix = ETH_TP_MDI_INVALID;
  1273. }
  1274. }
  1275. return 0;
  1276. }
  1277. static int ksz9131_config_mdix(struct phy_device *phydev, u8 ctrl)
  1278. {
  1279. u16 val;
  1280. switch (ctrl) {
  1281. case ETH_TP_MDI:
  1282. val = MII_KSZ9131_AUTO_MDIX_SWAP_OFF |
  1283. MII_KSZ9131_AUTO_MDI_SET;
  1284. break;
  1285. case ETH_TP_MDI_X:
  1286. val = MII_KSZ9131_AUTO_MDIX_SWAP_OFF;
  1287. break;
  1288. case ETH_TP_MDI_AUTO:
  1289. val = 0;
  1290. break;
  1291. default:
  1292. return 0;
  1293. }
  1294. return phy_modify(phydev, MII_KSZ9131_AUTO_MDIX,
  1295. MII_KSZ9131_AUTO_MDIX_SWAP_OFF |
  1296. MII_KSZ9131_AUTO_MDI_SET, val);
  1297. }
  1298. static int ksz9131_read_status(struct phy_device *phydev)
  1299. {
  1300. int ret;
  1301. ret = ksz9131_mdix_update(phydev);
  1302. if (ret < 0)
  1303. return ret;
  1304. return genphy_read_status(phydev);
  1305. }
  1306. static int ksz9131_config_aneg(struct phy_device *phydev)
  1307. {
  1308. int ret;
  1309. ret = ksz9131_config_mdix(phydev, phydev->mdix_ctrl);
  1310. if (ret)
  1311. return ret;
  1312. return genphy_config_aneg(phydev);
  1313. }
  1314. static int ksz9477_get_features(struct phy_device *phydev)
  1315. {
  1316. int ret;
  1317. ret = genphy_read_abilities(phydev);
  1318. if (ret)
  1319. return ret;
  1320. /* The "EEE control and capability 1" (Register 3.20) seems to be
  1321. * influenced by the "EEE advertisement 1" (Register 7.60). Changes
  1322. * on the 7.60 will affect 3.20. So, we need to construct our own list
  1323. * of caps.
  1324. * KSZ8563R should have 100BaseTX/Full only.
  1325. */
  1326. linkmode_and(phydev->supported_eee, phydev->supported,
  1327. PHY_EEE_CAP1_FEATURES);
  1328. return 0;
  1329. }
  1330. #define KSZ8873MLL_GLOBAL_CONTROL_4 0x06
  1331. #define KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX BIT(6)
  1332. #define KSZ8873MLL_GLOBAL_CONTROL_4_SPEED BIT(4)
  1333. static int ksz8873mll_read_status(struct phy_device *phydev)
  1334. {
  1335. int regval;
  1336. /* dummy read */
  1337. regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
  1338. regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
  1339. if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX)
  1340. phydev->duplex = DUPLEX_HALF;
  1341. else
  1342. phydev->duplex = DUPLEX_FULL;
  1343. if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_SPEED)
  1344. phydev->speed = SPEED_10;
  1345. else
  1346. phydev->speed = SPEED_100;
  1347. phydev->link = 1;
  1348. phydev->pause = phydev->asym_pause = 0;
  1349. return 0;
  1350. }
  1351. static int ksz9031_get_features(struct phy_device *phydev)
  1352. {
  1353. int ret;
  1354. ret = genphy_read_abilities(phydev);
  1355. if (ret < 0)
  1356. return ret;
  1357. /* Silicon Errata Sheet (DS80000691D or DS80000692D):
  1358. * Whenever the device's Asymmetric Pause capability is set to 1,
  1359. * link-up may fail after a link-up to link-down transition.
  1360. *
  1361. * The Errata Sheet is for ksz9031, but ksz9021 has the same issue
  1362. *
  1363. * Workaround:
  1364. * Do not enable the Asymmetric Pause capability bit.
  1365. */
  1366. linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported);
  1367. /* We force setting the Pause capability as the core will force the
  1368. * Asymmetric Pause capability to 1 otherwise.
  1369. */
  1370. linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported);
  1371. return 0;
  1372. }
  1373. static int ksz9031_read_status(struct phy_device *phydev)
  1374. {
  1375. int err;
  1376. int regval;
  1377. err = genphy_read_status(phydev);
  1378. if (err)
  1379. return err;
  1380. /* Make sure the PHY is not broken. Read idle error count,
  1381. * and reset the PHY if it is maxed out.
  1382. */
  1383. regval = phy_read(phydev, MII_STAT1000);
  1384. if ((regval & 0xFF) == 0xFF) {
  1385. phy_init_hw(phydev);
  1386. phydev->link = 0;
  1387. if (phydev->drv->config_intr && phy_interrupt_is_valid(phydev))
  1388. phydev->drv->config_intr(phydev);
  1389. return genphy_config_aneg(phydev);
  1390. }
  1391. return 0;
  1392. }
  1393. static int ksz9x31_cable_test_start(struct phy_device *phydev)
  1394. {
  1395. struct kszphy_priv *priv = phydev->priv;
  1396. int ret;
  1397. /* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
  1398. * Prior to running the cable diagnostics, Auto-negotiation should
  1399. * be disabled, full duplex set and the link speed set to 1000Mbps
  1400. * via the Basic Control Register.
  1401. */
  1402. ret = phy_modify(phydev, MII_BMCR,
  1403. BMCR_SPEED1000 | BMCR_FULLDPLX |
  1404. BMCR_ANENABLE | BMCR_SPEED100,
  1405. BMCR_SPEED1000 | BMCR_FULLDPLX);
  1406. if (ret)
  1407. return ret;
  1408. /* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
  1409. * The Master-Slave configuration should be set to Slave by writing
  1410. * a value of 0x1000 to the Auto-Negotiation Master Slave Control
  1411. * Register.
  1412. */
  1413. ret = phy_read(phydev, MII_CTRL1000);
  1414. if (ret < 0)
  1415. return ret;
  1416. /* Cache these bits, they need to be restored once LinkMD finishes. */
  1417. priv->vct_ctrl1000 = ret & (CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER);
  1418. ret &= ~(CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER);
  1419. ret |= CTL1000_ENABLE_MASTER;
  1420. return phy_write(phydev, MII_CTRL1000, ret);
  1421. }
  1422. static int ksz9x31_cable_test_result_trans(u16 status)
  1423. {
  1424. switch (FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status)) {
  1425. case KSZ9x31_LMD_VCT_ST_NORMAL:
  1426. return ETHTOOL_A_CABLE_RESULT_CODE_OK;
  1427. case KSZ9x31_LMD_VCT_ST_OPEN:
  1428. return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
  1429. case KSZ9x31_LMD_VCT_ST_SHORT:
  1430. return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
  1431. case KSZ9x31_LMD_VCT_ST_FAIL:
  1432. fallthrough;
  1433. default:
  1434. return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
  1435. }
  1436. }
  1437. static bool ksz9x31_cable_test_failed(u16 status)
  1438. {
  1439. int stat = FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status);
  1440. return stat == KSZ9x31_LMD_VCT_ST_FAIL;
  1441. }
  1442. static bool ksz9x31_cable_test_fault_length_valid(u16 status)
  1443. {
  1444. switch (FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status)) {
  1445. case KSZ9x31_LMD_VCT_ST_OPEN:
  1446. fallthrough;
  1447. case KSZ9x31_LMD_VCT_ST_SHORT:
  1448. return true;
  1449. }
  1450. return false;
  1451. }
  1452. static int ksz9x31_cable_test_fault_length(struct phy_device *phydev, u16 stat)
  1453. {
  1454. int dt = FIELD_GET(KSZ9x31_LMD_VCT_DATA_MASK, stat);
  1455. /* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
  1456. *
  1457. * distance to fault = (VCT_DATA - 22) * 4 / cable propagation velocity
  1458. */
  1459. if (phydev_id_compare(phydev, PHY_ID_KSZ9131) ||
  1460. phydev_id_compare(phydev, PHY_ID_KSZ9477))
  1461. dt = clamp(dt - 22, 0, 255);
  1462. return (dt * 400) / 10;
  1463. }
  1464. static int ksz9x31_cable_test_wait_for_completion(struct phy_device *phydev)
  1465. {
  1466. int val, ret;
  1467. ret = phy_read_poll_timeout(phydev, KSZ9x31_LMD, val,
  1468. !(val & KSZ9x31_LMD_VCT_EN),
  1469. 30000, 100000, true);
  1470. return ret < 0 ? ret : 0;
  1471. }
  1472. static int ksz9x31_cable_test_get_pair(int pair)
  1473. {
  1474. static const int ethtool_pair[] = {
  1475. ETHTOOL_A_CABLE_PAIR_A,
  1476. ETHTOOL_A_CABLE_PAIR_B,
  1477. ETHTOOL_A_CABLE_PAIR_C,
  1478. ETHTOOL_A_CABLE_PAIR_D,
  1479. };
  1480. return ethtool_pair[pair];
  1481. }
  1482. static int ksz9x31_cable_test_one_pair(struct phy_device *phydev, int pair)
  1483. {
  1484. int ret, val;
  1485. /* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
  1486. * To test each individual cable pair, set the cable pair in the Cable
  1487. * Diagnostics Test Pair (VCT_PAIR[1:0]) field of the LinkMD Cable
  1488. * Diagnostic Register, along with setting the Cable Diagnostics Test
  1489. * Enable (VCT_EN) bit. The Cable Diagnostics Test Enable (VCT_EN) bit
  1490. * will self clear when the test is concluded.
  1491. */
  1492. ret = phy_write(phydev, KSZ9x31_LMD,
  1493. KSZ9x31_LMD_VCT_EN | KSZ9x31_LMD_VCT_PAIR(pair));
  1494. if (ret)
  1495. return ret;
  1496. ret = ksz9x31_cable_test_wait_for_completion(phydev);
  1497. if (ret)
  1498. return ret;
  1499. val = phy_read(phydev, KSZ9x31_LMD);
  1500. if (val < 0)
  1501. return val;
  1502. if (ksz9x31_cable_test_failed(val))
  1503. return -EAGAIN;
  1504. ret = ethnl_cable_test_result(phydev,
  1505. ksz9x31_cable_test_get_pair(pair),
  1506. ksz9x31_cable_test_result_trans(val));
  1507. if (ret)
  1508. return ret;
  1509. if (!ksz9x31_cable_test_fault_length_valid(val))
  1510. return 0;
  1511. return ethnl_cable_test_fault_length(phydev,
  1512. ksz9x31_cable_test_get_pair(pair),
  1513. ksz9x31_cable_test_fault_length(phydev, val));
  1514. }
  1515. static int ksz9x31_cable_test_get_status(struct phy_device *phydev,
  1516. bool *finished)
  1517. {
  1518. struct kszphy_priv *priv = phydev->priv;
  1519. unsigned long pair_mask;
  1520. int retries = 20;
  1521. int pair, ret, rv;
  1522. *finished = false;
  1523. if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
  1524. phydev->supported) ||
  1525. linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
  1526. phydev->supported))
  1527. pair_mask = 0xf; /* All pairs */
  1528. else
  1529. pair_mask = 0x3; /* Pairs A and B only */
  1530. /* Try harder if link partner is active */
  1531. while (pair_mask && retries--) {
  1532. for_each_set_bit(pair, &pair_mask, 4) {
  1533. ret = ksz9x31_cable_test_one_pair(phydev, pair);
  1534. if (ret == -EAGAIN)
  1535. continue;
  1536. if (ret < 0)
  1537. return ret;
  1538. clear_bit(pair, &pair_mask);
  1539. }
  1540. /* If link partner is in autonegotiation mode it will send 2ms
  1541. * of FLPs with at least 6ms of silence.
  1542. * Add 2ms sleep to have better chances to hit this silence.
  1543. */
  1544. if (pair_mask)
  1545. usleep_range(2000, 3000);
  1546. }
  1547. /* Report remaining unfinished pair result as unknown. */
  1548. for_each_set_bit(pair, &pair_mask, 4) {
  1549. ret = ethnl_cable_test_result(phydev,
  1550. ksz9x31_cable_test_get_pair(pair),
  1551. ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC);
  1552. }
  1553. *finished = true;
  1554. /* Restore cached bits from before LinkMD got started. */
  1555. rv = phy_modify(phydev, MII_CTRL1000,
  1556. CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER,
  1557. priv->vct_ctrl1000);
  1558. if (rv)
  1559. return rv;
  1560. return ret;
  1561. }
  1562. static int ksz8873mll_config_aneg(struct phy_device *phydev)
  1563. {
  1564. return 0;
  1565. }
  1566. static int ksz886x_config_mdix(struct phy_device *phydev, u8 ctrl)
  1567. {
  1568. u16 val;
  1569. switch (ctrl) {
  1570. case ETH_TP_MDI:
  1571. val = KSZ886X_BMCR_DISABLE_AUTO_MDIX;
  1572. break;
  1573. case ETH_TP_MDI_X:
  1574. /* Note: The naming of the bit KSZ886X_BMCR_FORCE_MDI is bit
  1575. * counter intuitive, the "-X" in "1 = Force MDI" in the data
  1576. * sheet seems to be missing:
  1577. * 1 = Force MDI (sic!) (transmit on RX+/RX- pins)
  1578. * 0 = Normal operation (transmit on TX+/TX- pins)
  1579. */
  1580. val = KSZ886X_BMCR_DISABLE_AUTO_MDIX | KSZ886X_BMCR_FORCE_MDI;
  1581. break;
  1582. case ETH_TP_MDI_AUTO:
  1583. val = 0;
  1584. break;
  1585. default:
  1586. return 0;
  1587. }
  1588. return phy_modify(phydev, MII_BMCR,
  1589. KSZ886X_BMCR_HP_MDIX | KSZ886X_BMCR_FORCE_MDI |
  1590. KSZ886X_BMCR_DISABLE_AUTO_MDIX,
  1591. KSZ886X_BMCR_HP_MDIX | val);
  1592. }
  1593. static int ksz886x_config_aneg(struct phy_device *phydev)
  1594. {
  1595. int ret;
  1596. ret = genphy_config_aneg(phydev);
  1597. if (ret)
  1598. return ret;
  1599. if (phydev->autoneg != AUTONEG_ENABLE) {
  1600. /* When autonegotiation is disabled, we need to manually force
  1601. * the link state. If we don't do this, the PHY will keep
  1602. * sending Fast Link Pulses (FLPs) which are part of the
  1603. * autonegotiation process. This is not desired when
  1604. * autonegotiation is off.
  1605. */
  1606. ret = phy_set_bits(phydev, MII_KSZPHY_CTRL,
  1607. KSZ886X_CTRL_FORCE_LINK);
  1608. if (ret)
  1609. return ret;
  1610. } else {
  1611. /* If we had previously forced the link state, we need to
  1612. * clear KSZ886X_CTRL_FORCE_LINK bit now. Otherwise, the PHY
  1613. * will not perform autonegotiation.
  1614. */
  1615. ret = phy_clear_bits(phydev, MII_KSZPHY_CTRL,
  1616. KSZ886X_CTRL_FORCE_LINK);
  1617. if (ret)
  1618. return ret;
  1619. }
  1620. /* The MDI-X configuration is automatically changed by the PHY after
  1621. * switching from autoneg off to on. So, take MDI-X configuration under
  1622. * own control and set it after autoneg configuration was done.
  1623. */
  1624. return ksz886x_config_mdix(phydev, phydev->mdix_ctrl);
  1625. }
  1626. static int ksz886x_mdix_update(struct phy_device *phydev)
  1627. {
  1628. int ret;
  1629. ret = phy_read(phydev, MII_BMCR);
  1630. if (ret < 0)
  1631. return ret;
  1632. if (ret & KSZ886X_BMCR_DISABLE_AUTO_MDIX) {
  1633. if (ret & KSZ886X_BMCR_FORCE_MDI)
  1634. phydev->mdix_ctrl = ETH_TP_MDI_X;
  1635. else
  1636. phydev->mdix_ctrl = ETH_TP_MDI;
  1637. } else {
  1638. phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
  1639. }
  1640. ret = phy_read(phydev, MII_KSZPHY_CTRL);
  1641. if (ret < 0)
  1642. return ret;
  1643. /* Same reverse logic as KSZ886X_BMCR_FORCE_MDI */
  1644. if (ret & KSZ886X_CTRL_MDIX_STAT)
  1645. phydev->mdix = ETH_TP_MDI_X;
  1646. else
  1647. phydev->mdix = ETH_TP_MDI;
  1648. return 0;
  1649. }
  1650. static int ksz886x_read_status(struct phy_device *phydev)
  1651. {
  1652. int ret;
  1653. ret = ksz886x_mdix_update(phydev);
  1654. if (ret < 0)
  1655. return ret;
  1656. return genphy_read_status(phydev);
  1657. }
  1658. static int ksz9477_mdix_update(struct phy_device *phydev)
  1659. {
  1660. if (phydev->mdix_ctrl != ETH_TP_MDI_AUTO)
  1661. phydev->mdix = phydev->mdix_ctrl;
  1662. else
  1663. phydev->mdix = ETH_TP_MDI_INVALID;
  1664. return 0;
  1665. }
  1666. static int ksz9477_read_mdix_ctrl(struct phy_device *phydev)
  1667. {
  1668. int val;
  1669. val = phy_read(phydev, MII_KSZ9131_AUTO_MDIX);
  1670. if (val < 0)
  1671. return val;
  1672. if (!(val & MII_KSZ9131_AUTO_MDIX_SWAP_OFF))
  1673. phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
  1674. else if (val & MII_KSZ9131_AUTO_MDI_SET)
  1675. phydev->mdix_ctrl = ETH_TP_MDI;
  1676. else
  1677. phydev->mdix_ctrl = ETH_TP_MDI_X;
  1678. return 0;
  1679. }
  1680. static int ksz9477_read_status(struct phy_device *phydev)
  1681. {
  1682. int ret;
  1683. ret = ksz9477_mdix_update(phydev);
  1684. if (ret)
  1685. return ret;
  1686. return genphy_read_status(phydev);
  1687. }
  1688. static int ksz9477_config_aneg(struct phy_device *phydev)
  1689. {
  1690. int ret;
  1691. ret = ksz9131_config_mdix(phydev, phydev->mdix_ctrl);
  1692. if (ret)
  1693. return ret;
  1694. return genphy_config_aneg(phydev);
  1695. }
  1696. struct ksz9477_errata_write {
  1697. u8 dev_addr;
  1698. u8 reg_addr;
  1699. u16 val;
  1700. };
  1701. static const struct ksz9477_errata_write ksz9477_errata_writes[] = {
  1702. /* Register settings are needed to improve PHY receive performance */
  1703. {0x01, 0x6f, 0xdd0b},
  1704. {0x01, 0x8f, 0x6032},
  1705. {0x01, 0x9d, 0x248c},
  1706. {0x01, 0x75, 0x0060},
  1707. {0x01, 0xd3, 0x7777},
  1708. {0x1c, 0x06, 0x3008},
  1709. {0x1c, 0x08, 0x2000},
  1710. /* Transmit waveform amplitude can be improved (1000BASE-T, 100BASE-TX, 10BASE-Te) */
  1711. {0x1c, 0x04, 0x00d0},
  1712. /* Register settings are required to meet data sheet supply current specifications */
  1713. {0x1c, 0x13, 0x6eff},
  1714. {0x1c, 0x14, 0xe6ff},
  1715. {0x1c, 0x15, 0x6eff},
  1716. {0x1c, 0x16, 0xe6ff},
  1717. {0x1c, 0x17, 0x00ff},
  1718. {0x1c, 0x18, 0x43ff},
  1719. {0x1c, 0x19, 0xc3ff},
  1720. {0x1c, 0x1a, 0x6fff},
  1721. {0x1c, 0x1b, 0x07ff},
  1722. {0x1c, 0x1c, 0x0fff},
  1723. {0x1c, 0x1d, 0xe7ff},
  1724. {0x1c, 0x1e, 0xefff},
  1725. {0x1c, 0x20, 0xeeee},
  1726. };
  1727. static int ksz9477_phy_errata(struct phy_device *phydev)
  1728. {
  1729. int err;
  1730. int i;
  1731. /* Apply PHY settings to address errata listed in
  1732. * KSZ9477, KSZ9897, KSZ9896, KSZ9567, KSZ8565
  1733. * Silicon Errata and Data Sheet Clarification documents.
  1734. *
  1735. * Document notes: Before configuring the PHY MMD registers, it is
  1736. * necessary to set the PHY to 100 Mbps speed with auto-negotiation
  1737. * disabled by writing to register 0xN100-0xN101. After writing the
  1738. * MMD registers, and after all errata workarounds that involve PHY
  1739. * register settings, write register 0xN100-0xN101 again to enable
  1740. * and restart auto-negotiation.
  1741. */
  1742. err = phy_write(phydev, MII_BMCR, BMCR_SPEED100 | BMCR_FULLDPLX);
  1743. if (err)
  1744. return err;
  1745. for (i = 0; i < ARRAY_SIZE(ksz9477_errata_writes); ++i) {
  1746. const struct ksz9477_errata_write *errata = &ksz9477_errata_writes[i];
  1747. err = phy_write_mmd(phydev, errata->dev_addr, errata->reg_addr, errata->val);
  1748. if (err)
  1749. return err;
  1750. }
  1751. return genphy_restart_aneg(phydev);
  1752. }
  1753. static int ksz9477_config_init(struct phy_device *phydev)
  1754. {
  1755. int err;
  1756. /* Only KSZ9897 family of switches needs this fix. */
  1757. if ((phydev->phy_id & 0xf) == 1) {
  1758. err = ksz9477_phy_errata(phydev);
  1759. if (err)
  1760. return err;
  1761. }
  1762. /* Read initial MDI-X config state. So, we do not need to poll it
  1763. * later on.
  1764. */
  1765. err = ksz9477_read_mdix_ctrl(phydev);
  1766. if (err)
  1767. return err;
  1768. return kszphy_config_init(phydev);
  1769. }
  1770. static int kszphy_get_sset_count(struct phy_device *phydev)
  1771. {
  1772. return ARRAY_SIZE(kszphy_hw_stats);
  1773. }
  1774. static void kszphy_get_strings(struct phy_device *phydev, u8 *data)
  1775. {
  1776. int i;
  1777. for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++)
  1778. ethtool_puts(&data, kszphy_hw_stats[i].string);
  1779. }
  1780. static u64 kszphy_get_stat(struct phy_device *phydev, int i)
  1781. {
  1782. struct kszphy_hw_stat stat = kszphy_hw_stats[i];
  1783. struct kszphy_priv *priv = phydev->priv;
  1784. int val;
  1785. u64 ret;
  1786. val = phy_read(phydev, stat.reg);
  1787. if (val < 0) {
  1788. ret = U64_MAX;
  1789. } else {
  1790. val = val & ((1 << stat.bits) - 1);
  1791. priv->stats[i] += val;
  1792. ret = priv->stats[i];
  1793. }
  1794. return ret;
  1795. }
  1796. static void kszphy_get_stats(struct phy_device *phydev,
  1797. struct ethtool_stats *stats, u64 *data)
  1798. {
  1799. int i;
  1800. for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++)
  1801. data[i] = kszphy_get_stat(phydev, i);
  1802. }
  1803. /* KSZ9477 PHY RXER Counter. Probably supported by other PHYs like KSZ9313,
  1804. * etc. The counter is incremented when the PHY receives a frame with one or
  1805. * more symbol errors. The counter is cleared when the register is read.
  1806. */
  1807. #define MII_KSZ9477_PHY_RXER_COUNTER 0x15
  1808. static int kszphy_update_stats(struct phy_device *phydev)
  1809. {
  1810. struct kszphy_priv *priv = phydev->priv;
  1811. int ret;
  1812. ret = phy_read(phydev, MII_KSZ9477_PHY_RXER_COUNTER);
  1813. if (ret < 0)
  1814. return ret;
  1815. priv->phy_stats.rx_err_pkt_cnt += ret;
  1816. return 0;
  1817. }
  1818. static void kszphy_get_phy_stats(struct phy_device *phydev,
  1819. struct ethtool_eth_phy_stats *eth_stats,
  1820. struct ethtool_phy_stats *stats)
  1821. {
  1822. struct kszphy_priv *priv = phydev->priv;
  1823. stats->rx_errors = priv->phy_stats.rx_err_pkt_cnt;
  1824. }
  1825. /* Base register for Signal Quality Indicator (SQI) - Channel A
  1826. *
  1827. * MMD Address: MDIO_MMD_PMAPMD (0x01)
  1828. * Register: 0xAC (Channel A)
  1829. * Each channel (pair) has its own register:
  1830. * Channel A: 0xAC
  1831. * Channel B: 0xAD
  1832. * Channel C: 0xAE
  1833. * Channel D: 0xAF
  1834. */
  1835. #define KSZ9477_MMD_SIGNAL_QUALITY_CHAN_A 0xac
  1836. /* SQI field mask for bits [14:8]
  1837. *
  1838. * SQI indicates relative quality of the signal.
  1839. * A lower value indicates better signal quality.
  1840. */
  1841. #define KSZ9477_MMD_SQI_MASK GENMASK(14, 8)
  1842. #define KSZ9477_MAX_CHANNELS 4
  1843. #define KSZ9477_SQI_MAX 7
  1844. /* Number of SQI samples to average for a stable result.
  1845. *
  1846. * Reference: KSZ9477S Datasheet DS00002392C, Section 4.1.11 (page 26)
  1847. * For noisy environments, a minimum of 30–50 readings is recommended.
  1848. */
  1849. #define KSZ9477_SQI_SAMPLE_COUNT 40
  1850. /* The hardware SQI register provides a raw value from 0-127, where a lower
  1851. * value indicates better signal quality. However, empirical testing has
  1852. * shown that only the 0-7 range is relevant for a functional link. A raw
  1853. * value of 8 or higher was measured directly before link drop. This aligns
  1854. * with the OPEN Alliance recommendation that SQI=0 should represent the
  1855. * pre-failure state.
  1856. *
  1857. * This table provides a non-linear mapping from the useful raw hardware
  1858. * values (0-7) to the standard 0-7 SQI scale, where higher is better.
  1859. */
  1860. static const u8 ksz_sqi_mapping[] = {
  1861. 7, /* raw 0 -> SQI 7 */
  1862. 7, /* raw 1 -> SQI 7 */
  1863. 6, /* raw 2 -> SQI 6 */
  1864. 5, /* raw 3 -> SQI 5 */
  1865. 4, /* raw 4 -> SQI 4 */
  1866. 3, /* raw 5 -> SQI 3 */
  1867. 2, /* raw 6 -> SQI 2 */
  1868. 1, /* raw 7 -> SQI 1 */
  1869. };
  1870. /**
  1871. * kszphy_get_sqi - Read, average, and map Signal Quality Index (SQI)
  1872. * @phydev: the PHY device
  1873. *
  1874. * This function reads and processes the raw Signal Quality Index from the
  1875. * PHY. Based on empirical testing, a raw value of 8 or higher indicates a
  1876. * pre-failure state and is mapped to SQI 0. Raw values from 0-7 are
  1877. * mapped to the standard 0-7 SQI scale via a lookup table.
  1878. *
  1879. * Return: SQI value (0–7), or a negative errno on failure.
  1880. */
  1881. static int kszphy_get_sqi(struct phy_device *phydev)
  1882. {
  1883. int sum[KSZ9477_MAX_CHANNELS] = { 0 };
  1884. int worst_sqi = KSZ9477_SQI_MAX;
  1885. int i, val, raw_sqi, ch;
  1886. u8 channels;
  1887. /* Determine applicable channels based on link speed */
  1888. if (phydev->speed == SPEED_1000)
  1889. channels = 4;
  1890. else if (phydev->speed == SPEED_100)
  1891. channels = 1;
  1892. else
  1893. return -EOPNOTSUPP;
  1894. /* Sample and accumulate SQI readings for each pair (currently only one).
  1895. *
  1896. * Reference: KSZ9477S Datasheet DS00002392C, Section 4.1.11 (page 26)
  1897. * - The SQI register is updated every 2 µs.
  1898. * - Values may fluctuate significantly, even in low-noise environments.
  1899. * - For reliable estimation, average a minimum of 30–50 samples
  1900. * (recommended for noisy environments)
  1901. * - In noisy environments, individual readings are highly unreliable.
  1902. *
  1903. * We use 40 samples per pair with a delay of 3 µs between each
  1904. * read to ensure new values are captured (2 µs update interval).
  1905. */
  1906. for (i = 0; i < KSZ9477_SQI_SAMPLE_COUNT; i++) {
  1907. for (ch = 0; ch < channels; ch++) {
  1908. val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD,
  1909. KSZ9477_MMD_SIGNAL_QUALITY_CHAN_A + ch);
  1910. if (val < 0)
  1911. return val;
  1912. raw_sqi = FIELD_GET(KSZ9477_MMD_SQI_MASK, val);
  1913. sum[ch] += raw_sqi;
  1914. /* We communicate with the PHY via MDIO via SPI or
  1915. * I2C, which is relatively slow. At least slower than
  1916. * the update interval of the SQI register.
  1917. * So, we can skip the delay between reads.
  1918. */
  1919. }
  1920. }
  1921. /* Calculate average for each channel and find the worst SQI */
  1922. for (ch = 0; ch < channels; ch++) {
  1923. int avg_raw_sqi = sum[ch] / KSZ9477_SQI_SAMPLE_COUNT;
  1924. int mapped_sqi;
  1925. /* Handle the pre-fail/failed state first. */
  1926. if (avg_raw_sqi >= ARRAY_SIZE(ksz_sqi_mapping))
  1927. mapped_sqi = 0;
  1928. else
  1929. /* Use the lookup table for the good signal range. */
  1930. mapped_sqi = ksz_sqi_mapping[avg_raw_sqi];
  1931. if (mapped_sqi < worst_sqi)
  1932. worst_sqi = mapped_sqi;
  1933. }
  1934. return worst_sqi;
  1935. }
  1936. static int kszphy_get_sqi_max(struct phy_device *phydev)
  1937. {
  1938. return KSZ9477_SQI_MAX;
  1939. }
  1940. static int kszphy_get_mse_capability(struct phy_device *phydev,
  1941. struct phy_mse_capability *cap)
  1942. {
  1943. /* Capabilities depend on link mode:
  1944. * - 1000BASE-T: per-pair SQI registers exist => expose A..D
  1945. * and a WORST selector.
  1946. * - 100BASE-TX: HW provides a single MSE/SQI reading in the "channel A"
  1947. * register, but with auto MDI-X there is no MDI-X resolution bit,
  1948. * so we cannot map that register to a specific wire pair reliably.
  1949. * To avoid misleading per-channel data, advertise only LINK.
  1950. * Other speeds: no MSE exposure via this driver.
  1951. *
  1952. * Note: WORST is *not* a hardware selector on this family.
  1953. * We expose it because the driver computes it in software
  1954. * by scanning per-channel readouts (A..D) and picking the
  1955. * maximum average MSE.
  1956. */
  1957. if (phydev->speed == SPEED_1000)
  1958. cap->supported_caps = PHY_MSE_CAP_CHANNEL_A |
  1959. PHY_MSE_CAP_CHANNEL_B |
  1960. PHY_MSE_CAP_CHANNEL_C |
  1961. PHY_MSE_CAP_CHANNEL_D |
  1962. PHY_MSE_CAP_WORST_CHANNEL;
  1963. else if (phydev->speed == SPEED_100)
  1964. cap->supported_caps = PHY_MSE_CAP_LINK;
  1965. else
  1966. return -EOPNOTSUPP;
  1967. cap->max_average_mse = FIELD_MAX(KSZ9477_MMD_SQI_MASK);
  1968. cap->refresh_rate_ps = 2000000; /* 2 us */
  1969. /* Estimated from link modulation (125 MBd per channel) and documented
  1970. * refresh rate of 2 us
  1971. */
  1972. cap->num_symbols = 250;
  1973. cap->supported_caps |= PHY_MSE_CAP_AVG;
  1974. return 0;
  1975. }
  1976. static int kszphy_get_mse_snapshot(struct phy_device *phydev,
  1977. enum phy_mse_channel channel,
  1978. struct phy_mse_snapshot *snapshot)
  1979. {
  1980. u8 num_channels;
  1981. int ret;
  1982. if (phydev->speed == SPEED_1000)
  1983. num_channels = 4;
  1984. else if (phydev->speed == SPEED_100)
  1985. num_channels = 1;
  1986. else
  1987. return -EOPNOTSUPP;
  1988. if (channel == PHY_MSE_CHANNEL_WORST) {
  1989. u32 worst_val = 0;
  1990. int i;
  1991. /* WORST is implemented in software: select the maximum
  1992. * average MSE across the available per-channel registers.
  1993. * Only defined when multiple channels exist (1000BASE-T).
  1994. */
  1995. if (num_channels < 2)
  1996. return -EOPNOTSUPP;
  1997. for (i = 0; i < num_channels; i++) {
  1998. ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD,
  1999. KSZ9477_MMD_SIGNAL_QUALITY_CHAN_A + i);
  2000. if (ret < 0)
  2001. return ret;
  2002. ret = FIELD_GET(KSZ9477_MMD_SQI_MASK, ret);
  2003. if (ret > worst_val)
  2004. worst_val = ret;
  2005. }
  2006. snapshot->average_mse = worst_val;
  2007. } else if (channel == PHY_MSE_CHANNEL_LINK && num_channels == 1) {
  2008. ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD,
  2009. KSZ9477_MMD_SIGNAL_QUALITY_CHAN_A);
  2010. if (ret < 0)
  2011. return ret;
  2012. snapshot->average_mse = FIELD_GET(KSZ9477_MMD_SQI_MASK, ret);
  2013. } else if (channel >= PHY_MSE_CHANNEL_A &&
  2014. channel <= PHY_MSE_CHANNEL_D) {
  2015. /* Per-channel readouts are valid only for 1000BASE-T. */
  2016. if (phydev->speed != SPEED_1000)
  2017. return -EOPNOTSUPP;
  2018. ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD,
  2019. KSZ9477_MMD_SIGNAL_QUALITY_CHAN_A + channel);
  2020. if (ret < 0)
  2021. return ret;
  2022. snapshot->average_mse = FIELD_GET(KSZ9477_MMD_SQI_MASK, ret);
  2023. } else {
  2024. return -EOPNOTSUPP;
  2025. }
  2026. return 0;
  2027. }
  2028. static void kszphy_enable_clk(struct phy_device *phydev)
  2029. {
  2030. struct kszphy_priv *priv = phydev->priv;
  2031. if (!priv->clk_enable && priv->clk) {
  2032. clk_prepare_enable(priv->clk);
  2033. priv->clk_enable = true;
  2034. }
  2035. }
  2036. static void kszphy_disable_clk(struct phy_device *phydev)
  2037. {
  2038. struct kszphy_priv *priv = phydev->priv;
  2039. if (priv->clk_enable && priv->clk) {
  2040. clk_disable_unprepare(priv->clk);
  2041. priv->clk_enable = false;
  2042. }
  2043. }
  2044. static int kszphy_generic_resume(struct phy_device *phydev)
  2045. {
  2046. kszphy_enable_clk(phydev);
  2047. return genphy_resume(phydev);
  2048. }
  2049. static int kszphy_generic_suspend(struct phy_device *phydev)
  2050. {
  2051. int ret;
  2052. ret = genphy_suspend(phydev);
  2053. if (ret)
  2054. return ret;
  2055. kszphy_disable_clk(phydev);
  2056. return 0;
  2057. }
  2058. static int kszphy_suspend(struct phy_device *phydev)
  2059. {
  2060. /* Disable PHY Interrupts */
  2061. if (phy_interrupt_is_valid(phydev)) {
  2062. phydev->interrupts = PHY_INTERRUPT_DISABLED;
  2063. if (phydev->drv->config_intr)
  2064. phydev->drv->config_intr(phydev);
  2065. }
  2066. return kszphy_generic_suspend(phydev);
  2067. }
  2068. static void kszphy_parse_led_mode(struct phy_device *phydev)
  2069. {
  2070. const struct kszphy_type *type = phydev->drv->driver_data;
  2071. const struct device_node *np = phydev->mdio.dev.of_node;
  2072. struct kszphy_priv *priv = phydev->priv;
  2073. int ret;
  2074. if (type && type->led_mode_reg) {
  2075. ret = of_property_read_u32(np, "micrel,led-mode",
  2076. &priv->led_mode);
  2077. if (ret)
  2078. priv->led_mode = -1;
  2079. if (priv->led_mode > 3) {
  2080. phydev_err(phydev, "invalid led mode: 0x%02x\n",
  2081. priv->led_mode);
  2082. priv->led_mode = -1;
  2083. }
  2084. } else {
  2085. priv->led_mode = -1;
  2086. }
  2087. }
  2088. static int kszphy_resume(struct phy_device *phydev)
  2089. {
  2090. int ret;
  2091. ret = kszphy_generic_resume(phydev);
  2092. if (ret)
  2093. return ret;
  2094. /* After switching from power-down to normal mode, an internal global
  2095. * reset is automatically generated. Wait a minimum of 1 ms before
  2096. * read/write access to the PHY registers.
  2097. */
  2098. usleep_range(1000, 2000);
  2099. ret = kszphy_config_reset(phydev);
  2100. if (ret)
  2101. return ret;
  2102. /* Enable PHY Interrupts */
  2103. if (phy_interrupt_is_valid(phydev)) {
  2104. phydev->interrupts = PHY_INTERRUPT_ENABLED;
  2105. if (phydev->drv->config_intr)
  2106. phydev->drv->config_intr(phydev);
  2107. }
  2108. return 0;
  2109. }
  2110. /* Because of errata DS80000700A, receiver error following software
  2111. * power down. Suspend and resume callbacks only disable and enable
  2112. * external rmii reference clock.
  2113. */
  2114. static int ksz8041_resume(struct phy_device *phydev)
  2115. {
  2116. kszphy_enable_clk(phydev);
  2117. return 0;
  2118. }
  2119. static int ksz8041_suspend(struct phy_device *phydev)
  2120. {
  2121. kszphy_disable_clk(phydev);
  2122. return 0;
  2123. }
  2124. static int ksz9477_resume(struct phy_device *phydev)
  2125. {
  2126. int ret;
  2127. /* No need to initialize registers if not powered down. */
  2128. ret = phy_read(phydev, MII_BMCR);
  2129. if (ret < 0)
  2130. return ret;
  2131. if (!(ret & BMCR_PDOWN))
  2132. return 0;
  2133. genphy_resume(phydev);
  2134. /* After switching from power-down to normal mode, an internal global
  2135. * reset is automatically generated. Wait a minimum of 1 ms before
  2136. * read/write access to the PHY registers.
  2137. */
  2138. usleep_range(1000, 2000);
  2139. /* Only KSZ9897 family of switches needs this fix. */
  2140. if ((phydev->phy_id & 0xf) == 1) {
  2141. ret = ksz9477_phy_errata(phydev);
  2142. if (ret)
  2143. return ret;
  2144. }
  2145. /* Enable PHY Interrupts */
  2146. if (phy_interrupt_is_valid(phydev)) {
  2147. phydev->interrupts = PHY_INTERRUPT_ENABLED;
  2148. if (phydev->drv->config_intr)
  2149. phydev->drv->config_intr(phydev);
  2150. }
  2151. return 0;
  2152. }
  2153. static int ksz8061_resume(struct phy_device *phydev)
  2154. {
  2155. int ret;
  2156. /* This function can be called twice when the Ethernet device is on. */
  2157. ret = phy_read(phydev, MII_BMCR);
  2158. if (ret < 0)
  2159. return ret;
  2160. if (!(ret & BMCR_PDOWN))
  2161. return 0;
  2162. ret = kszphy_generic_resume(phydev);
  2163. if (ret)
  2164. return ret;
  2165. usleep_range(1000, 2000);
  2166. /* Re-program the value after chip is reset. */
  2167. ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_DEVID1, 0xB61A);
  2168. if (ret)
  2169. return ret;
  2170. /* Enable PHY Interrupts */
  2171. if (phy_interrupt_is_valid(phydev)) {
  2172. phydev->interrupts = PHY_INTERRUPT_ENABLED;
  2173. if (phydev->drv->config_intr)
  2174. phydev->drv->config_intr(phydev);
  2175. }
  2176. return 0;
  2177. }
  2178. static int ksz8061_suspend(struct phy_device *phydev)
  2179. {
  2180. return kszphy_suspend(phydev);
  2181. }
  2182. static int kszphy_probe(struct phy_device *phydev)
  2183. {
  2184. const struct kszphy_type *type = phydev->drv->driver_data;
  2185. const struct device_node *np = phydev->mdio.dev.of_node;
  2186. struct kszphy_priv *priv;
  2187. struct clk *clk;
  2188. priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
  2189. if (!priv)
  2190. return -ENOMEM;
  2191. phydev->priv = priv;
  2192. priv->type = type;
  2193. kszphy_parse_led_mode(phydev);
  2194. clk = devm_clk_get_optional(&phydev->mdio.dev, "rmii-ref");
  2195. /* NOTE: clk may be NULL if building without CONFIG_HAVE_CLK */
  2196. if (!IS_ERR_OR_NULL(clk)) {
  2197. bool rmii_ref_clk_sel_25_mhz;
  2198. unsigned long rate;
  2199. int err;
  2200. err = clk_prepare_enable(clk);
  2201. if (err) {
  2202. phydev_err(phydev, "Failed to enable rmii-ref clock\n");
  2203. return err;
  2204. }
  2205. rate = clk_get_rate(clk);
  2206. clk_disable_unprepare(clk);
  2207. if (type)
  2208. priv->rmii_ref_clk_sel = type->has_rmii_ref_clk_sel;
  2209. rmii_ref_clk_sel_25_mhz = of_property_read_bool(np,
  2210. "micrel,rmii-reference-clock-select-25-mhz");
  2211. if (rate > 24500000 && rate < 25500000) {
  2212. priv->rmii_ref_clk_sel_val = rmii_ref_clk_sel_25_mhz;
  2213. } else if (rate > 49500000 && rate < 50500000) {
  2214. priv->rmii_ref_clk_sel_val = !rmii_ref_clk_sel_25_mhz;
  2215. } else {
  2216. phydev_err(phydev, "Clock rate out of range: %ld\n",
  2217. rate);
  2218. return -EINVAL;
  2219. }
  2220. } else if (!clk) {
  2221. /* unnamed clock from the generic ethernet-phy binding */
  2222. clk = devm_clk_get_optional(&phydev->mdio.dev, NULL);
  2223. }
  2224. if (IS_ERR(clk))
  2225. return PTR_ERR(clk);
  2226. priv->clk = clk;
  2227. if (ksz8041_fiber_mode(phydev))
  2228. phydev->port = PORT_FIBRE;
  2229. /* Support legacy board-file configuration */
  2230. if (phydev->dev_flags & MICREL_PHY_50MHZ_CLK) {
  2231. priv->rmii_ref_clk_sel = true;
  2232. priv->rmii_ref_clk_sel_val = true;
  2233. }
  2234. return 0;
  2235. }
  2236. static int lan8814_cable_test_start(struct phy_device *phydev)
  2237. {
  2238. /* If autoneg is enabled, we won't be able to test cross pair
  2239. * short. In this case, the PHY will "detect" a link and
  2240. * confuse the internal state machine - disable auto neg here.
  2241. * Set the speed to 1000mbit and full duplex.
  2242. */
  2243. return phy_modify(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_SPEED100,
  2244. BMCR_SPEED1000 | BMCR_FULLDPLX);
  2245. }
  2246. static int ksz886x_cable_test_start(struct phy_device *phydev)
  2247. {
  2248. if (phydev->dev_flags & MICREL_KSZ8_P1_ERRATA)
  2249. return -EOPNOTSUPP;
  2250. /* If autoneg is enabled, we won't be able to test cross pair
  2251. * short. In this case, the PHY will "detect" a link and
  2252. * confuse the internal state machine - disable auto neg here.
  2253. * If autoneg is disabled, we should set the speed to 10mbit.
  2254. */
  2255. return phy_clear_bits(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_SPEED100);
  2256. }
  2257. static __always_inline int ksz886x_cable_test_result_trans(u16 status, u16 mask)
  2258. {
  2259. switch (FIELD_GET(mask, status)) {
  2260. case KSZ8081_LMD_STAT_NORMAL:
  2261. return ETHTOOL_A_CABLE_RESULT_CODE_OK;
  2262. case KSZ8081_LMD_STAT_SHORT:
  2263. return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
  2264. case KSZ8081_LMD_STAT_OPEN:
  2265. return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
  2266. case KSZ8081_LMD_STAT_FAIL:
  2267. fallthrough;
  2268. default:
  2269. return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
  2270. }
  2271. }
  2272. static __always_inline bool ksz886x_cable_test_failed(u16 status, u16 mask)
  2273. {
  2274. return FIELD_GET(mask, status) ==
  2275. KSZ8081_LMD_STAT_FAIL;
  2276. }
  2277. static __always_inline bool ksz886x_cable_test_fault_length_valid(u16 status, u16 mask)
  2278. {
  2279. switch (FIELD_GET(mask, status)) {
  2280. case KSZ8081_LMD_STAT_OPEN:
  2281. fallthrough;
  2282. case KSZ8081_LMD_STAT_SHORT:
  2283. return true;
  2284. }
  2285. return false;
  2286. }
  2287. static __always_inline int ksz886x_cable_test_fault_length(struct phy_device *phydev,
  2288. u16 status, u16 data_mask)
  2289. {
  2290. int dt;
  2291. /* According to the data sheet the distance to the fault is
  2292. * DELTA_TIME * 0.4 meters for ksz phys.
  2293. * (DELTA_TIME - 22) * 0.8 for lan8814 phy.
  2294. */
  2295. dt = FIELD_GET(data_mask, status);
  2296. if (phydev_id_compare(phydev, PHY_ID_LAN8814))
  2297. return ((dt - 22) * 800) / 10;
  2298. else
  2299. return (dt * 400) / 10;
  2300. }
  2301. static int ksz886x_cable_test_wait_for_completion(struct phy_device *phydev)
  2302. {
  2303. const struct kszphy_type *type = phydev->drv->driver_data;
  2304. int val, ret;
  2305. ret = phy_read_poll_timeout(phydev, type->cable_diag_reg, val,
  2306. !(val & KSZ8081_LMD_ENABLE_TEST),
  2307. 30000, 100000, true);
  2308. return ret < 0 ? ret : 0;
  2309. }
  2310. static int lan8814_cable_test_one_pair(struct phy_device *phydev, int pair)
  2311. {
  2312. static const int ethtool_pair[] = { ETHTOOL_A_CABLE_PAIR_A,
  2313. ETHTOOL_A_CABLE_PAIR_B,
  2314. ETHTOOL_A_CABLE_PAIR_C,
  2315. ETHTOOL_A_CABLE_PAIR_D,
  2316. };
  2317. u32 fault_length;
  2318. int ret;
  2319. int val;
  2320. val = KSZ8081_LMD_ENABLE_TEST;
  2321. val = val | (pair << LAN8814_PAIR_BIT_SHIFT);
  2322. ret = phy_write(phydev, LAN8814_CABLE_DIAG, val);
  2323. if (ret < 0)
  2324. return ret;
  2325. ret = ksz886x_cable_test_wait_for_completion(phydev);
  2326. if (ret)
  2327. return ret;
  2328. val = phy_read(phydev, LAN8814_CABLE_DIAG);
  2329. if (val < 0)
  2330. return val;
  2331. if (ksz886x_cable_test_failed(val, LAN8814_CABLE_DIAG_STAT_MASK))
  2332. return -EAGAIN;
  2333. ret = ethnl_cable_test_result(phydev, ethtool_pair[pair],
  2334. ksz886x_cable_test_result_trans(val,
  2335. LAN8814_CABLE_DIAG_STAT_MASK
  2336. ));
  2337. if (ret)
  2338. return ret;
  2339. if (!ksz886x_cable_test_fault_length_valid(val, LAN8814_CABLE_DIAG_STAT_MASK))
  2340. return 0;
  2341. fault_length = ksz886x_cable_test_fault_length(phydev, val,
  2342. LAN8814_CABLE_DIAG_VCT_DATA_MASK);
  2343. return ethnl_cable_test_fault_length(phydev, ethtool_pair[pair], fault_length);
  2344. }
  2345. static int ksz886x_cable_test_one_pair(struct phy_device *phydev, int pair)
  2346. {
  2347. static const int ethtool_pair[] = {
  2348. ETHTOOL_A_CABLE_PAIR_A,
  2349. ETHTOOL_A_CABLE_PAIR_B,
  2350. };
  2351. int ret, val, mdix;
  2352. u32 fault_length;
  2353. /* There is no way to choice the pair, like we do one ksz9031.
  2354. * We can workaround this limitation by using the MDI-X functionality.
  2355. */
  2356. if (pair == 0)
  2357. mdix = ETH_TP_MDI;
  2358. else
  2359. mdix = ETH_TP_MDI_X;
  2360. switch (phydev->phy_id & MICREL_PHY_ID_MASK) {
  2361. case PHY_ID_KSZ8081:
  2362. ret = ksz8081_config_mdix(phydev, mdix);
  2363. break;
  2364. case PHY_ID_KSZ886X:
  2365. ret = ksz886x_config_mdix(phydev, mdix);
  2366. break;
  2367. default:
  2368. ret = -ENODEV;
  2369. }
  2370. if (ret)
  2371. return ret;
  2372. /* Now we are ready to fire. This command will send a 100ns pulse
  2373. * to the pair.
  2374. */
  2375. ret = phy_write(phydev, KSZ8081_LMD, KSZ8081_LMD_ENABLE_TEST);
  2376. if (ret)
  2377. return ret;
  2378. ret = ksz886x_cable_test_wait_for_completion(phydev);
  2379. if (ret)
  2380. return ret;
  2381. val = phy_read(phydev, KSZ8081_LMD);
  2382. if (val < 0)
  2383. return val;
  2384. if (ksz886x_cable_test_failed(val, KSZ8081_LMD_STAT_MASK))
  2385. return -EAGAIN;
  2386. ret = ethnl_cable_test_result(phydev, ethtool_pair[pair],
  2387. ksz886x_cable_test_result_trans(val, KSZ8081_LMD_STAT_MASK));
  2388. if (ret)
  2389. return ret;
  2390. if (!ksz886x_cable_test_fault_length_valid(val, KSZ8081_LMD_STAT_MASK))
  2391. return 0;
  2392. fault_length = ksz886x_cable_test_fault_length(phydev, val, KSZ8081_LMD_DELTA_TIME_MASK);
  2393. return ethnl_cable_test_fault_length(phydev, ethtool_pair[pair], fault_length);
  2394. }
  2395. static int ksz886x_cable_test_get_status(struct phy_device *phydev,
  2396. bool *finished)
  2397. {
  2398. const struct kszphy_type *type = phydev->drv->driver_data;
  2399. unsigned long pair_mask = type->pair_mask;
  2400. int retries = 20;
  2401. int ret = 0;
  2402. int pair;
  2403. *finished = false;
  2404. /* Try harder if link partner is active */
  2405. while (pair_mask && retries--) {
  2406. for_each_set_bit(pair, &pair_mask, 4) {
  2407. if (type->cable_diag_reg == LAN8814_CABLE_DIAG)
  2408. ret = lan8814_cable_test_one_pair(phydev, pair);
  2409. else
  2410. ret = ksz886x_cable_test_one_pair(phydev, pair);
  2411. if (ret == -EAGAIN)
  2412. continue;
  2413. if (ret < 0)
  2414. return ret;
  2415. clear_bit(pair, &pair_mask);
  2416. }
  2417. /* If link partner is in autonegotiation mode it will send 2ms
  2418. * of FLPs with at least 6ms of silence.
  2419. * Add 2ms sleep to have better chances to hit this silence.
  2420. */
  2421. if (pair_mask)
  2422. msleep(2);
  2423. }
  2424. *finished = true;
  2425. return ret;
  2426. }
  2427. /**
  2428. * LAN8814_PAGE_PCS - Selects Extended Page 0.
  2429. *
  2430. * This page contains timers used for auto-negotiation, debug registers and
  2431. * register to configure fast link failure.
  2432. */
  2433. #define LAN8814_PAGE_PCS 0
  2434. /**
  2435. * LAN8814_PAGE_AFE_PMA - Selects Extended Page 1.
  2436. *
  2437. * This page appears to control the Analog Front-End (AFE) and Physical
  2438. * Medium Attachment (PMA) layers. It is used to access registers like
  2439. * LAN8814_PD_CONTROLS and LAN8814_LINK_QUALITY.
  2440. */
  2441. #define LAN8814_PAGE_AFE_PMA 1
  2442. /**
  2443. * LAN8814_PAGE_PCS_DIGITAL - Selects Extended Page 2.
  2444. *
  2445. * This page seems dedicated to the Physical Coding Sublayer (PCS) and other
  2446. * digital logic. It is used for MDI-X alignment (LAN8814_ALIGN_SWAP) and EEE
  2447. * state (LAN8814_EEE_STATE) in the LAN8814, and is repurposed for statistics
  2448. * and self-test counters in the LAN8842.
  2449. */
  2450. #define LAN8814_PAGE_PCS_DIGITAL 2
  2451. /**
  2452. * LAN8814_PAGE_EEE - Selects Extended Page 3.
  2453. *
  2454. * This page contains EEE registers
  2455. */
  2456. #define LAN8814_PAGE_EEE 3
  2457. /**
  2458. * LAN8814_PAGE_COMMON_REGS - Selects Extended Page 4.
  2459. *
  2460. * This page contains device-common registers that affect the entire chip.
  2461. * It includes controls for chip-level resets, strap status, GPIO,
  2462. * QSGMII, the shared 1588 PTP block, and the PVT monitor.
  2463. */
  2464. #define LAN8814_PAGE_COMMON_REGS 4
  2465. /**
  2466. * LAN8814_PAGE_PORT_REGS - Selects Extended Page 5.
  2467. *
  2468. * This page contains port-specific registers that must be accessed
  2469. * on a per-port basis. It includes controls for port LEDs, QSGMII PCS,
  2470. * rate adaptation FIFOs, and the per-port 1588 TSU block.
  2471. */
  2472. #define LAN8814_PAGE_PORT_REGS 5
  2473. /**
  2474. * LAN8814_PAGE_POWER_REGS - Selects Extended Page 28.
  2475. *
  2476. * This page contains analog control registers and power mode registers.
  2477. */
  2478. #define LAN8814_PAGE_POWER_REGS 28
  2479. /**
  2480. * LAN8814_PAGE_SYSTEM_CTRL - Selects Extended Page 31.
  2481. *
  2482. * This page appears to hold fundamental system or global controls. In the
  2483. * driver, it is used by the related LAN8804 to access the
  2484. * LAN8814_CLOCK_MANAGEMENT register.
  2485. */
  2486. #define LAN8814_PAGE_SYSTEM_CTRL 31
  2487. #define LAN_EXT_PAGE_ACCESS_CONTROL 0x16
  2488. #define LAN_EXT_PAGE_ACCESS_ADDRESS_DATA 0x17
  2489. #define LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC 0x4000
  2490. #define LAN8814_QSGMII_TX_CONFIG 0x35
  2491. #define LAN8814_QSGMII_TX_CONFIG_QSGMII BIT(3)
  2492. #define LAN8814_QSGMII_SOFT_RESET 0x43
  2493. #define LAN8814_QSGMII_SOFT_RESET_BIT BIT(0)
  2494. #define LAN8814_QSGMII_PCS1G_ANEG_CONFIG 0x13
  2495. #define LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA BIT(3)
  2496. #define LAN8814_ALIGN_SWAP 0x4a
  2497. #define LAN8814_ALIGN_TX_A_B_SWAP 0x1
  2498. #define LAN8814_ALIGN_TX_A_B_SWAP_MASK GENMASK(2, 0)
  2499. #define LAN8804_ALIGN_SWAP 0x4a
  2500. #define LAN8804_ALIGN_TX_A_B_SWAP 0x1
  2501. #define LAN8804_ALIGN_TX_A_B_SWAP_MASK GENMASK(2, 0)
  2502. #define LAN8814_CLOCK_MANAGEMENT 0xd
  2503. #define LAN8814_LINK_QUALITY 0x8e
  2504. static int lanphy_read_page_reg(struct phy_device *phydev, int page, u32 addr)
  2505. {
  2506. int data;
  2507. phy_lock_mdio_bus(phydev);
  2508. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
  2509. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
  2510. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
  2511. (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
  2512. data = __phy_read(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA);
  2513. phy_unlock_mdio_bus(phydev);
  2514. return data;
  2515. }
  2516. static int lanphy_write_page_reg(struct phy_device *phydev, int page, u16 addr,
  2517. u16 val)
  2518. {
  2519. phy_lock_mdio_bus(phydev);
  2520. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
  2521. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
  2522. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
  2523. page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC);
  2524. val = __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, val);
  2525. if (val != 0)
  2526. phydev_err(phydev, "Error: phy_write has returned error %d\n",
  2527. val);
  2528. phy_unlock_mdio_bus(phydev);
  2529. return val;
  2530. }
  2531. static int lanphy_modify_page_reg(struct phy_device *phydev, int page, u16 addr,
  2532. u16 mask, u16 set)
  2533. {
  2534. int ret;
  2535. phy_lock_mdio_bus(phydev);
  2536. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
  2537. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
  2538. __phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
  2539. (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
  2540. ret = __phy_modify_changed(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA,
  2541. mask, set);
  2542. phy_unlock_mdio_bus(phydev);
  2543. if (ret < 0)
  2544. phydev_err(phydev, "__phy_modify_changed() failed: %pe\n",
  2545. ERR_PTR(ret));
  2546. return ret;
  2547. }
  2548. static int lan8814_config_ts_intr(struct phy_device *phydev, bool enable)
  2549. {
  2550. u16 val = 0;
  2551. if (enable)
  2552. val = PTP_TSU_INT_EN_PTP_TX_TS_EN_ |
  2553. PTP_TSU_INT_EN_PTP_TX_TS_OVRFL_EN_ |
  2554. PTP_TSU_INT_EN_PTP_RX_TS_EN_ |
  2555. PTP_TSU_INT_EN_PTP_RX_TS_OVRFL_EN_;
  2556. return lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2557. PTP_TSU_INT_EN, val);
  2558. }
  2559. static void lan8814_ptp_rx_ts_get(struct phy_device *phydev,
  2560. u32 *seconds, u32 *nano_seconds, u16 *seq_id)
  2561. {
  2562. *seconds = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2563. PTP_RX_INGRESS_SEC_HI);
  2564. *seconds = (*seconds << 16) |
  2565. lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2566. PTP_RX_INGRESS_SEC_LO);
  2567. *nano_seconds = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2568. PTP_RX_INGRESS_NS_HI);
  2569. *nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
  2570. lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2571. PTP_RX_INGRESS_NS_LO);
  2572. *seq_id = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2573. PTP_RX_MSG_HEADER2);
  2574. }
  2575. static void lan8814_ptp_tx_ts_get(struct phy_device *phydev,
  2576. u32 *seconds, u32 *nano_seconds, u16 *seq_id)
  2577. {
  2578. *seconds = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2579. PTP_TX_EGRESS_SEC_HI);
  2580. *seconds = *seconds << 16 |
  2581. lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2582. PTP_TX_EGRESS_SEC_LO);
  2583. *nano_seconds = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2584. PTP_TX_EGRESS_NS_HI);
  2585. *nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
  2586. lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2587. PTP_TX_EGRESS_NS_LO);
  2588. *seq_id = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2589. PTP_TX_MSG_HEADER2);
  2590. }
  2591. static int lan8814_ts_info(struct mii_timestamper *mii_ts, struct kernel_ethtool_ts_info *info)
  2592. {
  2593. struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  2594. struct lan8814_shared_priv *shared = phy_package_get_priv(ptp_priv->phydev);
  2595. info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
  2596. SOF_TIMESTAMPING_RX_HARDWARE |
  2597. SOF_TIMESTAMPING_RAW_HARDWARE;
  2598. info->phc_index = ptp_clock_index(shared->ptp_clock);
  2599. info->tx_types =
  2600. (1 << HWTSTAMP_TX_OFF) |
  2601. (1 << HWTSTAMP_TX_ON) |
  2602. (1 << HWTSTAMP_TX_ONESTEP_SYNC);
  2603. info->rx_filters =
  2604. (1 << HWTSTAMP_FILTER_NONE) |
  2605. (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
  2606. (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
  2607. (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
  2608. (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
  2609. return 0;
  2610. }
  2611. static void lan8814_flush_fifo(struct phy_device *phydev, bool egress)
  2612. {
  2613. int i;
  2614. for (i = 0; i < FIFO_SIZE; ++i)
  2615. lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  2616. egress ? PTP_TX_MSG_HEADER2 : PTP_RX_MSG_HEADER2);
  2617. /* Read to clear overflow status bit */
  2618. lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_TSU_INT_STS);
  2619. }
  2620. static int lan8814_hwtstamp_get(struct mii_timestamper *mii_ts,
  2621. struct kernel_hwtstamp_config *config)
  2622. {
  2623. struct kszphy_ptp_priv *ptp_priv =
  2624. container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  2625. config->tx_type = ptp_priv->hwts_tx_type;
  2626. config->rx_filter = ptp_priv->rx_filter;
  2627. return 0;
  2628. }
  2629. static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
  2630. struct kernel_hwtstamp_config *config,
  2631. struct netlink_ext_ack *extack)
  2632. {
  2633. struct kszphy_ptp_priv *ptp_priv =
  2634. container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  2635. struct lan8814_ptp_rx_ts *rx_ts, *tmp;
  2636. int txcfg = 0, rxcfg = 0;
  2637. int pkt_ts_enable;
  2638. switch (config->rx_filter) {
  2639. case HWTSTAMP_FILTER_NONE:
  2640. ptp_priv->layer = 0;
  2641. ptp_priv->version = 0;
  2642. break;
  2643. case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
  2644. case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
  2645. case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
  2646. ptp_priv->layer = PTP_CLASS_L4;
  2647. ptp_priv->version = PTP_CLASS_V2;
  2648. break;
  2649. case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
  2650. case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
  2651. case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
  2652. ptp_priv->layer = PTP_CLASS_L2;
  2653. ptp_priv->version = PTP_CLASS_V2;
  2654. break;
  2655. case HWTSTAMP_FILTER_PTP_V2_EVENT:
  2656. case HWTSTAMP_FILTER_PTP_V2_SYNC:
  2657. case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
  2658. ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
  2659. ptp_priv->version = PTP_CLASS_V2;
  2660. break;
  2661. default:
  2662. return -ERANGE;
  2663. }
  2664. switch (config->tx_type) {
  2665. case HWTSTAMP_TX_OFF:
  2666. case HWTSTAMP_TX_ON:
  2667. case HWTSTAMP_TX_ONESTEP_SYNC:
  2668. break;
  2669. default:
  2670. return -ERANGE;
  2671. }
  2672. ptp_priv->hwts_tx_type = config->tx_type;
  2673. ptp_priv->rx_filter = config->rx_filter;
  2674. if (ptp_priv->layer & PTP_CLASS_L2) {
  2675. rxcfg = PTP_RX_PARSE_CONFIG_LAYER2_EN_;
  2676. txcfg = PTP_TX_PARSE_CONFIG_LAYER2_EN_;
  2677. } else if (ptp_priv->layer & PTP_CLASS_L4) {
  2678. rxcfg |= PTP_RX_PARSE_CONFIG_IPV4_EN_ | PTP_RX_PARSE_CONFIG_IPV6_EN_;
  2679. txcfg |= PTP_TX_PARSE_CONFIG_IPV4_EN_ | PTP_TX_PARSE_CONFIG_IPV6_EN_;
  2680. }
  2681. lanphy_write_page_reg(ptp_priv->phydev, LAN8814_PAGE_PORT_REGS,
  2682. PTP_RX_PARSE_CONFIG, rxcfg);
  2683. lanphy_write_page_reg(ptp_priv->phydev, LAN8814_PAGE_PORT_REGS,
  2684. PTP_TX_PARSE_CONFIG, txcfg);
  2685. pkt_ts_enable = PTP_TIMESTAMP_EN_SYNC_ | PTP_TIMESTAMP_EN_DREQ_ |
  2686. PTP_TIMESTAMP_EN_PDREQ_ | PTP_TIMESTAMP_EN_PDRES_;
  2687. lanphy_write_page_reg(ptp_priv->phydev, LAN8814_PAGE_PORT_REGS,
  2688. PTP_RX_TIMESTAMP_EN, pkt_ts_enable);
  2689. lanphy_write_page_reg(ptp_priv->phydev, LAN8814_PAGE_PORT_REGS,
  2690. PTP_TX_TIMESTAMP_EN, pkt_ts_enable);
  2691. if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC) {
  2692. lanphy_modify_page_reg(ptp_priv->phydev, LAN8814_PAGE_PORT_REGS,
  2693. PTP_TX_MOD,
  2694. PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_,
  2695. PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_);
  2696. } else if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ON) {
  2697. lanphy_modify_page_reg(ptp_priv->phydev, LAN8814_PAGE_PORT_REGS,
  2698. PTP_TX_MOD,
  2699. PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_,
  2700. 0);
  2701. }
  2702. if (config->rx_filter != HWTSTAMP_FILTER_NONE)
  2703. lan8814_config_ts_intr(ptp_priv->phydev, true);
  2704. else
  2705. lan8814_config_ts_intr(ptp_priv->phydev, false);
  2706. /* In case of multiple starts and stops, these needs to be cleared */
  2707. list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
  2708. list_del(&rx_ts->list);
  2709. kfree(rx_ts);
  2710. }
  2711. skb_queue_purge(&ptp_priv->rx_queue);
  2712. skb_queue_purge(&ptp_priv->tx_queue);
  2713. lan8814_flush_fifo(ptp_priv->phydev, false);
  2714. lan8814_flush_fifo(ptp_priv->phydev, true);
  2715. return 0;
  2716. }
  2717. static void lan8814_txtstamp(struct mii_timestamper *mii_ts,
  2718. struct sk_buff *skb, int type)
  2719. {
  2720. struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  2721. switch (ptp_priv->hwts_tx_type) {
  2722. case HWTSTAMP_TX_ONESTEP_SYNC:
  2723. if (ptp_msg_is_sync(skb, type)) {
  2724. kfree_skb(skb);
  2725. return;
  2726. }
  2727. fallthrough;
  2728. case HWTSTAMP_TX_ON:
  2729. skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
  2730. skb_queue_tail(&ptp_priv->tx_queue, skb);
  2731. break;
  2732. case HWTSTAMP_TX_OFF:
  2733. default:
  2734. kfree_skb(skb);
  2735. break;
  2736. }
  2737. }
  2738. static bool lan8814_get_sig_rx(struct sk_buff *skb, u16 *sig)
  2739. {
  2740. struct ptp_header *ptp_header;
  2741. u32 type;
  2742. skb_push(skb, ETH_HLEN);
  2743. type = ptp_classify_raw(skb);
  2744. ptp_header = ptp_parse_header(skb, type);
  2745. skb_pull_inline(skb, ETH_HLEN);
  2746. if (!ptp_header)
  2747. return false;
  2748. *sig = (__force u16)(ntohs(ptp_header->sequence_id));
  2749. return true;
  2750. }
  2751. static bool lan8814_match_rx_skb(struct kszphy_ptp_priv *ptp_priv,
  2752. struct sk_buff *skb)
  2753. {
  2754. struct skb_shared_hwtstamps *shhwtstamps;
  2755. struct lan8814_ptp_rx_ts *rx_ts, *tmp;
  2756. unsigned long flags;
  2757. bool ret = false;
  2758. u16 skb_sig;
  2759. if (!lan8814_get_sig_rx(skb, &skb_sig))
  2760. return ret;
  2761. /* Iterate over all RX timestamps and match it with the received skbs */
  2762. spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
  2763. list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
  2764. /* Check if we found the signature we were looking for. */
  2765. if (memcmp(&skb_sig, &rx_ts->seq_id, sizeof(rx_ts->seq_id)))
  2766. continue;
  2767. shhwtstamps = skb_hwtstamps(skb);
  2768. memset(shhwtstamps, 0, sizeof(*shhwtstamps));
  2769. shhwtstamps->hwtstamp = ktime_set(rx_ts->seconds,
  2770. rx_ts->nsec);
  2771. list_del(&rx_ts->list);
  2772. kfree(rx_ts);
  2773. ret = true;
  2774. break;
  2775. }
  2776. spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
  2777. if (ret)
  2778. netif_rx(skb);
  2779. return ret;
  2780. }
  2781. static bool lan8814_rxtstamp(struct mii_timestamper *mii_ts, struct sk_buff *skb, int type)
  2782. {
  2783. struct kszphy_ptp_priv *ptp_priv =
  2784. container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  2785. if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
  2786. type == PTP_CLASS_NONE)
  2787. return false;
  2788. if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
  2789. return false;
  2790. /* If we failed to match then add it to the queue for when the timestamp
  2791. * will come
  2792. */
  2793. if (!lan8814_match_rx_skb(ptp_priv, skb))
  2794. skb_queue_tail(&ptp_priv->rx_queue, skb);
  2795. return true;
  2796. }
  2797. static void lan8814_ptp_clock_set(struct phy_device *phydev,
  2798. time64_t sec, u32 nsec)
  2799. {
  2800. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2801. PTP_CLOCK_SET_SEC_LO, lower_16_bits(sec));
  2802. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2803. PTP_CLOCK_SET_SEC_MID, upper_16_bits(sec));
  2804. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2805. PTP_CLOCK_SET_SEC_HI, upper_32_bits(sec));
  2806. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2807. PTP_CLOCK_SET_NS_LO, lower_16_bits(nsec));
  2808. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2809. PTP_CLOCK_SET_NS_HI, upper_16_bits(nsec));
  2810. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_CMD_CTL,
  2811. PTP_CMD_CTL_PTP_CLOCK_LOAD_);
  2812. }
  2813. static void lan8814_ptp_clock_get(struct phy_device *phydev,
  2814. time64_t *sec, u32 *nsec)
  2815. {
  2816. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_CMD_CTL,
  2817. PTP_CMD_CTL_PTP_CLOCK_READ_);
  2818. *sec = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2819. PTP_CLOCK_READ_SEC_HI);
  2820. *sec <<= 16;
  2821. *sec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2822. PTP_CLOCK_READ_SEC_MID);
  2823. *sec <<= 16;
  2824. *sec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2825. PTP_CLOCK_READ_SEC_LO);
  2826. *nsec = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2827. PTP_CLOCK_READ_NS_HI);
  2828. *nsec <<= 16;
  2829. *nsec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2830. PTP_CLOCK_READ_NS_LO);
  2831. }
  2832. static int lan8814_ptpci_gettime64(struct ptp_clock_info *ptpci,
  2833. struct timespec64 *ts)
  2834. {
  2835. struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
  2836. ptp_clock_info);
  2837. struct phy_device *phydev = shared->phydev;
  2838. u32 nano_seconds;
  2839. time64_t seconds;
  2840. mutex_lock(&shared->shared_lock);
  2841. lan8814_ptp_clock_get(phydev, &seconds, &nano_seconds);
  2842. mutex_unlock(&shared->shared_lock);
  2843. ts->tv_sec = seconds;
  2844. ts->tv_nsec = nano_seconds;
  2845. return 0;
  2846. }
  2847. static int lan8814_ptpci_settime64(struct ptp_clock_info *ptpci,
  2848. const struct timespec64 *ts)
  2849. {
  2850. struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
  2851. ptp_clock_info);
  2852. struct phy_device *phydev = shared->phydev;
  2853. mutex_lock(&shared->shared_lock);
  2854. lan8814_ptp_clock_set(phydev, ts->tv_sec, ts->tv_nsec);
  2855. mutex_unlock(&shared->shared_lock);
  2856. return 0;
  2857. }
  2858. static void lan8814_ptp_set_target(struct phy_device *phydev, int event,
  2859. s64 start_sec, u32 start_nsec)
  2860. {
  2861. /* Set the start time */
  2862. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2863. LAN8814_PTP_CLOCK_TARGET_SEC_LO(event),
  2864. lower_16_bits(start_sec));
  2865. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2866. LAN8814_PTP_CLOCK_TARGET_SEC_HI(event),
  2867. upper_16_bits(start_sec));
  2868. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2869. LAN8814_PTP_CLOCK_TARGET_NS_LO(event),
  2870. lower_16_bits(start_nsec));
  2871. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2872. LAN8814_PTP_CLOCK_TARGET_NS_HI(event),
  2873. upper_16_bits(start_nsec) & 0x3fff);
  2874. }
  2875. static void lan8814_ptp_update_target(struct phy_device *phydev, time64_t sec)
  2876. {
  2877. lan8814_ptp_set_target(phydev, LAN8814_EVENT_A,
  2878. sec + LAN8814_BUFFER_TIME, 0);
  2879. lan8814_ptp_set_target(phydev, LAN8814_EVENT_B,
  2880. sec + LAN8814_BUFFER_TIME, 0);
  2881. }
  2882. static void lan8814_ptp_clock_step(struct phy_device *phydev,
  2883. s64 time_step_ns)
  2884. {
  2885. u32 nano_seconds_step;
  2886. u64 abs_time_step_ns;
  2887. time64_t set_seconds;
  2888. u32 nano_seconds;
  2889. u32 remainder;
  2890. s32 seconds;
  2891. if (time_step_ns > 15000000000LL) {
  2892. /* convert to clock set */
  2893. lan8814_ptp_clock_get(phydev, &set_seconds, &nano_seconds);
  2894. set_seconds += div_u64_rem(time_step_ns, 1000000000LL,
  2895. &remainder);
  2896. nano_seconds += remainder;
  2897. if (nano_seconds >= 1000000000) {
  2898. set_seconds++;
  2899. nano_seconds -= 1000000000;
  2900. }
  2901. lan8814_ptp_clock_set(phydev, set_seconds, nano_seconds);
  2902. lan8814_ptp_update_target(phydev, set_seconds);
  2903. return;
  2904. } else if (time_step_ns < -15000000000LL) {
  2905. /* convert to clock set */
  2906. time_step_ns = -time_step_ns;
  2907. lan8814_ptp_clock_get(phydev, &set_seconds, &nano_seconds);
  2908. set_seconds -= div_u64_rem(time_step_ns, 1000000000LL,
  2909. &remainder);
  2910. nano_seconds_step = remainder;
  2911. if (nano_seconds < nano_seconds_step) {
  2912. set_seconds--;
  2913. nano_seconds += 1000000000;
  2914. }
  2915. nano_seconds -= nano_seconds_step;
  2916. lan8814_ptp_clock_set(phydev, set_seconds, nano_seconds);
  2917. lan8814_ptp_update_target(phydev, set_seconds);
  2918. return;
  2919. }
  2920. /* do clock step */
  2921. if (time_step_ns >= 0) {
  2922. abs_time_step_ns = (u64)time_step_ns;
  2923. seconds = (s32)div_u64_rem(abs_time_step_ns, 1000000000,
  2924. &remainder);
  2925. nano_seconds = remainder;
  2926. } else {
  2927. abs_time_step_ns = (u64)(-time_step_ns);
  2928. seconds = -((s32)div_u64_rem(abs_time_step_ns, 1000000000,
  2929. &remainder));
  2930. nano_seconds = remainder;
  2931. if (nano_seconds > 0) {
  2932. /* subtracting nano seconds is not allowed
  2933. * convert to subtracting from seconds,
  2934. * and adding to nanoseconds
  2935. */
  2936. seconds--;
  2937. nano_seconds = (1000000000 - nano_seconds);
  2938. }
  2939. }
  2940. if (nano_seconds > 0) {
  2941. /* add 8 ns to cover the likely normal increment */
  2942. nano_seconds += 8;
  2943. }
  2944. if (nano_seconds >= 1000000000) {
  2945. /* carry into seconds */
  2946. seconds++;
  2947. nano_seconds -= 1000000000;
  2948. }
  2949. while (seconds) {
  2950. u32 nsec;
  2951. if (seconds > 0) {
  2952. u32 adjustment_value = (u32)seconds;
  2953. u16 adjustment_value_lo, adjustment_value_hi;
  2954. if (adjustment_value > 0xF)
  2955. adjustment_value = 0xF;
  2956. adjustment_value_lo = adjustment_value & 0xffff;
  2957. adjustment_value_hi = (adjustment_value >> 16) & 0x3fff;
  2958. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2959. PTP_LTC_STEP_ADJ_LO,
  2960. adjustment_value_lo);
  2961. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2962. PTP_LTC_STEP_ADJ_HI,
  2963. PTP_LTC_STEP_ADJ_DIR_ |
  2964. adjustment_value_hi);
  2965. seconds -= ((s32)adjustment_value);
  2966. lan8814_ptp_clock_get(phydev, &set_seconds, &nsec);
  2967. set_seconds -= adjustment_value;
  2968. lan8814_ptp_update_target(phydev, set_seconds);
  2969. } else {
  2970. u32 adjustment_value = (u32)(-seconds);
  2971. u16 adjustment_value_lo, adjustment_value_hi;
  2972. if (adjustment_value > 0xF)
  2973. adjustment_value = 0xF;
  2974. adjustment_value_lo = adjustment_value & 0xffff;
  2975. adjustment_value_hi = (adjustment_value >> 16) & 0x3fff;
  2976. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2977. PTP_LTC_STEP_ADJ_LO,
  2978. adjustment_value_lo);
  2979. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2980. PTP_LTC_STEP_ADJ_HI,
  2981. adjustment_value_hi);
  2982. seconds += ((s32)adjustment_value);
  2983. lan8814_ptp_clock_get(phydev, &set_seconds, &nsec);
  2984. set_seconds += adjustment_value;
  2985. lan8814_ptp_update_target(phydev, set_seconds);
  2986. }
  2987. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2988. PTP_CMD_CTL, PTP_CMD_CTL_PTP_LTC_STEP_SEC_);
  2989. }
  2990. if (nano_seconds) {
  2991. u16 nano_seconds_lo;
  2992. u16 nano_seconds_hi;
  2993. nano_seconds_lo = nano_seconds & 0xffff;
  2994. nano_seconds_hi = (nano_seconds >> 16) & 0x3fff;
  2995. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2996. PTP_LTC_STEP_ADJ_LO,
  2997. nano_seconds_lo);
  2998. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  2999. PTP_LTC_STEP_ADJ_HI,
  3000. PTP_LTC_STEP_ADJ_DIR_ |
  3001. nano_seconds_hi);
  3002. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_CMD_CTL,
  3003. PTP_CMD_CTL_PTP_LTC_STEP_NSEC_);
  3004. }
  3005. }
  3006. static int lan8814_ptpci_adjtime(struct ptp_clock_info *ptpci, s64 delta)
  3007. {
  3008. struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
  3009. ptp_clock_info);
  3010. struct phy_device *phydev = shared->phydev;
  3011. mutex_lock(&shared->shared_lock);
  3012. lan8814_ptp_clock_step(phydev, delta);
  3013. mutex_unlock(&shared->shared_lock);
  3014. return 0;
  3015. }
  3016. static int lan8814_ptpci_adjfine(struct ptp_clock_info *ptpci, long scaled_ppm)
  3017. {
  3018. struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
  3019. ptp_clock_info);
  3020. struct phy_device *phydev = shared->phydev;
  3021. u16 kszphy_rate_adj_lo, kszphy_rate_adj_hi;
  3022. bool positive = true;
  3023. u32 kszphy_rate_adj;
  3024. if (scaled_ppm < 0) {
  3025. scaled_ppm = -scaled_ppm;
  3026. positive = false;
  3027. }
  3028. kszphy_rate_adj = LAN8814_1PPM_FORMAT * (scaled_ppm >> 16);
  3029. kszphy_rate_adj += (LAN8814_1PPM_FORMAT * (0xffff & scaled_ppm)) >> 16;
  3030. kszphy_rate_adj_lo = kszphy_rate_adj & 0xffff;
  3031. kszphy_rate_adj_hi = (kszphy_rate_adj >> 16) & 0x3fff;
  3032. if (positive)
  3033. kszphy_rate_adj_hi |= PTP_CLOCK_RATE_ADJ_DIR_;
  3034. mutex_lock(&shared->shared_lock);
  3035. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_CLOCK_RATE_ADJ_HI,
  3036. kszphy_rate_adj_hi);
  3037. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_CLOCK_RATE_ADJ_LO,
  3038. kszphy_rate_adj_lo);
  3039. mutex_unlock(&shared->shared_lock);
  3040. return 0;
  3041. }
  3042. static void lan8814_ptp_set_reload(struct phy_device *phydev, int event,
  3043. s64 period_sec, u32 period_nsec)
  3044. {
  3045. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3046. LAN8814_PTP_CLOCK_TARGET_RELOAD_SEC_LO(event),
  3047. lower_16_bits(period_sec));
  3048. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3049. LAN8814_PTP_CLOCK_TARGET_RELOAD_SEC_HI(event),
  3050. upper_16_bits(period_sec));
  3051. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3052. LAN8814_PTP_CLOCK_TARGET_RELOAD_NS_LO(event),
  3053. lower_16_bits(period_nsec));
  3054. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3055. LAN8814_PTP_CLOCK_TARGET_RELOAD_NS_HI(event),
  3056. upper_16_bits(period_nsec) & 0x3fff);
  3057. }
  3058. static void lan8814_ptp_enable_event(struct phy_device *phydev, int event,
  3059. int pulse_width)
  3060. {
  3061. /* Set the pulse width of the event,
  3062. * Make sure that the target clock will be incremented each time when
  3063. * local time reaches or pass it
  3064. * Set the polarity high
  3065. */
  3066. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, LAN8814_PTP_GENERAL_CONFIG,
  3067. LAN8814_PTP_GENERAL_CONFIG_LTC_EVENT_MASK(event) |
  3068. LAN8814_PTP_GENERAL_CONFIG_LTC_EVENT_SET(event, pulse_width) |
  3069. LAN8814_PTP_GENERAL_CONFIG_RELOAD_ADD_X(event) |
  3070. LAN8814_PTP_GENERAL_CONFIG_POLARITY_X(event),
  3071. LAN8814_PTP_GENERAL_CONFIG_LTC_EVENT_SET(event, pulse_width) |
  3072. LAN8814_PTP_GENERAL_CONFIG_POLARITY_X(event));
  3073. }
  3074. static void lan8814_ptp_disable_event(struct phy_device *phydev, int event)
  3075. {
  3076. /* Set target to too far in the future, effectively disabling it */
  3077. lan8814_ptp_set_target(phydev, event, 0xFFFFFFFF, 0);
  3078. /* And then reload once it reaches the target */
  3079. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, LAN8814_PTP_GENERAL_CONFIG,
  3080. LAN8814_PTP_GENERAL_CONFIG_RELOAD_ADD_X(event),
  3081. LAN8814_PTP_GENERAL_CONFIG_RELOAD_ADD_X(event));
  3082. }
  3083. static void lan8814_ptp_perout_off(struct phy_device *phydev, int pin)
  3084. {
  3085. /* Disable gpio alternate function,
  3086. * 1: select as gpio,
  3087. * 0: select alt func
  3088. */
  3089. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3090. LAN8814_GPIO_EN_ADDR(pin),
  3091. LAN8814_GPIO_EN_BIT(pin),
  3092. LAN8814_GPIO_EN_BIT(pin));
  3093. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3094. LAN8814_GPIO_DIR_ADDR(pin),
  3095. LAN8814_GPIO_DIR_BIT(pin),
  3096. 0);
  3097. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3098. LAN8814_GPIO_BUF_ADDR(pin),
  3099. LAN8814_GPIO_BUF_BIT(pin),
  3100. 0);
  3101. }
  3102. static void lan8814_ptp_perout_on(struct phy_device *phydev, int pin)
  3103. {
  3104. /* Set as gpio output */
  3105. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3106. LAN8814_GPIO_DIR_ADDR(pin),
  3107. LAN8814_GPIO_DIR_BIT(pin),
  3108. LAN8814_GPIO_DIR_BIT(pin));
  3109. /* Enable gpio 0:for alternate function, 1:gpio */
  3110. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3111. LAN8814_GPIO_EN_ADDR(pin),
  3112. LAN8814_GPIO_EN_BIT(pin),
  3113. 0);
  3114. /* Set buffer type to push pull */
  3115. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3116. LAN8814_GPIO_BUF_ADDR(pin),
  3117. LAN8814_GPIO_BUF_BIT(pin),
  3118. LAN8814_GPIO_BUF_BIT(pin));
  3119. }
  3120. static int lan8814_ptp_perout(struct ptp_clock_info *ptpci,
  3121. struct ptp_clock_request *rq, int on)
  3122. {
  3123. struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
  3124. ptp_clock_info);
  3125. struct phy_device *phydev = shared->phydev;
  3126. struct timespec64 ts_on, ts_period;
  3127. s64 on_nsec, period_nsec;
  3128. int pulse_width;
  3129. int pin, event;
  3130. mutex_lock(&shared->shared_lock);
  3131. event = rq->perout.index;
  3132. pin = ptp_find_pin(shared->ptp_clock, PTP_PF_PEROUT, event);
  3133. if (pin < 0 || pin >= LAN8814_PTP_PEROUT_NUM) {
  3134. mutex_unlock(&shared->shared_lock);
  3135. return -EBUSY;
  3136. }
  3137. if (!on) {
  3138. lan8814_ptp_perout_off(phydev, pin);
  3139. lan8814_ptp_disable_event(phydev, event);
  3140. mutex_unlock(&shared->shared_lock);
  3141. return 0;
  3142. }
  3143. ts_on.tv_sec = rq->perout.on.sec;
  3144. ts_on.tv_nsec = rq->perout.on.nsec;
  3145. on_nsec = timespec64_to_ns(&ts_on);
  3146. ts_period.tv_sec = rq->perout.period.sec;
  3147. ts_period.tv_nsec = rq->perout.period.nsec;
  3148. period_nsec = timespec64_to_ns(&ts_period);
  3149. if (period_nsec < 200) {
  3150. pr_warn_ratelimited("%s: perout period too small, minimum is 200 nsec\n",
  3151. phydev_name(phydev));
  3152. mutex_unlock(&shared->shared_lock);
  3153. return -EOPNOTSUPP;
  3154. }
  3155. if (on_nsec >= period_nsec) {
  3156. pr_warn_ratelimited("%s: pulse width must be smaller than period\n",
  3157. phydev_name(phydev));
  3158. mutex_unlock(&shared->shared_lock);
  3159. return -EINVAL;
  3160. }
  3161. switch (on_nsec) {
  3162. case 200000000:
  3163. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_200MS;
  3164. break;
  3165. case 100000000:
  3166. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100MS;
  3167. break;
  3168. case 50000000:
  3169. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50MS;
  3170. break;
  3171. case 10000000:
  3172. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10MS;
  3173. break;
  3174. case 5000000:
  3175. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5MS;
  3176. break;
  3177. case 1000000:
  3178. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1MS;
  3179. break;
  3180. case 500000:
  3181. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500US;
  3182. break;
  3183. case 100000:
  3184. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100US;
  3185. break;
  3186. case 50000:
  3187. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50US;
  3188. break;
  3189. case 10000:
  3190. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10US;
  3191. break;
  3192. case 5000:
  3193. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5US;
  3194. break;
  3195. case 1000:
  3196. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1US;
  3197. break;
  3198. case 500:
  3199. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500NS;
  3200. break;
  3201. case 100:
  3202. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS;
  3203. break;
  3204. default:
  3205. pr_warn_ratelimited("%s: Use default duty cycle of 100ns\n",
  3206. phydev_name(phydev));
  3207. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS;
  3208. break;
  3209. }
  3210. /* Configure to pulse every period */
  3211. lan8814_ptp_enable_event(phydev, event, pulse_width);
  3212. lan8814_ptp_set_target(phydev, event, rq->perout.start.sec,
  3213. rq->perout.start.nsec);
  3214. lan8814_ptp_set_reload(phydev, event, rq->perout.period.sec,
  3215. rq->perout.period.nsec);
  3216. lan8814_ptp_perout_on(phydev, pin);
  3217. mutex_unlock(&shared->shared_lock);
  3218. return 0;
  3219. }
  3220. static void lan8814_ptp_extts_on(struct phy_device *phydev, int pin, u32 flags)
  3221. {
  3222. /* Set as gpio input */
  3223. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3224. LAN8814_GPIO_DIR_ADDR(pin),
  3225. LAN8814_GPIO_DIR_BIT(pin),
  3226. 0);
  3227. /* Map the pin to ltc pin 0 of the capture map registers */
  3228. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3229. PTP_GPIO_CAP_MAP_LO, pin, pin);
  3230. /* Enable capture on the edges of the ltc pin */
  3231. if (flags & PTP_RISING_EDGE)
  3232. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3233. PTP_GPIO_CAP_EN,
  3234. PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(0),
  3235. PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(0));
  3236. if (flags & PTP_FALLING_EDGE)
  3237. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3238. PTP_GPIO_CAP_EN,
  3239. PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(0),
  3240. PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(0));
  3241. /* Enable interrupt top interrupt */
  3242. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_COMMON_INT_ENA,
  3243. PTP_COMMON_INT_ENA_GPIO_CAP_EN,
  3244. PTP_COMMON_INT_ENA_GPIO_CAP_EN);
  3245. }
  3246. static void lan8814_ptp_extts_off(struct phy_device *phydev, int pin)
  3247. {
  3248. /* Set as gpio out */
  3249. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3250. LAN8814_GPIO_DIR_ADDR(pin),
  3251. LAN8814_GPIO_DIR_BIT(pin),
  3252. LAN8814_GPIO_DIR_BIT(pin));
  3253. /* Enable alternate, 0:for alternate function, 1:gpio */
  3254. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3255. LAN8814_GPIO_EN_ADDR(pin),
  3256. LAN8814_GPIO_EN_BIT(pin),
  3257. 0);
  3258. /* Clear the mapping of pin to registers 0 of the capture registers */
  3259. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3260. PTP_GPIO_CAP_MAP_LO,
  3261. GENMASK(3, 0),
  3262. 0);
  3263. /* Disable capture on both of the edges */
  3264. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_GPIO_CAP_EN,
  3265. PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(pin) |
  3266. PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(pin),
  3267. 0);
  3268. /* Disable interrupt top interrupt */
  3269. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_COMMON_INT_ENA,
  3270. PTP_COMMON_INT_ENA_GPIO_CAP_EN,
  3271. 0);
  3272. }
  3273. static int lan8814_ptp_extts(struct ptp_clock_info *ptpci,
  3274. struct ptp_clock_request *rq, int on)
  3275. {
  3276. struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
  3277. ptp_clock_info);
  3278. struct phy_device *phydev = shared->phydev;
  3279. int pin;
  3280. pin = ptp_find_pin(shared->ptp_clock, PTP_PF_EXTTS,
  3281. rq->extts.index);
  3282. if (pin == -1 || pin != LAN8814_PTP_EXTTS_NUM)
  3283. return -EINVAL;
  3284. mutex_lock(&shared->shared_lock);
  3285. if (on)
  3286. lan8814_ptp_extts_on(phydev, pin, rq->extts.flags);
  3287. else
  3288. lan8814_ptp_extts_off(phydev, pin);
  3289. mutex_unlock(&shared->shared_lock);
  3290. return 0;
  3291. }
  3292. static int lan8814_ptpci_enable(struct ptp_clock_info *ptpci,
  3293. struct ptp_clock_request *rq, int on)
  3294. {
  3295. switch (rq->type) {
  3296. case PTP_CLK_REQ_PEROUT:
  3297. return lan8814_ptp_perout(ptpci, rq, on);
  3298. case PTP_CLK_REQ_EXTTS:
  3299. return lan8814_ptp_extts(ptpci, rq, on);
  3300. default:
  3301. return -EINVAL;
  3302. }
  3303. }
  3304. static int lan8814_ptpci_verify(struct ptp_clock_info *ptp, unsigned int pin,
  3305. enum ptp_pin_function func, unsigned int chan)
  3306. {
  3307. switch (func) {
  3308. case PTP_PF_NONE:
  3309. case PTP_PF_PEROUT:
  3310. /* Only pins 0 and 1 can generate perout signals. And for pin 0
  3311. * there is only chan 0 (event A) and for pin 1 there is only
  3312. * chan 1 (event B)
  3313. */
  3314. if (pin >= LAN8814_PTP_PEROUT_NUM || pin != chan)
  3315. return -1;
  3316. break;
  3317. case PTP_PF_EXTTS:
  3318. if (pin != LAN8814_PTP_EXTTS_NUM)
  3319. return -1;
  3320. break;
  3321. default:
  3322. return -1;
  3323. }
  3324. return 0;
  3325. }
  3326. static bool lan8814_get_sig_tx(struct sk_buff *skb, u16 *sig)
  3327. {
  3328. struct ptp_header *ptp_header;
  3329. u32 type;
  3330. type = ptp_classify_raw(skb);
  3331. ptp_header = ptp_parse_header(skb, type);
  3332. if (!ptp_header)
  3333. return false;
  3334. *sig = (__force u16)(ntohs(ptp_header->sequence_id));
  3335. return true;
  3336. }
  3337. static void lan8814_match_tx_skb(struct kszphy_ptp_priv *ptp_priv,
  3338. u32 seconds, u32 nsec, u16 seq_id)
  3339. {
  3340. struct skb_shared_hwtstamps shhwtstamps;
  3341. struct sk_buff *skb, *skb_tmp;
  3342. unsigned long flags;
  3343. bool ret = false;
  3344. u16 skb_sig;
  3345. spin_lock_irqsave(&ptp_priv->tx_queue.lock, flags);
  3346. skb_queue_walk_safe(&ptp_priv->tx_queue, skb, skb_tmp) {
  3347. if (!lan8814_get_sig_tx(skb, &skb_sig))
  3348. continue;
  3349. if (memcmp(&skb_sig, &seq_id, sizeof(seq_id)))
  3350. continue;
  3351. __skb_unlink(skb, &ptp_priv->tx_queue);
  3352. ret = true;
  3353. break;
  3354. }
  3355. spin_unlock_irqrestore(&ptp_priv->tx_queue.lock, flags);
  3356. if (ret) {
  3357. memset(&shhwtstamps, 0, sizeof(shhwtstamps));
  3358. shhwtstamps.hwtstamp = ktime_set(seconds, nsec);
  3359. skb_complete_tx_timestamp(skb, &shhwtstamps);
  3360. }
  3361. }
  3362. static void lan8814_dequeue_tx_skb(struct kszphy_ptp_priv *ptp_priv)
  3363. {
  3364. struct phy_device *phydev = ptp_priv->phydev;
  3365. u32 seconds, nsec;
  3366. u16 seq_id;
  3367. lan8814_ptp_tx_ts_get(phydev, &seconds, &nsec, &seq_id);
  3368. lan8814_match_tx_skb(ptp_priv, seconds, nsec, seq_id);
  3369. }
  3370. static void lan8814_get_tx_ts(struct kszphy_ptp_priv *ptp_priv)
  3371. {
  3372. struct phy_device *phydev = ptp_priv->phydev;
  3373. u32 reg;
  3374. do {
  3375. lan8814_dequeue_tx_skb(ptp_priv);
  3376. /* If other timestamps are available in the FIFO,
  3377. * process them.
  3378. */
  3379. reg = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3380. PTP_CAP_INFO);
  3381. } while (PTP_CAP_INFO_TX_TS_CNT_GET_(reg) > 0);
  3382. }
  3383. static bool lan8814_match_skb(struct kszphy_ptp_priv *ptp_priv,
  3384. struct lan8814_ptp_rx_ts *rx_ts)
  3385. {
  3386. struct skb_shared_hwtstamps *shhwtstamps;
  3387. struct sk_buff *skb, *skb_tmp;
  3388. unsigned long flags;
  3389. bool ret = false;
  3390. u16 skb_sig;
  3391. spin_lock_irqsave(&ptp_priv->rx_queue.lock, flags);
  3392. skb_queue_walk_safe(&ptp_priv->rx_queue, skb, skb_tmp) {
  3393. if (!lan8814_get_sig_rx(skb, &skb_sig))
  3394. continue;
  3395. if (memcmp(&skb_sig, &rx_ts->seq_id, sizeof(rx_ts->seq_id)))
  3396. continue;
  3397. __skb_unlink(skb, &ptp_priv->rx_queue);
  3398. ret = true;
  3399. break;
  3400. }
  3401. spin_unlock_irqrestore(&ptp_priv->rx_queue.lock, flags);
  3402. if (ret) {
  3403. shhwtstamps = skb_hwtstamps(skb);
  3404. memset(shhwtstamps, 0, sizeof(*shhwtstamps));
  3405. shhwtstamps->hwtstamp = ktime_set(rx_ts->seconds, rx_ts->nsec);
  3406. netif_rx(skb);
  3407. }
  3408. return ret;
  3409. }
  3410. static void lan8814_match_rx_ts(struct kszphy_ptp_priv *ptp_priv,
  3411. struct lan8814_ptp_rx_ts *rx_ts)
  3412. {
  3413. unsigned long flags;
  3414. /* If we failed to match the skb add it to the queue for when
  3415. * the frame will come
  3416. */
  3417. if (!lan8814_match_skb(ptp_priv, rx_ts)) {
  3418. spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
  3419. list_add(&rx_ts->list, &ptp_priv->rx_ts_list);
  3420. spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
  3421. } else {
  3422. kfree(rx_ts);
  3423. }
  3424. }
  3425. static void lan8814_get_rx_ts(struct kszphy_ptp_priv *ptp_priv)
  3426. {
  3427. struct phy_device *phydev = ptp_priv->phydev;
  3428. struct lan8814_ptp_rx_ts *rx_ts;
  3429. u32 reg;
  3430. do {
  3431. rx_ts = kzalloc_obj(*rx_ts);
  3432. if (!rx_ts)
  3433. return;
  3434. lan8814_ptp_rx_ts_get(phydev, &rx_ts->seconds, &rx_ts->nsec,
  3435. &rx_ts->seq_id);
  3436. lan8814_match_rx_ts(ptp_priv, rx_ts);
  3437. /* If other timestamps are available in the FIFO,
  3438. * process them.
  3439. */
  3440. reg = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3441. PTP_CAP_INFO);
  3442. } while (PTP_CAP_INFO_RX_TS_CNT_GET_(reg) > 0);
  3443. }
  3444. static void lan8814_handle_ptp_interrupt(struct phy_device *phydev, u16 status)
  3445. {
  3446. struct kszphy_priv *priv = phydev->priv;
  3447. struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
  3448. if (status & PTP_TSU_INT_STS_PTP_TX_TS_EN_)
  3449. lan8814_get_tx_ts(ptp_priv);
  3450. if (status & PTP_TSU_INT_STS_PTP_RX_TS_EN_)
  3451. lan8814_get_rx_ts(ptp_priv);
  3452. if (status & PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_) {
  3453. lan8814_flush_fifo(phydev, true);
  3454. skb_queue_purge(&ptp_priv->tx_queue);
  3455. }
  3456. if (status & PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_) {
  3457. lan8814_flush_fifo(phydev, false);
  3458. skb_queue_purge(&ptp_priv->rx_queue);
  3459. }
  3460. }
  3461. static int lan8814_gpio_process_cap(struct lan8814_shared_priv *shared)
  3462. {
  3463. struct phy_device *phydev = shared->phydev;
  3464. struct ptp_clock_event ptp_event = {0};
  3465. unsigned long nsec;
  3466. s64 sec;
  3467. u16 tmp;
  3468. /* This is 0 because whatever was the input pin it was mapped it to
  3469. * ltc gpio pin 0
  3470. */
  3471. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_GPIO_SEL,
  3472. PTP_GPIO_SEL_GPIO_SEL(0),
  3473. PTP_GPIO_SEL_GPIO_SEL(0));
  3474. tmp = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3475. PTP_GPIO_CAP_STS);
  3476. if (!(tmp & PTP_GPIO_CAP_STS_PTP_GPIO_RE_STS(0)) &&
  3477. !(tmp & PTP_GPIO_CAP_STS_PTP_GPIO_FE_STS(0)))
  3478. return -1;
  3479. if (tmp & BIT(0)) {
  3480. sec = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3481. PTP_GPIO_RE_LTC_SEC_HI_CAP);
  3482. sec <<= 16;
  3483. sec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3484. PTP_GPIO_RE_LTC_SEC_LO_CAP);
  3485. nsec = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3486. PTP_GPIO_RE_LTC_NS_HI_CAP) & 0x3fff;
  3487. nsec <<= 16;
  3488. nsec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3489. PTP_GPIO_RE_LTC_NS_LO_CAP);
  3490. } else {
  3491. sec = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3492. PTP_GPIO_FE_LTC_SEC_HI_CAP);
  3493. sec <<= 16;
  3494. sec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3495. PTP_GPIO_FE_LTC_SEC_LO_CAP);
  3496. nsec = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3497. PTP_GPIO_FE_LTC_NS_HI_CAP) & 0x3fff;
  3498. nsec <<= 16;
  3499. nsec |= lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3500. PTP_GPIO_RE_LTC_NS_LO_CAP);
  3501. }
  3502. ptp_event.index = 0;
  3503. ptp_event.timestamp = ktime_set(sec, nsec);
  3504. ptp_event.type = PTP_CLOCK_EXTTS;
  3505. ptp_clock_event(shared->ptp_clock, &ptp_event);
  3506. return 0;
  3507. }
  3508. static int lan8814_handle_gpio_interrupt(struct phy_device *phydev, u16 status)
  3509. {
  3510. struct lan8814_shared_priv *shared = phy_package_get_priv(phydev);
  3511. int ret;
  3512. mutex_lock(&shared->shared_lock);
  3513. ret = lan8814_gpio_process_cap(shared);
  3514. mutex_unlock(&shared->shared_lock);
  3515. return ret;
  3516. }
  3517. static int lan8804_config_init(struct phy_device *phydev)
  3518. {
  3519. /* MDI-X setting for swap A,B transmit */
  3520. lanphy_modify_page_reg(phydev, LAN8814_PAGE_PCS_DIGITAL, LAN8804_ALIGN_SWAP,
  3521. LAN8804_ALIGN_TX_A_B_SWAP_MASK,
  3522. LAN8804_ALIGN_TX_A_B_SWAP);
  3523. /* Make sure that the PHY will not stop generating the clock when the
  3524. * link partner goes down
  3525. */
  3526. lanphy_write_page_reg(phydev, LAN8814_PAGE_SYSTEM_CTRL,
  3527. LAN8814_CLOCK_MANAGEMENT, 0x27e);
  3528. lanphy_read_page_reg(phydev, LAN8814_PAGE_AFE_PMA, LAN8814_LINK_QUALITY);
  3529. return 0;
  3530. }
  3531. static irqreturn_t lan8804_handle_interrupt(struct phy_device *phydev)
  3532. {
  3533. int status;
  3534. status = phy_read(phydev, LAN8814_INTS);
  3535. if (status < 0) {
  3536. phy_error(phydev);
  3537. return IRQ_NONE;
  3538. }
  3539. if (status > 0)
  3540. phy_trigger_machine(phydev);
  3541. return IRQ_HANDLED;
  3542. }
  3543. #define LAN8804_OUTPUT_CONTROL 25
  3544. #define LAN8804_OUTPUT_CONTROL_INTR_BUFFER BIT(14)
  3545. #define LAN8804_CONTROL 31
  3546. #define LAN8804_CONTROL_INTR_POLARITY BIT(14)
  3547. static int lan8804_config_intr(struct phy_device *phydev)
  3548. {
  3549. int err;
  3550. /* This is an internal PHY of lan966x and is not possible to change the
  3551. * polarity on the GIC found in lan966x, therefore change the polarity
  3552. * of the interrupt in the PHY from being active low instead of active
  3553. * high.
  3554. */
  3555. phy_write(phydev, LAN8804_CONTROL, LAN8804_CONTROL_INTR_POLARITY);
  3556. /* By default interrupt buffer is open-drain in which case the interrupt
  3557. * can be active only low. Therefore change the interrupt buffer to be
  3558. * push-pull to be able to change interrupt polarity
  3559. */
  3560. phy_write(phydev, LAN8804_OUTPUT_CONTROL,
  3561. LAN8804_OUTPUT_CONTROL_INTR_BUFFER);
  3562. if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
  3563. err = phy_read(phydev, LAN8814_INTS);
  3564. if (err < 0)
  3565. return err;
  3566. err = phy_write(phydev, LAN8814_INTC, LAN8814_INT_LINK);
  3567. if (err)
  3568. return err;
  3569. } else {
  3570. err = phy_write(phydev, LAN8814_INTC, 0);
  3571. if (err)
  3572. return err;
  3573. err = phy_read(phydev, LAN8814_INTS);
  3574. if (err < 0)
  3575. return err;
  3576. }
  3577. return 0;
  3578. }
  3579. /* Check if the PHY has 1588 support. There are multiple skus of the PHY and
  3580. * some of them support PTP while others don't support it. This function will
  3581. * return true is the sku supports it, otherwise will return false.
  3582. */
  3583. static bool lan8814_has_ptp(struct phy_device *phydev)
  3584. {
  3585. struct kszphy_priv *priv = phydev->priv;
  3586. return priv->is_ptp_available;
  3587. }
  3588. static irqreturn_t lan8814_handle_interrupt(struct phy_device *phydev)
  3589. {
  3590. int ret = IRQ_NONE;
  3591. int irq_status;
  3592. irq_status = phy_read(phydev, LAN8814_INTS);
  3593. if (irq_status < 0) {
  3594. phy_error(phydev);
  3595. return IRQ_NONE;
  3596. }
  3597. if (irq_status & LAN8814_INT_LINK) {
  3598. phy_trigger_machine(phydev);
  3599. ret = IRQ_HANDLED;
  3600. }
  3601. if (!lan8814_has_ptp(phydev))
  3602. return ret;
  3603. while (true) {
  3604. irq_status = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3605. PTP_TSU_INT_STS);
  3606. if (!irq_status)
  3607. break;
  3608. lan8814_handle_ptp_interrupt(phydev, irq_status);
  3609. ret = IRQ_HANDLED;
  3610. }
  3611. if (!lan8814_handle_gpio_interrupt(phydev, irq_status))
  3612. ret = IRQ_HANDLED;
  3613. return ret;
  3614. }
  3615. static int lan8814_ack_interrupt(struct phy_device *phydev)
  3616. {
  3617. /* bit[12..0] int status, which is a read and clear register. */
  3618. int rc;
  3619. rc = phy_read(phydev, LAN8814_INTS);
  3620. return (rc < 0) ? rc : 0;
  3621. }
  3622. static int lan8814_config_intr(struct phy_device *phydev)
  3623. {
  3624. int err;
  3625. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, LAN8814_INTR_CTRL_REG,
  3626. LAN8814_INTR_CTRL_REG_POLARITY |
  3627. LAN8814_INTR_CTRL_REG_INTR_ENABLE);
  3628. /* enable / disable interrupts */
  3629. if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
  3630. err = lan8814_ack_interrupt(phydev);
  3631. if (err)
  3632. return err;
  3633. err = phy_write(phydev, LAN8814_INTC, LAN8814_INT_LINK);
  3634. } else {
  3635. err = phy_write(phydev, LAN8814_INTC, 0);
  3636. if (err)
  3637. return err;
  3638. err = lan8814_ack_interrupt(phydev);
  3639. }
  3640. return err;
  3641. }
  3642. static void lan8814_ptp_init(struct phy_device *phydev)
  3643. {
  3644. struct kszphy_priv *priv = phydev->priv;
  3645. struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
  3646. if (!IS_ENABLED(CONFIG_PTP_1588_CLOCK) ||
  3647. !IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
  3648. return;
  3649. if (!lan8814_has_ptp(phydev))
  3650. return;
  3651. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3652. TSU_HARD_RESET, TSU_HARD_RESET_);
  3653. lanphy_modify_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_TX_MOD,
  3654. PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_,
  3655. PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_);
  3656. lanphy_modify_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_RX_MOD,
  3657. PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_,
  3658. PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_);
  3659. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3660. PTP_RX_PARSE_CONFIG, 0);
  3661. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3662. PTP_TX_PARSE_CONFIG, 0);
  3663. /* Removing default registers configs related to L2 and IP */
  3664. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3665. PTP_TX_PARSE_L2_ADDR_EN, 0);
  3666. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3667. PTP_RX_PARSE_L2_ADDR_EN, 0);
  3668. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3669. PTP_TX_PARSE_IP_ADDR_EN, 0);
  3670. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3671. PTP_RX_PARSE_IP_ADDR_EN, 0);
  3672. /* Disable checking for minorVersionPTP field */
  3673. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_RX_VERSION,
  3674. PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0));
  3675. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_TX_VERSION,
  3676. PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0));
  3677. skb_queue_head_init(&ptp_priv->tx_queue);
  3678. skb_queue_head_init(&ptp_priv->rx_queue);
  3679. INIT_LIST_HEAD(&ptp_priv->rx_ts_list);
  3680. spin_lock_init(&ptp_priv->rx_ts_lock);
  3681. ptp_priv->phydev = phydev;
  3682. ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
  3683. ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
  3684. ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
  3685. ptp_priv->mii_ts.hwtstamp_get = lan8814_hwtstamp_get;
  3686. ptp_priv->mii_ts.ts_info = lan8814_ts_info;
  3687. phydev->mii_ts = &ptp_priv->mii_ts;
  3688. /* Timestamp selected by default to keep legacy API */
  3689. phydev->default_timestamp = true;
  3690. }
  3691. static int __lan8814_ptp_probe_once(struct phy_device *phydev, char *pin_name,
  3692. int gpios)
  3693. {
  3694. struct lan8814_shared_priv *shared = phy_package_get_priv(phydev);
  3695. shared->phydev = phydev;
  3696. /* Initialise shared lock for clock*/
  3697. mutex_init(&shared->shared_lock);
  3698. shared->pin_config = devm_kmalloc_array(&phydev->mdio.dev,
  3699. gpios,
  3700. sizeof(*shared->pin_config),
  3701. GFP_KERNEL);
  3702. if (!shared->pin_config)
  3703. return -ENOMEM;
  3704. for (int i = 0; i < gpios; i++) {
  3705. struct ptp_pin_desc *ptp_pin = &shared->pin_config[i];
  3706. memset(ptp_pin, 0, sizeof(*ptp_pin));
  3707. snprintf(ptp_pin->name,
  3708. sizeof(ptp_pin->name), "%s_%02d", pin_name, i);
  3709. ptp_pin->index = i;
  3710. ptp_pin->func = PTP_PF_NONE;
  3711. }
  3712. shared->ptp_clock_info.owner = THIS_MODULE;
  3713. snprintf(shared->ptp_clock_info.name, 30, "%s", phydev->drv->name);
  3714. shared->ptp_clock_info.max_adj = 31249999;
  3715. shared->ptp_clock_info.n_alarm = 0;
  3716. shared->ptp_clock_info.n_ext_ts = LAN8814_PTP_EXTTS_NUM;
  3717. shared->ptp_clock_info.n_pins = gpios;
  3718. shared->ptp_clock_info.pps = 0;
  3719. shared->ptp_clock_info.supported_extts_flags = PTP_RISING_EDGE |
  3720. PTP_FALLING_EDGE |
  3721. PTP_STRICT_FLAGS;
  3722. shared->ptp_clock_info.supported_perout_flags = PTP_PEROUT_DUTY_CYCLE;
  3723. shared->ptp_clock_info.pin_config = shared->pin_config;
  3724. shared->ptp_clock_info.n_per_out = LAN8814_PTP_PEROUT_NUM;
  3725. shared->ptp_clock_info.adjfine = lan8814_ptpci_adjfine;
  3726. shared->ptp_clock_info.adjtime = lan8814_ptpci_adjtime;
  3727. shared->ptp_clock_info.gettime64 = lan8814_ptpci_gettime64;
  3728. shared->ptp_clock_info.settime64 = lan8814_ptpci_settime64;
  3729. shared->ptp_clock_info.getcrosststamp = NULL;
  3730. shared->ptp_clock_info.enable = lan8814_ptpci_enable;
  3731. shared->ptp_clock_info.verify = lan8814_ptpci_verify;
  3732. shared->ptp_clock = ptp_clock_register(&shared->ptp_clock_info,
  3733. &phydev->mdio.dev);
  3734. if (IS_ERR(shared->ptp_clock)) {
  3735. phydev_err(phydev, "ptp_clock_register failed %pe\n",
  3736. shared->ptp_clock);
  3737. return -EINVAL;
  3738. }
  3739. /* Check if PHC support is missing at the configuration level */
  3740. if (!shared->ptp_clock)
  3741. return 0;
  3742. phydev_dbg(phydev, "successfully registered ptp clock\n");
  3743. /* The EP.4 is shared between all the PHYs in the package and also it
  3744. * can be accessed by any of the PHYs
  3745. */
  3746. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3747. LTC_HARD_RESET, LTC_HARD_RESET_);
  3748. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_OPERATING_MODE,
  3749. PTP_OPERATING_MODE_STANDALONE_);
  3750. /* Enable ptp to run LTC clock for ptp and gpio 1PPS operation */
  3751. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, PTP_CMD_CTL,
  3752. PTP_CMD_CTL_PTP_ENABLE_);
  3753. return 0;
  3754. }
  3755. static int lan8814_ptp_probe_once(struct phy_device *phydev)
  3756. {
  3757. if (!lan8814_has_ptp(phydev))
  3758. return 0;
  3759. return __lan8814_ptp_probe_once(phydev, "lan8814_ptp_pin",
  3760. LAN8814_PTP_GPIO_NUM);
  3761. }
  3762. static void lan8814_setup_led(struct phy_device *phydev, int val)
  3763. {
  3764. int temp;
  3765. temp = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3766. LAN8814_LED_CTRL_1);
  3767. if (val)
  3768. temp |= LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_;
  3769. else
  3770. temp &= ~LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_;
  3771. lanphy_write_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  3772. LAN8814_LED_CTRL_1, temp);
  3773. }
  3774. static int lan8814_config_init(struct phy_device *phydev)
  3775. {
  3776. struct kszphy_priv *lan8814 = phydev->priv;
  3777. int ret;
  3778. /* Based on the interface type select how the advertise ability is
  3779. * encoded, to set as SGMII or as USGMII.
  3780. */
  3781. if (phydev->interface == PHY_INTERFACE_MODE_QSGMII)
  3782. ret = lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3783. LAN8814_QSGMII_TX_CONFIG,
  3784. LAN8814_QSGMII_TX_CONFIG_QSGMII,
  3785. LAN8814_QSGMII_TX_CONFIG_QSGMII);
  3786. else
  3787. ret = lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3788. LAN8814_QSGMII_TX_CONFIG,
  3789. LAN8814_QSGMII_TX_CONFIG_QSGMII,
  3790. 0);
  3791. if (ret < 0)
  3792. return ret;
  3793. /* MDI-X setting for swap A,B transmit */
  3794. lanphy_modify_page_reg(phydev, LAN8814_PAGE_PCS_DIGITAL, LAN8814_ALIGN_SWAP,
  3795. LAN8814_ALIGN_TX_A_B_SWAP_MASK,
  3796. LAN8814_ALIGN_TX_A_B_SWAP);
  3797. if (lan8814->led_mode >= 0)
  3798. lan8814_setup_led(phydev, lan8814->led_mode);
  3799. return 0;
  3800. }
  3801. /* It is expected that there will not be any 'lan8814_take_coma_mode'
  3802. * function called in suspend. Because the GPIO line can be shared, so if one of
  3803. * the phys goes back in coma mode, then all the other PHYs will go, which is
  3804. * wrong.
  3805. */
  3806. static int lan8814_release_coma_mode(struct phy_device *phydev)
  3807. {
  3808. struct gpio_desc *gpiod;
  3809. gpiod = devm_gpiod_get_optional(&phydev->mdio.dev, "coma-mode",
  3810. GPIOD_OUT_HIGH_OPEN_DRAIN |
  3811. GPIOD_FLAGS_BIT_NONEXCLUSIVE);
  3812. if (IS_ERR(gpiod))
  3813. return PTR_ERR(gpiod);
  3814. gpiod_set_consumer_name(gpiod, "LAN8814 coma mode");
  3815. gpiod_set_value_cansleep(gpiod, 0);
  3816. return 0;
  3817. }
  3818. static void lan8814_clear_2psp_bit(struct phy_device *phydev)
  3819. {
  3820. /* It was noticed that when traffic is passing through the PHY and the
  3821. * cable is removed then the LED was still on even though there is no
  3822. * link
  3823. */
  3824. lanphy_modify_page_reg(phydev, LAN8814_PAGE_PCS_DIGITAL, LAN8814_EEE_STATE,
  3825. LAN8814_EEE_STATE_MASK2P5P,
  3826. 0);
  3827. }
  3828. static void lan8814_update_meas_time(struct phy_device *phydev)
  3829. {
  3830. /* By setting the measure time to a value of 0xb this will allow cables
  3831. * longer than 100m to be used. This configuration can be used
  3832. * regardless of the mode of operation of the PHY
  3833. */
  3834. lanphy_modify_page_reg(phydev, LAN8814_PAGE_AFE_PMA, LAN8814_PD_CONTROLS,
  3835. LAN8814_PD_CONTROLS_PD_MEAS_TIME_MASK,
  3836. LAN8814_PD_CONTROLS_PD_MEAS_TIME_VAL);
  3837. }
  3838. static int lan8814_probe(struct phy_device *phydev)
  3839. {
  3840. const struct kszphy_type *type = phydev->drv->driver_data;
  3841. struct kszphy_priv *priv;
  3842. u16 addr;
  3843. int err;
  3844. priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
  3845. if (!priv)
  3846. return -ENOMEM;
  3847. phydev->priv = priv;
  3848. priv->type = type;
  3849. kszphy_parse_led_mode(phydev);
  3850. /* Strap-in value for PHY address, below register read gives starting
  3851. * phy address value
  3852. */
  3853. addr = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS, 0) & 0x1F;
  3854. devm_phy_package_join(&phydev->mdio.dev, phydev,
  3855. addr, sizeof(struct lan8814_shared_priv));
  3856. /* There are lan8814 SKUs that don't support PTP. Make sure that for
  3857. * those skus no PTP device is created. Here we check if the SKU
  3858. * supports PTP.
  3859. */
  3860. err = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3861. LAN8814_SKUS);
  3862. if (err < 0)
  3863. return err;
  3864. priv->is_ptp_available = err == LAN8814_REV_LAN8814 ||
  3865. err == LAN8814_REV_LAN8818;
  3866. if (phy_package_init_once(phydev)) {
  3867. /* Reset the PHY */
  3868. lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  3869. LAN8814_QSGMII_SOFT_RESET,
  3870. LAN8814_QSGMII_SOFT_RESET_BIT,
  3871. LAN8814_QSGMII_SOFT_RESET_BIT);
  3872. err = lan8814_release_coma_mode(phydev);
  3873. if (err)
  3874. return err;
  3875. err = lan8814_ptp_probe_once(phydev);
  3876. if (err)
  3877. return err;
  3878. }
  3879. lan8814_ptp_init(phydev);
  3880. /* Errata workarounds */
  3881. lan8814_clear_2psp_bit(phydev);
  3882. lan8814_update_meas_time(phydev);
  3883. return 0;
  3884. }
  3885. #define LAN8841_MMD_TIMER_REG 0
  3886. #define LAN8841_MMD0_REGISTER_17 17
  3887. #define LAN8841_MMD0_REGISTER_17_DROP_OPT(x) ((x) & 0x3)
  3888. #define LAN8841_MMD0_REGISTER_17_XMIT_TOG_TX_DIS BIT(3)
  3889. #define LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG 2
  3890. #define LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG_MAGJACK BIT(14)
  3891. #define LAN8841_MMD_ANALOG_REG 28
  3892. #define LAN8841_ANALOG_CONTROL_1 1
  3893. #define LAN8841_ANALOG_CONTROL_1_PLL_TRIM(x) (((x) & 0x3) << 5)
  3894. #define LAN8841_ANALOG_CONTROL_10 13
  3895. #define LAN8841_ANALOG_CONTROL_10_PLL_DIV(x) ((x) & 0x3)
  3896. #define LAN8841_ANALOG_CONTROL_11 14
  3897. #define LAN8841_ANALOG_CONTROL_11_LDO_REF(x) (((x) & 0x7) << 12)
  3898. #define LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT 69
  3899. #define LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT_VAL 0xbffc
  3900. #define LAN8841_BTRX_POWER_DOWN 70
  3901. #define LAN8841_BTRX_POWER_DOWN_QBIAS_CH_A BIT(0)
  3902. #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_A BIT(1)
  3903. #define LAN8841_BTRX_POWER_DOWN_QBIAS_CH_B BIT(2)
  3904. #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_B BIT(3)
  3905. #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_C BIT(5)
  3906. #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_D BIT(7)
  3907. #define LAN8841_ADC_CHANNEL_MASK 198
  3908. #define LAN8841_PTP_RX_PARSE_L2_ADDR_EN 370
  3909. #define LAN8841_PTP_RX_PARSE_IP_ADDR_EN 371
  3910. #define LAN8841_PTP_RX_VERSION 374
  3911. #define LAN8841_PTP_TX_PARSE_L2_ADDR_EN 434
  3912. #define LAN8841_PTP_TX_PARSE_IP_ADDR_EN 435
  3913. #define LAN8841_PTP_TX_VERSION 438
  3914. #define LAN8841_PTP_CMD_CTL 256
  3915. #define LAN8841_PTP_CMD_CTL_PTP_ENABLE BIT(2)
  3916. #define LAN8841_PTP_CMD_CTL_PTP_DISABLE BIT(1)
  3917. #define LAN8841_PTP_CMD_CTL_PTP_RESET BIT(0)
  3918. #define LAN8841_PTP_RX_PARSE_CONFIG 368
  3919. #define LAN8841_PTP_TX_PARSE_CONFIG 432
  3920. #define LAN8841_PTP_RX_MODE 381
  3921. #define LAN8841_PTP_INSERT_TS_EN BIT(0)
  3922. #define LAN8841_PTP_INSERT_TS_32BIT BIT(1)
  3923. static int lan8841_config_init(struct phy_device *phydev)
  3924. {
  3925. int ret;
  3926. ret = ksz9131_config_init(phydev);
  3927. if (ret)
  3928. return ret;
  3929. /* Initialize the HW by resetting everything */
  3930. phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3931. LAN8841_PTP_CMD_CTL,
  3932. LAN8841_PTP_CMD_CTL_PTP_RESET,
  3933. LAN8841_PTP_CMD_CTL_PTP_RESET);
  3934. phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3935. LAN8841_PTP_CMD_CTL,
  3936. LAN8841_PTP_CMD_CTL_PTP_ENABLE,
  3937. LAN8841_PTP_CMD_CTL_PTP_ENABLE);
  3938. /* Don't process any frames */
  3939. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3940. LAN8841_PTP_RX_PARSE_CONFIG, 0);
  3941. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3942. LAN8841_PTP_TX_PARSE_CONFIG, 0);
  3943. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3944. LAN8841_PTP_TX_PARSE_L2_ADDR_EN, 0);
  3945. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3946. LAN8841_PTP_RX_PARSE_L2_ADDR_EN, 0);
  3947. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3948. LAN8841_PTP_TX_PARSE_IP_ADDR_EN, 0);
  3949. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3950. LAN8841_PTP_RX_PARSE_IP_ADDR_EN, 0);
  3951. /* Disable checking for minorVersionPTP field */
  3952. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3953. LAN8841_PTP_RX_VERSION, 0xff00);
  3954. phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3955. LAN8841_PTP_TX_VERSION, 0xff00);
  3956. /* 100BT Clause 40 improvement errata */
  3957. phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
  3958. LAN8841_ANALOG_CONTROL_1,
  3959. LAN8841_ANALOG_CONTROL_1_PLL_TRIM(0x2));
  3960. phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
  3961. LAN8841_ANALOG_CONTROL_10,
  3962. LAN8841_ANALOG_CONTROL_10_PLL_DIV(0x1));
  3963. /* 10M/100M Ethernet Signal Tuning Errata for Shorted-Center Tap
  3964. * Magnetics
  3965. */
  3966. ret = phy_read_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  3967. LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG);
  3968. if (ret & LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG_MAGJACK) {
  3969. phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
  3970. LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT,
  3971. LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT_VAL);
  3972. phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
  3973. LAN8841_BTRX_POWER_DOWN,
  3974. LAN8841_BTRX_POWER_DOWN_QBIAS_CH_A |
  3975. LAN8841_BTRX_POWER_DOWN_BTRX_CH_A |
  3976. LAN8841_BTRX_POWER_DOWN_QBIAS_CH_B |
  3977. LAN8841_BTRX_POWER_DOWN_BTRX_CH_B |
  3978. LAN8841_BTRX_POWER_DOWN_BTRX_CH_C |
  3979. LAN8841_BTRX_POWER_DOWN_BTRX_CH_D);
  3980. }
  3981. /* LDO Adjustment errata */
  3982. phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
  3983. LAN8841_ANALOG_CONTROL_11,
  3984. LAN8841_ANALOG_CONTROL_11_LDO_REF(1));
  3985. /* 100BT RGMII latency tuning errata */
  3986. phy_write_mmd(phydev, MDIO_MMD_PMAPMD,
  3987. LAN8841_ADC_CHANNEL_MASK, 0x0);
  3988. phy_write_mmd(phydev, LAN8841_MMD_TIMER_REG,
  3989. LAN8841_MMD0_REGISTER_17,
  3990. LAN8841_MMD0_REGISTER_17_DROP_OPT(2) |
  3991. LAN8841_MMD0_REGISTER_17_XMIT_TOG_TX_DIS);
  3992. return 0;
  3993. }
  3994. #define LAN8841_OUTPUT_CTRL 25
  3995. #define LAN8841_OUTPUT_CTRL_INT_BUFFER BIT(14)
  3996. #define LAN8841_INT_PTP BIT(9)
  3997. static int lan8841_config_intr(struct phy_device *phydev)
  3998. {
  3999. int err;
  4000. phy_modify(phydev, LAN8841_OUTPUT_CTRL,
  4001. LAN8841_OUTPUT_CTRL_INT_BUFFER, 0);
  4002. if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
  4003. err = phy_read(phydev, LAN8814_INTS);
  4004. if (err < 0)
  4005. return err;
  4006. /* Enable / disable interrupts. It is OK to enable PTP interrupt
  4007. * even if it PTP is not enabled. Because the underneath blocks
  4008. * will not enable the PTP so we will never get the PTP
  4009. * interrupt.
  4010. */
  4011. err = phy_write(phydev, LAN8814_INTC,
  4012. LAN8814_INT_LINK | LAN8841_INT_PTP);
  4013. } else {
  4014. err = phy_write(phydev, LAN8814_INTC, 0);
  4015. if (err)
  4016. return err;
  4017. err = phy_read(phydev, LAN8814_INTS);
  4018. if (err < 0)
  4019. return err;
  4020. /* Getting a positive value doesn't mean that is an error, it
  4021. * just indicates what was the status. Therefore make sure to
  4022. * clear the value and say that there is no error.
  4023. */
  4024. err = 0;
  4025. }
  4026. return err;
  4027. }
  4028. #define LAN8841_PTP_TX_EGRESS_SEC_LO 453
  4029. #define LAN8841_PTP_TX_EGRESS_SEC_HI 452
  4030. #define LAN8841_PTP_TX_EGRESS_NS_LO 451
  4031. #define LAN8841_PTP_TX_EGRESS_NS_HI 450
  4032. #define LAN8841_PTP_TX_EGRESS_NSEC_HI_VALID BIT(15)
  4033. #define LAN8841_PTP_TX_MSG_HEADER2 455
  4034. static bool lan8841_ptp_get_tx_ts(struct kszphy_ptp_priv *ptp_priv,
  4035. u32 *sec, u32 *nsec, u16 *seq)
  4036. {
  4037. struct phy_device *phydev = ptp_priv->phydev;
  4038. *nsec = phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_NS_HI);
  4039. if (!(*nsec & LAN8841_PTP_TX_EGRESS_NSEC_HI_VALID))
  4040. return false;
  4041. *nsec = ((*nsec & 0x3fff) << 16);
  4042. *nsec = *nsec | phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_NS_LO);
  4043. *sec = phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_SEC_HI);
  4044. *sec = *sec << 16;
  4045. *sec = *sec | phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_SEC_LO);
  4046. *seq = phy_read_mmd(phydev, 2, LAN8841_PTP_TX_MSG_HEADER2);
  4047. return true;
  4048. }
  4049. static void lan8841_ptp_process_tx_ts(struct kszphy_ptp_priv *ptp_priv)
  4050. {
  4051. u32 sec, nsec;
  4052. u16 seq;
  4053. while (lan8841_ptp_get_tx_ts(ptp_priv, &sec, &nsec, &seq))
  4054. lan8814_match_tx_skb(ptp_priv, sec, nsec, seq);
  4055. }
  4056. #define LAN8841_PTP_INT_STS 259
  4057. #define LAN8841_PTP_INT_STS_PTP_TX_TS_OVRFL_INT BIT(13)
  4058. #define LAN8841_PTP_INT_STS_PTP_TX_TS_INT BIT(12)
  4059. #define LAN8841_PTP_INT_STS_PTP_GPIO_CAP_INT BIT(2)
  4060. static void lan8841_ptp_flush_fifo(struct kszphy_ptp_priv *ptp_priv)
  4061. {
  4062. struct phy_device *phydev = ptp_priv->phydev;
  4063. int i;
  4064. for (i = 0; i < FIFO_SIZE; ++i)
  4065. phy_read_mmd(phydev, 2, LAN8841_PTP_TX_MSG_HEADER2);
  4066. phy_read_mmd(phydev, 2, LAN8841_PTP_INT_STS);
  4067. }
  4068. #define LAN8841_PTP_GPIO_CAP_STS 506
  4069. #define LAN8841_PTP_GPIO_SEL 327
  4070. #define LAN8841_PTP_GPIO_SEL_GPIO_SEL(gpio) ((gpio) << 8)
  4071. #define LAN8841_PTP_GPIO_RE_LTC_SEC_HI_CAP 498
  4072. #define LAN8841_PTP_GPIO_RE_LTC_SEC_LO_CAP 499
  4073. #define LAN8841_PTP_GPIO_RE_LTC_NS_HI_CAP 500
  4074. #define LAN8841_PTP_GPIO_RE_LTC_NS_LO_CAP 501
  4075. #define LAN8841_PTP_GPIO_FE_LTC_SEC_HI_CAP 502
  4076. #define LAN8841_PTP_GPIO_FE_LTC_SEC_LO_CAP 503
  4077. #define LAN8841_PTP_GPIO_FE_LTC_NS_HI_CAP 504
  4078. #define LAN8841_PTP_GPIO_FE_LTC_NS_LO_CAP 505
  4079. static void lan8841_gpio_process_cap(struct kszphy_ptp_priv *ptp_priv)
  4080. {
  4081. struct phy_device *phydev = ptp_priv->phydev;
  4082. struct ptp_clock_event ptp_event = {0};
  4083. int pin, ret, tmp;
  4084. s32 sec, nsec;
  4085. pin = ptp_find_pin_unlocked(ptp_priv->ptp_clock, PTP_PF_EXTTS, 0);
  4086. if (pin == -1)
  4087. return;
  4088. tmp = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_CAP_STS);
  4089. if (tmp < 0)
  4090. return;
  4091. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_GPIO_SEL,
  4092. LAN8841_PTP_GPIO_SEL_GPIO_SEL(pin));
  4093. if (ret)
  4094. return;
  4095. mutex_lock(&ptp_priv->ptp_lock);
  4096. if (tmp & BIT(pin)) {
  4097. sec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_SEC_HI_CAP);
  4098. sec <<= 16;
  4099. sec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_SEC_LO_CAP);
  4100. nsec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_NS_HI_CAP) & 0x3fff;
  4101. nsec <<= 16;
  4102. nsec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_NS_LO_CAP);
  4103. } else {
  4104. sec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_SEC_HI_CAP);
  4105. sec <<= 16;
  4106. sec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_SEC_LO_CAP);
  4107. nsec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_NS_HI_CAP) & 0x3fff;
  4108. nsec <<= 16;
  4109. nsec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_NS_LO_CAP);
  4110. }
  4111. mutex_unlock(&ptp_priv->ptp_lock);
  4112. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_GPIO_SEL, 0);
  4113. if (ret)
  4114. return;
  4115. ptp_event.index = 0;
  4116. ptp_event.timestamp = ktime_set(sec, nsec);
  4117. ptp_event.type = PTP_CLOCK_EXTTS;
  4118. ptp_clock_event(ptp_priv->ptp_clock, &ptp_event);
  4119. }
  4120. static void lan8841_handle_ptp_interrupt(struct phy_device *phydev)
  4121. {
  4122. struct kszphy_priv *priv = phydev->priv;
  4123. struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
  4124. u16 status;
  4125. do {
  4126. status = phy_read_mmd(phydev, 2, LAN8841_PTP_INT_STS);
  4127. if (status & LAN8841_PTP_INT_STS_PTP_TX_TS_INT)
  4128. lan8841_ptp_process_tx_ts(ptp_priv);
  4129. if (status & LAN8841_PTP_INT_STS_PTP_GPIO_CAP_INT)
  4130. lan8841_gpio_process_cap(ptp_priv);
  4131. if (status & LAN8841_PTP_INT_STS_PTP_TX_TS_OVRFL_INT) {
  4132. lan8841_ptp_flush_fifo(ptp_priv);
  4133. skb_queue_purge(&ptp_priv->tx_queue);
  4134. }
  4135. } while (status & (LAN8841_PTP_INT_STS_PTP_TX_TS_INT |
  4136. LAN8841_PTP_INT_STS_PTP_GPIO_CAP_INT |
  4137. LAN8841_PTP_INT_STS_PTP_TX_TS_OVRFL_INT));
  4138. }
  4139. #define LAN8841_INTS_PTP BIT(9)
  4140. static irqreturn_t lan8841_handle_interrupt(struct phy_device *phydev)
  4141. {
  4142. irqreturn_t ret = IRQ_NONE;
  4143. int irq_status;
  4144. irq_status = phy_read(phydev, LAN8814_INTS);
  4145. if (irq_status < 0) {
  4146. phy_error(phydev);
  4147. return IRQ_NONE;
  4148. }
  4149. if (irq_status & LAN8814_INT_LINK) {
  4150. phy_trigger_machine(phydev);
  4151. ret = IRQ_HANDLED;
  4152. }
  4153. if (irq_status & LAN8841_INTS_PTP) {
  4154. lan8841_handle_ptp_interrupt(phydev);
  4155. ret = IRQ_HANDLED;
  4156. }
  4157. return ret;
  4158. }
  4159. static int lan8841_ts_info(struct mii_timestamper *mii_ts,
  4160. struct kernel_ethtool_ts_info *info)
  4161. {
  4162. struct kszphy_ptp_priv *ptp_priv;
  4163. ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  4164. info->phc_index = ptp_priv->ptp_clock ?
  4165. ptp_clock_index(ptp_priv->ptp_clock) : -1;
  4166. if (info->phc_index == -1)
  4167. return 0;
  4168. info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
  4169. SOF_TIMESTAMPING_RX_HARDWARE |
  4170. SOF_TIMESTAMPING_RAW_HARDWARE;
  4171. info->tx_types = (1 << HWTSTAMP_TX_OFF) |
  4172. (1 << HWTSTAMP_TX_ON) |
  4173. (1 << HWTSTAMP_TX_ONESTEP_SYNC);
  4174. info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
  4175. (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
  4176. (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
  4177. (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
  4178. return 0;
  4179. }
  4180. #define LAN8841_PTP_INT_EN 260
  4181. #define LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN BIT(13)
  4182. #define LAN8841_PTP_INT_EN_PTP_TX_TS_EN BIT(12)
  4183. static void lan8841_ptp_enable_processing(struct kszphy_ptp_priv *ptp_priv,
  4184. bool enable)
  4185. {
  4186. struct phy_device *phydev = ptp_priv->phydev;
  4187. if (enable) {
  4188. /* Enable interrupts on the TX side */
  4189. phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
  4190. LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN |
  4191. LAN8841_PTP_INT_EN_PTP_TX_TS_EN,
  4192. LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN |
  4193. LAN8841_PTP_INT_EN_PTP_TX_TS_EN);
  4194. /* Enable the modification of the frame on RX side,
  4195. * this will add the ns and 2 bits of sec in the reserved field
  4196. * of the PTP header
  4197. */
  4198. phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  4199. LAN8841_PTP_RX_MODE,
  4200. LAN8841_PTP_INSERT_TS_EN |
  4201. LAN8841_PTP_INSERT_TS_32BIT,
  4202. LAN8841_PTP_INSERT_TS_EN |
  4203. LAN8841_PTP_INSERT_TS_32BIT);
  4204. ptp_schedule_worker(ptp_priv->ptp_clock, 0);
  4205. } else {
  4206. /* Disable interrupts on the TX side */
  4207. phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
  4208. LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN |
  4209. LAN8841_PTP_INT_EN_PTP_TX_TS_EN, 0);
  4210. /* Disable modification of the RX frames */
  4211. phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  4212. LAN8841_PTP_RX_MODE,
  4213. LAN8841_PTP_INSERT_TS_EN |
  4214. LAN8841_PTP_INSERT_TS_32BIT, 0);
  4215. ptp_cancel_worker_sync(ptp_priv->ptp_clock);
  4216. }
  4217. }
  4218. #define LAN8841_PTP_RX_TIMESTAMP_EN 379
  4219. #define LAN8841_PTP_TX_TIMESTAMP_EN 443
  4220. #define LAN8841_PTP_TX_MOD 445
  4221. static int lan8841_hwtstamp_set(struct mii_timestamper *mii_ts,
  4222. struct kernel_hwtstamp_config *config,
  4223. struct netlink_ext_ack *extack)
  4224. {
  4225. struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  4226. struct phy_device *phydev = ptp_priv->phydev;
  4227. int txcfg = 0, rxcfg = 0;
  4228. int pkt_ts_enable;
  4229. switch (config->rx_filter) {
  4230. case HWTSTAMP_FILTER_NONE:
  4231. ptp_priv->layer = 0;
  4232. ptp_priv->version = 0;
  4233. break;
  4234. case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
  4235. case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
  4236. case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
  4237. ptp_priv->layer = PTP_CLASS_L4;
  4238. ptp_priv->version = PTP_CLASS_V2;
  4239. break;
  4240. case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
  4241. case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
  4242. case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
  4243. ptp_priv->layer = PTP_CLASS_L2;
  4244. ptp_priv->version = PTP_CLASS_V2;
  4245. break;
  4246. case HWTSTAMP_FILTER_PTP_V2_EVENT:
  4247. case HWTSTAMP_FILTER_PTP_V2_SYNC:
  4248. case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
  4249. ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
  4250. ptp_priv->version = PTP_CLASS_V2;
  4251. break;
  4252. default:
  4253. return -ERANGE;
  4254. }
  4255. switch (config->tx_type) {
  4256. case HWTSTAMP_TX_OFF:
  4257. case HWTSTAMP_TX_ON:
  4258. case HWTSTAMP_TX_ONESTEP_SYNC:
  4259. break;
  4260. default:
  4261. return -ERANGE;
  4262. }
  4263. ptp_priv->hwts_tx_type = config->tx_type;
  4264. ptp_priv->rx_filter = config->rx_filter;
  4265. /* Setup parsing of the frames and enable the timestamping for ptp
  4266. * frames
  4267. */
  4268. if (ptp_priv->layer & PTP_CLASS_L2) {
  4269. rxcfg |= PTP_RX_PARSE_CONFIG_LAYER2_EN_;
  4270. txcfg |= PTP_TX_PARSE_CONFIG_LAYER2_EN_;
  4271. } else if (ptp_priv->layer & PTP_CLASS_L4) {
  4272. rxcfg |= PTP_RX_PARSE_CONFIG_IPV4_EN_ | PTP_RX_PARSE_CONFIG_IPV6_EN_;
  4273. txcfg |= PTP_TX_PARSE_CONFIG_IPV4_EN_ | PTP_TX_PARSE_CONFIG_IPV6_EN_;
  4274. }
  4275. phy_write_mmd(phydev, 2, LAN8841_PTP_RX_PARSE_CONFIG, rxcfg);
  4276. phy_write_mmd(phydev, 2, LAN8841_PTP_TX_PARSE_CONFIG, txcfg);
  4277. pkt_ts_enable = PTP_TIMESTAMP_EN_SYNC_ | PTP_TIMESTAMP_EN_DREQ_ |
  4278. PTP_TIMESTAMP_EN_PDREQ_ | PTP_TIMESTAMP_EN_PDRES_;
  4279. phy_write_mmd(phydev, 2, LAN8841_PTP_RX_TIMESTAMP_EN, pkt_ts_enable);
  4280. phy_write_mmd(phydev, 2, LAN8841_PTP_TX_TIMESTAMP_EN, pkt_ts_enable);
  4281. /* Enable / disable of the TX timestamp in the SYNC frames */
  4282. phy_modify_mmd(phydev, 2, LAN8841_PTP_TX_MOD,
  4283. PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_,
  4284. ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC ?
  4285. PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_ : 0);
  4286. /* Now enable/disable the timestamping */
  4287. lan8841_ptp_enable_processing(ptp_priv,
  4288. config->rx_filter != HWTSTAMP_FILTER_NONE);
  4289. skb_queue_purge(&ptp_priv->tx_queue);
  4290. lan8841_ptp_flush_fifo(ptp_priv);
  4291. return 0;
  4292. }
  4293. static bool lan8841_rxtstamp(struct mii_timestamper *mii_ts,
  4294. struct sk_buff *skb, int type)
  4295. {
  4296. struct kszphy_ptp_priv *ptp_priv =
  4297. container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
  4298. struct ptp_header *header = ptp_parse_header(skb, type);
  4299. struct skb_shared_hwtstamps *shhwtstamps;
  4300. struct timespec64 ts;
  4301. unsigned long flags;
  4302. u32 ts_header;
  4303. if (!header)
  4304. return false;
  4305. if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
  4306. type == PTP_CLASS_NONE)
  4307. return false;
  4308. if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
  4309. return false;
  4310. spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
  4311. ts.tv_sec = ptp_priv->seconds;
  4312. spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
  4313. ts_header = __be32_to_cpu(header->reserved2);
  4314. shhwtstamps = skb_hwtstamps(skb);
  4315. memset(shhwtstamps, 0, sizeof(*shhwtstamps));
  4316. /* Check for any wrap arounds for the second part */
  4317. if ((ts.tv_sec & GENMASK(1, 0)) == 0 && (ts_header >> 30) == 3)
  4318. ts.tv_sec -= GENMASK(1, 0) + 1;
  4319. else if ((ts.tv_sec & GENMASK(1, 0)) == 3 && (ts_header >> 30) == 0)
  4320. ts.tv_sec += 1;
  4321. shhwtstamps->hwtstamp =
  4322. ktime_set((ts.tv_sec & ~(GENMASK(1, 0))) | ts_header >> 30,
  4323. ts_header & GENMASK(29, 0));
  4324. header->reserved2 = 0;
  4325. netif_rx(skb);
  4326. return true;
  4327. }
  4328. #define LAN8841_EVENT_A 0
  4329. #define LAN8841_EVENT_B 1
  4330. #define LAN8841_PTP_LTC_TARGET_SEC_HI(event) ((event) == LAN8841_EVENT_A ? 278 : 288)
  4331. #define LAN8841_PTP_LTC_TARGET_SEC_LO(event) ((event) == LAN8841_EVENT_A ? 279 : 289)
  4332. #define LAN8841_PTP_LTC_TARGET_NS_HI(event) ((event) == LAN8841_EVENT_A ? 280 : 290)
  4333. #define LAN8841_PTP_LTC_TARGET_NS_LO(event) ((event) == LAN8841_EVENT_A ? 281 : 291)
  4334. static int lan8841_ptp_set_target(struct kszphy_ptp_priv *ptp_priv, u8 event,
  4335. s64 sec, u32 nsec)
  4336. {
  4337. struct phy_device *phydev = ptp_priv->phydev;
  4338. int ret;
  4339. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_SEC_HI(event),
  4340. upper_16_bits(sec));
  4341. if (ret)
  4342. return ret;
  4343. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_SEC_LO(event),
  4344. lower_16_bits(sec));
  4345. if (ret)
  4346. return ret;
  4347. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_NS_HI(event) & 0x3fff,
  4348. upper_16_bits(nsec));
  4349. if (ret)
  4350. return ret;
  4351. return phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_NS_LO(event),
  4352. lower_16_bits(nsec));
  4353. }
  4354. #define LAN8841_BUFFER_TIME 2
  4355. static int lan8841_ptp_update_target(struct kszphy_ptp_priv *ptp_priv,
  4356. const struct timespec64 *ts)
  4357. {
  4358. return lan8841_ptp_set_target(ptp_priv, LAN8841_EVENT_A,
  4359. ts->tv_sec + LAN8841_BUFFER_TIME, 0);
  4360. }
  4361. #define LAN8841_PTP_LTC_TARGET_RELOAD_SEC_HI(event) ((event) == LAN8841_EVENT_A ? 282 : 292)
  4362. #define LAN8841_PTP_LTC_TARGET_RELOAD_SEC_LO(event) ((event) == LAN8841_EVENT_A ? 283 : 293)
  4363. #define LAN8841_PTP_LTC_TARGET_RELOAD_NS_HI(event) ((event) == LAN8841_EVENT_A ? 284 : 294)
  4364. #define LAN8841_PTP_LTC_TARGET_RELOAD_NS_LO(event) ((event) == LAN8841_EVENT_A ? 285 : 295)
  4365. static int lan8841_ptp_set_reload(struct kszphy_ptp_priv *ptp_priv, u8 event,
  4366. s64 sec, u32 nsec)
  4367. {
  4368. struct phy_device *phydev = ptp_priv->phydev;
  4369. int ret;
  4370. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_SEC_HI(event),
  4371. upper_16_bits(sec));
  4372. if (ret)
  4373. return ret;
  4374. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_SEC_LO(event),
  4375. lower_16_bits(sec));
  4376. if (ret)
  4377. return ret;
  4378. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_NS_HI(event) & 0x3fff,
  4379. upper_16_bits(nsec));
  4380. if (ret)
  4381. return ret;
  4382. return phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_NS_LO(event),
  4383. lower_16_bits(nsec));
  4384. }
  4385. #define LAN8841_PTP_LTC_SET_SEC_HI 262
  4386. #define LAN8841_PTP_LTC_SET_SEC_MID 263
  4387. #define LAN8841_PTP_LTC_SET_SEC_LO 264
  4388. #define LAN8841_PTP_LTC_SET_NS_HI 265
  4389. #define LAN8841_PTP_LTC_SET_NS_LO 266
  4390. #define LAN8841_PTP_CMD_CTL_PTP_LTC_LOAD BIT(4)
  4391. static int lan8841_ptp_settime64(struct ptp_clock_info *ptp,
  4392. const struct timespec64 *ts)
  4393. {
  4394. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4395. ptp_clock_info);
  4396. struct phy_device *phydev = ptp_priv->phydev;
  4397. unsigned long flags;
  4398. int ret;
  4399. /* Set the value to be stored */
  4400. mutex_lock(&ptp_priv->ptp_lock);
  4401. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_SEC_LO, lower_16_bits(ts->tv_sec));
  4402. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_SEC_MID, upper_16_bits(ts->tv_sec));
  4403. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_SEC_HI, upper_32_bits(ts->tv_sec) & 0xffff);
  4404. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_NS_LO, lower_16_bits(ts->tv_nsec));
  4405. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_NS_HI, upper_16_bits(ts->tv_nsec) & 0x3fff);
  4406. /* Set the command to load the LTC */
  4407. phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
  4408. LAN8841_PTP_CMD_CTL_PTP_LTC_LOAD);
  4409. ret = lan8841_ptp_update_target(ptp_priv, ts);
  4410. mutex_unlock(&ptp_priv->ptp_lock);
  4411. spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
  4412. ptp_priv->seconds = ts->tv_sec;
  4413. spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
  4414. return ret;
  4415. }
  4416. #define LAN8841_PTP_LTC_RD_SEC_HI 358
  4417. #define LAN8841_PTP_LTC_RD_SEC_MID 359
  4418. #define LAN8841_PTP_LTC_RD_SEC_LO 360
  4419. #define LAN8841_PTP_LTC_RD_NS_HI 361
  4420. #define LAN8841_PTP_LTC_RD_NS_LO 362
  4421. #define LAN8841_PTP_CMD_CTL_PTP_LTC_READ BIT(3)
  4422. static int lan8841_ptp_gettime64(struct ptp_clock_info *ptp,
  4423. struct timespec64 *ts)
  4424. {
  4425. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4426. ptp_clock_info);
  4427. struct phy_device *phydev = ptp_priv->phydev;
  4428. time64_t s;
  4429. s64 ns;
  4430. mutex_lock(&ptp_priv->ptp_lock);
  4431. /* Issue the command to read the LTC */
  4432. phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
  4433. LAN8841_PTP_CMD_CTL_PTP_LTC_READ);
  4434. /* Read the LTC */
  4435. s = phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_HI);
  4436. s <<= 16;
  4437. s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_MID);
  4438. s <<= 16;
  4439. s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_LO);
  4440. ns = phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_NS_HI) & 0x3fff;
  4441. ns <<= 16;
  4442. ns |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_NS_LO);
  4443. mutex_unlock(&ptp_priv->ptp_lock);
  4444. set_normalized_timespec64(ts, s, ns);
  4445. return 0;
  4446. }
  4447. static void lan8841_ptp_getseconds(struct ptp_clock_info *ptp,
  4448. struct timespec64 *ts)
  4449. {
  4450. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4451. ptp_clock_info);
  4452. struct phy_device *phydev = ptp_priv->phydev;
  4453. time64_t s;
  4454. mutex_lock(&ptp_priv->ptp_lock);
  4455. /* Issue the command to read the LTC */
  4456. phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
  4457. LAN8841_PTP_CMD_CTL_PTP_LTC_READ);
  4458. /* Read the LTC */
  4459. s = phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_HI);
  4460. s <<= 16;
  4461. s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_MID);
  4462. s <<= 16;
  4463. s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_LO);
  4464. mutex_unlock(&ptp_priv->ptp_lock);
  4465. set_normalized_timespec64(ts, s, 0);
  4466. }
  4467. #define LAN8841_PTP_LTC_STEP_ADJ_LO 276
  4468. #define LAN8841_PTP_LTC_STEP_ADJ_HI 275
  4469. #define LAN8841_PTP_LTC_STEP_ADJ_DIR BIT(15)
  4470. #define LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_SECONDS BIT(5)
  4471. #define LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_NANOSECONDS BIT(6)
  4472. static int lan8841_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
  4473. {
  4474. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4475. ptp_clock_info);
  4476. struct phy_device *phydev = ptp_priv->phydev;
  4477. struct timespec64 ts;
  4478. bool add = true;
  4479. u32 nsec;
  4480. s32 sec;
  4481. int ret;
  4482. /* The HW allows up to 15 sec to adjust the time, but here we limit to
  4483. * 10 sec the adjustment. The reason is, in case the adjustment is 14
  4484. * sec and 999999999 nsec, then we add 8ns to compansate the actual
  4485. * increment so the value can be bigger than 15 sec. Therefore limit the
  4486. * possible adjustments so we will not have these corner cases
  4487. */
  4488. if (delta > 10000000000LL || delta < -10000000000LL) {
  4489. /* The timeadjustment is too big, so fall back using set time */
  4490. u64 now;
  4491. ptp->gettime64(ptp, &ts);
  4492. now = ktime_to_ns(timespec64_to_ktime(ts));
  4493. ts = ns_to_timespec64(now + delta);
  4494. ptp->settime64(ptp, &ts);
  4495. return 0;
  4496. }
  4497. sec = div_u64_rem(delta < 0 ? -delta : delta, NSEC_PER_SEC, &nsec);
  4498. if (delta < 0 && nsec != 0) {
  4499. /* It is not allowed to adjust low the nsec part, therefore
  4500. * subtract more from second part and add to nanosecond such
  4501. * that would roll over, so the second part will increase
  4502. */
  4503. sec--;
  4504. nsec = NSEC_PER_SEC - nsec;
  4505. }
  4506. /* Calculate the adjustments and the direction */
  4507. if (delta < 0)
  4508. add = false;
  4509. if (nsec > 0)
  4510. /* add 8 ns to cover the likely normal increment */
  4511. nsec += 8;
  4512. if (nsec >= NSEC_PER_SEC) {
  4513. /* carry into seconds */
  4514. sec++;
  4515. nsec -= NSEC_PER_SEC;
  4516. }
  4517. mutex_lock(&ptp_priv->ptp_lock);
  4518. if (sec) {
  4519. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_LO, sec);
  4520. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_HI,
  4521. add ? LAN8841_PTP_LTC_STEP_ADJ_DIR : 0);
  4522. phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
  4523. LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_SECONDS);
  4524. }
  4525. if (nsec) {
  4526. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_LO,
  4527. nsec & 0xffff);
  4528. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_HI,
  4529. (nsec >> 16) & 0x3fff);
  4530. phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
  4531. LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_NANOSECONDS);
  4532. }
  4533. mutex_unlock(&ptp_priv->ptp_lock);
  4534. /* Update the target clock */
  4535. ptp->gettime64(ptp, &ts);
  4536. mutex_lock(&ptp_priv->ptp_lock);
  4537. ret = lan8841_ptp_update_target(ptp_priv, &ts);
  4538. mutex_unlock(&ptp_priv->ptp_lock);
  4539. return ret;
  4540. }
  4541. #define LAN8841_PTP_LTC_RATE_ADJ_HI 269
  4542. #define LAN8841_PTP_LTC_RATE_ADJ_HI_DIR BIT(15)
  4543. #define LAN8841_PTP_LTC_RATE_ADJ_LO 270
  4544. static int lan8841_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
  4545. {
  4546. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4547. ptp_clock_info);
  4548. struct phy_device *phydev = ptp_priv->phydev;
  4549. bool faster = true;
  4550. u32 rate;
  4551. if (!scaled_ppm)
  4552. return 0;
  4553. if (scaled_ppm < 0) {
  4554. scaled_ppm = -scaled_ppm;
  4555. faster = false;
  4556. }
  4557. rate = LAN8841_1PPM_FORMAT * (upper_16_bits(scaled_ppm));
  4558. rate += (LAN8841_1PPM_FORMAT * (lower_16_bits(scaled_ppm))) >> 16;
  4559. mutex_lock(&ptp_priv->ptp_lock);
  4560. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_RATE_ADJ_HI,
  4561. faster ? LAN8841_PTP_LTC_RATE_ADJ_HI_DIR | (upper_16_bits(rate) & 0x3fff)
  4562. : upper_16_bits(rate) & 0x3fff);
  4563. phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_RATE_ADJ_LO, lower_16_bits(rate));
  4564. mutex_unlock(&ptp_priv->ptp_lock);
  4565. return 0;
  4566. }
  4567. static int lan8841_ptp_verify(struct ptp_clock_info *ptp, unsigned int pin,
  4568. enum ptp_pin_function func, unsigned int chan)
  4569. {
  4570. switch (func) {
  4571. case PTP_PF_NONE:
  4572. case PTP_PF_PEROUT:
  4573. case PTP_PF_EXTTS:
  4574. break;
  4575. default:
  4576. return -1;
  4577. }
  4578. return 0;
  4579. }
  4580. #define LAN8841_PTP_GPIO_NUM 10
  4581. #define LAN8841_GPIO_EN 128
  4582. #define LAN8841_GPIO_DIR 129
  4583. #define LAN8841_GPIO_BUF 130
  4584. static int lan8841_ptp_perout_off(struct kszphy_ptp_priv *ptp_priv, int pin)
  4585. {
  4586. struct phy_device *phydev = ptp_priv->phydev;
  4587. int ret;
  4588. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
  4589. if (ret)
  4590. return ret;
  4591. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_DIR, BIT(pin));
  4592. if (ret)
  4593. return ret;
  4594. return phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
  4595. }
  4596. static int lan8841_ptp_perout_on(struct kszphy_ptp_priv *ptp_priv, int pin)
  4597. {
  4598. struct phy_device *phydev = ptp_priv->phydev;
  4599. int ret;
  4600. ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
  4601. if (ret)
  4602. return ret;
  4603. ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_DIR, BIT(pin));
  4604. if (ret)
  4605. return ret;
  4606. return phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
  4607. }
  4608. #define LAN8841_GPIO_DATA_SEL1 131
  4609. #define LAN8841_GPIO_DATA_SEL2 132
  4610. #define LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_MASK GENMASK(2, 0)
  4611. #define LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_A 1
  4612. #define LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_B 2
  4613. #define LAN8841_PTP_GENERAL_CONFIG 257
  4614. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A BIT(1)
  4615. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B BIT(3)
  4616. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A_MASK GENMASK(7, 4)
  4617. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B_MASK GENMASK(11, 8)
  4618. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A 4
  4619. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B 7
  4620. static int lan8841_ptp_remove_event(struct kszphy_ptp_priv *ptp_priv, int pin,
  4621. u8 event)
  4622. {
  4623. struct phy_device *phydev = ptp_priv->phydev;
  4624. u16 tmp;
  4625. int ret;
  4626. /* Now remove pin from the event. GPIO_DATA_SEL1 contains the GPIO
  4627. * pins 0-4 while GPIO_DATA_SEL2 contains GPIO pins 5-9, therefore
  4628. * depending on the pin, it requires to read a different register
  4629. */
  4630. if (pin < 5) {
  4631. tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_MASK << (3 * pin);
  4632. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL1, tmp);
  4633. } else {
  4634. tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_MASK << (3 * (pin - 5));
  4635. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL2, tmp);
  4636. }
  4637. if (ret)
  4638. return ret;
  4639. /* Disable the event */
  4640. if (event == LAN8841_EVENT_A)
  4641. tmp = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A |
  4642. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A_MASK;
  4643. else
  4644. tmp = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B |
  4645. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B_MASK;
  4646. return phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_EN, tmp);
  4647. }
  4648. static int lan8841_ptp_enable_event(struct kszphy_ptp_priv *ptp_priv, int pin,
  4649. u8 event, int pulse_width)
  4650. {
  4651. struct phy_device *phydev = ptp_priv->phydev;
  4652. u16 tmp;
  4653. int ret;
  4654. /* Enable the event */
  4655. if (event == LAN8841_EVENT_A)
  4656. ret = phy_modify_mmd(phydev, 2, LAN8841_PTP_GENERAL_CONFIG,
  4657. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A |
  4658. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A_MASK,
  4659. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A |
  4660. pulse_width << LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A);
  4661. else
  4662. ret = phy_modify_mmd(phydev, 2, LAN8841_PTP_GENERAL_CONFIG,
  4663. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B |
  4664. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B_MASK,
  4665. LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B |
  4666. pulse_width << LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B);
  4667. if (ret)
  4668. return ret;
  4669. /* Now connect the pin to the event. GPIO_DATA_SEL1 contains the GPIO
  4670. * pins 0-4 while GPIO_DATA_SEL2 contains GPIO pins 5-9, therefore
  4671. * depending on the pin, it requires to read a different register
  4672. */
  4673. if (event == LAN8841_EVENT_A)
  4674. tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_A;
  4675. else
  4676. tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_B;
  4677. if (pin < 5)
  4678. ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL1,
  4679. tmp << (3 * pin));
  4680. else
  4681. ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL2,
  4682. tmp << (3 * (pin - 5)));
  4683. return ret;
  4684. }
  4685. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_200MS 13
  4686. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100MS 12
  4687. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50MS 11
  4688. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10MS 10
  4689. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5MS 9
  4690. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1MS 8
  4691. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500US 7
  4692. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100US 6
  4693. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50US 5
  4694. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10US 4
  4695. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5US 3
  4696. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1US 2
  4697. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500NS 1
  4698. #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS 0
  4699. static int lan8841_ptp_perout(struct ptp_clock_info *ptp,
  4700. struct ptp_clock_request *rq, int on)
  4701. {
  4702. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4703. ptp_clock_info);
  4704. struct phy_device *phydev = ptp_priv->phydev;
  4705. struct timespec64 ts_on, ts_period;
  4706. s64 on_nsec, period_nsec;
  4707. int pulse_width;
  4708. int pin;
  4709. int ret;
  4710. pin = ptp_find_pin(ptp_priv->ptp_clock, PTP_PF_PEROUT, rq->perout.index);
  4711. if (pin == -1 || pin >= LAN8841_PTP_GPIO_NUM)
  4712. return -EINVAL;
  4713. if (!on) {
  4714. ret = lan8841_ptp_perout_off(ptp_priv, pin);
  4715. if (ret)
  4716. return ret;
  4717. return lan8841_ptp_remove_event(ptp_priv, LAN8841_EVENT_A, pin);
  4718. }
  4719. ts_on.tv_sec = rq->perout.on.sec;
  4720. ts_on.tv_nsec = rq->perout.on.nsec;
  4721. on_nsec = timespec64_to_ns(&ts_on);
  4722. ts_period.tv_sec = rq->perout.period.sec;
  4723. ts_period.tv_nsec = rq->perout.period.nsec;
  4724. period_nsec = timespec64_to_ns(&ts_period);
  4725. if (period_nsec < 200) {
  4726. pr_warn_ratelimited("%s: perout period too small, minimum is 200 nsec\n",
  4727. phydev_name(phydev));
  4728. return -EOPNOTSUPP;
  4729. }
  4730. if (on_nsec >= period_nsec) {
  4731. pr_warn_ratelimited("%s: pulse width must be smaller than period\n",
  4732. phydev_name(phydev));
  4733. return -EINVAL;
  4734. }
  4735. switch (on_nsec) {
  4736. case 200000000:
  4737. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_200MS;
  4738. break;
  4739. case 100000000:
  4740. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100MS;
  4741. break;
  4742. case 50000000:
  4743. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50MS;
  4744. break;
  4745. case 10000000:
  4746. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10MS;
  4747. break;
  4748. case 5000000:
  4749. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5MS;
  4750. break;
  4751. case 1000000:
  4752. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1MS;
  4753. break;
  4754. case 500000:
  4755. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500US;
  4756. break;
  4757. case 100000:
  4758. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100US;
  4759. break;
  4760. case 50000:
  4761. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50US;
  4762. break;
  4763. case 10000:
  4764. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10US;
  4765. break;
  4766. case 5000:
  4767. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5US;
  4768. break;
  4769. case 1000:
  4770. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1US;
  4771. break;
  4772. case 500:
  4773. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500NS;
  4774. break;
  4775. case 100:
  4776. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS;
  4777. break;
  4778. default:
  4779. pr_warn_ratelimited("%s: Use default duty cycle of 100ns\n",
  4780. phydev_name(phydev));
  4781. pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS;
  4782. break;
  4783. }
  4784. mutex_lock(&ptp_priv->ptp_lock);
  4785. ret = lan8841_ptp_set_target(ptp_priv, LAN8841_EVENT_A, rq->perout.start.sec,
  4786. rq->perout.start.nsec);
  4787. mutex_unlock(&ptp_priv->ptp_lock);
  4788. if (ret)
  4789. return ret;
  4790. ret = lan8841_ptp_set_reload(ptp_priv, LAN8841_EVENT_A, rq->perout.period.sec,
  4791. rq->perout.period.nsec);
  4792. if (ret)
  4793. return ret;
  4794. ret = lan8841_ptp_enable_event(ptp_priv, pin, LAN8841_EVENT_A,
  4795. pulse_width);
  4796. if (ret)
  4797. return ret;
  4798. ret = lan8841_ptp_perout_on(ptp_priv, pin);
  4799. if (ret)
  4800. lan8841_ptp_remove_event(ptp_priv, pin, LAN8841_EVENT_A);
  4801. return ret;
  4802. }
  4803. #define LAN8841_PTP_GPIO_CAP_EN 496
  4804. #define LAN8841_PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(gpio) (BIT(gpio))
  4805. #define LAN8841_PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(gpio) (BIT(gpio) << 8)
  4806. #define LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN BIT(2)
  4807. static int lan8841_ptp_extts_on(struct kszphy_ptp_priv *ptp_priv, int pin,
  4808. u32 flags)
  4809. {
  4810. struct phy_device *phydev = ptp_priv->phydev;
  4811. u16 tmp = 0;
  4812. int ret;
  4813. /* Set GPIO to be input */
  4814. ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
  4815. if (ret)
  4816. return ret;
  4817. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
  4818. if (ret)
  4819. return ret;
  4820. /* Enable capture on the edges of the pin */
  4821. if (flags & PTP_RISING_EDGE)
  4822. tmp |= LAN8841_PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(pin);
  4823. if (flags & PTP_FALLING_EDGE)
  4824. tmp |= LAN8841_PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(pin);
  4825. ret = phy_write_mmd(phydev, 2, LAN8841_PTP_GPIO_CAP_EN, tmp);
  4826. if (ret)
  4827. return ret;
  4828. /* Enable interrupt */
  4829. return phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
  4830. LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN,
  4831. LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN);
  4832. }
  4833. static int lan8841_ptp_extts_off(struct kszphy_ptp_priv *ptp_priv, int pin)
  4834. {
  4835. struct phy_device *phydev = ptp_priv->phydev;
  4836. int ret;
  4837. /* Set GPIO to be output */
  4838. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
  4839. if (ret)
  4840. return ret;
  4841. ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
  4842. if (ret)
  4843. return ret;
  4844. /* Disable capture on both of the edges */
  4845. ret = phy_modify_mmd(phydev, 2, LAN8841_PTP_GPIO_CAP_EN,
  4846. LAN8841_PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(pin) |
  4847. LAN8841_PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(pin),
  4848. 0);
  4849. if (ret)
  4850. return ret;
  4851. /* Disable interrupt */
  4852. return phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
  4853. LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN,
  4854. 0);
  4855. }
  4856. static int lan8841_ptp_extts(struct ptp_clock_info *ptp,
  4857. struct ptp_clock_request *rq, int on)
  4858. {
  4859. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4860. ptp_clock_info);
  4861. int pin;
  4862. int ret;
  4863. /* Reject requests with unsupported flags */
  4864. if (rq->extts.flags & ~(PTP_ENABLE_FEATURE |
  4865. PTP_EXTTS_EDGES |
  4866. PTP_STRICT_FLAGS))
  4867. return -EOPNOTSUPP;
  4868. pin = ptp_find_pin(ptp_priv->ptp_clock, PTP_PF_EXTTS, rq->extts.index);
  4869. if (pin == -1 || pin >= LAN8841_PTP_GPIO_NUM)
  4870. return -EINVAL;
  4871. mutex_lock(&ptp_priv->ptp_lock);
  4872. if (on)
  4873. ret = lan8841_ptp_extts_on(ptp_priv, pin, rq->extts.flags);
  4874. else
  4875. ret = lan8841_ptp_extts_off(ptp_priv, pin);
  4876. mutex_unlock(&ptp_priv->ptp_lock);
  4877. return ret;
  4878. }
  4879. static int lan8841_ptp_enable(struct ptp_clock_info *ptp,
  4880. struct ptp_clock_request *rq, int on)
  4881. {
  4882. switch (rq->type) {
  4883. case PTP_CLK_REQ_EXTTS:
  4884. return lan8841_ptp_extts(ptp, rq, on);
  4885. case PTP_CLK_REQ_PEROUT:
  4886. return lan8841_ptp_perout(ptp, rq, on);
  4887. default:
  4888. return -EOPNOTSUPP;
  4889. }
  4890. return 0;
  4891. }
  4892. static long lan8841_ptp_do_aux_work(struct ptp_clock_info *ptp)
  4893. {
  4894. struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
  4895. ptp_clock_info);
  4896. struct timespec64 ts;
  4897. unsigned long flags;
  4898. lan8841_ptp_getseconds(&ptp_priv->ptp_clock_info, &ts);
  4899. spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
  4900. ptp_priv->seconds = ts.tv_sec;
  4901. spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
  4902. return nsecs_to_jiffies(LAN8841_GET_SEC_LTC_DELAY);
  4903. }
  4904. static struct ptp_clock_info lan8841_ptp_clock_info = {
  4905. .owner = THIS_MODULE,
  4906. .name = "lan8841 ptp",
  4907. .max_adj = 31249999,
  4908. .gettime64 = lan8841_ptp_gettime64,
  4909. .settime64 = lan8841_ptp_settime64,
  4910. .adjtime = lan8841_ptp_adjtime,
  4911. .adjfine = lan8841_ptp_adjfine,
  4912. .verify = lan8841_ptp_verify,
  4913. .enable = lan8841_ptp_enable,
  4914. .do_aux_work = lan8841_ptp_do_aux_work,
  4915. .n_per_out = LAN8841_PTP_GPIO_NUM,
  4916. .n_ext_ts = LAN8841_PTP_GPIO_NUM,
  4917. .n_pins = LAN8841_PTP_GPIO_NUM,
  4918. .supported_perout_flags = PTP_PEROUT_DUTY_CYCLE,
  4919. };
  4920. #define LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER 3
  4921. #define LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER_STRAP_RGMII_EN BIT(0)
  4922. static int lan8841_probe(struct phy_device *phydev)
  4923. {
  4924. struct kszphy_ptp_priv *ptp_priv;
  4925. struct kszphy_priv *priv;
  4926. int err;
  4927. err = kszphy_probe(phydev);
  4928. if (err)
  4929. return err;
  4930. if (phy_read_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
  4931. LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER) &
  4932. LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER_STRAP_RGMII_EN)
  4933. phydev->interface = PHY_INTERFACE_MODE_RGMII_RXID;
  4934. /* Register the clock */
  4935. if (!IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
  4936. return 0;
  4937. priv = phydev->priv;
  4938. ptp_priv = &priv->ptp_priv;
  4939. ptp_priv->pin_config = devm_kcalloc(&phydev->mdio.dev,
  4940. LAN8841_PTP_GPIO_NUM,
  4941. sizeof(*ptp_priv->pin_config),
  4942. GFP_KERNEL);
  4943. if (!ptp_priv->pin_config)
  4944. return -ENOMEM;
  4945. for (int i = 0; i < LAN8841_PTP_GPIO_NUM; ++i) {
  4946. struct ptp_pin_desc *p = &ptp_priv->pin_config[i];
  4947. snprintf(p->name, sizeof(p->name), "pin%d", i);
  4948. p->index = i;
  4949. p->func = PTP_PF_NONE;
  4950. }
  4951. ptp_priv->ptp_clock_info = lan8841_ptp_clock_info;
  4952. ptp_priv->ptp_clock_info.pin_config = ptp_priv->pin_config;
  4953. ptp_priv->ptp_clock = ptp_clock_register(&ptp_priv->ptp_clock_info,
  4954. &phydev->mdio.dev);
  4955. if (IS_ERR(ptp_priv->ptp_clock)) {
  4956. phydev_err(phydev, "ptp_clock_register failed: %pe\n",
  4957. ptp_priv->ptp_clock);
  4958. return -EINVAL;
  4959. }
  4960. if (!ptp_priv->ptp_clock)
  4961. return 0;
  4962. /* Initialize the SW */
  4963. skb_queue_head_init(&ptp_priv->tx_queue);
  4964. ptp_priv->phydev = phydev;
  4965. mutex_init(&ptp_priv->ptp_lock);
  4966. spin_lock_init(&ptp_priv->seconds_lock);
  4967. ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
  4968. ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
  4969. ptp_priv->mii_ts.hwtstamp_set = lan8841_hwtstamp_set;
  4970. ptp_priv->mii_ts.hwtstamp_get = lan8814_hwtstamp_get;
  4971. ptp_priv->mii_ts.ts_info = lan8841_ts_info;
  4972. phydev->mii_ts = &ptp_priv->mii_ts;
  4973. /* Timestamp selected by default to keep legacy API */
  4974. phydev->default_timestamp = true;
  4975. return 0;
  4976. }
  4977. static int lan8804_resume(struct phy_device *phydev)
  4978. {
  4979. return kszphy_resume(phydev);
  4980. }
  4981. static int lan8804_suspend(struct phy_device *phydev)
  4982. {
  4983. return kszphy_generic_suspend(phydev);
  4984. }
  4985. static int lan8841_resume(struct phy_device *phydev)
  4986. {
  4987. return kszphy_generic_resume(phydev);
  4988. }
  4989. static int lan8841_suspend(struct phy_device *phydev)
  4990. {
  4991. struct kszphy_priv *priv = phydev->priv;
  4992. struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
  4993. if (ptp_priv->ptp_clock)
  4994. ptp_cancel_worker_sync(ptp_priv->ptp_clock);
  4995. return kszphy_generic_suspend(phydev);
  4996. }
  4997. static int ksz9131_resume(struct phy_device *phydev)
  4998. {
  4999. if (phydev->suspended && phy_interface_is_rgmii(phydev))
  5000. ksz9131_config_rgmii_delay(phydev);
  5001. return kszphy_resume(phydev);
  5002. }
  5003. #define LAN8842_PTP_GPIO_NUM 16
  5004. static int lan8842_ptp_probe_once(struct phy_device *phydev)
  5005. {
  5006. return __lan8814_ptp_probe_once(phydev, "lan8842_ptp_pin",
  5007. LAN8842_PTP_GPIO_NUM);
  5008. }
  5009. #define LAN8842_STRAP_REG 0 /* 0x0 */
  5010. #define LAN8842_STRAP_REG_PHYADDR_MASK GENMASK(4, 0)
  5011. #define LAN8842_SKU_REG 11 /* 0x0b */
  5012. #define LAN8842_SELF_TEST 14 /* 0x0e */
  5013. #define LAN8842_SELF_TEST_RX_CNT_ENA BIT(8)
  5014. #define LAN8842_SELF_TEST_TX_CNT_ENA BIT(4)
  5015. static int lan8842_probe(struct phy_device *phydev)
  5016. {
  5017. struct lan8842_priv *priv;
  5018. int addr;
  5019. int ret;
  5020. priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
  5021. if (!priv)
  5022. return -ENOMEM;
  5023. phydev->priv = priv;
  5024. /* Similar to lan8814 this PHY has a pin which needs to be pulled down
  5025. * to enable to pass any traffic through it. Therefore use the same
  5026. * function as lan8814
  5027. */
  5028. ret = lan8814_release_coma_mode(phydev);
  5029. if (ret)
  5030. return ret;
  5031. /* Enable to count the RX and TX packets */
  5032. ret = lanphy_write_page_reg(phydev, LAN8814_PAGE_PCS_DIGITAL,
  5033. LAN8842_SELF_TEST,
  5034. LAN8842_SELF_TEST_RX_CNT_ENA |
  5035. LAN8842_SELF_TEST_TX_CNT_ENA);
  5036. if (ret < 0)
  5037. return ret;
  5038. /* Revision lan8832 doesn't have support for PTP, therefore don't add
  5039. * any PTP clocks
  5040. */
  5041. ret = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  5042. LAN8842_SKU_REG);
  5043. if (ret < 0)
  5044. return ret;
  5045. priv->rev = ret;
  5046. if (priv->rev == LAN8842_REV_8832)
  5047. return 0;
  5048. /* As the lan8814 and lan8842 has the same IP for the PTP block, the
  5049. * only difference is the number of the GPIOs, then make sure that the
  5050. * lan8842 initialized also the shared data pointer as this is used in
  5051. * all the PTP functions for lan8814. The lan8842 doesn't have multiple
  5052. * PHYs in the same package.
  5053. */
  5054. addr = lanphy_read_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  5055. LAN8842_STRAP_REG);
  5056. if (addr < 0)
  5057. return addr;
  5058. addr &= LAN8842_STRAP_REG_PHYADDR_MASK;
  5059. ret = devm_phy_package_join(&phydev->mdio.dev, phydev, addr,
  5060. sizeof(struct lan8814_shared_priv));
  5061. if (ret)
  5062. return ret;
  5063. if (phy_package_init_once(phydev)) {
  5064. ret = lan8842_ptp_probe_once(phydev);
  5065. if (ret)
  5066. return ret;
  5067. }
  5068. lan8814_ptp_init(phydev);
  5069. return 0;
  5070. }
  5071. #define LAN8814_POWER_MGMT_MODE_3_ANEG_MDI 0x13
  5072. #define LAN8814_POWER_MGMT_MODE_4_ANEG_MDIX 0x14
  5073. #define LAN8814_POWER_MGMT_MODE_5_10BT_MDI 0x15
  5074. #define LAN8814_POWER_MGMT_MODE_6_10BT_MDIX 0x16
  5075. #define LAN8814_POWER_MGMT_MODE_7_100BT_TRAIN 0x17
  5076. #define LAN8814_POWER_MGMT_MODE_8_100BT_MDI 0x18
  5077. #define LAN8814_POWER_MGMT_MODE_9_100BT_EEE_MDI_TX 0x19
  5078. #define LAN8814_POWER_MGMT_MODE_10_100BT_EEE_MDI_RX 0x1a
  5079. #define LAN8814_POWER_MGMT_MODE_11_100BT_MDIX 0x1b
  5080. #define LAN8814_POWER_MGMT_MODE_12_100BT_EEE_MDIX_TX 0x1c
  5081. #define LAN8814_POWER_MGMT_MODE_13_100BT_EEE_MDIX_RX 0x1d
  5082. #define LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX 0x1e
  5083. #define LAN8814_POWER_MGMT_DLLPD_D BIT(0)
  5084. #define LAN8814_POWER_MGMT_ADCPD_D BIT(1)
  5085. #define LAN8814_POWER_MGMT_PGAPD_D BIT(2)
  5086. #define LAN8814_POWER_MGMT_TXPD_D BIT(3)
  5087. #define LAN8814_POWER_MGMT_DLLPD_C BIT(4)
  5088. #define LAN8814_POWER_MGMT_ADCPD_C BIT(5)
  5089. #define LAN8814_POWER_MGMT_PGAPD_C BIT(6)
  5090. #define LAN8814_POWER_MGMT_TXPD_C BIT(7)
  5091. #define LAN8814_POWER_MGMT_DLLPD_B BIT(8)
  5092. #define LAN8814_POWER_MGMT_ADCPD_B BIT(9)
  5093. #define LAN8814_POWER_MGMT_PGAPD_B BIT(10)
  5094. #define LAN8814_POWER_MGMT_TXPD_B BIT(11)
  5095. #define LAN8814_POWER_MGMT_DLLPD_A BIT(12)
  5096. #define LAN8814_POWER_MGMT_ADCPD_A BIT(13)
  5097. #define LAN8814_POWER_MGMT_PGAPD_A BIT(14)
  5098. #define LAN8814_POWER_MGMT_TXPD_A BIT(15)
  5099. #define LAN8814_POWER_MGMT_C_D (LAN8814_POWER_MGMT_DLLPD_D | \
  5100. LAN8814_POWER_MGMT_ADCPD_D | \
  5101. LAN8814_POWER_MGMT_PGAPD_D | \
  5102. LAN8814_POWER_MGMT_DLLPD_C | \
  5103. LAN8814_POWER_MGMT_ADCPD_C | \
  5104. LAN8814_POWER_MGMT_PGAPD_C)
  5105. #define LAN8814_POWER_MGMT_B_C_D (LAN8814_POWER_MGMT_C_D | \
  5106. LAN8814_POWER_MGMT_DLLPD_B | \
  5107. LAN8814_POWER_MGMT_ADCPD_B | \
  5108. LAN8814_POWER_MGMT_PGAPD_B)
  5109. #define LAN8814_POWER_MGMT_VAL1 (LAN8814_POWER_MGMT_C_D | \
  5110. LAN8814_POWER_MGMT_ADCPD_B | \
  5111. LAN8814_POWER_MGMT_PGAPD_B | \
  5112. LAN8814_POWER_MGMT_ADCPD_A | \
  5113. LAN8814_POWER_MGMT_PGAPD_A)
  5114. #define LAN8814_POWER_MGMT_VAL2 LAN8814_POWER_MGMT_C_D
  5115. #define LAN8814_POWER_MGMT_VAL3 (LAN8814_POWER_MGMT_C_D | \
  5116. LAN8814_POWER_MGMT_DLLPD_B | \
  5117. LAN8814_POWER_MGMT_ADCPD_B | \
  5118. LAN8814_POWER_MGMT_PGAPD_A)
  5119. #define LAN8814_POWER_MGMT_VAL4 (LAN8814_POWER_MGMT_B_C_D | \
  5120. LAN8814_POWER_MGMT_ADCPD_A | \
  5121. LAN8814_POWER_MGMT_PGAPD_A)
  5122. #define LAN8814_POWER_MGMT_VAL5 LAN8814_POWER_MGMT_B_C_D
  5123. #define LAN8814_EEE_WAKE_TX_TIMER 0x0e
  5124. #define LAN8814_EEE_WAKE_TX_TIMER_MAX_VAL 0x1f
  5125. static const struct lanphy_reg_data short_center_tap_errata[] = {
  5126. { LAN8814_PAGE_POWER_REGS,
  5127. LAN8814_POWER_MGMT_MODE_3_ANEG_MDI,
  5128. LAN8814_POWER_MGMT_VAL1 },
  5129. { LAN8814_PAGE_POWER_REGS,
  5130. LAN8814_POWER_MGMT_MODE_4_ANEG_MDIX,
  5131. LAN8814_POWER_MGMT_VAL1 },
  5132. { LAN8814_PAGE_POWER_REGS,
  5133. LAN8814_POWER_MGMT_MODE_5_10BT_MDI,
  5134. LAN8814_POWER_MGMT_VAL1 },
  5135. { LAN8814_PAGE_POWER_REGS,
  5136. LAN8814_POWER_MGMT_MODE_6_10BT_MDIX,
  5137. LAN8814_POWER_MGMT_VAL1 },
  5138. { LAN8814_PAGE_POWER_REGS,
  5139. LAN8814_POWER_MGMT_MODE_7_100BT_TRAIN,
  5140. LAN8814_POWER_MGMT_VAL2 },
  5141. { LAN8814_PAGE_POWER_REGS,
  5142. LAN8814_POWER_MGMT_MODE_8_100BT_MDI,
  5143. LAN8814_POWER_MGMT_VAL3 },
  5144. { LAN8814_PAGE_POWER_REGS,
  5145. LAN8814_POWER_MGMT_MODE_9_100BT_EEE_MDI_TX,
  5146. LAN8814_POWER_MGMT_VAL3 },
  5147. { LAN8814_PAGE_POWER_REGS,
  5148. LAN8814_POWER_MGMT_MODE_10_100BT_EEE_MDI_RX,
  5149. LAN8814_POWER_MGMT_VAL4 },
  5150. { LAN8814_PAGE_POWER_REGS,
  5151. LAN8814_POWER_MGMT_MODE_11_100BT_MDIX,
  5152. LAN8814_POWER_MGMT_VAL5 },
  5153. { LAN8814_PAGE_POWER_REGS,
  5154. LAN8814_POWER_MGMT_MODE_12_100BT_EEE_MDIX_TX,
  5155. LAN8814_POWER_MGMT_VAL5 },
  5156. { LAN8814_PAGE_POWER_REGS,
  5157. LAN8814_POWER_MGMT_MODE_13_100BT_EEE_MDIX_RX,
  5158. LAN8814_POWER_MGMT_VAL4 },
  5159. { LAN8814_PAGE_POWER_REGS,
  5160. LAN8814_POWER_MGMT_MODE_14_100BTX_EEE_TX_RX,
  5161. LAN8814_POWER_MGMT_VAL4 },
  5162. };
  5163. static const struct lanphy_reg_data waketx_timer_errata[] = {
  5164. { LAN8814_PAGE_EEE,
  5165. LAN8814_EEE_WAKE_TX_TIMER,
  5166. LAN8814_EEE_WAKE_TX_TIMER_MAX_VAL },
  5167. };
  5168. static int lanphy_write_reg_data(struct phy_device *phydev,
  5169. const struct lanphy_reg_data *data,
  5170. size_t num)
  5171. {
  5172. int ret = 0;
  5173. while (num--) {
  5174. ret = lanphy_write_page_reg(phydev, data->page, data->addr,
  5175. data->val);
  5176. if (ret)
  5177. break;
  5178. }
  5179. return ret;
  5180. }
  5181. static int lan8842_erratas(struct phy_device *phydev)
  5182. {
  5183. int ret;
  5184. ret = lanphy_write_reg_data(phydev, short_center_tap_errata,
  5185. ARRAY_SIZE(short_center_tap_errata));
  5186. if (ret)
  5187. return ret;
  5188. return lanphy_write_reg_data(phydev, waketx_timer_errata,
  5189. ARRAY_SIZE(waketx_timer_errata));
  5190. }
  5191. static int lan8842_config_init(struct phy_device *phydev)
  5192. {
  5193. int ret;
  5194. /* Reset the PHY */
  5195. ret = lanphy_modify_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  5196. LAN8814_QSGMII_SOFT_RESET,
  5197. LAN8814_QSGMII_SOFT_RESET_BIT,
  5198. LAN8814_QSGMII_SOFT_RESET_BIT);
  5199. if (ret < 0)
  5200. return ret;
  5201. /* Apply the erratas for this device */
  5202. ret = lan8842_erratas(phydev);
  5203. if (ret < 0)
  5204. return ret;
  5205. /* Even if the GPIOs are set to control the LEDs the behaviour of the
  5206. * LEDs is wrong, they are not blinking when there is traffic.
  5207. * To fix this it is required to set extended LED mode
  5208. */
  5209. ret = lanphy_modify_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  5210. LAN8814_LED_CTRL_1,
  5211. LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_, 0);
  5212. if (ret < 0)
  5213. return ret;
  5214. ret = lanphy_modify_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  5215. LAN8814_LED_CTRL_2,
  5216. LAN8814_LED_CTRL_2_LED1_COM_DIS,
  5217. LAN8814_LED_CTRL_2_LED1_COM_DIS);
  5218. if (ret < 0)
  5219. return ret;
  5220. /* To allow the PHY to control the LEDs the GPIOs of the PHY should have
  5221. * a function mode and not the GPIO. Apparently by default the value is
  5222. * GPIO and not function even though the datasheet it says that it is
  5223. * function. Therefore set this value.
  5224. */
  5225. return lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  5226. LAN8814_GPIO_EN2, 0);
  5227. }
  5228. #define LAN8842_INTR_CTRL_REG 52 /* 0x34 */
  5229. static int lan8842_config_intr(struct phy_device *phydev)
  5230. {
  5231. int err;
  5232. lanphy_write_page_reg(phydev, LAN8814_PAGE_COMMON_REGS,
  5233. LAN8842_INTR_CTRL_REG,
  5234. LAN8814_INTR_CTRL_REG_INTR_ENABLE);
  5235. /* enable / disable interrupts */
  5236. if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
  5237. err = lan8814_ack_interrupt(phydev);
  5238. if (err)
  5239. return err;
  5240. err = phy_write(phydev, LAN8814_INTC,
  5241. LAN8814_INT_LINK | LAN8814_INT_FLF);
  5242. } else {
  5243. err = phy_write(phydev, LAN8814_INTC, 0);
  5244. if (err)
  5245. return err;
  5246. err = lan8814_ack_interrupt(phydev);
  5247. }
  5248. return err;
  5249. }
  5250. static unsigned int lan8842_inband_caps(struct phy_device *phydev,
  5251. phy_interface_t interface)
  5252. {
  5253. /* Inband configuration can be enabled or disabled using the registers
  5254. * PCS1G_ANEG_CONFIG.
  5255. */
  5256. return LINK_INBAND_DISABLE | LINK_INBAND_ENABLE;
  5257. }
  5258. static int lan8842_config_inband(struct phy_device *phydev, unsigned int modes)
  5259. {
  5260. bool enable;
  5261. if (modes == LINK_INBAND_DISABLE)
  5262. enable = false;
  5263. else
  5264. enable = true;
  5265. /* Disable or enable in-band autoneg with PCS Host side
  5266. * It has the same address as lan8814
  5267. */
  5268. return lanphy_modify_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  5269. LAN8814_QSGMII_PCS1G_ANEG_CONFIG,
  5270. LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA,
  5271. enable ? LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA : 0);
  5272. }
  5273. static void lan8842_handle_ptp_interrupt(struct phy_device *phydev, u16 status)
  5274. {
  5275. struct kszphy_ptp_priv *ptp_priv;
  5276. struct lan8842_priv *priv;
  5277. priv = phydev->priv;
  5278. ptp_priv = &priv->ptp_priv;
  5279. if (status & PTP_TSU_INT_STS_PTP_TX_TS_EN_)
  5280. lan8814_get_tx_ts(ptp_priv);
  5281. if (status & PTP_TSU_INT_STS_PTP_RX_TS_EN_)
  5282. lan8814_get_rx_ts(ptp_priv);
  5283. if (status & PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_) {
  5284. lan8814_flush_fifo(phydev, true);
  5285. skb_queue_purge(&ptp_priv->tx_queue);
  5286. }
  5287. if (status & PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_) {
  5288. lan8814_flush_fifo(phydev, false);
  5289. skb_queue_purge(&ptp_priv->rx_queue);
  5290. }
  5291. }
  5292. static irqreturn_t lan8842_handle_interrupt(struct phy_device *phydev)
  5293. {
  5294. struct lan8842_priv *priv = phydev->priv;
  5295. int ret = IRQ_NONE;
  5296. int irq_status;
  5297. irq_status = phy_read(phydev, LAN8814_INTS);
  5298. if (irq_status < 0) {
  5299. phy_error(phydev);
  5300. return IRQ_NONE;
  5301. }
  5302. if (irq_status & (LAN8814_INT_LINK | LAN8814_INT_FLF)) {
  5303. phy_trigger_machine(phydev);
  5304. ret = IRQ_HANDLED;
  5305. }
  5306. /* Phy revision lan8832 doesn't have support for PTP therefore there is
  5307. * not need to check the PTP and GPIO interrupts
  5308. */
  5309. if (priv->rev == LAN8842_REV_8832)
  5310. goto out;
  5311. while (true) {
  5312. irq_status = lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
  5313. PTP_TSU_INT_STS);
  5314. if (!irq_status)
  5315. break;
  5316. lan8842_handle_ptp_interrupt(phydev, irq_status);
  5317. ret = IRQ_HANDLED;
  5318. }
  5319. if (!lan8814_handle_gpio_interrupt(phydev, irq_status))
  5320. ret = IRQ_HANDLED;
  5321. out:
  5322. return ret;
  5323. }
  5324. static u64 lan8842_get_stat(struct phy_device *phydev, int count, int *regs)
  5325. {
  5326. u64 ret = 0;
  5327. int val;
  5328. for (int j = 0; j < count; ++j) {
  5329. val = lanphy_read_page_reg(phydev, LAN8814_PAGE_PCS_DIGITAL,
  5330. regs[j]);
  5331. if (val < 0)
  5332. return U64_MAX;
  5333. ret <<= 16;
  5334. ret += val;
  5335. }
  5336. return ret;
  5337. }
  5338. static int lan8842_update_stats(struct phy_device *phydev)
  5339. {
  5340. struct lan8842_priv *priv = phydev->priv;
  5341. int rx_packets_regs[] = {88, 61, 60};
  5342. int rx_errors_regs[] = {63, 62};
  5343. int tx_packets_regs[] = {89, 85, 84};
  5344. int tx_errors_regs[] = {87, 86};
  5345. priv->phy_stats.rx_packets = lan8842_get_stat(phydev,
  5346. ARRAY_SIZE(rx_packets_regs),
  5347. rx_packets_regs);
  5348. priv->phy_stats.rx_errors = lan8842_get_stat(phydev,
  5349. ARRAY_SIZE(rx_errors_regs),
  5350. rx_errors_regs);
  5351. priv->phy_stats.tx_packets = lan8842_get_stat(phydev,
  5352. ARRAY_SIZE(tx_packets_regs),
  5353. tx_packets_regs);
  5354. priv->phy_stats.tx_errors = lan8842_get_stat(phydev,
  5355. ARRAY_SIZE(tx_errors_regs),
  5356. tx_errors_regs);
  5357. return 0;
  5358. }
  5359. #define LAN8842_FLF 15 /* 0x0e */
  5360. #define LAN8842_FLF_ENA BIT(1)
  5361. #define LAN8842_FLF_ENA_LINK_DOWN BIT(0)
  5362. static int lan8842_get_fast_down(struct phy_device *phydev, u8 *msecs)
  5363. {
  5364. int ret;
  5365. ret = lanphy_read_page_reg(phydev, LAN8814_PAGE_PCS, LAN8842_FLF);
  5366. if (ret < 0)
  5367. return ret;
  5368. if (ret & LAN8842_FLF_ENA)
  5369. *msecs = ETHTOOL_PHY_FAST_LINK_DOWN_ON;
  5370. else
  5371. *msecs = ETHTOOL_PHY_FAST_LINK_DOWN_OFF;
  5372. return 0;
  5373. }
  5374. static int lan8842_set_fast_down(struct phy_device *phydev, const u8 *msecs)
  5375. {
  5376. u16 flf;
  5377. switch (*msecs) {
  5378. case ETHTOOL_PHY_FAST_LINK_DOWN_OFF:
  5379. flf = 0;
  5380. break;
  5381. case ETHTOOL_PHY_FAST_LINK_DOWN_ON:
  5382. flf = LAN8842_FLF_ENA | LAN8842_FLF_ENA_LINK_DOWN;
  5383. break;
  5384. default:
  5385. return -EINVAL;
  5386. }
  5387. return lanphy_modify_page_reg(phydev, LAN8814_PAGE_PCS,
  5388. LAN8842_FLF,
  5389. LAN8842_FLF_ENA |
  5390. LAN8842_FLF_ENA_LINK_DOWN, flf);
  5391. }
  5392. static int lan8842_get_tunable(struct phy_device *phydev,
  5393. struct ethtool_tunable *tuna, void *data)
  5394. {
  5395. switch (tuna->id) {
  5396. case ETHTOOL_PHY_FAST_LINK_DOWN:
  5397. return lan8842_get_fast_down(phydev, data);
  5398. default:
  5399. return -EOPNOTSUPP;
  5400. }
  5401. }
  5402. static int lan8842_set_tunable(struct phy_device *phydev,
  5403. struct ethtool_tunable *tuna, const void *data)
  5404. {
  5405. switch (tuna->id) {
  5406. case ETHTOOL_PHY_FAST_LINK_DOWN:
  5407. return lan8842_set_fast_down(phydev, data);
  5408. default:
  5409. return -EOPNOTSUPP;
  5410. }
  5411. }
  5412. static void lan8842_get_phy_stats(struct phy_device *phydev,
  5413. struct ethtool_eth_phy_stats *eth_stats,
  5414. struct ethtool_phy_stats *stats)
  5415. {
  5416. struct lan8842_priv *priv = phydev->priv;
  5417. stats->rx_packets = priv->phy_stats.rx_packets;
  5418. stats->rx_errors = priv->phy_stats.rx_errors;
  5419. stats->tx_packets = priv->phy_stats.tx_packets;
  5420. stats->tx_errors = priv->phy_stats.tx_errors;
  5421. }
  5422. static struct phy_driver ksphy_driver[] = {
  5423. {
  5424. PHY_ID_MATCH_MODEL(PHY_ID_KS8737),
  5425. .name = "Micrel KS8737",
  5426. /* PHY_BASIC_FEATURES */
  5427. .driver_data = &ks8737_type,
  5428. .probe = kszphy_probe,
  5429. .config_init = kszphy_config_init,
  5430. .config_intr = kszphy_config_intr,
  5431. .handle_interrupt = kszphy_handle_interrupt,
  5432. .suspend = kszphy_suspend,
  5433. .resume = kszphy_resume,
  5434. }, {
  5435. .phy_id = PHY_ID_KSZ8021,
  5436. .phy_id_mask = 0x00ffffff,
  5437. .name = "Micrel KSZ8021 or KSZ8031",
  5438. /* PHY_BASIC_FEATURES */
  5439. .driver_data = &ksz8021_type,
  5440. .probe = kszphy_probe,
  5441. .config_init = kszphy_config_init,
  5442. .config_intr = kszphy_config_intr,
  5443. .handle_interrupt = kszphy_handle_interrupt,
  5444. .get_sset_count = kszphy_get_sset_count,
  5445. .get_strings = kszphy_get_strings,
  5446. .get_stats = kszphy_get_stats,
  5447. .suspend = kszphy_suspend,
  5448. .resume = kszphy_resume,
  5449. }, {
  5450. .phy_id = PHY_ID_KSZ8031,
  5451. .phy_id_mask = 0x00ffffff,
  5452. .name = "Micrel KSZ8031",
  5453. /* PHY_BASIC_FEATURES */
  5454. .driver_data = &ksz8021_type,
  5455. .probe = kszphy_probe,
  5456. .config_init = kszphy_config_init,
  5457. .config_intr = kszphy_config_intr,
  5458. .handle_interrupt = kszphy_handle_interrupt,
  5459. .get_sset_count = kszphy_get_sset_count,
  5460. .get_strings = kszphy_get_strings,
  5461. .get_stats = kszphy_get_stats,
  5462. .suspend = kszphy_suspend,
  5463. .resume = kszphy_resume,
  5464. }, {
  5465. PHY_ID_MATCH_MODEL(PHY_ID_KSZ8041),
  5466. .name = "Micrel KSZ8041",
  5467. /* PHY_BASIC_FEATURES */
  5468. .driver_data = &ksz8041_type,
  5469. .probe = kszphy_probe,
  5470. .config_init = ksz8041_config_init,
  5471. .config_aneg = ksz8041_config_aneg,
  5472. .config_intr = kszphy_config_intr,
  5473. .handle_interrupt = kszphy_handle_interrupt,
  5474. .get_sset_count = kszphy_get_sset_count,
  5475. .get_strings = kszphy_get_strings,
  5476. .get_stats = kszphy_get_stats,
  5477. .suspend = ksz8041_suspend,
  5478. .resume = ksz8041_resume,
  5479. }, {
  5480. PHY_ID_MATCH_MODEL(PHY_ID_KSZ8041RNLI),
  5481. .name = "Micrel KSZ8041RNLI",
  5482. /* PHY_BASIC_FEATURES */
  5483. .driver_data = &ksz8041_type,
  5484. .probe = kszphy_probe,
  5485. .config_init = kszphy_config_init,
  5486. .config_intr = kszphy_config_intr,
  5487. .handle_interrupt = kszphy_handle_interrupt,
  5488. .get_sset_count = kszphy_get_sset_count,
  5489. .get_strings = kszphy_get_strings,
  5490. .get_stats = kszphy_get_stats,
  5491. .suspend = kszphy_suspend,
  5492. .resume = kszphy_resume,
  5493. }, {
  5494. .name = "Micrel KSZ8051",
  5495. /* PHY_BASIC_FEATURES */
  5496. .driver_data = &ksz8051_type,
  5497. .probe = kszphy_probe,
  5498. .config_init = kszphy_config_init,
  5499. .config_intr = kszphy_config_intr,
  5500. .handle_interrupt = kszphy_handle_interrupt,
  5501. .get_sset_count = kszphy_get_sset_count,
  5502. .get_strings = kszphy_get_strings,
  5503. .get_stats = kszphy_get_stats,
  5504. .match_phy_device = ksz8051_match_phy_device,
  5505. .suspend = kszphy_suspend,
  5506. .resume = kszphy_resume,
  5507. }, {
  5508. .phy_id = PHY_ID_KSZ8001,
  5509. .name = "Micrel KSZ8001 or KS8721",
  5510. .phy_id_mask = 0x00fffffc,
  5511. /* PHY_BASIC_FEATURES */
  5512. .driver_data = &ksz8041_type,
  5513. .probe = kszphy_probe,
  5514. .config_init = kszphy_config_init,
  5515. .config_intr = kszphy_config_intr,
  5516. .handle_interrupt = kszphy_handle_interrupt,
  5517. .get_sset_count = kszphy_get_sset_count,
  5518. .get_strings = kszphy_get_strings,
  5519. .get_stats = kszphy_get_stats,
  5520. .suspend = kszphy_suspend,
  5521. .resume = kszphy_resume,
  5522. }, {
  5523. PHY_ID_MATCH_MODEL(PHY_ID_KSZ8081),
  5524. .name = "Micrel KSZ8081 or KSZ8091",
  5525. .flags = PHY_POLL_CABLE_TEST,
  5526. /* PHY_BASIC_FEATURES */
  5527. .driver_data = &ksz8081_type,
  5528. .probe = kszphy_probe,
  5529. .config_init = ksz8081_config_init,
  5530. .soft_reset = genphy_soft_reset,
  5531. .config_aneg = ksz8081_config_aneg,
  5532. .read_status = ksz8081_read_status,
  5533. .config_intr = kszphy_config_intr,
  5534. .handle_interrupt = kszphy_handle_interrupt,
  5535. .get_sset_count = kszphy_get_sset_count,
  5536. .get_strings = kszphy_get_strings,
  5537. .get_stats = kszphy_get_stats,
  5538. .suspend = kszphy_suspend,
  5539. .resume = kszphy_resume,
  5540. .cable_test_start = ksz886x_cable_test_start,
  5541. .cable_test_get_status = ksz886x_cable_test_get_status,
  5542. }, {
  5543. PHY_ID_MATCH_MODEL(PHY_ID_KSZ8061),
  5544. .name = "Micrel KSZ8061",
  5545. /* PHY_BASIC_FEATURES */
  5546. .probe = kszphy_probe,
  5547. .config_init = ksz8061_config_init,
  5548. .soft_reset = genphy_soft_reset,
  5549. .config_intr = kszphy_config_intr,
  5550. .handle_interrupt = kszphy_handle_interrupt,
  5551. .suspend = ksz8061_suspend,
  5552. .resume = ksz8061_resume,
  5553. }, {
  5554. .phy_id = PHY_ID_KSZ9021,
  5555. .phy_id_mask = 0x000ffffe,
  5556. .name = "Micrel KSZ9021 Gigabit PHY",
  5557. /* PHY_GBIT_FEATURES */
  5558. .driver_data = &ksz9021_type,
  5559. .probe = kszphy_probe,
  5560. .get_features = ksz9031_get_features,
  5561. .config_init = ksz9021_config_init,
  5562. .config_intr = kszphy_config_intr,
  5563. .handle_interrupt = kszphy_handle_interrupt,
  5564. .get_sset_count = kszphy_get_sset_count,
  5565. .get_strings = kszphy_get_strings,
  5566. .get_stats = kszphy_get_stats,
  5567. .suspend = kszphy_suspend,
  5568. .resume = kszphy_resume,
  5569. .read_mmd = genphy_read_mmd_unsupported,
  5570. .write_mmd = genphy_write_mmd_unsupported,
  5571. }, {
  5572. PHY_ID_MATCH_MODEL(PHY_ID_KSZ9031),
  5573. .name = "Micrel KSZ9031 Gigabit PHY",
  5574. .flags = PHY_POLL_CABLE_TEST,
  5575. .driver_data = &ksz9021_type,
  5576. .probe = kszphy_probe,
  5577. .get_features = ksz9031_get_features,
  5578. .config_init = ksz9031_config_init,
  5579. .soft_reset = genphy_soft_reset,
  5580. .read_status = ksz9031_read_status,
  5581. .config_intr = kszphy_config_intr,
  5582. .handle_interrupt = kszphy_handle_interrupt,
  5583. .get_sset_count = kszphy_get_sset_count,
  5584. .get_strings = kszphy_get_strings,
  5585. .get_stats = kszphy_get_stats,
  5586. .suspend = kszphy_suspend,
  5587. .resume = kszphy_resume,
  5588. .cable_test_start = ksz9x31_cable_test_start,
  5589. .cable_test_get_status = ksz9x31_cable_test_get_status,
  5590. .set_loopback = ksz9031_set_loopback,
  5591. }, {
  5592. PHY_ID_MATCH_MODEL(PHY_ID_LAN8814),
  5593. .name = "Microchip INDY Gigabit Quad PHY",
  5594. .flags = PHY_POLL_CABLE_TEST,
  5595. .config_init = lan8814_config_init,
  5596. .driver_data = &lan8814_type,
  5597. .probe = lan8814_probe,
  5598. .soft_reset = genphy_soft_reset,
  5599. .read_status = ksz9031_read_status,
  5600. .get_sset_count = kszphy_get_sset_count,
  5601. .get_strings = kszphy_get_strings,
  5602. .get_stats = kszphy_get_stats,
  5603. .suspend = genphy_suspend,
  5604. .resume = kszphy_resume,
  5605. .config_intr = lan8814_config_intr,
  5606. .inband_caps = lan8842_inband_caps,
  5607. .config_inband = lan8842_config_inband,
  5608. .handle_interrupt = lan8814_handle_interrupt,
  5609. .cable_test_start = lan8814_cable_test_start,
  5610. .cable_test_get_status = ksz886x_cable_test_get_status,
  5611. }, {
  5612. PHY_ID_MATCH_MODEL(PHY_ID_LAN8804),
  5613. .name = "Microchip LAN966X Gigabit PHY",
  5614. .config_init = lan8804_config_init,
  5615. .driver_data = &ksz9021_type,
  5616. .probe = kszphy_probe,
  5617. .soft_reset = genphy_soft_reset,
  5618. .read_status = ksz9031_read_status,
  5619. .get_sset_count = kszphy_get_sset_count,
  5620. .get_strings = kszphy_get_strings,
  5621. .get_stats = kszphy_get_stats,
  5622. .suspend = lan8804_suspend,
  5623. .resume = lan8804_resume,
  5624. .config_intr = lan8804_config_intr,
  5625. .handle_interrupt = lan8804_handle_interrupt,
  5626. }, {
  5627. PHY_ID_MATCH_MODEL(PHY_ID_LAN8841),
  5628. .name = "Microchip LAN8841 Gigabit PHY",
  5629. .flags = PHY_POLL_CABLE_TEST,
  5630. .driver_data = &lan8841_type,
  5631. .config_init = lan8841_config_init,
  5632. .probe = lan8841_probe,
  5633. .soft_reset = genphy_soft_reset,
  5634. .config_intr = lan8841_config_intr,
  5635. .handle_interrupt = lan8841_handle_interrupt,
  5636. .get_sset_count = kszphy_get_sset_count,
  5637. .get_strings = kszphy_get_strings,
  5638. .get_stats = kszphy_get_stats,
  5639. .suspend = lan8841_suspend,
  5640. .resume = lan8841_resume,
  5641. .cable_test_start = lan8814_cable_test_start,
  5642. .cable_test_get_status = ksz886x_cable_test_get_status,
  5643. }, {
  5644. PHY_ID_MATCH_MODEL(PHY_ID_LAN8842),
  5645. .name = "Microchip LAN8842 Gigabit PHY",
  5646. .flags = PHY_POLL_CABLE_TEST,
  5647. .driver_data = &lan8814_type,
  5648. .probe = lan8842_probe,
  5649. .config_init = lan8842_config_init,
  5650. .config_intr = lan8842_config_intr,
  5651. .inband_caps = lan8842_inband_caps,
  5652. .config_inband = lan8842_config_inband,
  5653. .handle_interrupt = lan8842_handle_interrupt,
  5654. .get_phy_stats = lan8842_get_phy_stats,
  5655. .update_stats = lan8842_update_stats,
  5656. .get_tunable = lan8842_get_tunable,
  5657. .set_tunable = lan8842_set_tunable,
  5658. .cable_test_start = lan8814_cable_test_start,
  5659. .cable_test_get_status = ksz886x_cable_test_get_status,
  5660. }, {
  5661. PHY_ID_MATCH_MODEL(PHY_ID_KSZ9131),
  5662. .name = "Microchip KSZ9131 Gigabit PHY",
  5663. /* PHY_GBIT_FEATURES */
  5664. .flags = PHY_POLL_CABLE_TEST,
  5665. .driver_data = &ksz9131_type,
  5666. .probe = kszphy_probe,
  5667. .soft_reset = genphy_soft_reset,
  5668. .config_init = ksz9131_config_init,
  5669. .config_intr = kszphy_config_intr,
  5670. .config_aneg = ksz9131_config_aneg,
  5671. .read_status = ksz9131_read_status,
  5672. .handle_interrupt = kszphy_handle_interrupt,
  5673. .get_sset_count = kszphy_get_sset_count,
  5674. .get_strings = kszphy_get_strings,
  5675. .get_stats = kszphy_get_stats,
  5676. .suspend = kszphy_suspend,
  5677. .resume = ksz9131_resume,
  5678. .cable_test_start = ksz9x31_cable_test_start,
  5679. .cable_test_get_status = ksz9x31_cable_test_get_status,
  5680. .get_features = ksz9477_get_features,
  5681. }, {
  5682. PHY_ID_MATCH_MODEL(PHY_ID_KSZ8873MLL),
  5683. .name = "Micrel KSZ8873MLL Switch",
  5684. /* PHY_BASIC_FEATURES */
  5685. .config_init = kszphy_config_init,
  5686. .config_aneg = ksz8873mll_config_aneg,
  5687. .read_status = ksz8873mll_read_status,
  5688. .suspend = genphy_suspend,
  5689. .resume = genphy_resume,
  5690. }, {
  5691. PHY_ID_MATCH_MODEL(PHY_ID_KSZ886X),
  5692. .name = "Micrel KSZ8851 Ethernet MAC or KSZ886X Switch",
  5693. .driver_data = &ksz886x_type,
  5694. /* PHY_BASIC_FEATURES */
  5695. .flags = PHY_POLL_CABLE_TEST,
  5696. .config_init = kszphy_config_init,
  5697. .config_aneg = ksz886x_config_aneg,
  5698. .read_status = ksz886x_read_status,
  5699. .suspend = genphy_suspend,
  5700. .resume = genphy_resume,
  5701. .cable_test_start = ksz886x_cable_test_start,
  5702. .cable_test_get_status = ksz886x_cable_test_get_status,
  5703. }, {
  5704. .name = "Micrel KSZ87XX Switch",
  5705. /* PHY_BASIC_FEATURES */
  5706. .config_init = kszphy_config_init,
  5707. .match_phy_device = ksz8795_match_phy_device,
  5708. .suspend = genphy_suspend,
  5709. .resume = genphy_resume,
  5710. }, {
  5711. PHY_ID_MATCH_MODEL(PHY_ID_KSZ9477),
  5712. .name = "Microchip KSZ9477",
  5713. .probe = kszphy_probe,
  5714. /* PHY_GBIT_FEATURES */
  5715. .config_init = ksz9477_config_init,
  5716. .config_intr = kszphy_config_intr,
  5717. .config_aneg = ksz9477_config_aneg,
  5718. .read_status = ksz9477_read_status,
  5719. .handle_interrupt = kszphy_handle_interrupt,
  5720. .suspend = genphy_suspend,
  5721. .resume = ksz9477_resume,
  5722. .get_phy_stats = kszphy_get_phy_stats,
  5723. .update_stats = kszphy_update_stats,
  5724. .cable_test_start = ksz9x31_cable_test_start,
  5725. .cable_test_get_status = ksz9x31_cable_test_get_status,
  5726. .get_sqi = kszphy_get_sqi,
  5727. .get_sqi_max = kszphy_get_sqi_max,
  5728. .get_mse_capability = kszphy_get_mse_capability,
  5729. .get_mse_snapshot = kszphy_get_mse_snapshot,
  5730. } };
  5731. module_phy_driver(ksphy_driver);
  5732. MODULE_DESCRIPTION("Micrel PHY driver");
  5733. MODULE_AUTHOR("David J. Choi");
  5734. MODULE_LICENSE("GPL");
  5735. static const struct mdio_device_id __maybe_unused micrel_tbl[] = {
  5736. { PHY_ID_KSZ9021, 0x000ffffe },
  5737. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ9031) },
  5738. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ9131) },
  5739. { PHY_ID_KSZ8001, 0x00fffffc },
  5740. { PHY_ID_MATCH_MODEL(PHY_ID_KS8737) },
  5741. { PHY_ID_KSZ8021, 0x00ffffff },
  5742. { PHY_ID_KSZ8031, 0x00ffffff },
  5743. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ8041) },
  5744. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ8041RNLI) },
  5745. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ8051) },
  5746. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ8061) },
  5747. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ8081) },
  5748. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ8873MLL) },
  5749. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ886X) },
  5750. { PHY_ID_MATCH_MODEL(PHY_ID_KSZ9477) },
  5751. { PHY_ID_MATCH_MODEL(PHY_ID_LAN8814) },
  5752. { PHY_ID_MATCH_MODEL(PHY_ID_LAN8804) },
  5753. { PHY_ID_MATCH_MODEL(PHY_ID_LAN8841) },
  5754. { PHY_ID_MATCH_MODEL(PHY_ID_LAN8842) },
  5755. { }
  5756. };
  5757. MODULE_DEVICE_TABLE(mdio, micrel_tbl);