mtk_eth_soc.c 139 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. *
  4. * Copyright (C) 2009-2016 John Crispin <blogic@openwrt.org>
  5. * Copyright (C) 2009-2016 Felix Fietkau <nbd@openwrt.org>
  6. * Copyright (C) 2013-2016 Michael Lee <igvtee@gmail.com>
  7. */
  8. #include <linux/of.h>
  9. #include <linux/of_mdio.h>
  10. #include <linux/of_net.h>
  11. #include <linux/of_address.h>
  12. #include <linux/mfd/syscon.h>
  13. #include <linux/platform_device.h>
  14. #include <linux/regmap.h>
  15. #include <linux/clk.h>
  16. #include <linux/pm_runtime.h>
  17. #include <linux/if_vlan.h>
  18. #include <linux/reset.h>
  19. #include <linux/tcp.h>
  20. #include <linux/interrupt.h>
  21. #include <linux/pinctrl/devinfo.h>
  22. #include <linux/phylink.h>
  23. #include <linux/pcs/pcs-mtk-lynxi.h>
  24. #include <linux/jhash.h>
  25. #include <linux/bitfield.h>
  26. #include <net/dsa.h>
  27. #include <net/dst_metadata.h>
  28. #include <net/page_pool/helpers.h>
  29. #include <linux/genalloc.h>
  30. #include "mtk_eth_soc.h"
  31. #include "mtk_wed.h"
  32. static int mtk_msg_level = -1;
  33. module_param_named(msg_level, mtk_msg_level, int, 0);
  34. MODULE_PARM_DESC(msg_level, "Message level (-1=defaults,0=none,...,16=all)");
  35. #define MTK_ETHTOOL_STAT(x) { #x, \
  36. offsetof(struct mtk_hw_stats, x) / sizeof(u64) }
  37. #define MTK_ETHTOOL_XDP_STAT(x) { #x, \
  38. offsetof(struct mtk_hw_stats, xdp_stats.x) / \
  39. sizeof(u64) }
  40. static const struct mtk_reg_map mtk_reg_map = {
  41. .tx_irq_mask = 0x1a1c,
  42. .tx_irq_status = 0x1a18,
  43. .pdma = {
  44. .rx_ptr = 0x0900,
  45. .rx_cnt_cfg = 0x0904,
  46. .pcrx_ptr = 0x0908,
  47. .glo_cfg = 0x0a04,
  48. .rst_idx = 0x0a08,
  49. .delay_irq = 0x0a0c,
  50. .irq_status = 0x0a20,
  51. .irq_mask = 0x0a28,
  52. .adma_rx_dbg0 = 0x0a38,
  53. .int_grp = 0x0a50,
  54. },
  55. .qdma = {
  56. .qtx_cfg = 0x1800,
  57. .qtx_sch = 0x1804,
  58. .rx_ptr = 0x1900,
  59. .rx_cnt_cfg = 0x1904,
  60. .qcrx_ptr = 0x1908,
  61. .glo_cfg = 0x1a04,
  62. .rst_idx = 0x1a08,
  63. .delay_irq = 0x1a0c,
  64. .fc_th = 0x1a10,
  65. .tx_sch_rate = 0x1a14,
  66. .int_grp = 0x1a20,
  67. .hred = 0x1a44,
  68. .ctx_ptr = 0x1b00,
  69. .dtx_ptr = 0x1b04,
  70. .crx_ptr = 0x1b10,
  71. .drx_ptr = 0x1b14,
  72. .fq_head = 0x1b20,
  73. .fq_tail = 0x1b24,
  74. .fq_count = 0x1b28,
  75. .fq_blen = 0x1b2c,
  76. },
  77. .gdm1_cnt = 0x2400,
  78. .gdma_to_ppe = {
  79. [0] = 0x4444,
  80. },
  81. .ppe_base = 0x0c00,
  82. .wdma_base = {
  83. [0] = 0x2800,
  84. [1] = 0x2c00,
  85. },
  86. .pse_iq_sta = 0x0110,
  87. .pse_oq_sta = 0x0118,
  88. };
  89. static const struct mtk_reg_map mt7628_reg_map = {
  90. .tx_irq_mask = 0x0a28,
  91. .tx_irq_status = 0x0a20,
  92. .pdma = {
  93. .rx_ptr = 0x0900,
  94. .rx_cnt_cfg = 0x0904,
  95. .pcrx_ptr = 0x0908,
  96. .glo_cfg = 0x0a04,
  97. .rst_idx = 0x0a08,
  98. .delay_irq = 0x0a0c,
  99. .irq_status = 0x0a20,
  100. .irq_mask = 0x0a28,
  101. .int_grp = 0x0a50,
  102. },
  103. };
  104. static const struct mtk_reg_map mt7986_reg_map = {
  105. .tx_irq_mask = 0x461c,
  106. .tx_irq_status = 0x4618,
  107. .pdma = {
  108. .rx_ptr = 0x4100,
  109. .rx_cnt_cfg = 0x4104,
  110. .pcrx_ptr = 0x4108,
  111. .glo_cfg = 0x4204,
  112. .rst_idx = 0x4208,
  113. .delay_irq = 0x420c,
  114. .irq_status = 0x4220,
  115. .irq_mask = 0x4228,
  116. .adma_rx_dbg0 = 0x4238,
  117. .int_grp = 0x4250,
  118. },
  119. .qdma = {
  120. .qtx_cfg = 0x4400,
  121. .qtx_sch = 0x4404,
  122. .rx_ptr = 0x4500,
  123. .rx_cnt_cfg = 0x4504,
  124. .qcrx_ptr = 0x4508,
  125. .glo_cfg = 0x4604,
  126. .rst_idx = 0x4608,
  127. .delay_irq = 0x460c,
  128. .fc_th = 0x4610,
  129. .int_grp = 0x4620,
  130. .hred = 0x4644,
  131. .ctx_ptr = 0x4700,
  132. .dtx_ptr = 0x4704,
  133. .crx_ptr = 0x4710,
  134. .drx_ptr = 0x4714,
  135. .fq_head = 0x4720,
  136. .fq_tail = 0x4724,
  137. .fq_count = 0x4728,
  138. .fq_blen = 0x472c,
  139. .tx_sch_rate = 0x4798,
  140. },
  141. .gdm1_cnt = 0x1c00,
  142. .gdma_to_ppe = {
  143. [0] = 0x3333,
  144. [1] = 0x4444,
  145. },
  146. .ppe_base = 0x2000,
  147. .wdma_base = {
  148. [0] = 0x4800,
  149. [1] = 0x4c00,
  150. },
  151. .pse_iq_sta = 0x0180,
  152. .pse_oq_sta = 0x01a0,
  153. };
  154. static const struct mtk_reg_map mt7988_reg_map = {
  155. .tx_irq_mask = 0x461c,
  156. .tx_irq_status = 0x4618,
  157. .pdma = {
  158. .rx_ptr = 0x6900,
  159. .rx_cnt_cfg = 0x6904,
  160. .pcrx_ptr = 0x6908,
  161. .glo_cfg = 0x6a04,
  162. .rst_idx = 0x6a08,
  163. .delay_irq = 0x6a0c,
  164. .irq_status = 0x6a20,
  165. .irq_mask = 0x6a28,
  166. .adma_rx_dbg0 = 0x6a38,
  167. .int_grp = 0x6a50,
  168. },
  169. .qdma = {
  170. .qtx_cfg = 0x4400,
  171. .qtx_sch = 0x4404,
  172. .rx_ptr = 0x4500,
  173. .rx_cnt_cfg = 0x4504,
  174. .qcrx_ptr = 0x4508,
  175. .glo_cfg = 0x4604,
  176. .rst_idx = 0x4608,
  177. .delay_irq = 0x460c,
  178. .fc_th = 0x4610,
  179. .int_grp = 0x4620,
  180. .hred = 0x4644,
  181. .ctx_ptr = 0x4700,
  182. .dtx_ptr = 0x4704,
  183. .crx_ptr = 0x4710,
  184. .drx_ptr = 0x4714,
  185. .fq_head = 0x4720,
  186. .fq_tail = 0x4724,
  187. .fq_count = 0x4728,
  188. .fq_blen = 0x472c,
  189. .tx_sch_rate = 0x4798,
  190. },
  191. .gdm1_cnt = 0x1c00,
  192. .gdma_to_ppe = {
  193. [0] = 0x3333,
  194. [1] = 0x4444,
  195. [2] = 0xcccc,
  196. },
  197. .ppe_base = 0x2000,
  198. .wdma_base = {
  199. [0] = 0x4800,
  200. [1] = 0x4c00,
  201. [2] = 0x5000,
  202. },
  203. .pse_iq_sta = 0x0180,
  204. .pse_oq_sta = 0x01a0,
  205. };
  206. /* strings used by ethtool */
  207. static const struct mtk_ethtool_stats {
  208. char str[ETH_GSTRING_LEN];
  209. u32 offset;
  210. } mtk_ethtool_stats[] = {
  211. MTK_ETHTOOL_STAT(tx_bytes),
  212. MTK_ETHTOOL_STAT(tx_packets),
  213. MTK_ETHTOOL_STAT(tx_skip),
  214. MTK_ETHTOOL_STAT(tx_collisions),
  215. MTK_ETHTOOL_STAT(rx_bytes),
  216. MTK_ETHTOOL_STAT(rx_packets),
  217. MTK_ETHTOOL_STAT(rx_overflow),
  218. MTK_ETHTOOL_STAT(rx_fcs_errors),
  219. MTK_ETHTOOL_STAT(rx_short_errors),
  220. MTK_ETHTOOL_STAT(rx_long_errors),
  221. MTK_ETHTOOL_STAT(rx_checksum_errors),
  222. MTK_ETHTOOL_STAT(rx_flow_control_packets),
  223. MTK_ETHTOOL_XDP_STAT(rx_xdp_redirect),
  224. MTK_ETHTOOL_XDP_STAT(rx_xdp_pass),
  225. MTK_ETHTOOL_XDP_STAT(rx_xdp_drop),
  226. MTK_ETHTOOL_XDP_STAT(rx_xdp_tx),
  227. MTK_ETHTOOL_XDP_STAT(rx_xdp_tx_errors),
  228. MTK_ETHTOOL_XDP_STAT(tx_xdp_xmit),
  229. MTK_ETHTOOL_XDP_STAT(tx_xdp_xmit_errors),
  230. };
  231. static const char * const mtk_clks_source_name[] = {
  232. "ethif",
  233. "sgmiitop",
  234. "esw",
  235. "gp0",
  236. "gp1",
  237. "gp2",
  238. "gp3",
  239. "xgp1",
  240. "xgp2",
  241. "xgp3",
  242. "crypto",
  243. "fe",
  244. "trgpll",
  245. "sgmii_tx250m",
  246. "sgmii_rx250m",
  247. "sgmii_cdr_ref",
  248. "sgmii_cdr_fb",
  249. "sgmii2_tx250m",
  250. "sgmii2_rx250m",
  251. "sgmii2_cdr_ref",
  252. "sgmii2_cdr_fb",
  253. "sgmii_ck",
  254. "eth2pll",
  255. "wocpu0",
  256. "wocpu1",
  257. "netsys0",
  258. "netsys1",
  259. "ethwarp_wocpu2",
  260. "ethwarp_wocpu1",
  261. "ethwarp_wocpu0",
  262. "top_sgm0_sel",
  263. "top_sgm1_sel",
  264. "top_eth_gmii_sel",
  265. "top_eth_refck_50m_sel",
  266. "top_eth_sys_200m_sel",
  267. "top_eth_sys_sel",
  268. "top_eth_xgmii_sel",
  269. "top_eth_mii_sel",
  270. "top_netsys_sel",
  271. "top_netsys_500m_sel",
  272. "top_netsys_pao_2x_sel",
  273. "top_netsys_sync_250m_sel",
  274. "top_netsys_ppefb_250m_sel",
  275. "top_netsys_warp_sel",
  276. };
  277. void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
  278. {
  279. __raw_writel(val, eth->base + reg);
  280. }
  281. u32 mtk_r32(struct mtk_eth *eth, unsigned reg)
  282. {
  283. return __raw_readl(eth->base + reg);
  284. }
  285. u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned int reg)
  286. {
  287. u32 val;
  288. val = mtk_r32(eth, reg);
  289. val &= ~mask;
  290. val |= set;
  291. mtk_w32(eth, val, reg);
  292. return reg;
  293. }
  294. static int mtk_mdio_busy_wait(struct mtk_eth *eth)
  295. {
  296. unsigned long t_start = jiffies;
  297. while (1) {
  298. if (!(mtk_r32(eth, MTK_PHY_IAC) & PHY_IAC_ACCESS))
  299. return 0;
  300. if (time_after(jiffies, t_start + PHY_IAC_TIMEOUT))
  301. break;
  302. cond_resched();
  303. }
  304. dev_err(eth->dev, "mdio: MDIO timeout\n");
  305. return -ETIMEDOUT;
  306. }
  307. static int _mtk_mdio_write_c22(struct mtk_eth *eth, u32 phy_addr, u32 phy_reg,
  308. u32 write_data)
  309. {
  310. int ret;
  311. ret = mtk_mdio_busy_wait(eth);
  312. if (ret < 0)
  313. return ret;
  314. mtk_w32(eth, PHY_IAC_ACCESS |
  315. PHY_IAC_START_C22 |
  316. PHY_IAC_CMD_WRITE |
  317. PHY_IAC_REG(phy_reg) |
  318. PHY_IAC_ADDR(phy_addr) |
  319. PHY_IAC_DATA(write_data),
  320. MTK_PHY_IAC);
  321. ret = mtk_mdio_busy_wait(eth);
  322. if (ret < 0)
  323. return ret;
  324. return 0;
  325. }
  326. static int _mtk_mdio_write_c45(struct mtk_eth *eth, u32 phy_addr,
  327. u32 devad, u32 phy_reg, u32 write_data)
  328. {
  329. int ret;
  330. ret = mtk_mdio_busy_wait(eth);
  331. if (ret < 0)
  332. return ret;
  333. mtk_w32(eth, PHY_IAC_ACCESS |
  334. PHY_IAC_START_C45 |
  335. PHY_IAC_CMD_C45_ADDR |
  336. PHY_IAC_REG(devad) |
  337. PHY_IAC_ADDR(phy_addr) |
  338. PHY_IAC_DATA(phy_reg),
  339. MTK_PHY_IAC);
  340. ret = mtk_mdio_busy_wait(eth);
  341. if (ret < 0)
  342. return ret;
  343. mtk_w32(eth, PHY_IAC_ACCESS |
  344. PHY_IAC_START_C45 |
  345. PHY_IAC_CMD_WRITE |
  346. PHY_IAC_REG(devad) |
  347. PHY_IAC_ADDR(phy_addr) |
  348. PHY_IAC_DATA(write_data),
  349. MTK_PHY_IAC);
  350. ret = mtk_mdio_busy_wait(eth);
  351. if (ret < 0)
  352. return ret;
  353. return 0;
  354. }
  355. static int _mtk_mdio_read_c22(struct mtk_eth *eth, u32 phy_addr, u32 phy_reg)
  356. {
  357. int ret;
  358. ret = mtk_mdio_busy_wait(eth);
  359. if (ret < 0)
  360. return ret;
  361. mtk_w32(eth, PHY_IAC_ACCESS |
  362. PHY_IAC_START_C22 |
  363. PHY_IAC_CMD_C22_READ |
  364. PHY_IAC_REG(phy_reg) |
  365. PHY_IAC_ADDR(phy_addr),
  366. MTK_PHY_IAC);
  367. ret = mtk_mdio_busy_wait(eth);
  368. if (ret < 0)
  369. return ret;
  370. return mtk_r32(eth, MTK_PHY_IAC) & PHY_IAC_DATA_MASK;
  371. }
  372. static int _mtk_mdio_read_c45(struct mtk_eth *eth, u32 phy_addr,
  373. u32 devad, u32 phy_reg)
  374. {
  375. int ret;
  376. ret = mtk_mdio_busy_wait(eth);
  377. if (ret < 0)
  378. return ret;
  379. mtk_w32(eth, PHY_IAC_ACCESS |
  380. PHY_IAC_START_C45 |
  381. PHY_IAC_CMD_C45_ADDR |
  382. PHY_IAC_REG(devad) |
  383. PHY_IAC_ADDR(phy_addr) |
  384. PHY_IAC_DATA(phy_reg),
  385. MTK_PHY_IAC);
  386. ret = mtk_mdio_busy_wait(eth);
  387. if (ret < 0)
  388. return ret;
  389. mtk_w32(eth, PHY_IAC_ACCESS |
  390. PHY_IAC_START_C45 |
  391. PHY_IAC_CMD_C45_READ |
  392. PHY_IAC_REG(devad) |
  393. PHY_IAC_ADDR(phy_addr),
  394. MTK_PHY_IAC);
  395. ret = mtk_mdio_busy_wait(eth);
  396. if (ret < 0)
  397. return ret;
  398. return mtk_r32(eth, MTK_PHY_IAC) & PHY_IAC_DATA_MASK;
  399. }
  400. static int mtk_mdio_write_c22(struct mii_bus *bus, int phy_addr,
  401. int phy_reg, u16 val)
  402. {
  403. struct mtk_eth *eth = bus->priv;
  404. return _mtk_mdio_write_c22(eth, phy_addr, phy_reg, val);
  405. }
  406. static int mtk_mdio_write_c45(struct mii_bus *bus, int phy_addr,
  407. int devad, int phy_reg, u16 val)
  408. {
  409. struct mtk_eth *eth = bus->priv;
  410. return _mtk_mdio_write_c45(eth, phy_addr, devad, phy_reg, val);
  411. }
  412. static int mtk_mdio_read_c22(struct mii_bus *bus, int phy_addr, int phy_reg)
  413. {
  414. struct mtk_eth *eth = bus->priv;
  415. return _mtk_mdio_read_c22(eth, phy_addr, phy_reg);
  416. }
  417. static int mtk_mdio_read_c45(struct mii_bus *bus, int phy_addr, int devad,
  418. int phy_reg)
  419. {
  420. struct mtk_eth *eth = bus->priv;
  421. return _mtk_mdio_read_c45(eth, phy_addr, devad, phy_reg);
  422. }
  423. static int mt7621_gmac0_rgmii_adjust(struct mtk_eth *eth,
  424. phy_interface_t interface)
  425. {
  426. u32 val;
  427. val = (interface == PHY_INTERFACE_MODE_TRGMII) ?
  428. ETHSYS_TRGMII_MT7621_DDR_PLL : 0;
  429. regmap_update_bits(eth->ethsys, ETHSYS_CLKCFG0,
  430. ETHSYS_TRGMII_MT7621_MASK, val);
  431. return 0;
  432. }
  433. static void mtk_gmac0_rgmii_adjust(struct mtk_eth *eth,
  434. phy_interface_t interface)
  435. {
  436. int ret;
  437. if (interface == PHY_INTERFACE_MODE_TRGMII) {
  438. mtk_w32(eth, TRGMII_MODE, INTF_MODE);
  439. ret = clk_set_rate(eth->clks[MTK_CLK_TRGPLL], 500000000);
  440. if (ret)
  441. dev_err(eth->dev, "Failed to set trgmii pll: %d\n", ret);
  442. return;
  443. }
  444. dev_err(eth->dev, "Missing PLL configuration, ethernet may not work\n");
  445. }
  446. static void mtk_setup_bridge_switch(struct mtk_eth *eth)
  447. {
  448. /* Force Port1 XGMAC Link Up */
  449. mtk_m32(eth, 0, MTK_XGMAC_FORCE_MODE(MTK_GMAC1_ID),
  450. MTK_XGMAC_STS(MTK_GMAC1_ID));
  451. /* Adjust GSW bridge IPG to 11 */
  452. mtk_m32(eth, GSWTX_IPG_MASK | GSWRX_IPG_MASK,
  453. (GSW_IPG_11 << GSWTX_IPG_SHIFT) |
  454. (GSW_IPG_11 << GSWRX_IPG_SHIFT),
  455. MTK_GSW_CFG);
  456. }
  457. static struct phylink_pcs *mtk_mac_select_pcs(struct phylink_config *config,
  458. phy_interface_t interface)
  459. {
  460. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  461. phylink_config);
  462. struct mtk_eth *eth = mac->hw;
  463. unsigned int sid;
  464. if (interface == PHY_INTERFACE_MODE_SGMII ||
  465. phy_interface_mode_is_8023z(interface)) {
  466. sid = (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_SGMII)) ?
  467. 0 : mac->id;
  468. return eth->sgmii_pcs[sid];
  469. }
  470. return NULL;
  471. }
  472. static int mtk_mac_prepare(struct phylink_config *config, unsigned int mode,
  473. phy_interface_t iface)
  474. {
  475. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  476. phylink_config);
  477. struct mtk_eth *eth = mac->hw;
  478. if (mtk_interface_mode_is_xgmii(eth, iface) &&
  479. mac->id != MTK_GMAC1_ID) {
  480. mtk_m32(mac->hw, XMAC_MCR_TRX_DISABLE,
  481. XMAC_MCR_TRX_DISABLE, MTK_XMAC_MCR(mac->id));
  482. mtk_m32(mac->hw, MTK_XGMAC_FORCE_MODE(mac->id) |
  483. MTK_XGMAC_FORCE_LINK(mac->id),
  484. MTK_XGMAC_FORCE_MODE(mac->id), MTK_XGMAC_STS(mac->id));
  485. }
  486. return 0;
  487. }
  488. static void mtk_mac_config(struct phylink_config *config, unsigned int mode,
  489. const struct phylink_link_state *state)
  490. {
  491. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  492. phylink_config);
  493. struct mtk_eth *eth = mac->hw;
  494. int val, ge_mode, err = 0;
  495. u32 i;
  496. /* MT76x8 has no hardware settings between for the MAC */
  497. if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
  498. mac->interface != state->interface) {
  499. /* Setup soc pin functions */
  500. switch (state->interface) {
  501. case PHY_INTERFACE_MODE_TRGMII:
  502. case PHY_INTERFACE_MODE_RGMII_TXID:
  503. case PHY_INTERFACE_MODE_RGMII_RXID:
  504. case PHY_INTERFACE_MODE_RGMII_ID:
  505. case PHY_INTERFACE_MODE_RGMII:
  506. case PHY_INTERFACE_MODE_MII:
  507. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RGMII)) {
  508. err = mtk_gmac_rgmii_path_setup(eth, mac->id);
  509. if (err)
  510. goto init_err;
  511. }
  512. break;
  513. case PHY_INTERFACE_MODE_1000BASEX:
  514. case PHY_INTERFACE_MODE_2500BASEX:
  515. case PHY_INTERFACE_MODE_SGMII:
  516. err = mtk_gmac_sgmii_path_setup(eth, mac->id);
  517. if (err)
  518. goto init_err;
  519. break;
  520. case PHY_INTERFACE_MODE_GMII:
  521. if (MTK_HAS_CAPS(eth->soc->caps, MTK_GEPHY)) {
  522. err = mtk_gmac_gephy_path_setup(eth, mac->id);
  523. if (err)
  524. goto init_err;
  525. }
  526. break;
  527. case PHY_INTERFACE_MODE_INTERNAL:
  528. if (mac->id == MTK_GMAC2_ID &&
  529. MTK_HAS_CAPS(eth->soc->caps, MTK_2P5GPHY)) {
  530. err = mtk_gmac_2p5gphy_path_setup(eth, mac->id);
  531. if (err)
  532. goto init_err;
  533. }
  534. break;
  535. default:
  536. goto err_phy;
  537. }
  538. /* Setup clock for 1st gmac */
  539. if (!mac->id && state->interface != PHY_INTERFACE_MODE_SGMII &&
  540. !phy_interface_mode_is_8023z(state->interface) &&
  541. MTK_HAS_CAPS(mac->hw->soc->caps, MTK_GMAC1_TRGMII)) {
  542. if (MTK_HAS_CAPS(mac->hw->soc->caps,
  543. MTK_TRGMII_MT7621_CLK)) {
  544. if (mt7621_gmac0_rgmii_adjust(mac->hw,
  545. state->interface))
  546. goto err_phy;
  547. } else {
  548. mtk_gmac0_rgmii_adjust(mac->hw,
  549. state->interface);
  550. /* mt7623_pad_clk_setup */
  551. for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
  552. mtk_w32(mac->hw,
  553. TD_DM_DRVP(8) | TD_DM_DRVN(8),
  554. TRGMII_TD_ODT(i));
  555. /* Assert/release MT7623 RXC reset */
  556. mtk_m32(mac->hw, 0, RXC_RST | RXC_DQSISEL,
  557. TRGMII_RCK_CTRL);
  558. mtk_m32(mac->hw, RXC_RST, 0, TRGMII_RCK_CTRL);
  559. }
  560. }
  561. switch (state->interface) {
  562. case PHY_INTERFACE_MODE_MII:
  563. case PHY_INTERFACE_MODE_GMII:
  564. ge_mode = 1;
  565. break;
  566. default:
  567. ge_mode = 0;
  568. break;
  569. }
  570. /* put the gmac into the right mode */
  571. regmap_read(eth->ethsys, ETHSYS_SYSCFG0, &val);
  572. val &= ~SYSCFG0_GE_MODE(SYSCFG0_GE_MASK, mac->id);
  573. val |= SYSCFG0_GE_MODE(ge_mode, mac->id);
  574. regmap_write(eth->ethsys, ETHSYS_SYSCFG0, val);
  575. mac->interface = state->interface;
  576. }
  577. /* SGMII */
  578. if (state->interface == PHY_INTERFACE_MODE_SGMII ||
  579. phy_interface_mode_is_8023z(state->interface)) {
  580. /* The path GMAC to SGMII will be enabled once the SGMIISYS is
  581. * being setup done.
  582. */
  583. regmap_read(eth->ethsys, ETHSYS_SYSCFG0, &val);
  584. regmap_update_bits(eth->ethsys, ETHSYS_SYSCFG0,
  585. SYSCFG0_SGMII_MASK,
  586. ~(u32)SYSCFG0_SGMII_MASK);
  587. /* Save the syscfg0 value for mac_finish */
  588. mac->syscfg0 = val;
  589. } else if (phylink_autoneg_inband(mode)) {
  590. dev_err(eth->dev,
  591. "In-band mode not supported in non SGMII mode!\n");
  592. return;
  593. }
  594. /* Setup gmac */
  595. if (mtk_interface_mode_is_xgmii(eth, state->interface)) {
  596. mtk_w32(mac->hw, MTK_GDMA_XGDM_SEL, MTK_GDMA_EG_CTRL(mac->id));
  597. mtk_w32(mac->hw, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(mac->id));
  598. if (mac->id == MTK_GMAC1_ID)
  599. mtk_setup_bridge_switch(eth);
  600. }
  601. return;
  602. err_phy:
  603. dev_err(eth->dev, "%s: GMAC%d mode %s not supported!\n", __func__,
  604. mac->id, phy_modes(state->interface));
  605. return;
  606. init_err:
  607. dev_err(eth->dev, "%s: GMAC%d mode %s err: %d!\n", __func__,
  608. mac->id, phy_modes(state->interface), err);
  609. }
  610. static int mtk_mac_finish(struct phylink_config *config, unsigned int mode,
  611. phy_interface_t interface)
  612. {
  613. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  614. phylink_config);
  615. struct mtk_eth *eth = mac->hw;
  616. u32 mcr_cur, mcr_new;
  617. /* Enable SGMII */
  618. if (interface == PHY_INTERFACE_MODE_SGMII ||
  619. phy_interface_mode_is_8023z(interface))
  620. regmap_update_bits(eth->ethsys, ETHSYS_SYSCFG0,
  621. SYSCFG0_SGMII_MASK, mac->syscfg0);
  622. /* Setup gmac */
  623. mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
  624. mcr_new = mcr_cur;
  625. mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
  626. MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_RX_FIFO_CLR_DIS;
  627. /* Only update control register when needed! */
  628. if (mcr_new != mcr_cur)
  629. mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
  630. return 0;
  631. }
  632. static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
  633. phy_interface_t interface)
  634. {
  635. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  636. phylink_config);
  637. if (!mtk_interface_mode_is_xgmii(mac->hw, interface)) {
  638. /* GMAC modes */
  639. mtk_m32(mac->hw,
  640. MAC_MCR_TX_EN | MAC_MCR_RX_EN | MAC_MCR_FORCE_LINK, 0,
  641. MTK_MAC_MCR(mac->id));
  642. } else if (mac->id != MTK_GMAC1_ID) {
  643. /* XGMAC except for built-in switch */
  644. mtk_m32(mac->hw, XMAC_MCR_TRX_DISABLE, XMAC_MCR_TRX_DISABLE,
  645. MTK_XMAC_MCR(mac->id));
  646. mtk_m32(mac->hw, MTK_XGMAC_FORCE_LINK(mac->id), 0,
  647. MTK_XGMAC_STS(mac->id));
  648. }
  649. }
  650. static void mtk_set_queue_speed(struct mtk_eth *eth, unsigned int idx,
  651. int speed)
  652. {
  653. const struct mtk_soc_data *soc = eth->soc;
  654. u32 ofs, val;
  655. if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA))
  656. return;
  657. val = MTK_QTX_SCH_MIN_RATE_EN |
  658. /* minimum: 10 Mbps */
  659. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
  660. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
  661. MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
  662. if (mtk_is_netsys_v1(eth))
  663. val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
  664. if (IS_ENABLED(CONFIG_SOC_MT7621)) {
  665. switch (speed) {
  666. case SPEED_10:
  667. val |= MTK_QTX_SCH_MAX_RATE_EN |
  668. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_MAN, 103) |
  669. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_EXP, 2) |
  670. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_WEIGHT, 1);
  671. break;
  672. case SPEED_100:
  673. val |= MTK_QTX_SCH_MAX_RATE_EN |
  674. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_MAN, 103) |
  675. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_EXP, 3) |
  676. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_WEIGHT, 1);
  677. break;
  678. case SPEED_1000:
  679. val |= MTK_QTX_SCH_MAX_RATE_EN |
  680. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_MAN, 105) |
  681. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_EXP, 4) |
  682. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_WEIGHT, 10);
  683. break;
  684. default:
  685. break;
  686. }
  687. } else {
  688. switch (speed) {
  689. case SPEED_10:
  690. val |= MTK_QTX_SCH_MAX_RATE_EN |
  691. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_MAN, 1) |
  692. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_EXP, 4) |
  693. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_WEIGHT, 1);
  694. break;
  695. case SPEED_100:
  696. val |= MTK_QTX_SCH_MAX_RATE_EN |
  697. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_MAN, 1) |
  698. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_EXP, 5) |
  699. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_WEIGHT, 1);
  700. break;
  701. case SPEED_1000:
  702. val |= MTK_QTX_SCH_MAX_RATE_EN |
  703. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_MAN, 1) |
  704. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_EXP, 6) |
  705. FIELD_PREP(MTK_QTX_SCH_MAX_RATE_WEIGHT, 10);
  706. break;
  707. default:
  708. break;
  709. }
  710. }
  711. ofs = MTK_QTX_OFFSET * idx;
  712. mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
  713. }
  714. static void mtk_gdm_mac_link_up(struct mtk_mac *mac,
  715. struct phy_device *phy,
  716. unsigned int mode, phy_interface_t interface,
  717. int speed, int duplex, bool tx_pause,
  718. bool rx_pause)
  719. {
  720. u32 mcr;
  721. mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
  722. mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
  723. MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
  724. MAC_MCR_FORCE_RX_FC);
  725. /* Configure speed */
  726. mac->speed = speed;
  727. switch (speed) {
  728. case SPEED_2500:
  729. case SPEED_1000:
  730. mcr |= MAC_MCR_SPEED_1000;
  731. break;
  732. case SPEED_100:
  733. mcr |= MAC_MCR_SPEED_100;
  734. break;
  735. }
  736. /* Configure duplex */
  737. if (duplex == DUPLEX_FULL)
  738. mcr |= MAC_MCR_FORCE_DPX;
  739. /* Configure pause modes - phylink will avoid these for half duplex */
  740. if (tx_pause)
  741. mcr |= MAC_MCR_FORCE_TX_FC;
  742. if (rx_pause)
  743. mcr |= MAC_MCR_FORCE_RX_FC;
  744. mcr |= MAC_MCR_TX_EN | MAC_MCR_RX_EN | MAC_MCR_FORCE_LINK;
  745. mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
  746. }
  747. static void mtk_xgdm_mac_link_up(struct mtk_mac *mac,
  748. struct phy_device *phy,
  749. unsigned int mode, phy_interface_t interface,
  750. int speed, int duplex, bool tx_pause,
  751. bool rx_pause)
  752. {
  753. u32 mcr;
  754. if (mac->id == MTK_GMAC1_ID)
  755. return;
  756. /* Eliminate the interference(before link-up) caused by PHY noise */
  757. mtk_m32(mac->hw, XMAC_LOGIC_RST, 0, MTK_XMAC_LOGIC_RST(mac->id));
  758. mdelay(20);
  759. mtk_m32(mac->hw, XMAC_GLB_CNTCLR, XMAC_GLB_CNTCLR,
  760. MTK_XMAC_CNT_CTRL(mac->id));
  761. mtk_m32(mac->hw, MTK_XGMAC_FORCE_LINK(mac->id),
  762. MTK_XGMAC_FORCE_LINK(mac->id), MTK_XGMAC_STS(mac->id));
  763. mcr = mtk_r32(mac->hw, MTK_XMAC_MCR(mac->id));
  764. mcr &= ~(XMAC_MCR_FORCE_TX_FC | XMAC_MCR_FORCE_RX_FC |
  765. XMAC_MCR_TRX_DISABLE);
  766. /* Configure pause modes -
  767. * phylink will avoid these for half duplex
  768. */
  769. if (tx_pause)
  770. mcr |= XMAC_MCR_FORCE_TX_FC;
  771. if (rx_pause)
  772. mcr |= XMAC_MCR_FORCE_RX_FC;
  773. mtk_w32(mac->hw, mcr, MTK_XMAC_MCR(mac->id));
  774. }
  775. static void mtk_mac_link_up(struct phylink_config *config,
  776. struct phy_device *phy,
  777. unsigned int mode, phy_interface_t interface,
  778. int speed, int duplex, bool tx_pause, bool rx_pause)
  779. {
  780. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  781. phylink_config);
  782. if (mtk_interface_mode_is_xgmii(mac->hw, interface))
  783. mtk_xgdm_mac_link_up(mac, phy, mode, interface, speed, duplex,
  784. tx_pause, rx_pause);
  785. else
  786. mtk_gdm_mac_link_up(mac, phy, mode, interface, speed, duplex,
  787. tx_pause, rx_pause);
  788. }
  789. static void mtk_mac_disable_tx_lpi(struct phylink_config *config)
  790. {
  791. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  792. phylink_config);
  793. struct mtk_eth *eth = mac->hw;
  794. mtk_m32(eth, MAC_MCR_EEE100M | MAC_MCR_EEE1G, 0, MTK_MAC_MCR(mac->id));
  795. }
  796. static int mtk_mac_enable_tx_lpi(struct phylink_config *config, u32 timer,
  797. bool tx_clk_stop)
  798. {
  799. struct mtk_mac *mac = container_of(config, struct mtk_mac,
  800. phylink_config);
  801. struct mtk_eth *eth = mac->hw;
  802. u32 val;
  803. if (mtk_interface_mode_is_xgmii(eth, mac->interface))
  804. return -EOPNOTSUPP;
  805. /* Tx idle timer in ms */
  806. timer = DIV_ROUND_UP(timer, 1000);
  807. /* If the timer is zero, then set LPI_MODE, which allows the
  808. * system to enter LPI mode immediately rather than waiting for
  809. * the LPI threshold.
  810. */
  811. if (!timer)
  812. val = MAC_EEE_LPI_MODE;
  813. else if (FIELD_FIT(MAC_EEE_LPI_TXIDLE_THD, timer))
  814. val = FIELD_PREP(MAC_EEE_LPI_TXIDLE_THD, timer);
  815. else
  816. val = MAC_EEE_LPI_TXIDLE_THD;
  817. if (tx_clk_stop)
  818. val |= MAC_EEE_CKG_TXIDLE;
  819. /* PHY Wake-up time, this field does not have a reset value, so use the
  820. * reset value from MT7531 (36us for 100M and 17us for 1000M).
  821. */
  822. val |= FIELD_PREP(MAC_EEE_WAKEUP_TIME_1000, 17) |
  823. FIELD_PREP(MAC_EEE_WAKEUP_TIME_100, 36);
  824. mtk_w32(eth, val, MTK_MAC_EEECR(mac->id));
  825. mtk_m32(eth, 0, MAC_MCR_EEE100M | MAC_MCR_EEE1G, MTK_MAC_MCR(mac->id));
  826. return 0;
  827. }
  828. static const struct phylink_mac_ops mtk_phylink_ops = {
  829. .mac_prepare = mtk_mac_prepare,
  830. .mac_select_pcs = mtk_mac_select_pcs,
  831. .mac_config = mtk_mac_config,
  832. .mac_finish = mtk_mac_finish,
  833. .mac_link_down = mtk_mac_link_down,
  834. .mac_link_up = mtk_mac_link_up,
  835. .mac_disable_tx_lpi = mtk_mac_disable_tx_lpi,
  836. .mac_enable_tx_lpi = mtk_mac_enable_tx_lpi,
  837. };
  838. static void mtk_mdio_config(struct mtk_eth *eth)
  839. {
  840. u32 val;
  841. /* Configure MDC Divider */
  842. val = FIELD_PREP(PPSC_MDC_CFG, eth->mdc_divider);
  843. /* Configure MDC Turbo Mode */
  844. if (mtk_is_netsys_v3_or_greater(eth))
  845. mtk_m32(eth, 0, MISC_MDC_TURBO, MTK_MAC_MISC_V3);
  846. else
  847. val |= PPSC_MDC_TURBO;
  848. mtk_m32(eth, PPSC_MDC_CFG, val, MTK_PPSC);
  849. }
  850. static int mtk_mdio_init(struct mtk_eth *eth)
  851. {
  852. unsigned int max_clk = 2500000;
  853. struct device_node *mii_np;
  854. int ret;
  855. u32 val;
  856. mii_np = of_get_available_child_by_name(eth->dev->of_node, "mdio-bus");
  857. if (!mii_np) {
  858. dev_err(eth->dev, "no %s child node found", "mdio-bus");
  859. return -ENODEV;
  860. }
  861. eth->mii_bus = devm_mdiobus_alloc(eth->dev);
  862. if (!eth->mii_bus) {
  863. ret = -ENOMEM;
  864. goto err_put_node;
  865. }
  866. eth->mii_bus->name = "mdio";
  867. eth->mii_bus->read = mtk_mdio_read_c22;
  868. eth->mii_bus->write = mtk_mdio_write_c22;
  869. eth->mii_bus->read_c45 = mtk_mdio_read_c45;
  870. eth->mii_bus->write_c45 = mtk_mdio_write_c45;
  871. eth->mii_bus->priv = eth;
  872. eth->mii_bus->parent = eth->dev;
  873. snprintf(eth->mii_bus->id, MII_BUS_ID_SIZE, "%pOFn", mii_np);
  874. if (!of_property_read_u32(mii_np, "clock-frequency", &val)) {
  875. if (val > MDC_MAX_FREQ || val < MDC_MAX_FREQ / MDC_MAX_DIVIDER) {
  876. dev_err(eth->dev, "MDIO clock frequency out of range");
  877. ret = -EINVAL;
  878. goto err_put_node;
  879. }
  880. max_clk = val;
  881. }
  882. eth->mdc_divider = min_t(unsigned int, DIV_ROUND_UP(MDC_MAX_FREQ, max_clk), 63);
  883. mtk_mdio_config(eth);
  884. dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / eth->mdc_divider);
  885. ret = of_mdiobus_register(eth->mii_bus, mii_np);
  886. err_put_node:
  887. of_node_put(mii_np);
  888. return ret;
  889. }
  890. static void mtk_mdio_cleanup(struct mtk_eth *eth)
  891. {
  892. if (!eth->mii_bus)
  893. return;
  894. mdiobus_unregister(eth->mii_bus);
  895. }
  896. static inline void mtk_tx_irq_disable(struct mtk_eth *eth, u32 mask)
  897. {
  898. unsigned long flags;
  899. u32 val;
  900. spin_lock_irqsave(&eth->tx_irq_lock, flags);
  901. val = mtk_r32(eth, eth->soc->reg_map->tx_irq_mask);
  902. mtk_w32(eth, val & ~mask, eth->soc->reg_map->tx_irq_mask);
  903. spin_unlock_irqrestore(&eth->tx_irq_lock, flags);
  904. }
  905. static inline void mtk_tx_irq_enable(struct mtk_eth *eth, u32 mask)
  906. {
  907. unsigned long flags;
  908. u32 val;
  909. spin_lock_irqsave(&eth->tx_irq_lock, flags);
  910. val = mtk_r32(eth, eth->soc->reg_map->tx_irq_mask);
  911. mtk_w32(eth, val | mask, eth->soc->reg_map->tx_irq_mask);
  912. spin_unlock_irqrestore(&eth->tx_irq_lock, flags);
  913. }
  914. static inline void mtk_rx_irq_disable(struct mtk_eth *eth, u32 mask)
  915. {
  916. unsigned long flags;
  917. u32 val;
  918. spin_lock_irqsave(&eth->rx_irq_lock, flags);
  919. val = mtk_r32(eth, eth->soc->reg_map->pdma.irq_mask);
  920. mtk_w32(eth, val & ~mask, eth->soc->reg_map->pdma.irq_mask);
  921. spin_unlock_irqrestore(&eth->rx_irq_lock, flags);
  922. }
  923. static inline void mtk_rx_irq_enable(struct mtk_eth *eth, u32 mask)
  924. {
  925. unsigned long flags;
  926. u32 val;
  927. spin_lock_irqsave(&eth->rx_irq_lock, flags);
  928. val = mtk_r32(eth, eth->soc->reg_map->pdma.irq_mask);
  929. mtk_w32(eth, val | mask, eth->soc->reg_map->pdma.irq_mask);
  930. spin_unlock_irqrestore(&eth->rx_irq_lock, flags);
  931. }
  932. static int mtk_set_mac_address(struct net_device *dev, void *p)
  933. {
  934. int ret = eth_mac_addr(dev, p);
  935. struct mtk_mac *mac = netdev_priv(dev);
  936. struct mtk_eth *eth = mac->hw;
  937. const char *macaddr = dev->dev_addr;
  938. if (ret)
  939. return ret;
  940. if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state)))
  941. return -EBUSY;
  942. spin_lock_bh(&mac->hw->page_lock);
  943. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
  944. mtk_w32(mac->hw, (macaddr[0] << 8) | macaddr[1],
  945. MT7628_SDM_MAC_ADRH);
  946. mtk_w32(mac->hw, (macaddr[2] << 24) | (macaddr[3] << 16) |
  947. (macaddr[4] << 8) | macaddr[5],
  948. MT7628_SDM_MAC_ADRL);
  949. } else {
  950. mtk_w32(mac->hw, (macaddr[0] << 8) | macaddr[1],
  951. MTK_GDMA_MAC_ADRH(mac->id));
  952. mtk_w32(mac->hw, (macaddr[2] << 24) | (macaddr[3] << 16) |
  953. (macaddr[4] << 8) | macaddr[5],
  954. MTK_GDMA_MAC_ADRL(mac->id));
  955. }
  956. spin_unlock_bh(&mac->hw->page_lock);
  957. return 0;
  958. }
  959. void mtk_stats_update_mac(struct mtk_mac *mac)
  960. {
  961. struct mtk_hw_stats *hw_stats = mac->hw_stats;
  962. struct mtk_eth *eth = mac->hw;
  963. u64_stats_update_begin(&hw_stats->syncp);
  964. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
  965. hw_stats->tx_packets += mtk_r32(mac->hw, MT7628_SDM_TPCNT);
  966. hw_stats->tx_bytes += mtk_r32(mac->hw, MT7628_SDM_TBCNT);
  967. hw_stats->rx_packets += mtk_r32(mac->hw, MT7628_SDM_RPCNT);
  968. hw_stats->rx_bytes += mtk_r32(mac->hw, MT7628_SDM_RBCNT);
  969. hw_stats->rx_checksum_errors +=
  970. mtk_r32(mac->hw, MT7628_SDM_CS_ERR);
  971. } else {
  972. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  973. unsigned int offs = hw_stats->reg_offset;
  974. u64 stats;
  975. hw_stats->rx_bytes += mtk_r32(mac->hw, reg_map->gdm1_cnt + offs);
  976. stats = mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x4 + offs);
  977. if (stats)
  978. hw_stats->rx_bytes += (stats << 32);
  979. hw_stats->rx_packets +=
  980. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x8 + offs);
  981. hw_stats->rx_overflow +=
  982. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x10 + offs);
  983. hw_stats->rx_fcs_errors +=
  984. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x14 + offs);
  985. hw_stats->rx_short_errors +=
  986. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x18 + offs);
  987. hw_stats->rx_long_errors +=
  988. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x1c + offs);
  989. hw_stats->rx_checksum_errors +=
  990. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x20 + offs);
  991. hw_stats->rx_flow_control_packets +=
  992. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x24 + offs);
  993. if (mtk_is_netsys_v3_or_greater(eth)) {
  994. hw_stats->tx_skip +=
  995. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x50 + offs);
  996. hw_stats->tx_collisions +=
  997. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x54 + offs);
  998. hw_stats->tx_bytes +=
  999. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x40 + offs);
  1000. stats = mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x44 + offs);
  1001. if (stats)
  1002. hw_stats->tx_bytes += (stats << 32);
  1003. hw_stats->tx_packets +=
  1004. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x48 + offs);
  1005. } else {
  1006. hw_stats->tx_skip +=
  1007. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x28 + offs);
  1008. hw_stats->tx_collisions +=
  1009. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x2c + offs);
  1010. hw_stats->tx_bytes +=
  1011. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x30 + offs);
  1012. stats = mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x34 + offs);
  1013. if (stats)
  1014. hw_stats->tx_bytes += (stats << 32);
  1015. hw_stats->tx_packets +=
  1016. mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x38 + offs);
  1017. }
  1018. }
  1019. u64_stats_update_end(&hw_stats->syncp);
  1020. }
  1021. static void mtk_stats_update(struct mtk_eth *eth)
  1022. {
  1023. int i;
  1024. for (i = 0; i < MTK_MAX_DEVS; i++) {
  1025. if (!eth->mac[i] || !eth->mac[i]->hw_stats)
  1026. continue;
  1027. if (spin_trylock(&eth->mac[i]->hw_stats->stats_lock)) {
  1028. mtk_stats_update_mac(eth->mac[i]);
  1029. spin_unlock(&eth->mac[i]->hw_stats->stats_lock);
  1030. }
  1031. }
  1032. }
  1033. static void mtk_get_stats64(struct net_device *dev,
  1034. struct rtnl_link_stats64 *storage)
  1035. {
  1036. struct mtk_mac *mac = netdev_priv(dev);
  1037. struct mtk_hw_stats *hw_stats = mac->hw_stats;
  1038. unsigned int start;
  1039. if (netif_running(dev) && netif_device_present(dev)) {
  1040. if (spin_trylock_bh(&hw_stats->stats_lock)) {
  1041. mtk_stats_update_mac(mac);
  1042. spin_unlock_bh(&hw_stats->stats_lock);
  1043. }
  1044. }
  1045. do {
  1046. start = u64_stats_fetch_begin(&hw_stats->syncp);
  1047. storage->rx_packets = hw_stats->rx_packets;
  1048. storage->tx_packets = hw_stats->tx_packets;
  1049. storage->rx_bytes = hw_stats->rx_bytes;
  1050. storage->tx_bytes = hw_stats->tx_bytes;
  1051. storage->collisions = hw_stats->tx_collisions;
  1052. storage->rx_length_errors = hw_stats->rx_short_errors +
  1053. hw_stats->rx_long_errors;
  1054. storage->rx_over_errors = hw_stats->rx_overflow;
  1055. storage->rx_crc_errors = hw_stats->rx_fcs_errors;
  1056. storage->rx_errors = hw_stats->rx_checksum_errors;
  1057. storage->tx_aborted_errors = hw_stats->tx_skip;
  1058. } while (u64_stats_fetch_retry(&hw_stats->syncp, start));
  1059. storage->tx_errors = dev->stats.tx_errors;
  1060. storage->rx_dropped = dev->stats.rx_dropped;
  1061. storage->tx_dropped = dev->stats.tx_dropped;
  1062. }
  1063. static inline int mtk_max_frag_size(int mtu)
  1064. {
  1065. /* make sure buf_size will be at least MTK_MAX_RX_LENGTH */
  1066. if (mtu + MTK_RX_ETH_HLEN < MTK_MAX_RX_LENGTH_2K)
  1067. mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
  1068. return SKB_DATA_ALIGN(MTK_RX_HLEN + mtu) +
  1069. SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
  1070. }
  1071. static inline int mtk_max_buf_size(int frag_size)
  1072. {
  1073. int buf_size = frag_size - NET_SKB_PAD - NET_IP_ALIGN -
  1074. SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
  1075. WARN_ON(buf_size < MTK_MAX_RX_LENGTH_2K);
  1076. return buf_size;
  1077. }
  1078. static bool mtk_rx_get_desc(struct mtk_eth *eth, struct mtk_rx_dma_v2 *rxd,
  1079. struct mtk_rx_dma_v2 *dma_rxd)
  1080. {
  1081. rxd->rxd2 = READ_ONCE(dma_rxd->rxd2);
  1082. if (!(rxd->rxd2 & RX_DMA_DONE))
  1083. return false;
  1084. rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
  1085. rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
  1086. rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
  1087. if (mtk_is_netsys_v3_or_greater(eth)) {
  1088. rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
  1089. rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
  1090. }
  1091. return true;
  1092. }
  1093. static void *mtk_max_lro_buf_alloc(gfp_t gfp_mask)
  1094. {
  1095. unsigned int size = mtk_max_frag_size(MTK_MAX_LRO_RX_LENGTH);
  1096. unsigned long data;
  1097. data = __get_free_pages(gfp_mask | __GFP_COMP | __GFP_NOWARN,
  1098. get_order(size));
  1099. return (void *)data;
  1100. }
  1101. static void *mtk_dma_ring_alloc(struct mtk_eth *eth, size_t size,
  1102. dma_addr_t *dma_handle, bool use_sram)
  1103. {
  1104. void *dma_ring;
  1105. if (use_sram && eth->sram_pool) {
  1106. dma_ring = (void *)gen_pool_alloc(eth->sram_pool, size);
  1107. if (!dma_ring)
  1108. return dma_ring;
  1109. *dma_handle = gen_pool_virt_to_phys(eth->sram_pool,
  1110. (unsigned long)dma_ring);
  1111. } else {
  1112. dma_ring = dma_alloc_coherent(eth->dma_dev, size, dma_handle,
  1113. GFP_KERNEL);
  1114. }
  1115. return dma_ring;
  1116. }
  1117. static void mtk_dma_ring_free(struct mtk_eth *eth, size_t size, void *dma_ring,
  1118. dma_addr_t dma_handle, bool in_sram)
  1119. {
  1120. if (in_sram && eth->sram_pool)
  1121. gen_pool_free(eth->sram_pool, (unsigned long)dma_ring, size);
  1122. else
  1123. dma_free_coherent(eth->dma_dev, size, dma_ring, dma_handle);
  1124. }
  1125. /* the qdma core needs scratch memory to be setup */
  1126. static int mtk_init_fq_dma(struct mtk_eth *eth)
  1127. {
  1128. const struct mtk_soc_data *soc = eth->soc;
  1129. dma_addr_t phy_ring_tail;
  1130. int cnt = soc->tx.fq_dma_size;
  1131. dma_addr_t dma_addr;
  1132. int i, j, len;
  1133. eth->scratch_ring = mtk_dma_ring_alloc(eth, cnt * soc->tx.desc_size,
  1134. &eth->phy_scratch_ring, true);
  1135. if (unlikely(!eth->scratch_ring))
  1136. return -ENOMEM;
  1137. phy_ring_tail = eth->phy_scratch_ring + soc->tx.desc_size * (cnt - 1);
  1138. for (j = 0; j < DIV_ROUND_UP(soc->tx.fq_dma_size, MTK_FQ_DMA_LENGTH); j++) {
  1139. len = min_t(int, cnt - j * MTK_FQ_DMA_LENGTH, MTK_FQ_DMA_LENGTH);
  1140. eth->scratch_head[j] = kcalloc(len, MTK_QDMA_PAGE_SIZE, GFP_KERNEL);
  1141. if (unlikely(!eth->scratch_head[j]))
  1142. return -ENOMEM;
  1143. dma_addr = dma_map_single(eth->dma_dev,
  1144. eth->scratch_head[j], len * MTK_QDMA_PAGE_SIZE,
  1145. DMA_FROM_DEVICE);
  1146. if (unlikely(dma_mapping_error(eth->dma_dev, dma_addr)))
  1147. return -ENOMEM;
  1148. for (i = 0; i < len; i++) {
  1149. struct mtk_tx_dma_v2 *txd;
  1150. txd = eth->scratch_ring + (j * MTK_FQ_DMA_LENGTH + i) * soc->tx.desc_size;
  1151. txd->txd1 = dma_addr + i * MTK_QDMA_PAGE_SIZE;
  1152. if (j * MTK_FQ_DMA_LENGTH + i < cnt)
  1153. txd->txd2 = eth->phy_scratch_ring +
  1154. (j * MTK_FQ_DMA_LENGTH + i + 1) * soc->tx.desc_size;
  1155. txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
  1156. if (MTK_HAS_CAPS(soc->caps, MTK_36BIT_DMA))
  1157. txd->txd3 |= TX_DMA_PREP_ADDR64(dma_addr + i * MTK_QDMA_PAGE_SIZE);
  1158. txd->txd4 = 0;
  1159. if (mtk_is_netsys_v2_or_greater(eth)) {
  1160. txd->txd5 = 0;
  1161. txd->txd6 = 0;
  1162. txd->txd7 = 0;
  1163. txd->txd8 = 0;
  1164. }
  1165. }
  1166. }
  1167. mtk_w32(eth, eth->phy_scratch_ring, soc->reg_map->qdma.fq_head);
  1168. mtk_w32(eth, phy_ring_tail, soc->reg_map->qdma.fq_tail);
  1169. mtk_w32(eth, (cnt << 16) | cnt, soc->reg_map->qdma.fq_count);
  1170. mtk_w32(eth, MTK_QDMA_PAGE_SIZE << 16, soc->reg_map->qdma.fq_blen);
  1171. return 0;
  1172. }
  1173. static void *mtk_qdma_phys_to_virt(struct mtk_tx_ring *ring, u32 desc)
  1174. {
  1175. return ring->dma + (desc - ring->phys);
  1176. }
  1177. static struct mtk_tx_buf *mtk_desc_to_tx_buf(struct mtk_tx_ring *ring,
  1178. void *txd, u32 txd_size)
  1179. {
  1180. int idx = (txd - ring->dma) / txd_size;
  1181. return &ring->buf[idx];
  1182. }
  1183. static struct mtk_tx_dma *qdma_to_pdma(struct mtk_tx_ring *ring,
  1184. struct mtk_tx_dma *dma)
  1185. {
  1186. return ring->dma_pdma - (struct mtk_tx_dma *)ring->dma + dma;
  1187. }
  1188. static int txd_to_idx(struct mtk_tx_ring *ring, void *dma, u32 txd_size)
  1189. {
  1190. return (dma - ring->dma) / txd_size;
  1191. }
  1192. static void mtk_tx_unmap(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
  1193. struct xdp_frame_bulk *bq, bool napi)
  1194. {
  1195. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  1196. if (tx_buf->flags & MTK_TX_FLAGS_SINGLE0) {
  1197. dma_unmap_single(eth->dma_dev,
  1198. dma_unmap_addr(tx_buf, dma_addr0),
  1199. dma_unmap_len(tx_buf, dma_len0),
  1200. DMA_TO_DEVICE);
  1201. } else if (tx_buf->flags & MTK_TX_FLAGS_PAGE0) {
  1202. dma_unmap_page(eth->dma_dev,
  1203. dma_unmap_addr(tx_buf, dma_addr0),
  1204. dma_unmap_len(tx_buf, dma_len0),
  1205. DMA_TO_DEVICE);
  1206. }
  1207. } else {
  1208. if (dma_unmap_len(tx_buf, dma_len0)) {
  1209. dma_unmap_page(eth->dma_dev,
  1210. dma_unmap_addr(tx_buf, dma_addr0),
  1211. dma_unmap_len(tx_buf, dma_len0),
  1212. DMA_TO_DEVICE);
  1213. }
  1214. if (dma_unmap_len(tx_buf, dma_len1)) {
  1215. dma_unmap_page(eth->dma_dev,
  1216. dma_unmap_addr(tx_buf, dma_addr1),
  1217. dma_unmap_len(tx_buf, dma_len1),
  1218. DMA_TO_DEVICE);
  1219. }
  1220. }
  1221. if (tx_buf->data && tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
  1222. if (tx_buf->type == MTK_TYPE_SKB) {
  1223. struct sk_buff *skb = tx_buf->data;
  1224. if (napi)
  1225. napi_consume_skb(skb, napi);
  1226. else
  1227. dev_kfree_skb_any(skb);
  1228. } else {
  1229. struct xdp_frame *xdpf = tx_buf->data;
  1230. if (napi && tx_buf->type == MTK_TYPE_XDP_TX)
  1231. xdp_return_frame_rx_napi(xdpf);
  1232. else if (bq)
  1233. xdp_return_frame_bulk(xdpf, bq);
  1234. else
  1235. xdp_return_frame(xdpf);
  1236. }
  1237. }
  1238. tx_buf->flags = 0;
  1239. tx_buf->data = NULL;
  1240. }
  1241. static void setup_tx_buf(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
  1242. struct mtk_tx_dma *txd, dma_addr_t mapped_addr,
  1243. size_t size, int idx)
  1244. {
  1245. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  1246. dma_unmap_addr_set(tx_buf, dma_addr0, mapped_addr);
  1247. dma_unmap_len_set(tx_buf, dma_len0, size);
  1248. } else {
  1249. if (idx & 1) {
  1250. txd->txd3 = mapped_addr;
  1251. txd->txd2 |= TX_DMA_PLEN1(size);
  1252. dma_unmap_addr_set(tx_buf, dma_addr1, mapped_addr);
  1253. dma_unmap_len_set(tx_buf, dma_len1, size);
  1254. } else {
  1255. tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
  1256. txd->txd1 = mapped_addr;
  1257. txd->txd2 = TX_DMA_PLEN0(size);
  1258. dma_unmap_addr_set(tx_buf, dma_addr0, mapped_addr);
  1259. dma_unmap_len_set(tx_buf, dma_len0, size);
  1260. }
  1261. }
  1262. }
  1263. static void mtk_tx_set_dma_desc_v1(struct net_device *dev, void *txd,
  1264. struct mtk_tx_dma_desc_info *info)
  1265. {
  1266. struct mtk_mac *mac = netdev_priv(dev);
  1267. struct mtk_eth *eth = mac->hw;
  1268. struct mtk_tx_dma *desc = txd;
  1269. u32 data;
  1270. WRITE_ONCE(desc->txd1, info->addr);
  1271. data = TX_DMA_SWC | TX_DMA_PLEN0(info->size) |
  1272. FIELD_PREP(TX_DMA_PQID, info->qid);
  1273. if (info->last)
  1274. data |= TX_DMA_LS0;
  1275. WRITE_ONCE(desc->txd3, data);
  1276. data = (mac->id + 1) << TX_DMA_FPORT_SHIFT; /* forward port */
  1277. if (info->first) {
  1278. if (info->gso)
  1279. data |= TX_DMA_TSO;
  1280. /* tx checksum offload */
  1281. if (info->csum)
  1282. data |= TX_DMA_CHKSUM;
  1283. /* vlan header offload */
  1284. if (info->vlan)
  1285. data |= TX_DMA_INS_VLAN | info->vlan_tci;
  1286. }
  1287. WRITE_ONCE(desc->txd4, data);
  1288. }
  1289. static void mtk_tx_set_dma_desc_v2(struct net_device *dev, void *txd,
  1290. struct mtk_tx_dma_desc_info *info)
  1291. {
  1292. struct mtk_mac *mac = netdev_priv(dev);
  1293. struct mtk_tx_dma_v2 *desc = txd;
  1294. struct mtk_eth *eth = mac->hw;
  1295. u32 data;
  1296. WRITE_ONCE(desc->txd1, info->addr);
  1297. data = TX_DMA_PLEN0(info->size);
  1298. if (info->last)
  1299. data |= TX_DMA_LS0;
  1300. if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
  1301. data |= TX_DMA_PREP_ADDR64(info->addr);
  1302. WRITE_ONCE(desc->txd3, data);
  1303. /* set forward port */
  1304. switch (mac->id) {
  1305. case MTK_GMAC1_ID:
  1306. data = PSE_GDM1_PORT << TX_DMA_FPORT_SHIFT_V2;
  1307. break;
  1308. case MTK_GMAC2_ID:
  1309. data = PSE_GDM2_PORT << TX_DMA_FPORT_SHIFT_V2;
  1310. break;
  1311. case MTK_GMAC3_ID:
  1312. data = PSE_GDM3_PORT << TX_DMA_FPORT_SHIFT_V2;
  1313. break;
  1314. }
  1315. data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
  1316. WRITE_ONCE(desc->txd4, data);
  1317. data = 0;
  1318. if (info->first) {
  1319. if (info->gso)
  1320. data |= TX_DMA_TSO_V2;
  1321. /* tx checksum offload */
  1322. if (info->csum)
  1323. data |= TX_DMA_CHKSUM_V2;
  1324. if (mtk_is_netsys_v3_or_greater(eth) && netdev_uses_dsa(dev))
  1325. data |= TX_DMA_SPTAG_V3;
  1326. }
  1327. WRITE_ONCE(desc->txd5, data);
  1328. data = 0;
  1329. if (info->first && info->vlan)
  1330. data |= TX_DMA_INS_VLAN_V2 | info->vlan_tci;
  1331. WRITE_ONCE(desc->txd6, data);
  1332. WRITE_ONCE(desc->txd7, 0);
  1333. WRITE_ONCE(desc->txd8, 0);
  1334. }
  1335. static void mtk_tx_set_dma_desc(struct net_device *dev, void *txd,
  1336. struct mtk_tx_dma_desc_info *info)
  1337. {
  1338. struct mtk_mac *mac = netdev_priv(dev);
  1339. struct mtk_eth *eth = mac->hw;
  1340. if (mtk_is_netsys_v2_or_greater(eth))
  1341. mtk_tx_set_dma_desc_v2(dev, txd, info);
  1342. else
  1343. mtk_tx_set_dma_desc_v1(dev, txd, info);
  1344. }
  1345. static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
  1346. int tx_num, struct mtk_tx_ring *ring, bool gso)
  1347. {
  1348. struct mtk_tx_dma_desc_info txd_info = {
  1349. .size = skb_headlen(skb),
  1350. .gso = gso,
  1351. .csum = skb->ip_summed == CHECKSUM_PARTIAL,
  1352. .vlan = skb_vlan_tag_present(skb),
  1353. .qid = skb_get_queue_mapping(skb),
  1354. .vlan_tci = skb_vlan_tag_get(skb),
  1355. .first = true,
  1356. .last = !skb_is_nonlinear(skb),
  1357. };
  1358. struct netdev_queue *txq;
  1359. struct mtk_mac *mac = netdev_priv(dev);
  1360. struct mtk_eth *eth = mac->hw;
  1361. const struct mtk_soc_data *soc = eth->soc;
  1362. struct mtk_tx_dma *itxd, *txd;
  1363. struct mtk_tx_dma *itxd_pdma, *txd_pdma;
  1364. struct mtk_tx_buf *itx_buf, *tx_buf;
  1365. int i, n_desc = 1;
  1366. int queue = skb_get_queue_mapping(skb);
  1367. int k = 0;
  1368. txq = netdev_get_tx_queue(dev, queue);
  1369. itxd = ring->next_free;
  1370. itxd_pdma = qdma_to_pdma(ring, itxd);
  1371. if (itxd == ring->last_free)
  1372. return -ENOMEM;
  1373. itx_buf = mtk_desc_to_tx_buf(ring, itxd, soc->tx.desc_size);
  1374. memset(itx_buf, 0, sizeof(*itx_buf));
  1375. txd_info.addr = dma_map_single(eth->dma_dev, skb->data, txd_info.size,
  1376. DMA_TO_DEVICE);
  1377. if (unlikely(dma_mapping_error(eth->dma_dev, txd_info.addr)))
  1378. return -ENOMEM;
  1379. mtk_tx_set_dma_desc(dev, itxd, &txd_info);
  1380. itx_buf->flags |= MTK_TX_FLAGS_SINGLE0;
  1381. itx_buf->mac_id = mac->id;
  1382. setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
  1383. k++);
  1384. /* TX SG offload */
  1385. txd = itxd;
  1386. txd_pdma = qdma_to_pdma(ring, txd);
  1387. for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
  1388. skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
  1389. unsigned int offset = 0;
  1390. int frag_size = skb_frag_size(frag);
  1391. while (frag_size) {
  1392. bool new_desc = true;
  1393. if (MTK_HAS_CAPS(soc->caps, MTK_QDMA) ||
  1394. (i & 0x1)) {
  1395. txd = mtk_qdma_phys_to_virt(ring, txd->txd2);
  1396. txd_pdma = qdma_to_pdma(ring, txd);
  1397. if (txd == ring->last_free)
  1398. goto err_dma;
  1399. n_desc++;
  1400. } else {
  1401. new_desc = false;
  1402. }
  1403. memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
  1404. txd_info.size = min_t(unsigned int, frag_size,
  1405. soc->tx.dma_max_len);
  1406. txd_info.qid = queue;
  1407. txd_info.last = i == skb_shinfo(skb)->nr_frags - 1 &&
  1408. !(frag_size - txd_info.size);
  1409. txd_info.addr = skb_frag_dma_map(eth->dma_dev, frag,
  1410. offset, txd_info.size,
  1411. DMA_TO_DEVICE);
  1412. if (unlikely(dma_mapping_error(eth->dma_dev, txd_info.addr)))
  1413. goto err_dma;
  1414. mtk_tx_set_dma_desc(dev, txd, &txd_info);
  1415. tx_buf = mtk_desc_to_tx_buf(ring, txd,
  1416. soc->tx.desc_size);
  1417. if (new_desc)
  1418. memset(tx_buf, 0, sizeof(*tx_buf));
  1419. tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
  1420. tx_buf->flags |= MTK_TX_FLAGS_PAGE0;
  1421. tx_buf->mac_id = mac->id;
  1422. setup_tx_buf(eth, tx_buf, txd_pdma, txd_info.addr,
  1423. txd_info.size, k++);
  1424. frag_size -= txd_info.size;
  1425. offset += txd_info.size;
  1426. }
  1427. }
  1428. /* store skb to cleanup */
  1429. itx_buf->type = MTK_TYPE_SKB;
  1430. itx_buf->data = skb;
  1431. if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  1432. if (k & 0x1)
  1433. txd_pdma->txd2 |= TX_DMA_LS0;
  1434. else
  1435. txd_pdma->txd2 |= TX_DMA_LS1;
  1436. }
  1437. netdev_tx_sent_queue(txq, skb->len);
  1438. skb_tx_timestamp(skb);
  1439. ring->next_free = mtk_qdma_phys_to_virt(ring, txd->txd2);
  1440. atomic_sub(n_desc, &ring->free_count);
  1441. /* make sure that all changes to the dma ring are flushed before we
  1442. * continue
  1443. */
  1444. wmb();
  1445. if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  1446. if (netif_xmit_stopped(txq) || !netdev_xmit_more())
  1447. mtk_w32(eth, txd->txd2, soc->reg_map->qdma.ctx_ptr);
  1448. } else {
  1449. int next_idx;
  1450. next_idx = NEXT_DESP_IDX(txd_to_idx(ring, txd, soc->tx.desc_size),
  1451. ring->dma_size);
  1452. mtk_w32(eth, next_idx, MT7628_TX_CTX_IDX0);
  1453. }
  1454. return 0;
  1455. err_dma:
  1456. do {
  1457. tx_buf = mtk_desc_to_tx_buf(ring, itxd, soc->tx.desc_size);
  1458. /* unmap dma */
  1459. mtk_tx_unmap(eth, tx_buf, NULL, false);
  1460. itxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
  1461. if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA))
  1462. itxd_pdma->txd2 = TX_DMA_DESP2_DEF;
  1463. itxd = mtk_qdma_phys_to_virt(ring, itxd->txd2);
  1464. itxd_pdma = qdma_to_pdma(ring, itxd);
  1465. } while (itxd != txd);
  1466. return -ENOMEM;
  1467. }
  1468. static int mtk_cal_txd_req(struct mtk_eth *eth, struct sk_buff *skb)
  1469. {
  1470. int i, nfrags = 1;
  1471. skb_frag_t *frag;
  1472. if (skb_is_gso(skb)) {
  1473. for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
  1474. frag = &skb_shinfo(skb)->frags[i];
  1475. nfrags += DIV_ROUND_UP(skb_frag_size(frag),
  1476. eth->soc->tx.dma_max_len);
  1477. }
  1478. } else {
  1479. nfrags += skb_shinfo(skb)->nr_frags;
  1480. }
  1481. return nfrags;
  1482. }
  1483. static int mtk_queue_stopped(struct mtk_eth *eth)
  1484. {
  1485. int i;
  1486. for (i = 0; i < MTK_MAX_DEVS; i++) {
  1487. if (!eth->netdev[i])
  1488. continue;
  1489. if (netif_queue_stopped(eth->netdev[i]))
  1490. return 1;
  1491. }
  1492. return 0;
  1493. }
  1494. static void mtk_wake_queue(struct mtk_eth *eth)
  1495. {
  1496. int i;
  1497. for (i = 0; i < MTK_MAX_DEVS; i++) {
  1498. if (!eth->netdev[i])
  1499. continue;
  1500. netif_tx_wake_all_queues(eth->netdev[i]);
  1501. }
  1502. }
  1503. static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
  1504. {
  1505. struct mtk_mac *mac = netdev_priv(dev);
  1506. struct mtk_eth *eth = mac->hw;
  1507. struct mtk_tx_ring *ring = &eth->tx_ring;
  1508. struct net_device_stats *stats = &dev->stats;
  1509. bool gso = false;
  1510. int tx_num;
  1511. if (skb_vlan_tag_present(skb) &&
  1512. !eth_proto_is_802_3(eth_hdr(skb)->h_proto)) {
  1513. skb = __vlan_hwaccel_push_inside(skb);
  1514. if (!skb)
  1515. goto dropped;
  1516. }
  1517. /* normally we can rely on the stack not calling this more than once,
  1518. * however we have 2 queues running on the same ring so we need to lock
  1519. * the ring access
  1520. */
  1521. spin_lock(&eth->page_lock);
  1522. if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
  1523. goto drop;
  1524. tx_num = mtk_cal_txd_req(eth, skb);
  1525. if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
  1526. netif_tx_stop_all_queues(dev);
  1527. netif_err(eth, tx_queued, dev,
  1528. "Tx Ring full when queue awake!\n");
  1529. spin_unlock(&eth->page_lock);
  1530. return NETDEV_TX_BUSY;
  1531. }
  1532. /* TSO: fill MSS info in tcp checksum field */
  1533. if (skb_is_gso(skb)) {
  1534. if (skb_cow_head(skb, 0)) {
  1535. netif_warn(eth, tx_err, dev,
  1536. "GSO expand head fail.\n");
  1537. goto drop;
  1538. }
  1539. if (skb_shinfo(skb)->gso_type &
  1540. (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)) {
  1541. gso = true;
  1542. tcp_hdr(skb)->check = htons(skb_shinfo(skb)->gso_size);
  1543. }
  1544. }
  1545. if (mtk_tx_map(skb, dev, tx_num, ring, gso) < 0)
  1546. goto drop;
  1547. if (unlikely(atomic_read(&ring->free_count) <= ring->thresh))
  1548. netif_tx_stop_all_queues(dev);
  1549. spin_unlock(&eth->page_lock);
  1550. return NETDEV_TX_OK;
  1551. drop:
  1552. spin_unlock(&eth->page_lock);
  1553. dev_kfree_skb_any(skb);
  1554. dropped:
  1555. stats->tx_dropped++;
  1556. return NETDEV_TX_OK;
  1557. }
  1558. static struct mtk_rx_ring *mtk_get_rx_ring(struct mtk_eth *eth)
  1559. {
  1560. int i;
  1561. struct mtk_rx_ring *ring;
  1562. int idx;
  1563. if (!eth->hwlro)
  1564. return &eth->rx_ring[0];
  1565. for (i = 0; i < MTK_MAX_RX_RING_NUM; i++) {
  1566. struct mtk_rx_dma *rxd;
  1567. ring = &eth->rx_ring[i];
  1568. idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
  1569. rxd = ring->dma + idx * eth->soc->rx.desc_size;
  1570. if (rxd->rxd2 & RX_DMA_DONE) {
  1571. ring->calc_idx_update = true;
  1572. return ring;
  1573. }
  1574. }
  1575. return NULL;
  1576. }
  1577. static void mtk_update_rx_cpu_idx(struct mtk_eth *eth)
  1578. {
  1579. struct mtk_rx_ring *ring;
  1580. int i;
  1581. if (!eth->hwlro) {
  1582. ring = &eth->rx_ring[0];
  1583. mtk_w32(eth, ring->calc_idx, ring->crx_idx_reg);
  1584. } else {
  1585. for (i = 0; i < MTK_MAX_RX_RING_NUM; i++) {
  1586. ring = &eth->rx_ring[i];
  1587. if (ring->calc_idx_update) {
  1588. ring->calc_idx_update = false;
  1589. mtk_w32(eth, ring->calc_idx, ring->crx_idx_reg);
  1590. }
  1591. }
  1592. }
  1593. }
  1594. static bool mtk_page_pool_enabled(struct mtk_eth *eth)
  1595. {
  1596. return mtk_is_netsys_v2_or_greater(eth);
  1597. }
  1598. static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
  1599. struct xdp_rxq_info *xdp_q,
  1600. int id, int size)
  1601. {
  1602. struct page_pool_params pp_params = {
  1603. .order = 0,
  1604. .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV,
  1605. .pool_size = size,
  1606. .nid = NUMA_NO_NODE,
  1607. .dev = eth->dma_dev,
  1608. .offset = MTK_PP_HEADROOM,
  1609. .max_len = MTK_PP_MAX_BUF_SIZE,
  1610. };
  1611. struct page_pool *pp;
  1612. int err;
  1613. pp_params.dma_dir = rcu_access_pointer(eth->prog) ? DMA_BIDIRECTIONAL
  1614. : DMA_FROM_DEVICE;
  1615. pp = page_pool_create(&pp_params);
  1616. if (IS_ERR(pp))
  1617. return pp;
  1618. err = __xdp_rxq_info_reg(xdp_q, eth->dummy_dev, id,
  1619. eth->rx_napi.napi_id, PAGE_SIZE);
  1620. if (err < 0)
  1621. goto err_free_pp;
  1622. err = xdp_rxq_info_reg_mem_model(xdp_q, MEM_TYPE_PAGE_POOL, pp);
  1623. if (err)
  1624. goto err_unregister_rxq;
  1625. return pp;
  1626. err_unregister_rxq:
  1627. xdp_rxq_info_unreg(xdp_q);
  1628. err_free_pp:
  1629. page_pool_destroy(pp);
  1630. return ERR_PTR(err);
  1631. }
  1632. static void *mtk_page_pool_get_buff(struct page_pool *pp, dma_addr_t *dma_addr,
  1633. gfp_t gfp_mask)
  1634. {
  1635. struct page *page;
  1636. page = page_pool_alloc_pages(pp, gfp_mask | __GFP_NOWARN);
  1637. if (!page)
  1638. return NULL;
  1639. *dma_addr = page_pool_get_dma_addr(page) + MTK_PP_HEADROOM;
  1640. return page_address(page);
  1641. }
  1642. static void mtk_rx_put_buff(struct mtk_rx_ring *ring, void *data, bool napi)
  1643. {
  1644. if (ring->page_pool)
  1645. page_pool_put_full_page(ring->page_pool,
  1646. virt_to_head_page(data), napi);
  1647. else
  1648. skb_free_frag(data);
  1649. }
  1650. static int mtk_xdp_frame_map(struct mtk_eth *eth, struct net_device *dev,
  1651. struct mtk_tx_dma_desc_info *txd_info,
  1652. struct mtk_tx_dma *txd, struct mtk_tx_buf *tx_buf,
  1653. void *data, u16 headroom, int index, bool dma_map)
  1654. {
  1655. struct mtk_tx_ring *ring = &eth->tx_ring;
  1656. struct mtk_mac *mac = netdev_priv(dev);
  1657. struct mtk_tx_dma *txd_pdma;
  1658. if (dma_map) { /* ndo_xdp_xmit */
  1659. txd_info->addr = dma_map_single(eth->dma_dev, data,
  1660. txd_info->size, DMA_TO_DEVICE);
  1661. if (unlikely(dma_mapping_error(eth->dma_dev, txd_info->addr)))
  1662. return -ENOMEM;
  1663. tx_buf->flags |= MTK_TX_FLAGS_SINGLE0;
  1664. } else {
  1665. struct page *page = virt_to_head_page(data);
  1666. txd_info->addr = page_pool_get_dma_addr(page) +
  1667. sizeof(struct xdp_frame) + headroom;
  1668. dma_sync_single_for_device(eth->dma_dev, txd_info->addr,
  1669. txd_info->size, DMA_BIDIRECTIONAL);
  1670. }
  1671. mtk_tx_set_dma_desc(dev, txd, txd_info);
  1672. tx_buf->mac_id = mac->id;
  1673. tx_buf->type = dma_map ? MTK_TYPE_XDP_NDO : MTK_TYPE_XDP_TX;
  1674. tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
  1675. txd_pdma = qdma_to_pdma(ring, txd);
  1676. setup_tx_buf(eth, tx_buf, txd_pdma, txd_info->addr, txd_info->size,
  1677. index);
  1678. return 0;
  1679. }
  1680. static int mtk_xdp_submit_frame(struct mtk_eth *eth, struct xdp_frame *xdpf,
  1681. struct net_device *dev, bool dma_map)
  1682. {
  1683. struct skb_shared_info *sinfo = xdp_get_shared_info_from_frame(xdpf);
  1684. const struct mtk_soc_data *soc = eth->soc;
  1685. struct mtk_tx_ring *ring = &eth->tx_ring;
  1686. struct mtk_mac *mac = netdev_priv(dev);
  1687. struct mtk_tx_dma_desc_info txd_info = {
  1688. .size = xdpf->len,
  1689. .first = true,
  1690. .last = !xdp_frame_has_frags(xdpf),
  1691. .qid = mac->id,
  1692. };
  1693. int err, index = 0, n_desc = 1, nr_frags;
  1694. struct mtk_tx_buf *htx_buf, *tx_buf;
  1695. struct mtk_tx_dma *htxd, *txd;
  1696. void *data = xdpf->data;
  1697. if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
  1698. return -EBUSY;
  1699. nr_frags = unlikely(xdp_frame_has_frags(xdpf)) ? sinfo->nr_frags : 0;
  1700. if (unlikely(atomic_read(&ring->free_count) <= 1 + nr_frags))
  1701. return -EBUSY;
  1702. spin_lock(&eth->page_lock);
  1703. txd = ring->next_free;
  1704. if (txd == ring->last_free) {
  1705. spin_unlock(&eth->page_lock);
  1706. return -ENOMEM;
  1707. }
  1708. htxd = txd;
  1709. tx_buf = mtk_desc_to_tx_buf(ring, txd, soc->tx.desc_size);
  1710. memset(tx_buf, 0, sizeof(*tx_buf));
  1711. htx_buf = tx_buf;
  1712. for (;;) {
  1713. err = mtk_xdp_frame_map(eth, dev, &txd_info, txd, tx_buf,
  1714. data, xdpf->headroom, index, dma_map);
  1715. if (err < 0)
  1716. goto unmap;
  1717. if (txd_info.last)
  1718. break;
  1719. if (MTK_HAS_CAPS(soc->caps, MTK_QDMA) || (index & 0x1)) {
  1720. txd = mtk_qdma_phys_to_virt(ring, txd->txd2);
  1721. if (txd == ring->last_free)
  1722. goto unmap;
  1723. tx_buf = mtk_desc_to_tx_buf(ring, txd,
  1724. soc->tx.desc_size);
  1725. memset(tx_buf, 0, sizeof(*tx_buf));
  1726. n_desc++;
  1727. }
  1728. memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
  1729. txd_info.size = skb_frag_size(&sinfo->frags[index]);
  1730. txd_info.last = index + 1 == nr_frags;
  1731. txd_info.qid = mac->id;
  1732. data = skb_frag_address(&sinfo->frags[index]);
  1733. index++;
  1734. }
  1735. /* store xdpf for cleanup */
  1736. htx_buf->data = xdpf;
  1737. if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  1738. struct mtk_tx_dma *txd_pdma = qdma_to_pdma(ring, txd);
  1739. if (index & 1)
  1740. txd_pdma->txd2 |= TX_DMA_LS0;
  1741. else
  1742. txd_pdma->txd2 |= TX_DMA_LS1;
  1743. }
  1744. ring->next_free = mtk_qdma_phys_to_virt(ring, txd->txd2);
  1745. atomic_sub(n_desc, &ring->free_count);
  1746. /* make sure that all changes to the dma ring are flushed before we
  1747. * continue
  1748. */
  1749. wmb();
  1750. if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  1751. mtk_w32(eth, txd->txd2, soc->reg_map->qdma.ctx_ptr);
  1752. } else {
  1753. int idx;
  1754. idx = txd_to_idx(ring, txd, soc->tx.desc_size);
  1755. mtk_w32(eth, NEXT_DESP_IDX(idx, ring->dma_size),
  1756. MT7628_TX_CTX_IDX0);
  1757. }
  1758. spin_unlock(&eth->page_lock);
  1759. return 0;
  1760. unmap:
  1761. while (htxd != txd) {
  1762. tx_buf = mtk_desc_to_tx_buf(ring, htxd, soc->tx.desc_size);
  1763. mtk_tx_unmap(eth, tx_buf, NULL, false);
  1764. htxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
  1765. if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  1766. struct mtk_tx_dma *txd_pdma = qdma_to_pdma(ring, htxd);
  1767. txd_pdma->txd2 = TX_DMA_DESP2_DEF;
  1768. }
  1769. htxd = mtk_qdma_phys_to_virt(ring, htxd->txd2);
  1770. }
  1771. spin_unlock(&eth->page_lock);
  1772. return err;
  1773. }
  1774. static int mtk_xdp_xmit(struct net_device *dev, int num_frame,
  1775. struct xdp_frame **frames, u32 flags)
  1776. {
  1777. struct mtk_mac *mac = netdev_priv(dev);
  1778. struct mtk_hw_stats *hw_stats = mac->hw_stats;
  1779. struct mtk_eth *eth = mac->hw;
  1780. int i, nxmit = 0;
  1781. if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
  1782. return -EINVAL;
  1783. for (i = 0; i < num_frame; i++) {
  1784. if (mtk_xdp_submit_frame(eth, frames[i], dev, true))
  1785. break;
  1786. nxmit++;
  1787. }
  1788. u64_stats_update_begin(&hw_stats->syncp);
  1789. hw_stats->xdp_stats.tx_xdp_xmit += nxmit;
  1790. hw_stats->xdp_stats.tx_xdp_xmit_errors += num_frame - nxmit;
  1791. u64_stats_update_end(&hw_stats->syncp);
  1792. return nxmit;
  1793. }
  1794. static u32 mtk_xdp_run(struct mtk_eth *eth, struct mtk_rx_ring *ring,
  1795. struct xdp_buff *xdp, struct net_device *dev)
  1796. {
  1797. struct mtk_mac *mac = netdev_priv(dev);
  1798. struct mtk_hw_stats *hw_stats = mac->hw_stats;
  1799. u64 *count = &hw_stats->xdp_stats.rx_xdp_drop;
  1800. struct bpf_prog *prog;
  1801. u32 act = XDP_PASS;
  1802. rcu_read_lock();
  1803. prog = rcu_dereference(eth->prog);
  1804. if (!prog)
  1805. goto out;
  1806. act = bpf_prog_run_xdp(prog, xdp);
  1807. switch (act) {
  1808. case XDP_PASS:
  1809. count = &hw_stats->xdp_stats.rx_xdp_pass;
  1810. goto update_stats;
  1811. case XDP_REDIRECT:
  1812. if (unlikely(xdp_do_redirect(dev, xdp, prog))) {
  1813. act = XDP_DROP;
  1814. break;
  1815. }
  1816. count = &hw_stats->xdp_stats.rx_xdp_redirect;
  1817. goto update_stats;
  1818. case XDP_TX: {
  1819. struct xdp_frame *xdpf = xdp_convert_buff_to_frame(xdp);
  1820. if (!xdpf || mtk_xdp_submit_frame(eth, xdpf, dev, false)) {
  1821. count = &hw_stats->xdp_stats.rx_xdp_tx_errors;
  1822. act = XDP_DROP;
  1823. break;
  1824. }
  1825. count = &hw_stats->xdp_stats.rx_xdp_tx;
  1826. goto update_stats;
  1827. }
  1828. default:
  1829. bpf_warn_invalid_xdp_action(dev, prog, act);
  1830. fallthrough;
  1831. case XDP_ABORTED:
  1832. trace_xdp_exception(dev, prog, act);
  1833. fallthrough;
  1834. case XDP_DROP:
  1835. break;
  1836. }
  1837. page_pool_put_full_page(ring->page_pool,
  1838. virt_to_head_page(xdp->data), true);
  1839. update_stats:
  1840. u64_stats_update_begin(&hw_stats->syncp);
  1841. *count = *count + 1;
  1842. u64_stats_update_end(&hw_stats->syncp);
  1843. out:
  1844. rcu_read_unlock();
  1845. return act;
  1846. }
  1847. static int mtk_poll_rx(struct napi_struct *napi, int budget,
  1848. struct mtk_eth *eth)
  1849. {
  1850. struct dim_sample dim_sample = {};
  1851. struct mtk_rx_ring *ring;
  1852. bool xdp_flush = false;
  1853. int idx;
  1854. struct sk_buff *skb;
  1855. u64 addr64 = 0;
  1856. u8 *data, *new_data;
  1857. struct mtk_rx_dma_v2 *rxd, trxd;
  1858. int done = 0, bytes = 0;
  1859. dma_addr_t dma_addr = DMA_MAPPING_ERROR;
  1860. int ppe_idx = 0;
  1861. while (done < budget) {
  1862. unsigned int pktlen, *rxdcsum;
  1863. struct net_device *netdev;
  1864. u32 hash, reason;
  1865. int mac = 0;
  1866. ring = mtk_get_rx_ring(eth);
  1867. if (unlikely(!ring))
  1868. goto rx_done;
  1869. idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
  1870. rxd = ring->dma + idx * eth->soc->rx.desc_size;
  1871. data = ring->data[idx];
  1872. if (!mtk_rx_get_desc(eth, &trxd, rxd))
  1873. break;
  1874. /* find out which mac the packet come from. values start at 1 */
  1875. if (mtk_is_netsys_v3_or_greater(eth)) {
  1876. u32 val = RX_DMA_GET_SPORT_V2(trxd.rxd5);
  1877. switch (val) {
  1878. case PSE_GDM1_PORT:
  1879. case PSE_GDM2_PORT:
  1880. mac = val - 1;
  1881. break;
  1882. case PSE_GDM3_PORT:
  1883. mac = MTK_GMAC3_ID;
  1884. break;
  1885. default:
  1886. break;
  1887. }
  1888. } else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
  1889. !(trxd.rxd4 & RX_DMA_SPECIAL_TAG)) {
  1890. mac = RX_DMA_GET_SPORT(trxd.rxd4) - 1;
  1891. }
  1892. if (unlikely(mac < 0 || mac >= MTK_MAX_DEVS ||
  1893. !eth->netdev[mac]))
  1894. goto release_desc;
  1895. netdev = eth->netdev[mac];
  1896. ppe_idx = eth->mac[mac]->ppe_idx;
  1897. if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
  1898. goto release_desc;
  1899. pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
  1900. /* alloc new buffer */
  1901. if (ring->page_pool) {
  1902. struct page *page = virt_to_head_page(data);
  1903. struct xdp_buff xdp;
  1904. u32 ret, metasize;
  1905. new_data = mtk_page_pool_get_buff(ring->page_pool,
  1906. &dma_addr,
  1907. GFP_ATOMIC);
  1908. if (unlikely(!new_data)) {
  1909. netdev->stats.rx_dropped++;
  1910. goto release_desc;
  1911. }
  1912. dma_sync_single_for_cpu(eth->dma_dev,
  1913. page_pool_get_dma_addr(page) + MTK_PP_HEADROOM,
  1914. pktlen, page_pool_get_dma_dir(ring->page_pool));
  1915. xdp_init_buff(&xdp, PAGE_SIZE, &ring->xdp_q);
  1916. xdp_prepare_buff(&xdp, data, MTK_PP_HEADROOM, pktlen,
  1917. true);
  1918. xdp_buff_clear_frags_flag(&xdp);
  1919. ret = mtk_xdp_run(eth, ring, &xdp, netdev);
  1920. if (ret == XDP_REDIRECT)
  1921. xdp_flush = true;
  1922. if (ret != XDP_PASS)
  1923. goto skip_rx;
  1924. skb = build_skb(data, PAGE_SIZE);
  1925. if (unlikely(!skb)) {
  1926. page_pool_put_full_page(ring->page_pool,
  1927. page, true);
  1928. netdev->stats.rx_dropped++;
  1929. goto skip_rx;
  1930. }
  1931. skb_reserve(skb, xdp.data - xdp.data_hard_start);
  1932. skb_put(skb, xdp.data_end - xdp.data);
  1933. metasize = xdp.data - xdp.data_meta;
  1934. if (metasize)
  1935. skb_metadata_set(skb, metasize);
  1936. skb_mark_for_recycle(skb);
  1937. } else {
  1938. if (ring->frag_size <= PAGE_SIZE)
  1939. new_data = napi_alloc_frag(ring->frag_size);
  1940. else
  1941. new_data = mtk_max_lro_buf_alloc(GFP_ATOMIC);
  1942. if (unlikely(!new_data)) {
  1943. netdev->stats.rx_dropped++;
  1944. goto release_desc;
  1945. }
  1946. dma_addr = dma_map_single(eth->dma_dev,
  1947. new_data + NET_SKB_PAD + eth->ip_align,
  1948. ring->buf_size, DMA_FROM_DEVICE);
  1949. if (unlikely(dma_mapping_error(eth->dma_dev,
  1950. dma_addr))) {
  1951. skb_free_frag(new_data);
  1952. netdev->stats.rx_dropped++;
  1953. goto release_desc;
  1954. }
  1955. if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
  1956. addr64 = RX_DMA_GET_ADDR64(trxd.rxd2);
  1957. dma_unmap_single(eth->dma_dev, ((u64)trxd.rxd1 | addr64),
  1958. ring->buf_size, DMA_FROM_DEVICE);
  1959. skb = build_skb(data, ring->frag_size);
  1960. if (unlikely(!skb)) {
  1961. netdev->stats.rx_dropped++;
  1962. skb_free_frag(data);
  1963. goto skip_rx;
  1964. }
  1965. skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
  1966. skb_put(skb, pktlen);
  1967. }
  1968. skb->dev = netdev;
  1969. bytes += skb->len;
  1970. if (mtk_is_netsys_v3_or_greater(eth)) {
  1971. reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
  1972. hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
  1973. if (hash != MTK_RXD5_FOE_ENTRY)
  1974. skb_set_hash(skb, jhash_1word(hash, 0),
  1975. PKT_HASH_TYPE_L4);
  1976. rxdcsum = &trxd.rxd3;
  1977. } else {
  1978. reason = FIELD_GET(MTK_RXD4_PPE_CPU_REASON, trxd.rxd4);
  1979. hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
  1980. if (hash != MTK_RXD4_FOE_ENTRY)
  1981. skb_set_hash(skb, jhash_1word(hash, 0),
  1982. PKT_HASH_TYPE_L4);
  1983. rxdcsum = &trxd.rxd4;
  1984. }
  1985. if (*rxdcsum & eth->soc->rx.dma_l4_valid)
  1986. skb->ip_summed = CHECKSUM_UNNECESSARY;
  1987. else
  1988. skb_checksum_none_assert(skb);
  1989. skb->protocol = eth_type_trans(skb, netdev);
  1990. /* When using VLAN untagging in combination with DSA, the
  1991. * hardware treats the MTK special tag as a VLAN and untags it.
  1992. */
  1993. if (mtk_is_netsys_v1(eth) && (trxd.rxd2 & RX_DMA_VTAG) &&
  1994. netdev_uses_dsa(netdev)) {
  1995. unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
  1996. if (port < ARRAY_SIZE(eth->dsa_meta) &&
  1997. eth->dsa_meta[port])
  1998. skb_dst_set_noref(skb, &eth->dsa_meta[port]->dst);
  1999. }
  2000. if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
  2001. mtk_ppe_check_skb(eth->ppe[ppe_idx], skb, hash);
  2002. skb_record_rx_queue(skb, 0);
  2003. napi_gro_receive(napi, skb);
  2004. skip_rx:
  2005. ring->data[idx] = new_data;
  2006. rxd->rxd1 = (unsigned int)dma_addr;
  2007. release_desc:
  2008. if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA)) {
  2009. if (unlikely(dma_addr == DMA_MAPPING_ERROR))
  2010. addr64 = FIELD_GET(RX_DMA_ADDR64_MASK,
  2011. rxd->rxd2);
  2012. else
  2013. addr64 = RX_DMA_PREP_ADDR64(dma_addr);
  2014. }
  2015. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  2016. rxd->rxd2 = RX_DMA_LSO;
  2017. else
  2018. rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size) | addr64;
  2019. ring->calc_idx = idx;
  2020. done++;
  2021. }
  2022. rx_done:
  2023. if (done) {
  2024. /* make sure that all changes to the dma ring are flushed before
  2025. * we continue
  2026. */
  2027. wmb();
  2028. mtk_update_rx_cpu_idx(eth);
  2029. }
  2030. eth->rx_packets += done;
  2031. eth->rx_bytes += bytes;
  2032. dim_update_sample(eth->rx_events, eth->rx_packets, eth->rx_bytes,
  2033. &dim_sample);
  2034. net_dim(&eth->rx_dim, &dim_sample);
  2035. if (xdp_flush)
  2036. xdp_do_flush();
  2037. return done;
  2038. }
  2039. struct mtk_poll_state {
  2040. struct netdev_queue *txq;
  2041. unsigned int total;
  2042. unsigned int done;
  2043. unsigned int bytes;
  2044. };
  2045. static void
  2046. mtk_poll_tx_done(struct mtk_eth *eth, struct mtk_poll_state *state, u8 mac,
  2047. struct sk_buff *skb)
  2048. {
  2049. struct netdev_queue *txq;
  2050. struct net_device *dev;
  2051. unsigned int bytes = skb->len;
  2052. state->total++;
  2053. eth->tx_packets++;
  2054. eth->tx_bytes += bytes;
  2055. dev = eth->netdev[mac];
  2056. if (!dev)
  2057. return;
  2058. txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
  2059. if (state->txq == txq) {
  2060. state->done++;
  2061. state->bytes += bytes;
  2062. return;
  2063. }
  2064. if (state->txq)
  2065. netdev_tx_completed_queue(state->txq, state->done, state->bytes);
  2066. state->txq = txq;
  2067. state->done = 1;
  2068. state->bytes = bytes;
  2069. }
  2070. static int mtk_poll_tx_qdma(struct mtk_eth *eth, int budget,
  2071. struct mtk_poll_state *state)
  2072. {
  2073. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  2074. struct mtk_tx_ring *ring = &eth->tx_ring;
  2075. struct mtk_tx_buf *tx_buf;
  2076. struct xdp_frame_bulk bq;
  2077. struct mtk_tx_dma *desc;
  2078. u32 cpu, dma;
  2079. cpu = ring->last_free_ptr;
  2080. dma = mtk_r32(eth, reg_map->qdma.drx_ptr);
  2081. desc = mtk_qdma_phys_to_virt(ring, cpu);
  2082. xdp_frame_bulk_init(&bq);
  2083. while ((cpu != dma) && budget) {
  2084. u32 next_cpu = desc->txd2;
  2085. desc = mtk_qdma_phys_to_virt(ring, desc->txd2);
  2086. if ((desc->txd3 & TX_DMA_OWNER_CPU) == 0)
  2087. break;
  2088. tx_buf = mtk_desc_to_tx_buf(ring, desc,
  2089. eth->soc->tx.desc_size);
  2090. if (!tx_buf->data)
  2091. break;
  2092. if (tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
  2093. if (tx_buf->type == MTK_TYPE_SKB)
  2094. mtk_poll_tx_done(eth, state, tx_buf->mac_id,
  2095. tx_buf->data);
  2096. budget--;
  2097. }
  2098. mtk_tx_unmap(eth, tx_buf, &bq, true);
  2099. ring->last_free = desc;
  2100. atomic_inc(&ring->free_count);
  2101. cpu = next_cpu;
  2102. }
  2103. xdp_flush_frame_bulk(&bq);
  2104. ring->last_free_ptr = cpu;
  2105. mtk_w32(eth, cpu, reg_map->qdma.crx_ptr);
  2106. return budget;
  2107. }
  2108. static int mtk_poll_tx_pdma(struct mtk_eth *eth, int budget,
  2109. struct mtk_poll_state *state)
  2110. {
  2111. struct mtk_tx_ring *ring = &eth->tx_ring;
  2112. struct mtk_tx_buf *tx_buf;
  2113. struct xdp_frame_bulk bq;
  2114. struct mtk_tx_dma *desc;
  2115. u32 cpu, dma;
  2116. cpu = ring->cpu_idx;
  2117. dma = mtk_r32(eth, MT7628_TX_DTX_IDX0);
  2118. xdp_frame_bulk_init(&bq);
  2119. while ((cpu != dma) && budget) {
  2120. tx_buf = &ring->buf[cpu];
  2121. if (!tx_buf->data)
  2122. break;
  2123. if (tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
  2124. if (tx_buf->type == MTK_TYPE_SKB)
  2125. mtk_poll_tx_done(eth, state, 0, tx_buf->data);
  2126. budget--;
  2127. }
  2128. mtk_tx_unmap(eth, tx_buf, &bq, true);
  2129. desc = ring->dma + cpu * eth->soc->tx.desc_size;
  2130. ring->last_free = desc;
  2131. atomic_inc(&ring->free_count);
  2132. cpu = NEXT_DESP_IDX(cpu, ring->dma_size);
  2133. }
  2134. xdp_flush_frame_bulk(&bq);
  2135. ring->cpu_idx = cpu;
  2136. return budget;
  2137. }
  2138. static int mtk_poll_tx(struct mtk_eth *eth, int budget)
  2139. {
  2140. struct mtk_tx_ring *ring = &eth->tx_ring;
  2141. struct dim_sample dim_sample = {};
  2142. struct mtk_poll_state state = {};
  2143. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  2144. budget = mtk_poll_tx_qdma(eth, budget, &state);
  2145. else
  2146. budget = mtk_poll_tx_pdma(eth, budget, &state);
  2147. if (state.txq)
  2148. netdev_tx_completed_queue(state.txq, state.done, state.bytes);
  2149. dim_update_sample(eth->tx_events, eth->tx_packets, eth->tx_bytes,
  2150. &dim_sample);
  2151. net_dim(&eth->tx_dim, &dim_sample);
  2152. if (mtk_queue_stopped(eth) &&
  2153. (atomic_read(&ring->free_count) > ring->thresh))
  2154. mtk_wake_queue(eth);
  2155. return state.total;
  2156. }
  2157. static void mtk_handle_status_irq(struct mtk_eth *eth)
  2158. {
  2159. u32 status2 = mtk_r32(eth, MTK_INT_STATUS2);
  2160. if (unlikely(status2 & (MTK_GDM1_AF | MTK_GDM2_AF))) {
  2161. mtk_stats_update(eth);
  2162. mtk_w32(eth, (MTK_GDM1_AF | MTK_GDM2_AF),
  2163. MTK_INT_STATUS2);
  2164. }
  2165. }
  2166. static int mtk_napi_tx(struct napi_struct *napi, int budget)
  2167. {
  2168. struct mtk_eth *eth = container_of(napi, struct mtk_eth, tx_napi);
  2169. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  2170. int tx_done = 0;
  2171. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  2172. mtk_handle_status_irq(eth);
  2173. mtk_w32(eth, MTK_TX_DONE_INT, reg_map->tx_irq_status);
  2174. tx_done = mtk_poll_tx(eth, budget);
  2175. if (unlikely(netif_msg_intr(eth))) {
  2176. dev_info(eth->dev,
  2177. "done tx %d, intr 0x%08x/0x%x\n", tx_done,
  2178. mtk_r32(eth, reg_map->tx_irq_status),
  2179. mtk_r32(eth, reg_map->tx_irq_mask));
  2180. }
  2181. if (tx_done == budget)
  2182. return budget;
  2183. if (mtk_r32(eth, reg_map->tx_irq_status) & MTK_TX_DONE_INT)
  2184. return budget;
  2185. if (napi_complete_done(napi, tx_done))
  2186. mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
  2187. return tx_done;
  2188. }
  2189. static int mtk_napi_rx(struct napi_struct *napi, int budget)
  2190. {
  2191. struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
  2192. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  2193. int rx_done_total = 0;
  2194. mtk_handle_status_irq(eth);
  2195. do {
  2196. int rx_done;
  2197. mtk_w32(eth, eth->soc->rx.irq_done_mask,
  2198. reg_map->pdma.irq_status);
  2199. rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
  2200. rx_done_total += rx_done;
  2201. if (unlikely(netif_msg_intr(eth))) {
  2202. dev_info(eth->dev,
  2203. "done rx %d, intr 0x%08x/0x%x\n", rx_done,
  2204. mtk_r32(eth, reg_map->pdma.irq_status),
  2205. mtk_r32(eth, reg_map->pdma.irq_mask));
  2206. }
  2207. if (rx_done_total == budget)
  2208. return budget;
  2209. } while (mtk_r32(eth, reg_map->pdma.irq_status) &
  2210. eth->soc->rx.irq_done_mask);
  2211. if (napi_complete_done(napi, rx_done_total))
  2212. mtk_rx_irq_enable(eth, eth->soc->rx.irq_done_mask);
  2213. return rx_done_total;
  2214. }
  2215. static int mtk_tx_alloc(struct mtk_eth *eth)
  2216. {
  2217. const struct mtk_soc_data *soc = eth->soc;
  2218. struct mtk_tx_ring *ring = &eth->tx_ring;
  2219. int i, sz = soc->tx.desc_size;
  2220. struct mtk_tx_dma_v2 *txd;
  2221. int ring_size;
  2222. u32 ofs, val;
  2223. if (MTK_HAS_CAPS(soc->caps, MTK_QDMA))
  2224. ring_size = MTK_QDMA_RING_SIZE;
  2225. else
  2226. ring_size = soc->tx.dma_size;
  2227. ring->buf = kzalloc_objs(*ring->buf, ring_size);
  2228. if (!ring->buf)
  2229. goto no_tx_mem;
  2230. ring->dma = mtk_dma_ring_alloc(eth, ring_size * sz, &ring->phys, true);
  2231. if (!ring->dma)
  2232. goto no_tx_mem;
  2233. for (i = 0; i < ring_size; i++) {
  2234. int next = (i + 1) % ring_size;
  2235. u32 next_ptr = ring->phys + next * sz;
  2236. txd = ring->dma + i * sz;
  2237. txd->txd2 = next_ptr;
  2238. txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
  2239. txd->txd4 = 0;
  2240. if (mtk_is_netsys_v2_or_greater(eth)) {
  2241. txd->txd5 = 0;
  2242. txd->txd6 = 0;
  2243. txd->txd7 = 0;
  2244. txd->txd8 = 0;
  2245. }
  2246. }
  2247. /* On MT7688 (PDMA only) this driver uses the ring->dma structs
  2248. * only as the framework. The real HW descriptors are the PDMA
  2249. * descriptors in ring->dma_pdma.
  2250. */
  2251. if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  2252. ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, ring_size * sz,
  2253. &ring->phys_pdma, GFP_KERNEL);
  2254. if (!ring->dma_pdma)
  2255. goto no_tx_mem;
  2256. for (i = 0; i < ring_size; i++) {
  2257. ring->dma_pdma[i].txd2 = TX_DMA_DESP2_DEF;
  2258. ring->dma_pdma[i].txd4 = 0;
  2259. }
  2260. }
  2261. ring->dma_size = ring_size;
  2262. atomic_set(&ring->free_count, ring_size - 2);
  2263. ring->next_free = ring->dma;
  2264. ring->last_free = (void *)txd;
  2265. ring->last_free_ptr = (u32)(ring->phys + ((ring_size - 1) * sz));
  2266. ring->thresh = MAX_SKB_FRAGS;
  2267. /* make sure that all changes to the dma ring are flushed before we
  2268. * continue
  2269. */
  2270. wmb();
  2271. if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  2272. mtk_w32(eth, ring->phys, soc->reg_map->qdma.ctx_ptr);
  2273. mtk_w32(eth, ring->phys, soc->reg_map->qdma.dtx_ptr);
  2274. mtk_w32(eth,
  2275. ring->phys + ((ring_size - 1) * sz),
  2276. soc->reg_map->qdma.crx_ptr);
  2277. mtk_w32(eth, ring->last_free_ptr, soc->reg_map->qdma.drx_ptr);
  2278. for (i = 0, ofs = 0; i < MTK_QDMA_NUM_QUEUES; i++) {
  2279. val = (QDMA_RES_THRES << 8) | QDMA_RES_THRES;
  2280. mtk_w32(eth, val, soc->reg_map->qdma.qtx_cfg + ofs);
  2281. val = MTK_QTX_SCH_MIN_RATE_EN |
  2282. /* minimum: 10 Mbps */
  2283. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
  2284. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
  2285. MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
  2286. if (mtk_is_netsys_v1(eth))
  2287. val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
  2288. mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
  2289. ofs += MTK_QTX_OFFSET;
  2290. }
  2291. val = MTK_QDMA_TX_SCH_MAX_WFQ | (MTK_QDMA_TX_SCH_MAX_WFQ << 16);
  2292. mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate);
  2293. if (mtk_is_netsys_v2_or_greater(eth))
  2294. mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate + 4);
  2295. } else {
  2296. mtk_w32(eth, ring->phys_pdma, MT7628_TX_BASE_PTR0);
  2297. mtk_w32(eth, ring_size, MT7628_TX_MAX_CNT0);
  2298. mtk_w32(eth, 0, MT7628_TX_CTX_IDX0);
  2299. mtk_w32(eth, MT7628_PST_DTX_IDX0, soc->reg_map->pdma.rst_idx);
  2300. }
  2301. return 0;
  2302. no_tx_mem:
  2303. return -ENOMEM;
  2304. }
  2305. static void mtk_tx_clean(struct mtk_eth *eth)
  2306. {
  2307. const struct mtk_soc_data *soc = eth->soc;
  2308. struct mtk_tx_ring *ring = &eth->tx_ring;
  2309. int i;
  2310. if (ring->buf) {
  2311. for (i = 0; i < ring->dma_size; i++)
  2312. mtk_tx_unmap(eth, &ring->buf[i], NULL, false);
  2313. kfree(ring->buf);
  2314. ring->buf = NULL;
  2315. }
  2316. if (ring->dma) {
  2317. mtk_dma_ring_free(eth, ring->dma_size * soc->tx.desc_size,
  2318. ring->dma, ring->phys, true);
  2319. ring->dma = NULL;
  2320. }
  2321. if (ring->dma_pdma) {
  2322. dma_free_coherent(eth->dma_dev,
  2323. ring->dma_size * soc->tx.desc_size,
  2324. ring->dma_pdma, ring->phys_pdma);
  2325. ring->dma_pdma = NULL;
  2326. }
  2327. }
  2328. static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag)
  2329. {
  2330. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  2331. const struct mtk_soc_data *soc = eth->soc;
  2332. struct mtk_rx_ring *ring;
  2333. int rx_data_len, rx_dma_size;
  2334. int i;
  2335. if (rx_flag == MTK_RX_FLAGS_QDMA) {
  2336. if (ring_no)
  2337. return -EINVAL;
  2338. ring = &eth->rx_ring_qdma;
  2339. } else {
  2340. ring = &eth->rx_ring[ring_no];
  2341. }
  2342. if (rx_flag == MTK_RX_FLAGS_HWLRO) {
  2343. rx_data_len = MTK_MAX_LRO_RX_LENGTH;
  2344. rx_dma_size = MTK_HW_LRO_DMA_SIZE;
  2345. } else {
  2346. rx_data_len = ETH_DATA_LEN;
  2347. rx_dma_size = soc->rx.dma_size;
  2348. }
  2349. ring->frag_size = mtk_max_frag_size(rx_data_len);
  2350. ring->buf_size = mtk_max_buf_size(ring->frag_size);
  2351. ring->data = kcalloc(rx_dma_size, sizeof(*ring->data),
  2352. GFP_KERNEL);
  2353. if (!ring->data)
  2354. return -ENOMEM;
  2355. if (mtk_page_pool_enabled(eth)) {
  2356. struct page_pool *pp;
  2357. pp = mtk_create_page_pool(eth, &ring->xdp_q, ring_no,
  2358. rx_dma_size);
  2359. if (IS_ERR(pp))
  2360. return PTR_ERR(pp);
  2361. ring->page_pool = pp;
  2362. }
  2363. ring->dma = mtk_dma_ring_alloc(eth,
  2364. rx_dma_size * eth->soc->rx.desc_size,
  2365. &ring->phys,
  2366. rx_flag == MTK_RX_FLAGS_NORMAL);
  2367. if (!ring->dma)
  2368. return -ENOMEM;
  2369. for (i = 0; i < rx_dma_size; i++) {
  2370. struct mtk_rx_dma_v2 *rxd;
  2371. dma_addr_t dma_addr;
  2372. void *data;
  2373. rxd = ring->dma + i * eth->soc->rx.desc_size;
  2374. if (ring->page_pool) {
  2375. data = mtk_page_pool_get_buff(ring->page_pool,
  2376. &dma_addr, GFP_KERNEL);
  2377. if (!data)
  2378. return -ENOMEM;
  2379. } else {
  2380. if (ring->frag_size <= PAGE_SIZE)
  2381. data = netdev_alloc_frag(ring->frag_size);
  2382. else
  2383. data = mtk_max_lro_buf_alloc(GFP_KERNEL);
  2384. if (!data)
  2385. return -ENOMEM;
  2386. dma_addr = dma_map_single(eth->dma_dev,
  2387. data + NET_SKB_PAD + eth->ip_align,
  2388. ring->buf_size, DMA_FROM_DEVICE);
  2389. if (unlikely(dma_mapping_error(eth->dma_dev,
  2390. dma_addr))) {
  2391. skb_free_frag(data);
  2392. return -ENOMEM;
  2393. }
  2394. }
  2395. rxd->rxd1 = (unsigned int)dma_addr;
  2396. ring->data[i] = data;
  2397. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  2398. rxd->rxd2 = RX_DMA_LSO;
  2399. else
  2400. rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
  2401. if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
  2402. rxd->rxd2 |= RX_DMA_PREP_ADDR64(dma_addr);
  2403. rxd->rxd3 = 0;
  2404. rxd->rxd4 = 0;
  2405. if (mtk_is_netsys_v3_or_greater(eth)) {
  2406. rxd->rxd5 = 0;
  2407. rxd->rxd6 = 0;
  2408. rxd->rxd7 = 0;
  2409. rxd->rxd8 = 0;
  2410. }
  2411. }
  2412. ring->dma_size = rx_dma_size;
  2413. ring->calc_idx_update = false;
  2414. ring->calc_idx = rx_dma_size - 1;
  2415. if (rx_flag == MTK_RX_FLAGS_QDMA)
  2416. ring->crx_idx_reg = reg_map->qdma.qcrx_ptr +
  2417. ring_no * MTK_QRX_OFFSET;
  2418. else
  2419. ring->crx_idx_reg = reg_map->pdma.pcrx_ptr +
  2420. ring_no * MTK_QRX_OFFSET;
  2421. /* make sure that all changes to the dma ring are flushed before we
  2422. * continue
  2423. */
  2424. wmb();
  2425. if (rx_flag == MTK_RX_FLAGS_QDMA) {
  2426. mtk_w32(eth, ring->phys,
  2427. reg_map->qdma.rx_ptr + ring_no * MTK_QRX_OFFSET);
  2428. mtk_w32(eth, rx_dma_size,
  2429. reg_map->qdma.rx_cnt_cfg + ring_no * MTK_QRX_OFFSET);
  2430. mtk_w32(eth, MTK_PST_DRX_IDX_CFG(ring_no),
  2431. reg_map->qdma.rst_idx);
  2432. } else {
  2433. mtk_w32(eth, ring->phys,
  2434. reg_map->pdma.rx_ptr + ring_no * MTK_QRX_OFFSET);
  2435. mtk_w32(eth, rx_dma_size,
  2436. reg_map->pdma.rx_cnt_cfg + ring_no * MTK_QRX_OFFSET);
  2437. mtk_w32(eth, MTK_PST_DRX_IDX_CFG(ring_no),
  2438. reg_map->pdma.rst_idx);
  2439. }
  2440. mtk_w32(eth, ring->calc_idx, ring->crx_idx_reg);
  2441. return 0;
  2442. }
  2443. static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring, bool in_sram)
  2444. {
  2445. u64 addr64 = 0;
  2446. int i;
  2447. if (ring->data && ring->dma) {
  2448. for (i = 0; i < ring->dma_size; i++) {
  2449. struct mtk_rx_dma *rxd;
  2450. if (!ring->data[i])
  2451. continue;
  2452. rxd = ring->dma + i * eth->soc->rx.desc_size;
  2453. if (!rxd->rxd1)
  2454. continue;
  2455. if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
  2456. addr64 = RX_DMA_GET_ADDR64(rxd->rxd2);
  2457. dma_unmap_single(eth->dma_dev, ((u64)rxd->rxd1 | addr64),
  2458. ring->buf_size, DMA_FROM_DEVICE);
  2459. mtk_rx_put_buff(ring, ring->data[i], false);
  2460. }
  2461. kfree(ring->data);
  2462. ring->data = NULL;
  2463. }
  2464. if (ring->dma) {
  2465. mtk_dma_ring_free(eth, ring->dma_size * eth->soc->rx.desc_size,
  2466. ring->dma, ring->phys, in_sram);
  2467. ring->dma = NULL;
  2468. }
  2469. if (ring->page_pool) {
  2470. if (xdp_rxq_info_is_reg(&ring->xdp_q))
  2471. xdp_rxq_info_unreg(&ring->xdp_q);
  2472. page_pool_destroy(ring->page_pool);
  2473. ring->page_pool = NULL;
  2474. }
  2475. }
  2476. static int mtk_hwlro_rx_init(struct mtk_eth *eth)
  2477. {
  2478. int i;
  2479. u32 ring_ctrl_dw1 = 0, ring_ctrl_dw2 = 0, ring_ctrl_dw3 = 0;
  2480. u32 lro_ctrl_dw0 = 0, lro_ctrl_dw3 = 0;
  2481. /* set LRO rings to auto-learn modes */
  2482. ring_ctrl_dw2 |= MTK_RING_AUTO_LERAN_MODE;
  2483. /* validate LRO ring */
  2484. ring_ctrl_dw2 |= MTK_RING_VLD;
  2485. /* set AGE timer (unit: 20us) */
  2486. ring_ctrl_dw2 |= MTK_RING_AGE_TIME_H;
  2487. ring_ctrl_dw1 |= MTK_RING_AGE_TIME_L;
  2488. /* set max AGG timer (unit: 20us) */
  2489. ring_ctrl_dw2 |= MTK_RING_MAX_AGG_TIME;
  2490. /* set max LRO AGG count */
  2491. ring_ctrl_dw2 |= MTK_RING_MAX_AGG_CNT_L;
  2492. ring_ctrl_dw3 |= MTK_RING_MAX_AGG_CNT_H;
  2493. for (i = 1; i < MTK_MAX_RX_RING_NUM; i++) {
  2494. mtk_w32(eth, ring_ctrl_dw1, MTK_LRO_CTRL_DW1_CFG(i));
  2495. mtk_w32(eth, ring_ctrl_dw2, MTK_LRO_CTRL_DW2_CFG(i));
  2496. mtk_w32(eth, ring_ctrl_dw3, MTK_LRO_CTRL_DW3_CFG(i));
  2497. }
  2498. /* IPv4 checksum update enable */
  2499. lro_ctrl_dw0 |= MTK_L3_CKS_UPD_EN;
  2500. /* switch priority comparison to packet count mode */
  2501. lro_ctrl_dw0 |= MTK_LRO_ALT_PKT_CNT_MODE;
  2502. /* bandwidth threshold setting */
  2503. mtk_w32(eth, MTK_HW_LRO_BW_THRE, MTK_PDMA_LRO_CTRL_DW2);
  2504. /* auto-learn score delta setting */
  2505. mtk_w32(eth, MTK_HW_LRO_REPLACE_DELTA, MTK_PDMA_LRO_ALT_SCORE_DELTA);
  2506. /* set refresh timer for altering flows to 1 sec. (unit: 20us) */
  2507. mtk_w32(eth, (MTK_HW_LRO_TIMER_UNIT << 16) | MTK_HW_LRO_REFRESH_TIME,
  2508. MTK_PDMA_LRO_ALT_REFRESH_TIMER);
  2509. /* set HW LRO mode & the max aggregation count for rx packets */
  2510. lro_ctrl_dw3 |= MTK_ADMA_MODE | (MTK_HW_LRO_MAX_AGG_CNT & 0xff);
  2511. /* the minimal remaining room of SDL0 in RXD for lro aggregation */
  2512. lro_ctrl_dw3 |= MTK_LRO_MIN_RXD_SDL;
  2513. /* enable HW LRO */
  2514. lro_ctrl_dw0 |= MTK_LRO_EN;
  2515. mtk_w32(eth, lro_ctrl_dw3, MTK_PDMA_LRO_CTRL_DW3);
  2516. mtk_w32(eth, lro_ctrl_dw0, MTK_PDMA_LRO_CTRL_DW0);
  2517. return 0;
  2518. }
  2519. static void mtk_hwlro_rx_uninit(struct mtk_eth *eth)
  2520. {
  2521. int i;
  2522. u32 val;
  2523. /* relinquish lro rings, flush aggregated packets */
  2524. mtk_w32(eth, MTK_LRO_RING_RELINQUISH_REQ, MTK_PDMA_LRO_CTRL_DW0);
  2525. /* wait for relinquishments done */
  2526. for (i = 0; i < 10; i++) {
  2527. val = mtk_r32(eth, MTK_PDMA_LRO_CTRL_DW0);
  2528. if (val & MTK_LRO_RING_RELINQUISH_DONE) {
  2529. msleep(20);
  2530. continue;
  2531. }
  2532. break;
  2533. }
  2534. /* invalidate lro rings */
  2535. for (i = 1; i < MTK_MAX_RX_RING_NUM; i++)
  2536. mtk_w32(eth, 0, MTK_LRO_CTRL_DW2_CFG(i));
  2537. /* disable HW LRO */
  2538. mtk_w32(eth, 0, MTK_PDMA_LRO_CTRL_DW0);
  2539. }
  2540. static void mtk_hwlro_val_ipaddr(struct mtk_eth *eth, int idx, __be32 ip)
  2541. {
  2542. u32 reg_val;
  2543. reg_val = mtk_r32(eth, MTK_LRO_CTRL_DW2_CFG(idx));
  2544. /* invalidate the IP setting */
  2545. mtk_w32(eth, (reg_val & ~MTK_RING_MYIP_VLD), MTK_LRO_CTRL_DW2_CFG(idx));
  2546. mtk_w32(eth, ip, MTK_LRO_DIP_DW0_CFG(idx));
  2547. /* validate the IP setting */
  2548. mtk_w32(eth, (reg_val | MTK_RING_MYIP_VLD), MTK_LRO_CTRL_DW2_CFG(idx));
  2549. }
  2550. static void mtk_hwlro_inval_ipaddr(struct mtk_eth *eth, int idx)
  2551. {
  2552. u32 reg_val;
  2553. reg_val = mtk_r32(eth, MTK_LRO_CTRL_DW2_CFG(idx));
  2554. /* invalidate the IP setting */
  2555. mtk_w32(eth, (reg_val & ~MTK_RING_MYIP_VLD), MTK_LRO_CTRL_DW2_CFG(idx));
  2556. mtk_w32(eth, 0, MTK_LRO_DIP_DW0_CFG(idx));
  2557. }
  2558. static int mtk_hwlro_get_ip_cnt(struct mtk_mac *mac)
  2559. {
  2560. int cnt = 0;
  2561. int i;
  2562. for (i = 0; i < MTK_MAX_LRO_IP_CNT; i++) {
  2563. if (mac->hwlro_ip[i])
  2564. cnt++;
  2565. }
  2566. return cnt;
  2567. }
  2568. static int mtk_hwlro_add_ipaddr(struct net_device *dev,
  2569. struct ethtool_rxnfc *cmd)
  2570. {
  2571. struct ethtool_rx_flow_spec *fsp =
  2572. (struct ethtool_rx_flow_spec *)&cmd->fs;
  2573. struct mtk_mac *mac = netdev_priv(dev);
  2574. struct mtk_eth *eth = mac->hw;
  2575. int hwlro_idx;
  2576. if ((fsp->flow_type != TCP_V4_FLOW) ||
  2577. (!fsp->h_u.tcp_ip4_spec.ip4dst) ||
  2578. (fsp->location > 1))
  2579. return -EINVAL;
  2580. mac->hwlro_ip[fsp->location] = htonl(fsp->h_u.tcp_ip4_spec.ip4dst);
  2581. hwlro_idx = (mac->id * MTK_MAX_LRO_IP_CNT) + fsp->location;
  2582. mac->hwlro_ip_cnt = mtk_hwlro_get_ip_cnt(mac);
  2583. mtk_hwlro_val_ipaddr(eth, hwlro_idx, mac->hwlro_ip[fsp->location]);
  2584. return 0;
  2585. }
  2586. static int mtk_hwlro_del_ipaddr(struct net_device *dev,
  2587. struct ethtool_rxnfc *cmd)
  2588. {
  2589. struct ethtool_rx_flow_spec *fsp =
  2590. (struct ethtool_rx_flow_spec *)&cmd->fs;
  2591. struct mtk_mac *mac = netdev_priv(dev);
  2592. struct mtk_eth *eth = mac->hw;
  2593. int hwlro_idx;
  2594. if (fsp->location > 1)
  2595. return -EINVAL;
  2596. mac->hwlro_ip[fsp->location] = 0;
  2597. hwlro_idx = (mac->id * MTK_MAX_LRO_IP_CNT) + fsp->location;
  2598. mac->hwlro_ip_cnt = mtk_hwlro_get_ip_cnt(mac);
  2599. mtk_hwlro_inval_ipaddr(eth, hwlro_idx);
  2600. return 0;
  2601. }
  2602. static void mtk_hwlro_netdev_disable(struct net_device *dev)
  2603. {
  2604. struct mtk_mac *mac = netdev_priv(dev);
  2605. struct mtk_eth *eth = mac->hw;
  2606. int i, hwlro_idx;
  2607. for (i = 0; i < MTK_MAX_LRO_IP_CNT; i++) {
  2608. mac->hwlro_ip[i] = 0;
  2609. hwlro_idx = (mac->id * MTK_MAX_LRO_IP_CNT) + i;
  2610. mtk_hwlro_inval_ipaddr(eth, hwlro_idx);
  2611. }
  2612. mac->hwlro_ip_cnt = 0;
  2613. }
  2614. static int mtk_hwlro_get_fdir_entry(struct net_device *dev,
  2615. struct ethtool_rxnfc *cmd)
  2616. {
  2617. struct mtk_mac *mac = netdev_priv(dev);
  2618. struct ethtool_rx_flow_spec *fsp =
  2619. (struct ethtool_rx_flow_spec *)&cmd->fs;
  2620. if (fsp->location >= ARRAY_SIZE(mac->hwlro_ip))
  2621. return -EINVAL;
  2622. /* only tcp dst ipv4 is meaningful, others are meaningless */
  2623. fsp->flow_type = TCP_V4_FLOW;
  2624. fsp->h_u.tcp_ip4_spec.ip4dst = ntohl(mac->hwlro_ip[fsp->location]);
  2625. fsp->m_u.tcp_ip4_spec.ip4dst = 0;
  2626. fsp->h_u.tcp_ip4_spec.ip4src = 0;
  2627. fsp->m_u.tcp_ip4_spec.ip4src = 0xffffffff;
  2628. fsp->h_u.tcp_ip4_spec.psrc = 0;
  2629. fsp->m_u.tcp_ip4_spec.psrc = 0xffff;
  2630. fsp->h_u.tcp_ip4_spec.pdst = 0;
  2631. fsp->m_u.tcp_ip4_spec.pdst = 0xffff;
  2632. fsp->h_u.tcp_ip4_spec.tos = 0;
  2633. fsp->m_u.tcp_ip4_spec.tos = 0xff;
  2634. return 0;
  2635. }
  2636. static int mtk_hwlro_get_fdir_all(struct net_device *dev,
  2637. struct ethtool_rxnfc *cmd,
  2638. u32 *rule_locs)
  2639. {
  2640. struct mtk_mac *mac = netdev_priv(dev);
  2641. int cnt = 0;
  2642. int i;
  2643. for (i = 0; i < MTK_MAX_LRO_IP_CNT; i++) {
  2644. if (cnt == cmd->rule_cnt)
  2645. return -EMSGSIZE;
  2646. if (mac->hwlro_ip[i]) {
  2647. rule_locs[cnt] = i;
  2648. cnt++;
  2649. }
  2650. }
  2651. cmd->rule_cnt = cnt;
  2652. return 0;
  2653. }
  2654. static netdev_features_t mtk_fix_features(struct net_device *dev,
  2655. netdev_features_t features)
  2656. {
  2657. if (!(features & NETIF_F_LRO)) {
  2658. struct mtk_mac *mac = netdev_priv(dev);
  2659. int ip_cnt = mtk_hwlro_get_ip_cnt(mac);
  2660. if (ip_cnt) {
  2661. netdev_info(dev, "RX flow is programmed, LRO should keep on\n");
  2662. features |= NETIF_F_LRO;
  2663. }
  2664. }
  2665. return features;
  2666. }
  2667. static int mtk_set_features(struct net_device *dev, netdev_features_t features)
  2668. {
  2669. netdev_features_t diff = dev->features ^ features;
  2670. if ((diff & NETIF_F_LRO) && !(features & NETIF_F_LRO))
  2671. mtk_hwlro_netdev_disable(dev);
  2672. return 0;
  2673. }
  2674. /* wait for DMA to finish whatever it is doing before we start using it again */
  2675. static int mtk_dma_busy_wait(struct mtk_eth *eth)
  2676. {
  2677. unsigned int reg;
  2678. int ret;
  2679. u32 val;
  2680. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  2681. reg = eth->soc->reg_map->qdma.glo_cfg;
  2682. else
  2683. reg = eth->soc->reg_map->pdma.glo_cfg;
  2684. ret = readx_poll_timeout_atomic(__raw_readl, eth->base + reg, val,
  2685. !(val & (MTK_RX_DMA_BUSY | MTK_TX_DMA_BUSY)),
  2686. 5, MTK_DMA_BUSY_TIMEOUT_US);
  2687. if (ret)
  2688. dev_err(eth->dev, "DMA init timeout\n");
  2689. return ret;
  2690. }
  2691. static int mtk_dma_init(struct mtk_eth *eth)
  2692. {
  2693. int err;
  2694. u32 i;
  2695. if (mtk_dma_busy_wait(eth))
  2696. return -EBUSY;
  2697. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  2698. /* QDMA needs scratch memory for internal reordering of the
  2699. * descriptors
  2700. */
  2701. err = mtk_init_fq_dma(eth);
  2702. if (err)
  2703. return err;
  2704. }
  2705. err = mtk_tx_alloc(eth);
  2706. if (err)
  2707. return err;
  2708. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  2709. err = mtk_rx_alloc(eth, 0, MTK_RX_FLAGS_QDMA);
  2710. if (err)
  2711. return err;
  2712. }
  2713. err = mtk_rx_alloc(eth, 0, MTK_RX_FLAGS_NORMAL);
  2714. if (err)
  2715. return err;
  2716. if (eth->hwlro) {
  2717. for (i = 1; i < MTK_MAX_RX_RING_NUM; i++) {
  2718. err = mtk_rx_alloc(eth, i, MTK_RX_FLAGS_HWLRO);
  2719. if (err)
  2720. return err;
  2721. }
  2722. err = mtk_hwlro_rx_init(eth);
  2723. if (err)
  2724. return err;
  2725. }
  2726. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  2727. /* Enable random early drop and set drop threshold
  2728. * automatically
  2729. */
  2730. mtk_w32(eth, FC_THRES_DROP_MODE | FC_THRES_DROP_EN |
  2731. FC_THRES_MIN, eth->soc->reg_map->qdma.fc_th);
  2732. mtk_w32(eth, 0x0, eth->soc->reg_map->qdma.hred);
  2733. }
  2734. return 0;
  2735. }
  2736. static void mtk_dma_free(struct mtk_eth *eth)
  2737. {
  2738. const struct mtk_soc_data *soc = eth->soc;
  2739. int i, j, txqs = 1;
  2740. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  2741. txqs = MTK_QDMA_NUM_QUEUES;
  2742. for (i = 0; i < MTK_MAX_DEVS; i++) {
  2743. if (!eth->netdev[i])
  2744. continue;
  2745. for (j = 0; j < txqs; j++)
  2746. netdev_tx_reset_subqueue(eth->netdev[i], j);
  2747. }
  2748. if (eth->scratch_ring) {
  2749. mtk_dma_ring_free(eth, soc->tx.fq_dma_size * soc->tx.desc_size,
  2750. eth->scratch_ring, eth->phy_scratch_ring,
  2751. true);
  2752. eth->scratch_ring = NULL;
  2753. eth->phy_scratch_ring = 0;
  2754. }
  2755. mtk_tx_clean(eth);
  2756. mtk_rx_clean(eth, &eth->rx_ring[0], true);
  2757. mtk_rx_clean(eth, &eth->rx_ring_qdma, false);
  2758. if (eth->hwlro) {
  2759. mtk_hwlro_rx_uninit(eth);
  2760. for (i = 1; i < MTK_MAX_RX_RING_NUM; i++)
  2761. mtk_rx_clean(eth, &eth->rx_ring[i], false);
  2762. }
  2763. for (i = 0; i < DIV_ROUND_UP(soc->tx.fq_dma_size, MTK_FQ_DMA_LENGTH); i++) {
  2764. kfree(eth->scratch_head[i]);
  2765. eth->scratch_head[i] = NULL;
  2766. }
  2767. }
  2768. static bool mtk_hw_reset_check(struct mtk_eth *eth)
  2769. {
  2770. u32 val = mtk_r32(eth, MTK_INT_STATUS2);
  2771. return (val & MTK_FE_INT_FQ_EMPTY) || (val & MTK_FE_INT_RFIFO_UF) ||
  2772. (val & MTK_FE_INT_RFIFO_OV) || (val & MTK_FE_INT_TSO_FAIL) ||
  2773. (val & MTK_FE_INT_TSO_ALIGN) || (val & MTK_FE_INT_TSO_ILLEGAL);
  2774. }
  2775. static void mtk_tx_timeout(struct net_device *dev, unsigned int txqueue)
  2776. {
  2777. struct mtk_mac *mac = netdev_priv(dev);
  2778. struct mtk_eth *eth = mac->hw;
  2779. if (test_bit(MTK_RESETTING, &eth->state))
  2780. return;
  2781. if (!mtk_hw_reset_check(eth))
  2782. return;
  2783. eth->netdev[mac->id]->stats.tx_errors++;
  2784. netif_err(eth, tx_err, dev, "transmit timed out\n");
  2785. schedule_work(&eth->pending_work);
  2786. }
  2787. static int mtk_get_irqs(struct platform_device *pdev, struct mtk_eth *eth)
  2788. {
  2789. int i;
  2790. /* future SoCs beginning with MT7988 should use named IRQs in dts */
  2791. eth->irq[MTK_FE_IRQ_TX] = platform_get_irq_byname_optional(pdev, "fe1");
  2792. eth->irq[MTK_FE_IRQ_RX] = platform_get_irq_byname_optional(pdev, "fe2");
  2793. if (eth->irq[MTK_FE_IRQ_TX] >= 0 && eth->irq[MTK_FE_IRQ_RX] >= 0)
  2794. return 0;
  2795. /* only use legacy mode if platform_get_irq_byname_optional returned -ENXIO */
  2796. if (eth->irq[MTK_FE_IRQ_TX] != -ENXIO)
  2797. return dev_err_probe(&pdev->dev, eth->irq[MTK_FE_IRQ_TX],
  2798. "Error requesting FE TX IRQ\n");
  2799. if (eth->irq[MTK_FE_IRQ_RX] != -ENXIO)
  2800. return dev_err_probe(&pdev->dev, eth->irq[MTK_FE_IRQ_RX],
  2801. "Error requesting FE RX IRQ\n");
  2802. if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT))
  2803. dev_warn(&pdev->dev, "legacy DT: missing interrupt-names.");
  2804. /* legacy way:
  2805. * On MTK_SHARED_INT SoCs (MT7621 + MT7628) the first IRQ is taken
  2806. * from devicetree and used for both RX and TX - it is shared.
  2807. * On SoCs with non-shared IRQs the first entry is not used,
  2808. * the second is for TX, and the third is for RX.
  2809. */
  2810. for (i = 0; i < MTK_FE_IRQ_NUM; i++) {
  2811. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT)) {
  2812. if (i == MTK_FE_IRQ_SHARED)
  2813. eth->irq[MTK_FE_IRQ_SHARED] = platform_get_irq(pdev, i);
  2814. else
  2815. eth->irq[i] = eth->irq[MTK_FE_IRQ_SHARED];
  2816. } else {
  2817. eth->irq[i] = platform_get_irq(pdev, i + 1);
  2818. }
  2819. if (eth->irq[i] < 0) {
  2820. dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
  2821. return -ENXIO;
  2822. }
  2823. }
  2824. return 0;
  2825. }
  2826. static irqreturn_t mtk_handle_irq_rx(int irq, void *_eth)
  2827. {
  2828. struct mtk_eth *eth = _eth;
  2829. eth->rx_events++;
  2830. if (likely(napi_schedule_prep(&eth->rx_napi))) {
  2831. mtk_rx_irq_disable(eth, eth->soc->rx.irq_done_mask);
  2832. __napi_schedule(&eth->rx_napi);
  2833. }
  2834. return IRQ_HANDLED;
  2835. }
  2836. static irqreturn_t mtk_handle_irq_tx(int irq, void *_eth)
  2837. {
  2838. struct mtk_eth *eth = _eth;
  2839. eth->tx_events++;
  2840. if (likely(napi_schedule_prep(&eth->tx_napi))) {
  2841. mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
  2842. __napi_schedule(&eth->tx_napi);
  2843. }
  2844. return IRQ_HANDLED;
  2845. }
  2846. static irqreturn_t mtk_handle_irq(int irq, void *_eth)
  2847. {
  2848. struct mtk_eth *eth = _eth;
  2849. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  2850. if (mtk_r32(eth, reg_map->pdma.irq_mask) &
  2851. eth->soc->rx.irq_done_mask) {
  2852. if (mtk_r32(eth, reg_map->pdma.irq_status) &
  2853. eth->soc->rx.irq_done_mask)
  2854. mtk_handle_irq_rx(irq, _eth);
  2855. }
  2856. if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
  2857. if (mtk_r32(eth, reg_map->tx_irq_status) & MTK_TX_DONE_INT)
  2858. mtk_handle_irq_tx(irq, _eth);
  2859. }
  2860. return IRQ_HANDLED;
  2861. }
  2862. #ifdef CONFIG_NET_POLL_CONTROLLER
  2863. static void mtk_poll_controller(struct net_device *dev)
  2864. {
  2865. struct mtk_mac *mac = netdev_priv(dev);
  2866. struct mtk_eth *eth = mac->hw;
  2867. mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
  2868. mtk_rx_irq_disable(eth, eth->soc->rx.irq_done_mask);
  2869. mtk_handle_irq_rx(eth->irq[MTK_FE_IRQ_RX], dev);
  2870. mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
  2871. mtk_rx_irq_enable(eth, eth->soc->rx.irq_done_mask);
  2872. }
  2873. #endif
  2874. static int mtk_start_dma(struct mtk_eth *eth)
  2875. {
  2876. u32 val, rx_2b_offset = (NET_IP_ALIGN == 2) ? MTK_RX_2B_OFFSET : 0;
  2877. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  2878. int err;
  2879. err = mtk_dma_init(eth);
  2880. if (err) {
  2881. mtk_dma_free(eth);
  2882. return err;
  2883. }
  2884. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  2885. val = mtk_r32(eth, reg_map->qdma.glo_cfg);
  2886. val |= MTK_TX_DMA_EN | MTK_RX_DMA_EN |
  2887. MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
  2888. MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
  2889. if (mtk_is_netsys_v2_or_greater(eth))
  2890. val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
  2891. MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
  2892. MTK_CHK_DDONE_EN;
  2893. else
  2894. val |= MTK_RX_BT_32DWORDS;
  2895. mtk_w32(eth, val, reg_map->qdma.glo_cfg);
  2896. mtk_w32(eth,
  2897. MTK_RX_DMA_EN | rx_2b_offset |
  2898. MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
  2899. reg_map->pdma.glo_cfg);
  2900. } else {
  2901. mtk_w32(eth, MTK_TX_WB_DDONE | MTK_TX_DMA_EN | MTK_RX_DMA_EN |
  2902. MTK_MULTI_EN | MTK_PDMA_SIZE_8DWORDS,
  2903. reg_map->pdma.glo_cfg);
  2904. }
  2905. return 0;
  2906. }
  2907. static void mtk_gdm_config(struct mtk_eth *eth, u32 id, u32 config)
  2908. {
  2909. u32 val;
  2910. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  2911. return;
  2912. val = mtk_r32(eth, MTK_GDMA_FWD_CFG(id));
  2913. /* default setup the forward port to send frame to PDMA */
  2914. val &= ~0xffff;
  2915. /* Enable RX checksum */
  2916. val |= MTK_GDMA_ICS_EN | MTK_GDMA_TCS_EN | MTK_GDMA_UCS_EN;
  2917. val |= config;
  2918. if (eth->netdev[id] && netdev_uses_dsa(eth->netdev[id]))
  2919. val |= MTK_GDMA_SPECIAL_TAG;
  2920. mtk_w32(eth, val, MTK_GDMA_FWD_CFG(id));
  2921. }
  2922. static bool mtk_uses_dsa(struct net_device *dev)
  2923. {
  2924. #if IS_ENABLED(CONFIG_NET_DSA)
  2925. return netdev_uses_dsa(dev) &&
  2926. dev->dsa_ptr->tag_ops->proto == DSA_TAG_PROTO_MTK;
  2927. #else
  2928. return false;
  2929. #endif
  2930. }
  2931. static int mtk_device_event(struct notifier_block *n, unsigned long event, void *ptr)
  2932. {
  2933. struct mtk_mac *mac = container_of(n, struct mtk_mac, device_notifier);
  2934. struct mtk_eth *eth = mac->hw;
  2935. struct net_device *dev = netdev_notifier_info_to_dev(ptr);
  2936. struct ethtool_link_ksettings s;
  2937. struct net_device *ldev;
  2938. struct list_head *iter;
  2939. struct dsa_port *dp;
  2940. if (event != NETDEV_CHANGE)
  2941. return NOTIFY_DONE;
  2942. netdev_for_each_lower_dev(dev, ldev, iter) {
  2943. if (netdev_priv(ldev) == mac)
  2944. goto found;
  2945. }
  2946. return NOTIFY_DONE;
  2947. found:
  2948. if (!dsa_user_dev_check(dev))
  2949. return NOTIFY_DONE;
  2950. if (__ethtool_get_link_ksettings(dev, &s))
  2951. return NOTIFY_DONE;
  2952. if (s.base.speed == 0 || s.base.speed == ((__u32)-1))
  2953. return NOTIFY_DONE;
  2954. dp = dsa_port_from_netdev(dev);
  2955. if (dp->index >= MTK_QDMA_NUM_QUEUES)
  2956. return NOTIFY_DONE;
  2957. if (mac->speed > 0 && mac->speed <= s.base.speed)
  2958. s.base.speed = 0;
  2959. mtk_set_queue_speed(eth, dp->index + 3, s.base.speed);
  2960. return NOTIFY_DONE;
  2961. }
  2962. static int mtk_open(struct net_device *dev)
  2963. {
  2964. struct mtk_mac *mac = netdev_priv(dev);
  2965. struct mtk_eth *eth = mac->hw;
  2966. struct mtk_mac *target_mac;
  2967. int i, err, ppe_num;
  2968. ppe_num = eth->soc->ppe_num;
  2969. err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
  2970. if (err) {
  2971. netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
  2972. err);
  2973. return err;
  2974. }
  2975. /* we run 2 netdevs on the same dma ring so we only bring it up once */
  2976. if (!refcount_read(&eth->dma_refcnt)) {
  2977. const struct mtk_soc_data *soc = eth->soc;
  2978. u32 gdm_config;
  2979. int i;
  2980. err = mtk_start_dma(eth);
  2981. if (err) {
  2982. phylink_disconnect_phy(mac->phylink);
  2983. return err;
  2984. }
  2985. for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
  2986. mtk_ppe_start(eth->ppe[i]);
  2987. for (i = 0; i < MTK_MAX_DEVS; i++) {
  2988. if (!eth->netdev[i])
  2989. continue;
  2990. target_mac = netdev_priv(eth->netdev[i]);
  2991. if (!soc->offload_version) {
  2992. target_mac->ppe_idx = 0;
  2993. gdm_config = MTK_GDMA_TO_PDMA;
  2994. } else if (ppe_num >= 3 && target_mac->id == 2) {
  2995. target_mac->ppe_idx = 2;
  2996. gdm_config = soc->reg_map->gdma_to_ppe[2];
  2997. } else if (ppe_num >= 2 && target_mac->id == 1) {
  2998. target_mac->ppe_idx = 1;
  2999. gdm_config = soc->reg_map->gdma_to_ppe[1];
  3000. } else {
  3001. target_mac->ppe_idx = 0;
  3002. gdm_config = soc->reg_map->gdma_to_ppe[0];
  3003. }
  3004. mtk_gdm_config(eth, target_mac->id, gdm_config);
  3005. }
  3006. napi_enable(&eth->tx_napi);
  3007. napi_enable(&eth->rx_napi);
  3008. mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
  3009. mtk_rx_irq_enable(eth, soc->rx.irq_done_mask);
  3010. refcount_set(&eth->dma_refcnt, 1);
  3011. } else {
  3012. refcount_inc(&eth->dma_refcnt);
  3013. }
  3014. phylink_start(mac->phylink);
  3015. netif_tx_start_all_queues(dev);
  3016. if (mtk_is_netsys_v2_or_greater(eth))
  3017. return 0;
  3018. if (mtk_uses_dsa(dev) && !eth->prog) {
  3019. for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
  3020. struct metadata_dst *md_dst = eth->dsa_meta[i];
  3021. if (md_dst)
  3022. continue;
  3023. md_dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX,
  3024. GFP_KERNEL);
  3025. if (!md_dst)
  3026. return -ENOMEM;
  3027. md_dst->u.port_info.port_id = i;
  3028. eth->dsa_meta[i] = md_dst;
  3029. }
  3030. } else {
  3031. /* Hardware DSA untagging and VLAN RX offloading need to be
  3032. * disabled if at least one MAC does not use DSA.
  3033. */
  3034. u32 val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
  3035. val &= ~MTK_CDMP_STAG_EN;
  3036. mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
  3037. mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
  3038. }
  3039. return 0;
  3040. }
  3041. static void mtk_stop_dma(struct mtk_eth *eth, u32 glo_cfg)
  3042. {
  3043. u32 val;
  3044. int i;
  3045. /* stop the dma engine */
  3046. spin_lock_bh(&eth->page_lock);
  3047. val = mtk_r32(eth, glo_cfg);
  3048. mtk_w32(eth, val & ~(MTK_TX_WB_DDONE | MTK_RX_DMA_EN | MTK_TX_DMA_EN),
  3049. glo_cfg);
  3050. spin_unlock_bh(&eth->page_lock);
  3051. /* wait for dma stop */
  3052. for (i = 0; i < 10; i++) {
  3053. val = mtk_r32(eth, glo_cfg);
  3054. if (val & (MTK_TX_DMA_BUSY | MTK_RX_DMA_BUSY)) {
  3055. msleep(20);
  3056. continue;
  3057. }
  3058. break;
  3059. }
  3060. }
  3061. static int mtk_stop(struct net_device *dev)
  3062. {
  3063. struct mtk_mac *mac = netdev_priv(dev);
  3064. struct mtk_eth *eth = mac->hw;
  3065. int i;
  3066. phylink_stop(mac->phylink);
  3067. netif_tx_disable(dev);
  3068. phylink_disconnect_phy(mac->phylink);
  3069. /* only shutdown DMA if this is the last user */
  3070. if (!refcount_dec_and_test(&eth->dma_refcnt))
  3071. return 0;
  3072. for (i = 0; i < MTK_MAX_DEVS; i++)
  3073. mtk_gdm_config(eth, i, MTK_GDMA_DROP_ALL);
  3074. mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
  3075. mtk_rx_irq_disable(eth, eth->soc->rx.irq_done_mask);
  3076. napi_disable(&eth->tx_napi);
  3077. napi_disable(&eth->rx_napi);
  3078. cancel_work_sync(&eth->rx_dim.work);
  3079. cancel_work_sync(&eth->tx_dim.work);
  3080. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  3081. mtk_stop_dma(eth, eth->soc->reg_map->qdma.glo_cfg);
  3082. mtk_stop_dma(eth, eth->soc->reg_map->pdma.glo_cfg);
  3083. mtk_dma_free(eth);
  3084. for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
  3085. mtk_ppe_stop(eth->ppe[i]);
  3086. return 0;
  3087. }
  3088. static int mtk_xdp_setup(struct net_device *dev, struct bpf_prog *prog,
  3089. struct netlink_ext_ack *extack)
  3090. {
  3091. struct mtk_mac *mac = netdev_priv(dev);
  3092. struct mtk_eth *eth = mac->hw;
  3093. struct bpf_prog *old_prog;
  3094. bool need_update;
  3095. if (eth->hwlro) {
  3096. NL_SET_ERR_MSG_MOD(extack, "XDP not supported with HWLRO");
  3097. return -EOPNOTSUPP;
  3098. }
  3099. if (dev->mtu > MTK_PP_MAX_BUF_SIZE) {
  3100. NL_SET_ERR_MSG_MOD(extack, "MTU too large for XDP");
  3101. return -EOPNOTSUPP;
  3102. }
  3103. need_update = !!eth->prog != !!prog;
  3104. if (netif_running(dev) && need_update)
  3105. mtk_stop(dev);
  3106. old_prog = rcu_replace_pointer(eth->prog, prog, lockdep_rtnl_is_held());
  3107. if (netif_running(dev) && need_update) {
  3108. int err;
  3109. err = mtk_open(dev);
  3110. if (err) {
  3111. rcu_assign_pointer(eth->prog, old_prog);
  3112. return err;
  3113. }
  3114. }
  3115. if (old_prog)
  3116. bpf_prog_put(old_prog);
  3117. return 0;
  3118. }
  3119. static int mtk_xdp(struct net_device *dev, struct netdev_bpf *xdp)
  3120. {
  3121. switch (xdp->command) {
  3122. case XDP_SETUP_PROG:
  3123. return mtk_xdp_setup(dev, xdp->prog, xdp->extack);
  3124. default:
  3125. return -EINVAL;
  3126. }
  3127. }
  3128. static void ethsys_reset(struct mtk_eth *eth, u32 reset_bits)
  3129. {
  3130. regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
  3131. reset_bits,
  3132. reset_bits);
  3133. usleep_range(1000, 1100);
  3134. regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
  3135. reset_bits,
  3136. ~reset_bits);
  3137. mdelay(10);
  3138. }
  3139. static void mtk_clk_disable(struct mtk_eth *eth)
  3140. {
  3141. int clk;
  3142. for (clk = MTK_CLK_MAX - 1; clk >= 0; clk--)
  3143. clk_disable_unprepare(eth->clks[clk]);
  3144. }
  3145. static int mtk_clk_enable(struct mtk_eth *eth)
  3146. {
  3147. int clk, ret;
  3148. for (clk = 0; clk < MTK_CLK_MAX ; clk++) {
  3149. ret = clk_prepare_enable(eth->clks[clk]);
  3150. if (ret)
  3151. goto err_disable_clks;
  3152. }
  3153. return 0;
  3154. err_disable_clks:
  3155. while (--clk >= 0)
  3156. clk_disable_unprepare(eth->clks[clk]);
  3157. return ret;
  3158. }
  3159. static void mtk_dim_rx(struct work_struct *work)
  3160. {
  3161. struct dim *dim = container_of(work, struct dim, work);
  3162. struct mtk_eth *eth = container_of(dim, struct mtk_eth, rx_dim);
  3163. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  3164. struct dim_cq_moder cur_profile;
  3165. u32 val, cur;
  3166. cur_profile = net_dim_get_rx_moderation(eth->rx_dim.mode,
  3167. dim->profile_ix);
  3168. spin_lock_bh(&eth->dim_lock);
  3169. val = mtk_r32(eth, reg_map->pdma.delay_irq);
  3170. val &= MTK_PDMA_DELAY_TX_MASK;
  3171. val |= MTK_PDMA_DELAY_RX_EN;
  3172. cur = min_t(u32, DIV_ROUND_UP(cur_profile.usec, 20), MTK_PDMA_DELAY_PTIME_MASK);
  3173. val |= cur << MTK_PDMA_DELAY_RX_PTIME_SHIFT;
  3174. cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
  3175. val |= cur << MTK_PDMA_DELAY_RX_PINT_SHIFT;
  3176. mtk_w32(eth, val, reg_map->pdma.delay_irq);
  3177. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  3178. mtk_w32(eth, val, reg_map->qdma.delay_irq);
  3179. spin_unlock_bh(&eth->dim_lock);
  3180. dim->state = DIM_START_MEASURE;
  3181. }
  3182. static void mtk_dim_tx(struct work_struct *work)
  3183. {
  3184. struct dim *dim = container_of(work, struct dim, work);
  3185. struct mtk_eth *eth = container_of(dim, struct mtk_eth, tx_dim);
  3186. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  3187. struct dim_cq_moder cur_profile;
  3188. u32 val, cur;
  3189. cur_profile = net_dim_get_tx_moderation(eth->tx_dim.mode,
  3190. dim->profile_ix);
  3191. spin_lock_bh(&eth->dim_lock);
  3192. val = mtk_r32(eth, reg_map->pdma.delay_irq);
  3193. val &= MTK_PDMA_DELAY_RX_MASK;
  3194. val |= MTK_PDMA_DELAY_TX_EN;
  3195. cur = min_t(u32, DIV_ROUND_UP(cur_profile.usec, 20), MTK_PDMA_DELAY_PTIME_MASK);
  3196. val |= cur << MTK_PDMA_DELAY_TX_PTIME_SHIFT;
  3197. cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
  3198. val |= cur << MTK_PDMA_DELAY_TX_PINT_SHIFT;
  3199. mtk_w32(eth, val, reg_map->pdma.delay_irq);
  3200. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  3201. mtk_w32(eth, val, reg_map->qdma.delay_irq);
  3202. spin_unlock_bh(&eth->dim_lock);
  3203. dim->state = DIM_START_MEASURE;
  3204. }
  3205. static void mtk_set_mcr_max_rx(struct mtk_mac *mac, u32 val)
  3206. {
  3207. struct mtk_eth *eth = mac->hw;
  3208. u32 mcr_cur, mcr_new;
  3209. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  3210. return;
  3211. mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
  3212. mcr_new = mcr_cur & ~MAC_MCR_MAX_RX_MASK;
  3213. if (val <= 1518)
  3214. mcr_new |= MAC_MCR_MAX_RX(MAC_MCR_MAX_RX_1518);
  3215. else if (val <= 1536)
  3216. mcr_new |= MAC_MCR_MAX_RX(MAC_MCR_MAX_RX_1536);
  3217. else if (val <= 1552)
  3218. mcr_new |= MAC_MCR_MAX_RX(MAC_MCR_MAX_RX_1552);
  3219. else
  3220. mcr_new |= MAC_MCR_MAX_RX(MAC_MCR_MAX_RX_2048);
  3221. if (mcr_new != mcr_cur)
  3222. mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
  3223. }
  3224. static void mtk_hw_reset(struct mtk_eth *eth)
  3225. {
  3226. u32 val;
  3227. if (mtk_is_netsys_v2_or_greater(eth))
  3228. regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
  3229. if (mtk_is_netsys_v3_or_greater(eth)) {
  3230. val = RSTCTRL_PPE0_V3;
  3231. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
  3232. val |= RSTCTRL_PPE1_V3;
  3233. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
  3234. val |= RSTCTRL_PPE2;
  3235. val |= RSTCTRL_WDMA0 | RSTCTRL_WDMA1 | RSTCTRL_WDMA2;
  3236. } else if (mtk_is_netsys_v2_or_greater(eth)) {
  3237. val = RSTCTRL_PPE0_V2;
  3238. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
  3239. val |= RSTCTRL_PPE1;
  3240. } else {
  3241. val = RSTCTRL_PPE0;
  3242. }
  3243. ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
  3244. if (mtk_is_netsys_v3_or_greater(eth))
  3245. regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
  3246. 0x6f8ff);
  3247. else if (mtk_is_netsys_v2_or_greater(eth))
  3248. regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
  3249. 0x3ffffff);
  3250. }
  3251. static u32 mtk_hw_reset_read(struct mtk_eth *eth)
  3252. {
  3253. u32 val;
  3254. regmap_read(eth->ethsys, ETHSYS_RSTCTRL, &val);
  3255. return val;
  3256. }
  3257. static void mtk_hw_warm_reset(struct mtk_eth *eth)
  3258. {
  3259. u32 rst_mask, val;
  3260. regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL, RSTCTRL_FE,
  3261. RSTCTRL_FE);
  3262. if (readx_poll_timeout_atomic(mtk_hw_reset_read, eth, val,
  3263. val & RSTCTRL_FE, 1, 1000)) {
  3264. dev_err(eth->dev, "warm reset failed\n");
  3265. mtk_hw_reset(eth);
  3266. return;
  3267. }
  3268. if (mtk_is_netsys_v3_or_greater(eth)) {
  3269. rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V3;
  3270. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
  3271. rst_mask |= RSTCTRL_PPE1_V3;
  3272. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
  3273. rst_mask |= RSTCTRL_PPE2;
  3274. rst_mask |= RSTCTRL_WDMA0 | RSTCTRL_WDMA1 | RSTCTRL_WDMA2;
  3275. } else if (mtk_is_netsys_v2_or_greater(eth)) {
  3276. rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V2;
  3277. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
  3278. rst_mask |= RSTCTRL_PPE1;
  3279. } else {
  3280. rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0;
  3281. }
  3282. regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL, rst_mask, rst_mask);
  3283. udelay(1);
  3284. val = mtk_hw_reset_read(eth);
  3285. if (!(val & rst_mask))
  3286. dev_err(eth->dev, "warm reset stage0 failed %08x (%08x)\n",
  3287. val, rst_mask);
  3288. rst_mask |= RSTCTRL_FE;
  3289. regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL, rst_mask, ~rst_mask);
  3290. udelay(1);
  3291. val = mtk_hw_reset_read(eth);
  3292. if (val & rst_mask)
  3293. dev_err(eth->dev, "warm reset stage1 failed %08x (%08x)\n",
  3294. val, rst_mask);
  3295. }
  3296. static bool mtk_hw_check_dma_hang(struct mtk_eth *eth)
  3297. {
  3298. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  3299. bool gmac1_tx, gmac2_tx, gdm1_tx, gdm2_tx;
  3300. bool oq_hang, cdm1_busy, adma_busy;
  3301. bool wtx_busy, cdm_full, oq_free;
  3302. u32 wdidx, val, gdm1_fc, gdm2_fc;
  3303. bool qfsm_hang, qfwd_hang;
  3304. bool ret = false;
  3305. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  3306. return false;
  3307. /* WDMA sanity checks */
  3308. wdidx = mtk_r32(eth, reg_map->wdma_base[0] + 0xc);
  3309. val = mtk_r32(eth, reg_map->wdma_base[0] + 0x204);
  3310. wtx_busy = FIELD_GET(MTK_TX_DMA_BUSY, val);
  3311. val = mtk_r32(eth, reg_map->wdma_base[0] + 0x230);
  3312. cdm_full = !FIELD_GET(MTK_CDM_TXFIFO_RDY, val);
  3313. oq_free = (!(mtk_r32(eth, reg_map->pse_oq_sta) & GENMASK(24, 16)) &&
  3314. !(mtk_r32(eth, reg_map->pse_oq_sta + 0x4) & GENMASK(8, 0)) &&
  3315. !(mtk_r32(eth, reg_map->pse_oq_sta + 0x10) & GENMASK(24, 16)));
  3316. if (wdidx == eth->reset.wdidx && wtx_busy && cdm_full && oq_free) {
  3317. if (++eth->reset.wdma_hang_count > 2) {
  3318. eth->reset.wdma_hang_count = 0;
  3319. ret = true;
  3320. }
  3321. goto out;
  3322. }
  3323. /* QDMA sanity checks */
  3324. qfsm_hang = !!mtk_r32(eth, reg_map->qdma.qtx_cfg + 0x234);
  3325. qfwd_hang = !mtk_r32(eth, reg_map->qdma.qtx_cfg + 0x308);
  3326. gdm1_tx = FIELD_GET(GENMASK(31, 16), mtk_r32(eth, MTK_FE_GDM1_FSM)) > 0;
  3327. gdm2_tx = FIELD_GET(GENMASK(31, 16), mtk_r32(eth, MTK_FE_GDM2_FSM)) > 0;
  3328. gmac1_tx = FIELD_GET(GENMASK(31, 24), mtk_r32(eth, MTK_MAC_FSM(0))) != 1;
  3329. gmac2_tx = FIELD_GET(GENMASK(31, 24), mtk_r32(eth, MTK_MAC_FSM(1))) != 1;
  3330. gdm1_fc = mtk_r32(eth, reg_map->gdm1_cnt + 0x24);
  3331. gdm2_fc = mtk_r32(eth, reg_map->gdm1_cnt + 0x64);
  3332. if (qfsm_hang && qfwd_hang &&
  3333. ((gdm1_tx && gmac1_tx && gdm1_fc < 1) ||
  3334. (gdm2_tx && gmac2_tx && gdm2_fc < 1))) {
  3335. if (++eth->reset.qdma_hang_count > 2) {
  3336. eth->reset.qdma_hang_count = 0;
  3337. ret = true;
  3338. }
  3339. goto out;
  3340. }
  3341. /* ADMA sanity checks */
  3342. oq_hang = !!(mtk_r32(eth, reg_map->pse_oq_sta) & GENMASK(8, 0));
  3343. cdm1_busy = !!(mtk_r32(eth, MTK_FE_CDM1_FSM) & GENMASK(31, 16));
  3344. adma_busy = !(mtk_r32(eth, reg_map->pdma.adma_rx_dbg0) & GENMASK(4, 0)) &&
  3345. !(mtk_r32(eth, reg_map->pdma.adma_rx_dbg0) & BIT(6));
  3346. if (oq_hang && cdm1_busy && adma_busy) {
  3347. if (++eth->reset.adma_hang_count > 2) {
  3348. eth->reset.adma_hang_count = 0;
  3349. ret = true;
  3350. }
  3351. goto out;
  3352. }
  3353. eth->reset.wdma_hang_count = 0;
  3354. eth->reset.qdma_hang_count = 0;
  3355. eth->reset.adma_hang_count = 0;
  3356. out:
  3357. eth->reset.wdidx = wdidx;
  3358. return ret;
  3359. }
  3360. static void mtk_hw_reset_monitor_work(struct work_struct *work)
  3361. {
  3362. struct delayed_work *del_work = to_delayed_work(work);
  3363. struct mtk_eth *eth = container_of(del_work, struct mtk_eth,
  3364. reset.monitor_work);
  3365. if (test_bit(MTK_RESETTING, &eth->state))
  3366. goto out;
  3367. /* DMA stuck checks */
  3368. if (mtk_hw_check_dma_hang(eth))
  3369. schedule_work(&eth->pending_work);
  3370. out:
  3371. schedule_delayed_work(&eth->reset.monitor_work,
  3372. MTK_DMA_MONITOR_TIMEOUT);
  3373. }
  3374. static int mtk_hw_init(struct mtk_eth *eth, bool reset)
  3375. {
  3376. u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
  3377. ETHSYS_DMA_AG_MAP_PPE;
  3378. const struct mtk_reg_map *reg_map = eth->soc->reg_map;
  3379. int i, val, ret;
  3380. if (!reset && test_and_set_bit(MTK_HW_INIT, &eth->state))
  3381. return 0;
  3382. if (!reset) {
  3383. pm_runtime_enable(eth->dev);
  3384. pm_runtime_get_sync(eth->dev);
  3385. ret = mtk_clk_enable(eth);
  3386. if (ret)
  3387. goto err_disable_pm;
  3388. }
  3389. if (eth->ethsys)
  3390. regmap_update_bits(eth->ethsys, ETHSYS_DMA_AG_MAP, dma_mask,
  3391. of_dma_is_coherent(eth->dma_dev->of_node) * dma_mask);
  3392. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
  3393. ret = device_reset(eth->dev);
  3394. if (ret) {
  3395. dev_err(eth->dev, "MAC reset failed!\n");
  3396. goto err_disable_pm;
  3397. }
  3398. /* set interrupt delays based on current Net DIM sample */
  3399. mtk_dim_rx(&eth->rx_dim.work);
  3400. mtk_dim_tx(&eth->tx_dim.work);
  3401. /* disable delay and normal interrupt */
  3402. mtk_tx_irq_disable(eth, ~0);
  3403. mtk_rx_irq_disable(eth, ~0);
  3404. return 0;
  3405. }
  3406. msleep(100);
  3407. if (reset)
  3408. mtk_hw_warm_reset(eth);
  3409. else
  3410. mtk_hw_reset(eth);
  3411. /* No MT7628/88 support yet */
  3412. if (reset && !MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  3413. mtk_mdio_config(eth);
  3414. if (mtk_is_netsys_v3_or_greater(eth)) {
  3415. /* Set FE to PDMAv2 if necessary */
  3416. val = mtk_r32(eth, MTK_FE_GLO_MISC);
  3417. mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
  3418. }
  3419. if (eth->pctl) {
  3420. /* Set GE2 driving and slew rate */
  3421. regmap_write(eth->pctl, GPIO_DRV_SEL10, 0xa00);
  3422. /* set GE2 TDSEL */
  3423. regmap_write(eth->pctl, GPIO_OD33_CTRL8, 0x5);
  3424. /* set GE2 TUNE */
  3425. regmap_write(eth->pctl, GPIO_BIAS_CTRL, 0x0);
  3426. }
  3427. /* Set linkdown as the default for each GMAC. Its own MCR would be set
  3428. * up with the more appropriate value when mtk_mac_config call is being
  3429. * invoked.
  3430. */
  3431. for (i = 0; i < MTK_MAX_DEVS; i++) {
  3432. struct net_device *dev = eth->netdev[i];
  3433. if (!dev)
  3434. continue;
  3435. mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
  3436. mtk_set_mcr_max_rx(netdev_priv(dev),
  3437. dev->mtu + MTK_RX_ETH_HLEN);
  3438. }
  3439. /* Indicates CDM to parse the MTK special tag from CPU
  3440. * which also is working out for untag packets.
  3441. */
  3442. val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
  3443. mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
  3444. if (mtk_is_netsys_v1(eth)) {
  3445. val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
  3446. mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
  3447. mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
  3448. }
  3449. /* set interrupt delays based on current Net DIM sample */
  3450. mtk_dim_rx(&eth->rx_dim.work);
  3451. mtk_dim_tx(&eth->tx_dim.work);
  3452. /* disable delay and normal interrupt */
  3453. mtk_tx_irq_disable(eth, ~0);
  3454. mtk_rx_irq_disable(eth, ~0);
  3455. /* FE int grouping */
  3456. mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
  3457. mtk_w32(eth, eth->soc->rx.irq_done_mask, reg_map->pdma.int_grp + 4);
  3458. mtk_w32(eth, MTK_TX_DONE_INT, reg_map->qdma.int_grp);
  3459. mtk_w32(eth, eth->soc->rx.irq_done_mask, reg_map->qdma.int_grp + 4);
  3460. mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
  3461. if (mtk_is_netsys_v3_or_greater(eth)) {
  3462. /* PSE dummy page mechanism */
  3463. mtk_w32(eth, PSE_DUMMY_WORK_GDM(1) | PSE_DUMMY_WORK_GDM(2) |
  3464. PSE_DUMMY_WORK_GDM(3) | DUMMY_PAGE_THR, PSE_DUMY_REQ);
  3465. /* PSE free buffer drop threshold */
  3466. mtk_w32(eth, 0x00600009, PSE_IQ_REV(8));
  3467. /* PSE should not drop port8, port9 and port13 packets from
  3468. * WDMA Tx
  3469. */
  3470. mtk_w32(eth, 0x00002300, PSE_DROP_CFG);
  3471. /* PSE should drop packets to port8, port9 and port13 on WDMA Rx
  3472. * ring full
  3473. */
  3474. mtk_w32(eth, 0x00002300, PSE_PPE_DROP(0));
  3475. mtk_w32(eth, 0x00002300, PSE_PPE_DROP(1));
  3476. mtk_w32(eth, 0x00002300, PSE_PPE_DROP(2));
  3477. /* GDM and CDM Threshold */
  3478. mtk_w32(eth, 0x08000707, MTK_CDMW0_THRES);
  3479. mtk_w32(eth, 0x00000077, MTK_CDMW1_THRES);
  3480. /* Disable GDM1 RX CRC stripping */
  3481. mtk_m32(eth, MTK_GDMA_STRP_CRC, 0, MTK_GDMA_FWD_CFG(0));
  3482. /* PSE GDM3 MIB counter has incorrect hw default values,
  3483. * so the driver ought to read clear the values beforehand
  3484. * in case ethtool retrieve wrong mib values.
  3485. */
  3486. for (i = 0; i < 0x80; i += 0x4)
  3487. mtk_r32(eth, reg_map->gdm1_cnt + 0x100 + i);
  3488. } else if (!mtk_is_netsys_v1(eth)) {
  3489. /* PSE should not drop port8 and port9 packets from WDMA Tx */
  3490. mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
  3491. /* PSE should drop packets to port 8/9 on WDMA Rx ring full */
  3492. mtk_w32(eth, 0x00000300, PSE_PPE_DROP(0));
  3493. /* PSE Free Queue Flow Control */
  3494. mtk_w32(eth, 0x01fa01f4, PSE_FQFC_CFG2);
  3495. /* PSE config input queue threshold */
  3496. mtk_w32(eth, 0x001a000e, PSE_IQ_REV(1));
  3497. mtk_w32(eth, 0x01ff001a, PSE_IQ_REV(2));
  3498. mtk_w32(eth, 0x000e01ff, PSE_IQ_REV(3));
  3499. mtk_w32(eth, 0x000e000e, PSE_IQ_REV(4));
  3500. mtk_w32(eth, 0x000e000e, PSE_IQ_REV(5));
  3501. mtk_w32(eth, 0x000e000e, PSE_IQ_REV(6));
  3502. mtk_w32(eth, 0x000e000e, PSE_IQ_REV(7));
  3503. mtk_w32(eth, 0x000e000e, PSE_IQ_REV(8));
  3504. /* PSE config output queue threshold */
  3505. mtk_w32(eth, 0x000f000a, PSE_OQ_TH(1));
  3506. mtk_w32(eth, 0x001a000f, PSE_OQ_TH(2));
  3507. mtk_w32(eth, 0x000f001a, PSE_OQ_TH(3));
  3508. mtk_w32(eth, 0x01ff000f, PSE_OQ_TH(4));
  3509. mtk_w32(eth, 0x000f000f, PSE_OQ_TH(5));
  3510. mtk_w32(eth, 0x0006000f, PSE_OQ_TH(6));
  3511. mtk_w32(eth, 0x00060006, PSE_OQ_TH(7));
  3512. mtk_w32(eth, 0x00060006, PSE_OQ_TH(8));
  3513. /* GDM and CDM Threshold */
  3514. mtk_w32(eth, 0x00000004, MTK_GDM2_THRES);
  3515. mtk_w32(eth, 0x00000004, MTK_CDMW0_THRES);
  3516. mtk_w32(eth, 0x00000004, MTK_CDMW1_THRES);
  3517. mtk_w32(eth, 0x00000004, MTK_CDME0_THRES);
  3518. mtk_w32(eth, 0x00000004, MTK_CDME1_THRES);
  3519. mtk_w32(eth, 0x00000004, MTK_CDMM_THRES);
  3520. }
  3521. return 0;
  3522. err_disable_pm:
  3523. if (!reset) {
  3524. pm_runtime_put_sync(eth->dev);
  3525. pm_runtime_disable(eth->dev);
  3526. }
  3527. return ret;
  3528. }
  3529. static int mtk_hw_deinit(struct mtk_eth *eth)
  3530. {
  3531. if (!test_and_clear_bit(MTK_HW_INIT, &eth->state))
  3532. return 0;
  3533. mtk_clk_disable(eth);
  3534. pm_runtime_put_sync(eth->dev);
  3535. pm_runtime_disable(eth->dev);
  3536. return 0;
  3537. }
  3538. static void mtk_uninit(struct net_device *dev)
  3539. {
  3540. struct mtk_mac *mac = netdev_priv(dev);
  3541. struct mtk_eth *eth = mac->hw;
  3542. phylink_disconnect_phy(mac->phylink);
  3543. mtk_tx_irq_disable(eth, ~0);
  3544. mtk_rx_irq_disable(eth, ~0);
  3545. }
  3546. static int mtk_change_mtu(struct net_device *dev, int new_mtu)
  3547. {
  3548. int length = new_mtu + MTK_RX_ETH_HLEN;
  3549. struct mtk_mac *mac = netdev_priv(dev);
  3550. struct mtk_eth *eth = mac->hw;
  3551. if (rcu_access_pointer(eth->prog) &&
  3552. length > MTK_PP_MAX_BUF_SIZE) {
  3553. netdev_err(dev, "Invalid MTU for XDP mode\n");
  3554. return -EINVAL;
  3555. }
  3556. mtk_set_mcr_max_rx(mac, length);
  3557. WRITE_ONCE(dev->mtu, new_mtu);
  3558. return 0;
  3559. }
  3560. static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
  3561. {
  3562. struct mtk_mac *mac = netdev_priv(dev);
  3563. switch (cmd) {
  3564. case SIOCGMIIPHY:
  3565. case SIOCGMIIREG:
  3566. case SIOCSMIIREG:
  3567. return phylink_mii_ioctl(mac->phylink, ifr, cmd);
  3568. default:
  3569. break;
  3570. }
  3571. return -EOPNOTSUPP;
  3572. }
  3573. static void mtk_prepare_for_reset(struct mtk_eth *eth)
  3574. {
  3575. u32 val;
  3576. int i;
  3577. /* set FE PPE ports link down */
  3578. for (i = MTK_GMAC1_ID;
  3579. i <= (mtk_is_netsys_v3_or_greater(eth) ? MTK_GMAC3_ID : MTK_GMAC2_ID);
  3580. i += 2) {
  3581. val = mtk_r32(eth, MTK_FE_GLO_CFG(i)) | MTK_FE_LINK_DOWN_P(PSE_PPE0_PORT);
  3582. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
  3583. val |= MTK_FE_LINK_DOWN_P(PSE_PPE1_PORT);
  3584. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
  3585. val |= MTK_FE_LINK_DOWN_P(PSE_PPE2_PORT);
  3586. mtk_w32(eth, val, MTK_FE_GLO_CFG(i));
  3587. }
  3588. /* adjust PPE configurations to prepare for reset */
  3589. for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
  3590. mtk_ppe_prepare_reset(eth->ppe[i]);
  3591. /* disable NETSYS interrupts */
  3592. mtk_w32(eth, 0, MTK_FE_INT_ENABLE);
  3593. /* force link down GMAC */
  3594. for (i = 0; i < 2; i++) {
  3595. val = mtk_r32(eth, MTK_MAC_MCR(i)) & ~MAC_MCR_FORCE_LINK;
  3596. mtk_w32(eth, val, MTK_MAC_MCR(i));
  3597. }
  3598. }
  3599. static void mtk_pending_work(struct work_struct *work)
  3600. {
  3601. struct mtk_eth *eth = container_of(work, struct mtk_eth, pending_work);
  3602. unsigned long restart = 0;
  3603. u32 val;
  3604. int i;
  3605. rtnl_lock();
  3606. set_bit(MTK_RESETTING, &eth->state);
  3607. mtk_prepare_for_reset(eth);
  3608. mtk_wed_fe_reset();
  3609. /* Run again reset preliminary configuration in order to avoid any
  3610. * possible race during FE reset since it can run releasing RTNL lock.
  3611. */
  3612. mtk_prepare_for_reset(eth);
  3613. /* stop all devices to make sure that dma is properly shut down */
  3614. for (i = 0; i < MTK_MAX_DEVS; i++) {
  3615. if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
  3616. continue;
  3617. mtk_stop(eth->netdev[i]);
  3618. __set_bit(i, &restart);
  3619. }
  3620. usleep_range(15000, 16000);
  3621. if (eth->dev->pins)
  3622. pinctrl_select_state(eth->dev->pins->p,
  3623. eth->dev->pins->default_state);
  3624. mtk_hw_init(eth, true);
  3625. /* restart DMA and enable IRQs */
  3626. for (i = 0; i < MTK_MAX_DEVS; i++) {
  3627. if (!eth->netdev[i] || !test_bit(i, &restart))
  3628. continue;
  3629. if (mtk_open(eth->netdev[i])) {
  3630. netif_alert(eth, ifup, eth->netdev[i],
  3631. "Driver up/down cycle failed\n");
  3632. dev_close(eth->netdev[i]);
  3633. }
  3634. }
  3635. /* set FE PPE ports link up */
  3636. for (i = MTK_GMAC1_ID;
  3637. i <= (mtk_is_netsys_v3_or_greater(eth) ? MTK_GMAC3_ID : MTK_GMAC2_ID);
  3638. i += 2) {
  3639. val = mtk_r32(eth, MTK_FE_GLO_CFG(i)) & ~MTK_FE_LINK_DOWN_P(PSE_PPE0_PORT);
  3640. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
  3641. val &= ~MTK_FE_LINK_DOWN_P(PSE_PPE1_PORT);
  3642. if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
  3643. val &= ~MTK_FE_LINK_DOWN_P(PSE_PPE2_PORT);
  3644. mtk_w32(eth, val, MTK_FE_GLO_CFG(i));
  3645. }
  3646. clear_bit(MTK_RESETTING, &eth->state);
  3647. mtk_wed_fe_reset_complete();
  3648. rtnl_unlock();
  3649. }
  3650. static int mtk_free_dev(struct mtk_eth *eth)
  3651. {
  3652. int i;
  3653. for (i = 0; i < MTK_MAX_DEVS; i++) {
  3654. if (!eth->netdev[i])
  3655. continue;
  3656. free_netdev(eth->netdev[i]);
  3657. }
  3658. for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
  3659. if (!eth->dsa_meta[i])
  3660. break;
  3661. metadata_dst_free(eth->dsa_meta[i]);
  3662. }
  3663. return 0;
  3664. }
  3665. static int mtk_unreg_dev(struct mtk_eth *eth)
  3666. {
  3667. int i;
  3668. for (i = 0; i < MTK_MAX_DEVS; i++) {
  3669. struct mtk_mac *mac;
  3670. if (!eth->netdev[i])
  3671. continue;
  3672. mac = netdev_priv(eth->netdev[i]);
  3673. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  3674. unregister_netdevice_notifier(&mac->device_notifier);
  3675. unregister_netdev(eth->netdev[i]);
  3676. }
  3677. return 0;
  3678. }
  3679. static void mtk_sgmii_destroy(struct mtk_eth *eth)
  3680. {
  3681. int i;
  3682. for (i = 0; i < MTK_MAX_DEVS; i++)
  3683. mtk_pcs_lynxi_destroy(eth->sgmii_pcs[i]);
  3684. }
  3685. static int mtk_cleanup(struct mtk_eth *eth)
  3686. {
  3687. mtk_sgmii_destroy(eth);
  3688. mtk_unreg_dev(eth);
  3689. mtk_free_dev(eth);
  3690. cancel_work_sync(&eth->pending_work);
  3691. cancel_delayed_work_sync(&eth->reset.monitor_work);
  3692. return 0;
  3693. }
  3694. static int mtk_get_link_ksettings(struct net_device *ndev,
  3695. struct ethtool_link_ksettings *cmd)
  3696. {
  3697. struct mtk_mac *mac = netdev_priv(ndev);
  3698. if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state)))
  3699. return -EBUSY;
  3700. return phylink_ethtool_ksettings_get(mac->phylink, cmd);
  3701. }
  3702. static int mtk_set_link_ksettings(struct net_device *ndev,
  3703. const struct ethtool_link_ksettings *cmd)
  3704. {
  3705. struct mtk_mac *mac = netdev_priv(ndev);
  3706. if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state)))
  3707. return -EBUSY;
  3708. return phylink_ethtool_ksettings_set(mac->phylink, cmd);
  3709. }
  3710. static void mtk_get_drvinfo(struct net_device *dev,
  3711. struct ethtool_drvinfo *info)
  3712. {
  3713. struct mtk_mac *mac = netdev_priv(dev);
  3714. strscpy(info->driver, mac->hw->dev->driver->name, sizeof(info->driver));
  3715. strscpy(info->bus_info, dev_name(mac->hw->dev), sizeof(info->bus_info));
  3716. info->n_stats = ARRAY_SIZE(mtk_ethtool_stats);
  3717. }
  3718. static u32 mtk_get_msglevel(struct net_device *dev)
  3719. {
  3720. struct mtk_mac *mac = netdev_priv(dev);
  3721. return mac->hw->msg_enable;
  3722. }
  3723. static void mtk_set_msglevel(struct net_device *dev, u32 value)
  3724. {
  3725. struct mtk_mac *mac = netdev_priv(dev);
  3726. mac->hw->msg_enable = value;
  3727. }
  3728. static int mtk_nway_reset(struct net_device *dev)
  3729. {
  3730. struct mtk_mac *mac = netdev_priv(dev);
  3731. if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state)))
  3732. return -EBUSY;
  3733. if (!mac->phylink)
  3734. return -ENOTSUPP;
  3735. return phylink_ethtool_nway_reset(mac->phylink);
  3736. }
  3737. static void mtk_get_strings(struct net_device *dev, u32 stringset, u8 *data)
  3738. {
  3739. int i;
  3740. switch (stringset) {
  3741. case ETH_SS_STATS: {
  3742. struct mtk_mac *mac = netdev_priv(dev);
  3743. for (i = 0; i < ARRAY_SIZE(mtk_ethtool_stats); i++)
  3744. ethtool_puts(&data, mtk_ethtool_stats[i].str);
  3745. if (mtk_page_pool_enabled(mac->hw))
  3746. page_pool_ethtool_stats_get_strings(data);
  3747. break;
  3748. }
  3749. default:
  3750. break;
  3751. }
  3752. }
  3753. static int mtk_get_sset_count(struct net_device *dev, int sset)
  3754. {
  3755. switch (sset) {
  3756. case ETH_SS_STATS: {
  3757. int count = ARRAY_SIZE(mtk_ethtool_stats);
  3758. struct mtk_mac *mac = netdev_priv(dev);
  3759. if (mtk_page_pool_enabled(mac->hw))
  3760. count += page_pool_ethtool_stats_get_count();
  3761. return count;
  3762. }
  3763. default:
  3764. return -EOPNOTSUPP;
  3765. }
  3766. }
  3767. static void mtk_ethtool_pp_stats(struct mtk_eth *eth, u64 *data)
  3768. {
  3769. struct page_pool_stats stats = {};
  3770. int i;
  3771. for (i = 0; i < ARRAY_SIZE(eth->rx_ring); i++) {
  3772. struct mtk_rx_ring *ring = &eth->rx_ring[i];
  3773. if (!ring->page_pool)
  3774. continue;
  3775. page_pool_get_stats(ring->page_pool, &stats);
  3776. }
  3777. page_pool_ethtool_stats_get(data, &stats);
  3778. }
  3779. static void mtk_get_ethtool_stats(struct net_device *dev,
  3780. struct ethtool_stats *stats, u64 *data)
  3781. {
  3782. struct mtk_mac *mac = netdev_priv(dev);
  3783. struct mtk_hw_stats *hwstats = mac->hw_stats;
  3784. u64 *data_src, *data_dst;
  3785. unsigned int start;
  3786. int i;
  3787. if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state)))
  3788. return;
  3789. if (netif_running(dev) && netif_device_present(dev)) {
  3790. if (spin_trylock_bh(&hwstats->stats_lock)) {
  3791. mtk_stats_update_mac(mac);
  3792. spin_unlock_bh(&hwstats->stats_lock);
  3793. }
  3794. }
  3795. data_src = (u64 *)hwstats;
  3796. do {
  3797. data_dst = data;
  3798. start = u64_stats_fetch_begin(&hwstats->syncp);
  3799. for (i = 0; i < ARRAY_SIZE(mtk_ethtool_stats); i++)
  3800. *data_dst++ = *(data_src + mtk_ethtool_stats[i].offset);
  3801. if (mtk_page_pool_enabled(mac->hw))
  3802. mtk_ethtool_pp_stats(mac->hw, data_dst);
  3803. } while (u64_stats_fetch_retry(&hwstats->syncp, start));
  3804. }
  3805. static u32 mtk_get_rx_ring_count(struct net_device *dev)
  3806. {
  3807. if (dev->hw_features & NETIF_F_LRO)
  3808. return MTK_MAX_RX_RING_NUM;
  3809. return 0;
  3810. }
  3811. static int mtk_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
  3812. u32 *rule_locs)
  3813. {
  3814. int ret = -EOPNOTSUPP;
  3815. switch (cmd->cmd) {
  3816. case ETHTOOL_GRXCLSRLCNT:
  3817. if (dev->hw_features & NETIF_F_LRO) {
  3818. struct mtk_mac *mac = netdev_priv(dev);
  3819. cmd->rule_cnt = mac->hwlro_ip_cnt;
  3820. ret = 0;
  3821. }
  3822. break;
  3823. case ETHTOOL_GRXCLSRULE:
  3824. if (dev->hw_features & NETIF_F_LRO)
  3825. ret = mtk_hwlro_get_fdir_entry(dev, cmd);
  3826. break;
  3827. case ETHTOOL_GRXCLSRLALL:
  3828. if (dev->hw_features & NETIF_F_LRO)
  3829. ret = mtk_hwlro_get_fdir_all(dev, cmd,
  3830. rule_locs);
  3831. break;
  3832. default:
  3833. break;
  3834. }
  3835. return ret;
  3836. }
  3837. static int mtk_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
  3838. {
  3839. int ret = -EOPNOTSUPP;
  3840. switch (cmd->cmd) {
  3841. case ETHTOOL_SRXCLSRLINS:
  3842. if (dev->hw_features & NETIF_F_LRO)
  3843. ret = mtk_hwlro_add_ipaddr(dev, cmd);
  3844. break;
  3845. case ETHTOOL_SRXCLSRLDEL:
  3846. if (dev->hw_features & NETIF_F_LRO)
  3847. ret = mtk_hwlro_del_ipaddr(dev, cmd);
  3848. break;
  3849. default:
  3850. break;
  3851. }
  3852. return ret;
  3853. }
  3854. static void mtk_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
  3855. {
  3856. struct mtk_mac *mac = netdev_priv(dev);
  3857. phylink_ethtool_get_pauseparam(mac->phylink, pause);
  3858. }
  3859. static int mtk_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
  3860. {
  3861. struct mtk_mac *mac = netdev_priv(dev);
  3862. return phylink_ethtool_set_pauseparam(mac->phylink, pause);
  3863. }
  3864. static int mtk_get_eee(struct net_device *dev, struct ethtool_keee *eee)
  3865. {
  3866. struct mtk_mac *mac = netdev_priv(dev);
  3867. return phylink_ethtool_get_eee(mac->phylink, eee);
  3868. }
  3869. static int mtk_set_eee(struct net_device *dev, struct ethtool_keee *eee)
  3870. {
  3871. struct mtk_mac *mac = netdev_priv(dev);
  3872. return phylink_ethtool_set_eee(mac->phylink, eee);
  3873. }
  3874. static u16 mtk_select_queue(struct net_device *dev, struct sk_buff *skb,
  3875. struct net_device *sb_dev)
  3876. {
  3877. struct mtk_mac *mac = netdev_priv(dev);
  3878. unsigned int queue = 0;
  3879. if (netdev_uses_dsa(dev))
  3880. queue = skb_get_queue_mapping(skb) + 3;
  3881. else
  3882. queue = mac->id;
  3883. if (queue >= dev->num_tx_queues)
  3884. queue = 0;
  3885. return queue;
  3886. }
  3887. static const struct ethtool_ops mtk_ethtool_ops = {
  3888. .get_link_ksettings = mtk_get_link_ksettings,
  3889. .set_link_ksettings = mtk_set_link_ksettings,
  3890. .get_drvinfo = mtk_get_drvinfo,
  3891. .get_msglevel = mtk_get_msglevel,
  3892. .set_msglevel = mtk_set_msglevel,
  3893. .nway_reset = mtk_nway_reset,
  3894. .get_link = ethtool_op_get_link,
  3895. .get_strings = mtk_get_strings,
  3896. .get_sset_count = mtk_get_sset_count,
  3897. .get_ethtool_stats = mtk_get_ethtool_stats,
  3898. .get_pauseparam = mtk_get_pauseparam,
  3899. .set_pauseparam = mtk_set_pauseparam,
  3900. .get_rxnfc = mtk_get_rxnfc,
  3901. .set_rxnfc = mtk_set_rxnfc,
  3902. .get_rx_ring_count = mtk_get_rx_ring_count,
  3903. .get_eee = mtk_get_eee,
  3904. .set_eee = mtk_set_eee,
  3905. };
  3906. static const struct net_device_ops mtk_netdev_ops = {
  3907. .ndo_uninit = mtk_uninit,
  3908. .ndo_open = mtk_open,
  3909. .ndo_stop = mtk_stop,
  3910. .ndo_start_xmit = mtk_start_xmit,
  3911. .ndo_set_mac_address = mtk_set_mac_address,
  3912. .ndo_validate_addr = eth_validate_addr,
  3913. .ndo_eth_ioctl = mtk_do_ioctl,
  3914. .ndo_change_mtu = mtk_change_mtu,
  3915. .ndo_tx_timeout = mtk_tx_timeout,
  3916. .ndo_get_stats64 = mtk_get_stats64,
  3917. .ndo_fix_features = mtk_fix_features,
  3918. .ndo_set_features = mtk_set_features,
  3919. #ifdef CONFIG_NET_POLL_CONTROLLER
  3920. .ndo_poll_controller = mtk_poll_controller,
  3921. #endif
  3922. .ndo_setup_tc = mtk_eth_setup_tc,
  3923. .ndo_bpf = mtk_xdp,
  3924. .ndo_xdp_xmit = mtk_xdp_xmit,
  3925. .ndo_select_queue = mtk_select_queue,
  3926. };
  3927. static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
  3928. {
  3929. const __be32 *_id = of_get_property(np, "reg", NULL);
  3930. phy_interface_t phy_mode;
  3931. struct phylink *phylink;
  3932. struct mtk_mac *mac;
  3933. int id, err;
  3934. int txqs = 1;
  3935. u32 val;
  3936. if (!_id) {
  3937. dev_err(eth->dev, "missing mac id\n");
  3938. return -EINVAL;
  3939. }
  3940. id = be32_to_cpup(_id);
  3941. if (id >= MTK_MAX_DEVS) {
  3942. dev_err(eth->dev, "%d is not a valid mac id\n", id);
  3943. return -EINVAL;
  3944. }
  3945. if (eth->netdev[id]) {
  3946. dev_err(eth->dev, "duplicate mac id found: %d\n", id);
  3947. return -EINVAL;
  3948. }
  3949. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
  3950. txqs = MTK_QDMA_NUM_QUEUES;
  3951. eth->netdev[id] = alloc_etherdev_mqs(sizeof(*mac), txqs, 1);
  3952. if (!eth->netdev[id]) {
  3953. dev_err(eth->dev, "alloc_etherdev failed\n");
  3954. return -ENOMEM;
  3955. }
  3956. mac = netdev_priv(eth->netdev[id]);
  3957. eth->mac[id] = mac;
  3958. mac->id = id;
  3959. mac->hw = eth;
  3960. mac->of_node = np;
  3961. err = of_get_ethdev_address(mac->of_node, eth->netdev[id]);
  3962. if (err == -EPROBE_DEFER)
  3963. return err;
  3964. if (err) {
  3965. /* If the mac address is invalid, use random mac address */
  3966. eth_hw_addr_random(eth->netdev[id]);
  3967. dev_err(eth->dev, "generated random MAC address %pM\n",
  3968. eth->netdev[id]->dev_addr);
  3969. }
  3970. memset(mac->hwlro_ip, 0, sizeof(mac->hwlro_ip));
  3971. mac->hwlro_ip_cnt = 0;
  3972. mac->hw_stats = devm_kzalloc(eth->dev,
  3973. sizeof(*mac->hw_stats),
  3974. GFP_KERNEL);
  3975. if (!mac->hw_stats) {
  3976. dev_err(eth->dev, "failed to allocate counter memory\n");
  3977. err = -ENOMEM;
  3978. goto free_netdev;
  3979. }
  3980. spin_lock_init(&mac->hw_stats->stats_lock);
  3981. u64_stats_init(&mac->hw_stats->syncp);
  3982. if (mtk_is_netsys_v3_or_greater(eth))
  3983. mac->hw_stats->reg_offset = id * 0x80;
  3984. else
  3985. mac->hw_stats->reg_offset = id * 0x40;
  3986. /* phylink create */
  3987. err = of_get_phy_mode(np, &phy_mode);
  3988. if (err) {
  3989. dev_err(eth->dev, "incorrect phy-mode\n");
  3990. goto free_netdev;
  3991. }
  3992. /* mac config is not set */
  3993. mac->interface = PHY_INTERFACE_MODE_NA;
  3994. mac->speed = SPEED_UNKNOWN;
  3995. mac->phylink_config.dev = &eth->netdev[id]->dev;
  3996. mac->phylink_config.type = PHYLINK_NETDEV;
  3997. mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
  3998. MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
  3999. mac->phylink_config.lpi_capabilities = MAC_100FD | MAC_1000FD |
  4000. MAC_2500FD;
  4001. mac->phylink_config.lpi_timer_default = 1000;
  4002. /* MT7623 gmac0 is now missing its speed-specific PLL configuration
  4003. * in its .mac_config method (since state->speed is not valid there.
  4004. * Disable support for MII, GMII and RGMII.
  4005. */
  4006. if (!mac->hw->soc->disable_pll_modes || mac->id != 0) {
  4007. __set_bit(PHY_INTERFACE_MODE_MII,
  4008. mac->phylink_config.supported_interfaces);
  4009. __set_bit(PHY_INTERFACE_MODE_GMII,
  4010. mac->phylink_config.supported_interfaces);
  4011. if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII))
  4012. phy_interface_set_rgmii(mac->phylink_config.supported_interfaces);
  4013. }
  4014. if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII) && !mac->id)
  4015. __set_bit(PHY_INTERFACE_MODE_TRGMII,
  4016. mac->phylink_config.supported_interfaces);
  4017. /* TRGMII is not permitted on MT7621 if using DDR2 */
  4018. if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_GMAC1_TRGMII) &&
  4019. MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII_MT7621_CLK)) {
  4020. regmap_read(eth->ethsys, ETHSYS_SYSCFG, &val);
  4021. if (val & SYSCFG_DRAM_TYPE_DDR2)
  4022. __clear_bit(PHY_INTERFACE_MODE_TRGMII,
  4023. mac->phylink_config.supported_interfaces);
  4024. }
  4025. if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_SGMII)) {
  4026. __set_bit(PHY_INTERFACE_MODE_SGMII,
  4027. mac->phylink_config.supported_interfaces);
  4028. __set_bit(PHY_INTERFACE_MODE_1000BASEX,
  4029. mac->phylink_config.supported_interfaces);
  4030. __set_bit(PHY_INTERFACE_MODE_2500BASEX,
  4031. mac->phylink_config.supported_interfaces);
  4032. }
  4033. if (mtk_is_netsys_v3_or_greater(mac->hw) &&
  4034. MTK_HAS_CAPS(mac->hw->soc->caps, MTK_ESW) &&
  4035. id == MTK_GMAC1_ID) {
  4036. mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE |
  4037. MAC_SYM_PAUSE |
  4038. MAC_10000FD;
  4039. phy_interface_zero(mac->phylink_config.supported_interfaces);
  4040. __set_bit(PHY_INTERFACE_MODE_INTERNAL,
  4041. mac->phylink_config.supported_interfaces);
  4042. }
  4043. phylink = phylink_create(&mac->phylink_config,
  4044. of_fwnode_handle(mac->of_node),
  4045. phy_mode, &mtk_phylink_ops);
  4046. if (IS_ERR(phylink)) {
  4047. err = PTR_ERR(phylink);
  4048. goto free_netdev;
  4049. }
  4050. mac->phylink = phylink;
  4051. if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_2P5GPHY) &&
  4052. id == MTK_GMAC2_ID)
  4053. __set_bit(PHY_INTERFACE_MODE_INTERNAL,
  4054. mac->phylink_config.supported_interfaces);
  4055. SET_NETDEV_DEV(eth->netdev[id], eth->dev);
  4056. eth->netdev[id]->watchdog_timeo = 5 * HZ;
  4057. eth->netdev[id]->netdev_ops = &mtk_netdev_ops;
  4058. eth->netdev[id]->base_addr = (unsigned long)eth->base;
  4059. eth->netdev[id]->hw_features = eth->soc->hw_features;
  4060. if (eth->hwlro)
  4061. eth->netdev[id]->hw_features |= NETIF_F_LRO;
  4062. eth->netdev[id]->vlan_features = eth->soc->hw_features &
  4063. ~NETIF_F_HW_VLAN_CTAG_TX;
  4064. eth->netdev[id]->features |= eth->soc->hw_features;
  4065. eth->netdev[id]->ethtool_ops = &mtk_ethtool_ops;
  4066. eth->netdev[id]->irq = eth->irq[MTK_FE_IRQ_SHARED];
  4067. eth->netdev[id]->dev.of_node = np;
  4068. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  4069. eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH - MTK_RX_ETH_HLEN;
  4070. else
  4071. eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
  4072. if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
  4073. mac->device_notifier.notifier_call = mtk_device_event;
  4074. register_netdevice_notifier(&mac->device_notifier);
  4075. }
  4076. if (mtk_page_pool_enabled(eth))
  4077. eth->netdev[id]->xdp_features = NETDEV_XDP_ACT_BASIC |
  4078. NETDEV_XDP_ACT_REDIRECT |
  4079. NETDEV_XDP_ACT_NDO_XMIT |
  4080. NETDEV_XDP_ACT_NDO_XMIT_SG;
  4081. return 0;
  4082. free_netdev:
  4083. free_netdev(eth->netdev[id]);
  4084. return err;
  4085. }
  4086. void mtk_eth_set_dma_device(struct mtk_eth *eth, struct device *dma_dev)
  4087. {
  4088. struct net_device *dev, *tmp;
  4089. LIST_HEAD(dev_list);
  4090. int i;
  4091. rtnl_lock();
  4092. for (i = 0; i < MTK_MAX_DEVS; i++) {
  4093. dev = eth->netdev[i];
  4094. if (!dev || !(dev->flags & IFF_UP))
  4095. continue;
  4096. list_add_tail(&dev->close_list, &dev_list);
  4097. }
  4098. netif_close_many(&dev_list, false);
  4099. eth->dma_dev = dma_dev;
  4100. list_for_each_entry_safe(dev, tmp, &dev_list, close_list) {
  4101. list_del_init(&dev->close_list);
  4102. dev_open(dev, NULL);
  4103. }
  4104. rtnl_unlock();
  4105. }
  4106. static int mtk_sgmii_init(struct mtk_eth *eth)
  4107. {
  4108. struct device_node *np;
  4109. struct regmap *regmap;
  4110. int i;
  4111. for (i = 0; i < MTK_MAX_DEVS; i++) {
  4112. np = of_parse_phandle(eth->dev->of_node, "mediatek,sgmiisys", i);
  4113. if (!np)
  4114. break;
  4115. regmap = syscon_node_to_regmap(np);
  4116. if (IS_ERR(regmap)) {
  4117. of_node_put(np);
  4118. return PTR_ERR(regmap);
  4119. }
  4120. eth->sgmii_pcs[i] = mtk_pcs_lynxi_create(eth->dev,
  4121. of_fwnode_handle(np),
  4122. regmap,
  4123. eth->soc->ana_rgc3);
  4124. of_node_put(np);
  4125. }
  4126. return 0;
  4127. }
  4128. static int mtk_setup_legacy_sram(struct mtk_eth *eth, struct resource *res)
  4129. {
  4130. dev_warn(eth->dev, "legacy DT: using hard-coded SRAM offset.\n");
  4131. if (res->start + MTK_ETH_SRAM_OFFSET + MTK_ETH_NETSYS_V2_SRAM_SIZE - 1 >
  4132. res->end)
  4133. return -EINVAL;
  4134. eth->sram_pool = devm_gen_pool_create(eth->dev,
  4135. const_ilog2(MTK_ETH_SRAM_GRANULARITY),
  4136. NUMA_NO_NODE, dev_name(eth->dev));
  4137. if (IS_ERR(eth->sram_pool))
  4138. return PTR_ERR(eth->sram_pool);
  4139. return gen_pool_add_virt(eth->sram_pool,
  4140. (unsigned long)eth->base + MTK_ETH_SRAM_OFFSET,
  4141. res->start + MTK_ETH_SRAM_OFFSET,
  4142. MTK_ETH_NETSYS_V2_SRAM_SIZE, NUMA_NO_NODE);
  4143. }
  4144. static int mtk_probe(struct platform_device *pdev)
  4145. {
  4146. struct resource *res = NULL;
  4147. struct device_node *mac_np;
  4148. struct mtk_eth *eth;
  4149. int err, i;
  4150. eth = devm_kzalloc(&pdev->dev, sizeof(*eth), GFP_KERNEL);
  4151. if (!eth)
  4152. return -ENOMEM;
  4153. eth->soc = of_device_get_match_data(&pdev->dev);
  4154. eth->dev = &pdev->dev;
  4155. eth->dma_dev = &pdev->dev;
  4156. eth->base = devm_platform_ioremap_resource(pdev, 0);
  4157. if (IS_ERR(eth->base))
  4158. return PTR_ERR(eth->base);
  4159. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
  4160. eth->ip_align = NET_IP_ALIGN;
  4161. if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA)) {
  4162. err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(36));
  4163. if (!err)
  4164. err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
  4165. if (err) {
  4166. dev_err(&pdev->dev, "Wrong DMA config\n");
  4167. return -EINVAL;
  4168. }
  4169. }
  4170. spin_lock_init(&eth->page_lock);
  4171. spin_lock_init(&eth->tx_irq_lock);
  4172. spin_lock_init(&eth->rx_irq_lock);
  4173. spin_lock_init(&eth->dim_lock);
  4174. eth->rx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
  4175. INIT_WORK(&eth->rx_dim.work, mtk_dim_rx);
  4176. INIT_DELAYED_WORK(&eth->reset.monitor_work, mtk_hw_reset_monitor_work);
  4177. eth->tx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
  4178. INIT_WORK(&eth->tx_dim.work, mtk_dim_tx);
  4179. if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
  4180. eth->ethsys = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
  4181. "mediatek,ethsys");
  4182. if (IS_ERR(eth->ethsys)) {
  4183. dev_err(&pdev->dev, "no ethsys regmap found\n");
  4184. return PTR_ERR(eth->ethsys);
  4185. }
  4186. }
  4187. if (MTK_HAS_CAPS(eth->soc->caps, MTK_INFRA)) {
  4188. eth->infra = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
  4189. "mediatek,infracfg");
  4190. if (IS_ERR(eth->infra)) {
  4191. dev_err(&pdev->dev, "no infracfg regmap found\n");
  4192. return PTR_ERR(eth->infra);
  4193. }
  4194. }
  4195. if (of_dma_is_coherent(pdev->dev.of_node)) {
  4196. struct regmap *cci;
  4197. cci = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
  4198. "cci-control-port");
  4199. /* enable CPU/bus coherency */
  4200. if (!IS_ERR(cci))
  4201. regmap_write(cci, 0, 3);
  4202. }
  4203. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SGMII)) {
  4204. err = mtk_sgmii_init(eth);
  4205. if (err)
  4206. return err;
  4207. }
  4208. if (eth->soc->required_pctl) {
  4209. eth->pctl = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
  4210. "mediatek,pctl");
  4211. if (IS_ERR(eth->pctl)) {
  4212. dev_err(&pdev->dev, "no pctl regmap found\n");
  4213. err = PTR_ERR(eth->pctl);
  4214. goto err_destroy_sgmii;
  4215. }
  4216. }
  4217. if (mtk_is_netsys_v2_or_greater(eth)) {
  4218. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  4219. if (!res) {
  4220. err = -EINVAL;
  4221. goto err_destroy_sgmii;
  4222. }
  4223. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM)) {
  4224. eth->sram_pool = of_gen_pool_get(pdev->dev.of_node,
  4225. "sram", 0);
  4226. if (!eth->sram_pool) {
  4227. if (!mtk_is_netsys_v3_or_greater(eth)) {
  4228. err = mtk_setup_legacy_sram(eth, res);
  4229. if (err)
  4230. goto err_destroy_sgmii;
  4231. } else {
  4232. dev_err(&pdev->dev,
  4233. "Could not get SRAM pool\n");
  4234. err = -EINVAL;
  4235. goto err_destroy_sgmii;
  4236. }
  4237. }
  4238. }
  4239. }
  4240. if (eth->soc->offload_version) {
  4241. for (i = 0;; i++) {
  4242. struct device_node *np;
  4243. phys_addr_t wdma_phy;
  4244. u32 wdma_base;
  4245. if (i >= ARRAY_SIZE(eth->soc->reg_map->wdma_base))
  4246. break;
  4247. np = of_parse_phandle(pdev->dev.of_node,
  4248. "mediatek,wed", i);
  4249. if (!np)
  4250. break;
  4251. wdma_base = eth->soc->reg_map->wdma_base[i];
  4252. wdma_phy = res ? res->start + wdma_base : 0;
  4253. mtk_wed_add_hw(np, eth, eth->base + wdma_base,
  4254. wdma_phy, i);
  4255. }
  4256. }
  4257. err = mtk_get_irqs(pdev, eth);
  4258. if (err)
  4259. goto err_wed_exit;
  4260. for (i = 0; i < ARRAY_SIZE(eth->clks); i++) {
  4261. eth->clks[i] = devm_clk_get(eth->dev,
  4262. mtk_clks_source_name[i]);
  4263. if (IS_ERR(eth->clks[i])) {
  4264. if (PTR_ERR(eth->clks[i]) == -EPROBE_DEFER) {
  4265. err = -EPROBE_DEFER;
  4266. goto err_wed_exit;
  4267. }
  4268. if (eth->soc->required_clks & BIT(i)) {
  4269. dev_err(&pdev->dev, "clock %s not found\n",
  4270. mtk_clks_source_name[i]);
  4271. err = -EINVAL;
  4272. goto err_wed_exit;
  4273. }
  4274. eth->clks[i] = NULL;
  4275. }
  4276. }
  4277. eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);
  4278. INIT_WORK(&eth->pending_work, mtk_pending_work);
  4279. err = mtk_hw_init(eth, false);
  4280. if (err)
  4281. goto err_wed_exit;
  4282. eth->hwlro = MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO);
  4283. for_each_child_of_node(pdev->dev.of_node, mac_np) {
  4284. if (!of_device_is_compatible(mac_np,
  4285. "mediatek,eth-mac"))
  4286. continue;
  4287. if (!of_device_is_available(mac_np))
  4288. continue;
  4289. err = mtk_add_mac(eth, mac_np);
  4290. if (err) {
  4291. of_node_put(mac_np);
  4292. goto err_deinit_hw;
  4293. }
  4294. }
  4295. if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT)) {
  4296. err = devm_request_irq(eth->dev, eth->irq[MTK_FE_IRQ_SHARED],
  4297. mtk_handle_irq, 0,
  4298. dev_name(eth->dev), eth);
  4299. } else {
  4300. err = devm_request_irq(eth->dev, eth->irq[MTK_FE_IRQ_TX],
  4301. mtk_handle_irq_tx, 0,
  4302. dev_name(eth->dev), eth);
  4303. if (err)
  4304. goto err_free_dev;
  4305. err = devm_request_irq(eth->dev, eth->irq[MTK_FE_IRQ_RX],
  4306. mtk_handle_irq_rx, 0,
  4307. dev_name(eth->dev), eth);
  4308. }
  4309. if (err)
  4310. goto err_free_dev;
  4311. /* No MT7628/88 support yet */
  4312. if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
  4313. err = mtk_mdio_init(eth);
  4314. if (err)
  4315. goto err_free_dev;
  4316. }
  4317. if (eth->soc->offload_version) {
  4318. u8 ppe_num = eth->soc->ppe_num;
  4319. ppe_num = min_t(u8, ARRAY_SIZE(eth->ppe), ppe_num);
  4320. for (i = 0; i < ppe_num; i++) {
  4321. u32 ppe_addr = eth->soc->reg_map->ppe_base;
  4322. ppe_addr += (i == 2 ? 0xc00 : i * 0x400);
  4323. eth->ppe[i] = mtk_ppe_init(eth, eth->base + ppe_addr, i);
  4324. if (!eth->ppe[i]) {
  4325. err = -ENOMEM;
  4326. goto err_deinit_ppe;
  4327. }
  4328. err = mtk_eth_offload_init(eth, i);
  4329. if (err)
  4330. goto err_deinit_ppe;
  4331. }
  4332. }
  4333. for (i = 0; i < MTK_MAX_DEVS; i++) {
  4334. if (!eth->netdev[i])
  4335. continue;
  4336. err = register_netdev(eth->netdev[i]);
  4337. if (err) {
  4338. dev_err(eth->dev, "error bringing up device\n");
  4339. goto err_deinit_ppe;
  4340. } else
  4341. netif_info(eth, probe, eth->netdev[i],
  4342. "mediatek frame engine at 0x%08lx, irq %d\n",
  4343. eth->netdev[i]->base_addr, eth->irq[MTK_FE_IRQ_SHARED]);
  4344. }
  4345. /* we run 2 devices on the same DMA ring so we need a dummy device
  4346. * for NAPI to work
  4347. */
  4348. eth->dummy_dev = alloc_netdev_dummy(0);
  4349. if (!eth->dummy_dev) {
  4350. err = -ENOMEM;
  4351. dev_err(eth->dev, "failed to allocated dummy device\n");
  4352. goto err_unreg_netdev;
  4353. }
  4354. netif_napi_add(eth->dummy_dev, &eth->tx_napi, mtk_napi_tx);
  4355. netif_napi_add(eth->dummy_dev, &eth->rx_napi, mtk_napi_rx);
  4356. platform_set_drvdata(pdev, eth);
  4357. schedule_delayed_work(&eth->reset.monitor_work,
  4358. MTK_DMA_MONITOR_TIMEOUT);
  4359. return 0;
  4360. err_unreg_netdev:
  4361. mtk_unreg_dev(eth);
  4362. err_deinit_ppe:
  4363. mtk_ppe_deinit(eth);
  4364. mtk_mdio_cleanup(eth);
  4365. err_free_dev:
  4366. mtk_free_dev(eth);
  4367. err_deinit_hw:
  4368. mtk_hw_deinit(eth);
  4369. err_wed_exit:
  4370. mtk_wed_exit();
  4371. err_destroy_sgmii:
  4372. mtk_sgmii_destroy(eth);
  4373. return err;
  4374. }
  4375. static void mtk_remove(struct platform_device *pdev)
  4376. {
  4377. struct mtk_eth *eth = platform_get_drvdata(pdev);
  4378. struct mtk_mac *mac;
  4379. int i;
  4380. /* stop all devices to make sure that dma is properly shut down */
  4381. for (i = 0; i < MTK_MAX_DEVS; i++) {
  4382. if (!eth->netdev[i])
  4383. continue;
  4384. mtk_stop(eth->netdev[i]);
  4385. mac = netdev_priv(eth->netdev[i]);
  4386. phylink_disconnect_phy(mac->phylink);
  4387. }
  4388. mtk_wed_exit();
  4389. mtk_hw_deinit(eth);
  4390. netif_napi_del(&eth->tx_napi);
  4391. netif_napi_del(&eth->rx_napi);
  4392. mtk_cleanup(eth);
  4393. free_netdev(eth->dummy_dev);
  4394. mtk_mdio_cleanup(eth);
  4395. }
  4396. static const struct mtk_soc_data mt2701_data = {
  4397. .reg_map = &mtk_reg_map,
  4398. .caps = MT7623_CAPS | MTK_HWLRO,
  4399. .hw_features = MTK_HW_FEATURES,
  4400. .required_clks = MT7623_CLKS_BITMAP,
  4401. .required_pctl = true,
  4402. .version = 1,
  4403. .tx = {
  4404. .desc_size = sizeof(struct mtk_tx_dma),
  4405. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4406. .dma_len_offset = 16,
  4407. .dma_size = MTK_DMA_SIZE(2K),
  4408. .fq_dma_size = MTK_DMA_SIZE(2K),
  4409. },
  4410. .rx = {
  4411. .desc_size = sizeof(struct mtk_rx_dma),
  4412. .irq_done_mask = MTK_RX_DONE_INT,
  4413. .dma_l4_valid = RX_DMA_L4_VALID,
  4414. .dma_size = MTK_DMA_SIZE(2K),
  4415. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4416. .dma_len_offset = 16,
  4417. },
  4418. };
  4419. static const struct mtk_soc_data mt7621_data = {
  4420. .reg_map = &mtk_reg_map,
  4421. .caps = MT7621_CAPS,
  4422. .hw_features = MTK_HW_FEATURES,
  4423. .required_clks = MT7621_CLKS_BITMAP,
  4424. .required_pctl = false,
  4425. .version = 1,
  4426. .offload_version = 1,
  4427. .ppe_num = 1,
  4428. .hash_offset = 2,
  4429. .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
  4430. .tx = {
  4431. .desc_size = sizeof(struct mtk_tx_dma),
  4432. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4433. .dma_len_offset = 16,
  4434. .dma_size = MTK_DMA_SIZE(2K),
  4435. .fq_dma_size = MTK_DMA_SIZE(2K),
  4436. },
  4437. .rx = {
  4438. .desc_size = sizeof(struct mtk_rx_dma),
  4439. .irq_done_mask = MTK_RX_DONE_INT,
  4440. .dma_l4_valid = RX_DMA_L4_VALID,
  4441. .dma_size = MTK_DMA_SIZE(2K),
  4442. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4443. .dma_len_offset = 16,
  4444. },
  4445. };
  4446. static const struct mtk_soc_data mt7622_data = {
  4447. .reg_map = &mtk_reg_map,
  4448. .ana_rgc3 = 0x2028,
  4449. .caps = MT7622_CAPS | MTK_HWLRO,
  4450. .hw_features = MTK_HW_FEATURES,
  4451. .required_clks = MT7622_CLKS_BITMAP,
  4452. .required_pctl = false,
  4453. .version = 1,
  4454. .offload_version = 2,
  4455. .ppe_num = 1,
  4456. .hash_offset = 2,
  4457. .has_accounting = true,
  4458. .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
  4459. .tx = {
  4460. .desc_size = sizeof(struct mtk_tx_dma),
  4461. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4462. .dma_len_offset = 16,
  4463. .dma_size = MTK_DMA_SIZE(2K),
  4464. .fq_dma_size = MTK_DMA_SIZE(2K),
  4465. },
  4466. .rx = {
  4467. .desc_size = sizeof(struct mtk_rx_dma),
  4468. .irq_done_mask = MTK_RX_DONE_INT,
  4469. .dma_l4_valid = RX_DMA_L4_VALID,
  4470. .dma_size = MTK_DMA_SIZE(2K),
  4471. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4472. .dma_len_offset = 16,
  4473. },
  4474. };
  4475. static const struct mtk_soc_data mt7623_data = {
  4476. .reg_map = &mtk_reg_map,
  4477. .caps = MT7623_CAPS | MTK_HWLRO,
  4478. .hw_features = MTK_HW_FEATURES,
  4479. .required_clks = MT7623_CLKS_BITMAP,
  4480. .required_pctl = true,
  4481. .version = 1,
  4482. .offload_version = 1,
  4483. .ppe_num = 1,
  4484. .hash_offset = 2,
  4485. .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
  4486. .disable_pll_modes = true,
  4487. .tx = {
  4488. .desc_size = sizeof(struct mtk_tx_dma),
  4489. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4490. .dma_len_offset = 16,
  4491. .dma_size = MTK_DMA_SIZE(2K),
  4492. .fq_dma_size = MTK_DMA_SIZE(2K),
  4493. },
  4494. .rx = {
  4495. .desc_size = sizeof(struct mtk_rx_dma),
  4496. .irq_done_mask = MTK_RX_DONE_INT,
  4497. .dma_l4_valid = RX_DMA_L4_VALID,
  4498. .dma_size = MTK_DMA_SIZE(2K),
  4499. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4500. .dma_len_offset = 16,
  4501. },
  4502. };
  4503. static const struct mtk_soc_data mt7629_data = {
  4504. .reg_map = &mtk_reg_map,
  4505. .ana_rgc3 = 0x128,
  4506. .caps = MT7629_CAPS | MTK_HWLRO,
  4507. .hw_features = MTK_HW_FEATURES,
  4508. .required_clks = MT7629_CLKS_BITMAP,
  4509. .required_pctl = false,
  4510. .has_accounting = true,
  4511. .version = 1,
  4512. .tx = {
  4513. .desc_size = sizeof(struct mtk_tx_dma),
  4514. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4515. .dma_len_offset = 16,
  4516. .dma_size = MTK_DMA_SIZE(2K),
  4517. .fq_dma_size = MTK_DMA_SIZE(2K),
  4518. },
  4519. .rx = {
  4520. .desc_size = sizeof(struct mtk_rx_dma),
  4521. .irq_done_mask = MTK_RX_DONE_INT,
  4522. .dma_l4_valid = RX_DMA_L4_VALID,
  4523. .dma_size = MTK_DMA_SIZE(2K),
  4524. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4525. .dma_len_offset = 16,
  4526. },
  4527. };
  4528. static const struct mtk_soc_data mt7981_data = {
  4529. .reg_map = &mt7986_reg_map,
  4530. .ana_rgc3 = 0x128,
  4531. .caps = MT7981_CAPS,
  4532. .hw_features = MTK_HW_FEATURES,
  4533. .required_clks = MT7981_CLKS_BITMAP,
  4534. .required_pctl = false,
  4535. .version = 2,
  4536. .offload_version = 2,
  4537. .ppe_num = 2,
  4538. .hash_offset = 4,
  4539. .has_accounting = true,
  4540. .foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
  4541. .tx = {
  4542. .desc_size = sizeof(struct mtk_tx_dma_v2),
  4543. .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  4544. .dma_len_offset = 8,
  4545. .dma_size = MTK_DMA_SIZE(2K),
  4546. .fq_dma_size = MTK_DMA_SIZE(2K),
  4547. },
  4548. .rx = {
  4549. .desc_size = sizeof(struct mtk_rx_dma),
  4550. .irq_done_mask = MTK_RX_DONE_INT,
  4551. .dma_l4_valid = RX_DMA_L4_VALID_V2,
  4552. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4553. .dma_len_offset = 16,
  4554. .dma_size = MTK_DMA_SIZE(2K),
  4555. },
  4556. };
  4557. static const struct mtk_soc_data mt7986_data = {
  4558. .reg_map = &mt7986_reg_map,
  4559. .ana_rgc3 = 0x128,
  4560. .caps = MT7986_CAPS,
  4561. .hw_features = MTK_HW_FEATURES,
  4562. .required_clks = MT7986_CLKS_BITMAP,
  4563. .required_pctl = false,
  4564. .version = 2,
  4565. .offload_version = 2,
  4566. .ppe_num = 2,
  4567. .hash_offset = 4,
  4568. .has_accounting = true,
  4569. .foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
  4570. .tx = {
  4571. .desc_size = sizeof(struct mtk_tx_dma_v2),
  4572. .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  4573. .dma_len_offset = 8,
  4574. .dma_size = MTK_DMA_SIZE(2K),
  4575. .fq_dma_size = MTK_DMA_SIZE(2K),
  4576. },
  4577. .rx = {
  4578. .desc_size = sizeof(struct mtk_rx_dma),
  4579. .irq_done_mask = MTK_RX_DONE_INT,
  4580. .dma_l4_valid = RX_DMA_L4_VALID_V2,
  4581. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4582. .dma_len_offset = 16,
  4583. .dma_size = MTK_DMA_SIZE(2K),
  4584. },
  4585. };
  4586. static const struct mtk_soc_data mt7988_data = {
  4587. .reg_map = &mt7988_reg_map,
  4588. .ana_rgc3 = 0x128,
  4589. .caps = MT7988_CAPS,
  4590. .hw_features = MTK_HW_FEATURES,
  4591. .required_clks = MT7988_CLKS_BITMAP,
  4592. .required_pctl = false,
  4593. .version = 3,
  4594. .offload_version = 2,
  4595. .ppe_num = 3,
  4596. .hash_offset = 4,
  4597. .has_accounting = true,
  4598. .foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
  4599. .tx = {
  4600. .desc_size = sizeof(struct mtk_tx_dma_v2),
  4601. .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  4602. .dma_len_offset = 8,
  4603. .dma_size = MTK_DMA_SIZE(2K),
  4604. .fq_dma_size = MTK_DMA_SIZE(4K),
  4605. },
  4606. .rx = {
  4607. .desc_size = sizeof(struct mtk_rx_dma_v2),
  4608. .irq_done_mask = MTK_RX_DONE_INT_V2,
  4609. .dma_l4_valid = RX_DMA_L4_VALID_V2,
  4610. .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  4611. .dma_len_offset = 8,
  4612. .dma_size = MTK_DMA_SIZE(2K),
  4613. },
  4614. };
  4615. static const struct mtk_soc_data rt5350_data = {
  4616. .reg_map = &mt7628_reg_map,
  4617. .caps = MT7628_CAPS,
  4618. .hw_features = MTK_HW_FEATURES_MT7628,
  4619. .required_clks = MT7628_CLKS_BITMAP,
  4620. .required_pctl = false,
  4621. .version = 1,
  4622. .tx = {
  4623. .desc_size = sizeof(struct mtk_tx_dma),
  4624. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4625. .dma_len_offset = 16,
  4626. .dma_size = MTK_DMA_SIZE(2K),
  4627. },
  4628. .rx = {
  4629. .desc_size = sizeof(struct mtk_rx_dma),
  4630. .irq_done_mask = MTK_RX_DONE_INT,
  4631. .dma_l4_valid = RX_DMA_L4_VALID_PDMA,
  4632. .dma_max_len = MTK_TX_DMA_BUF_LEN,
  4633. .dma_len_offset = 16,
  4634. .dma_size = MTK_DMA_SIZE(2K),
  4635. },
  4636. };
  4637. const struct of_device_id of_mtk_match[] = {
  4638. { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data },
  4639. { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data },
  4640. { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data },
  4641. { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data },
  4642. { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data },
  4643. { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data },
  4644. { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data },
  4645. { .compatible = "mediatek,mt7988-eth", .data = &mt7988_data },
  4646. { .compatible = "ralink,rt5350-eth", .data = &rt5350_data },
  4647. {},
  4648. };
  4649. MODULE_DEVICE_TABLE(of, of_mtk_match);
  4650. static struct platform_driver mtk_driver = {
  4651. .probe = mtk_probe,
  4652. .remove = mtk_remove,
  4653. .driver = {
  4654. .name = "mtk_soc_eth",
  4655. .of_match_table = of_mtk_match,
  4656. },
  4657. };
  4658. module_platform_driver(mtk_driver);
  4659. MODULE_LICENSE("GPL");
  4660. MODULE_AUTHOR("John Crispin <blogic@openwrt.org>");
  4661. MODULE_DESCRIPTION("Ethernet driver for MediaTek SoC");
  4662. MODULE_IMPORT_NS("NETDEV_INTERNAL");