mtk_eth_soc.c 133 KB

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