ag71xx.c 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Atheros AR71xx built-in ethernet mac driver
  3. *
  4. * Copyright (C) 2019 Oleksij Rempel <o.rempel@pengutronix.de>
  5. *
  6. * List of authors contributed to this driver before mainlining:
  7. * Alexander Couzens <lynxis@fe80.eu>
  8. * Christian Lamparter <chunkeey@gmail.com>
  9. * Chuanhong Guo <gch981213@gmail.com>
  10. * Daniel F. Dickinson <cshored@thecshore.com>
  11. * David Bauer <mail@david-bauer.net>
  12. * Felix Fietkau <nbd@nbd.name>
  13. * Gabor Juhos <juhosg@freemail.hu>
  14. * Hauke Mehrtens <hauke@hauke-m.de>
  15. * Johann Neuhauser <johann@it-neuhauser.de>
  16. * John Crispin <john@phrozen.org>
  17. * Jo-Philipp Wich <jo@mein.io>
  18. * Koen Vandeputte <koen.vandeputte@ncentric.com>
  19. * Lucian Cristian <lucian.cristian@gmail.com>
  20. * Matt Merhar <mattmerhar@protonmail.com>
  21. * Milan Krstic <milan.krstic@gmail.com>
  22. * Petr Štetiar <ynezz@true.cz>
  23. * Rosen Penev <rosenp@gmail.com>
  24. * Stephen Walker <stephendwalker+github@gmail.com>
  25. * Vittorio Gambaletta <openwrt@vittgam.net>
  26. * Weijie Gao <hackpascal@gmail.com>
  27. * Imre Kaloz <kaloz@openwrt.org>
  28. */
  29. #include <linux/if_vlan.h>
  30. #include <linux/mfd/syscon.h>
  31. #include <linux/of.h>
  32. #include <linux/of_mdio.h>
  33. #include <linux/of_net.h>
  34. #include <linux/platform_device.h>
  35. #include <linux/phylink.h>
  36. #include <linux/regmap.h>
  37. #include <linux/reset.h>
  38. #include <linux/clk.h>
  39. #include <linux/io.h>
  40. #include <net/selftests.h>
  41. /* For our NAPI weight bigger does *NOT* mean better - it means more
  42. * D-cache misses and lots more wasted cycles than we'll ever
  43. * possibly gain from saving instructions.
  44. */
  45. #define AG71XX_NAPI_WEIGHT 32
  46. #define AG71XX_OOM_REFILL (1 + HZ / 10)
  47. #define AG71XX_INT_ERR (AG71XX_INT_RX_BE | AG71XX_INT_TX_BE)
  48. #define AG71XX_INT_TX (AG71XX_INT_TX_PS)
  49. #define AG71XX_INT_RX (AG71XX_INT_RX_PR | AG71XX_INT_RX_OF)
  50. #define AG71XX_INT_POLL (AG71XX_INT_RX | AG71XX_INT_TX)
  51. #define AG71XX_INT_INIT (AG71XX_INT_ERR | AG71XX_INT_POLL)
  52. #define AG71XX_TX_MTU_LEN 1540
  53. #define AG71XX_TX_RING_SPLIT 512
  54. #define AG71XX_TX_RING_DS_PER_PKT DIV_ROUND_UP(AG71XX_TX_MTU_LEN, \
  55. AG71XX_TX_RING_SPLIT)
  56. #define AG71XX_TX_RING_SIZE_DEFAULT 128
  57. #define AG71XX_RX_RING_SIZE_DEFAULT 256
  58. #define AG71XX_MDIO_RETRY 1000
  59. #define AG71XX_MDIO_DELAY 5
  60. #define AG71XX_MDIO_MAX_CLK 5000000
  61. /* Register offsets */
  62. #define AG71XX_REG_MAC_CFG1 0x0000
  63. #define MAC_CFG1_TXE BIT(0) /* Tx Enable */
  64. #define MAC_CFG1_STX BIT(1) /* Synchronize Tx Enable */
  65. #define MAC_CFG1_RXE BIT(2) /* Rx Enable */
  66. #define MAC_CFG1_SRX BIT(3) /* Synchronize Rx Enable */
  67. #define MAC_CFG1_TFC BIT(4) /* Tx Flow Control Enable */
  68. #define MAC_CFG1_RFC BIT(5) /* Rx Flow Control Enable */
  69. #define MAC_CFG1_SR BIT(31) /* Soft Reset */
  70. #define MAC_CFG1_INIT (MAC_CFG1_RXE | MAC_CFG1_TXE | \
  71. MAC_CFG1_SRX | MAC_CFG1_STX)
  72. #define AG71XX_REG_MAC_CFG2 0x0004
  73. #define MAC_CFG2_FDX BIT(0)
  74. #define MAC_CFG2_PAD_CRC_EN BIT(2)
  75. #define MAC_CFG2_LEN_CHECK BIT(4)
  76. #define MAC_CFG2_IF_1000 BIT(9)
  77. #define MAC_CFG2_IF_10_100 BIT(8)
  78. #define AG71XX_REG_MAC_MFL 0x0010
  79. #define AG71XX_REG_MII_CFG 0x0020
  80. #define MII_CFG_CLK_DIV_4 0
  81. #define MII_CFG_CLK_DIV_6 2
  82. #define MII_CFG_CLK_DIV_8 3
  83. #define MII_CFG_CLK_DIV_10 4
  84. #define MII_CFG_CLK_DIV_14 5
  85. #define MII_CFG_CLK_DIV_20 6
  86. #define MII_CFG_CLK_DIV_28 7
  87. #define MII_CFG_CLK_DIV_34 8
  88. #define MII_CFG_CLK_DIV_42 9
  89. #define MII_CFG_CLK_DIV_50 10
  90. #define MII_CFG_CLK_DIV_58 11
  91. #define MII_CFG_CLK_DIV_66 12
  92. #define MII_CFG_CLK_DIV_74 13
  93. #define MII_CFG_CLK_DIV_82 14
  94. #define MII_CFG_CLK_DIV_98 15
  95. #define MII_CFG_RESET BIT(31)
  96. #define AG71XX_REG_MII_CMD 0x0024
  97. #define MII_CMD_READ BIT(0)
  98. #define AG71XX_REG_MII_ADDR 0x0028
  99. #define MII_ADDR_SHIFT 8
  100. #define AG71XX_REG_MII_CTRL 0x002c
  101. #define AG71XX_REG_MII_STATUS 0x0030
  102. #define AG71XX_REG_MII_IND 0x0034
  103. #define MII_IND_BUSY BIT(0)
  104. #define MII_IND_INVALID BIT(2)
  105. #define AG71XX_REG_MAC_IFCTL 0x0038
  106. #define MAC_IFCTL_SPEED BIT(16)
  107. #define AG71XX_REG_MAC_ADDR1 0x0040
  108. #define AG71XX_REG_MAC_ADDR2 0x0044
  109. #define AG71XX_REG_FIFO_CFG0 0x0048
  110. #define FIFO_CFG0_WTM BIT(0) /* Watermark Module */
  111. #define FIFO_CFG0_RXS BIT(1) /* Rx System Module */
  112. #define FIFO_CFG0_RXF BIT(2) /* Rx Fabric Module */
  113. #define FIFO_CFG0_TXS BIT(3) /* Tx System Module */
  114. #define FIFO_CFG0_TXF BIT(4) /* Tx Fabric Module */
  115. #define FIFO_CFG0_ALL (FIFO_CFG0_WTM | FIFO_CFG0_RXS | FIFO_CFG0_RXF \
  116. | FIFO_CFG0_TXS | FIFO_CFG0_TXF)
  117. #define FIFO_CFG0_INIT (FIFO_CFG0_ALL << FIFO_CFG0_ENABLE_SHIFT)
  118. #define FIFO_CFG0_ENABLE_SHIFT 8
  119. #define AG71XX_REG_FIFO_CFG1 0x004c
  120. #define AG71XX_REG_FIFO_CFG2 0x0050
  121. #define AG71XX_REG_FIFO_CFG3 0x0054
  122. #define AG71XX_REG_FIFO_CFG4 0x0058
  123. #define FIFO_CFG4_DE BIT(0) /* Drop Event */
  124. #define FIFO_CFG4_DV BIT(1) /* RX_DV Event */
  125. #define FIFO_CFG4_FC BIT(2) /* False Carrier */
  126. #define FIFO_CFG4_CE BIT(3) /* Code Error */
  127. #define FIFO_CFG4_CR BIT(4) /* CRC error */
  128. #define FIFO_CFG4_LM BIT(5) /* Length Mismatch */
  129. #define FIFO_CFG4_LO BIT(6) /* Length out of range */
  130. #define FIFO_CFG4_OK BIT(7) /* Packet is OK */
  131. #define FIFO_CFG4_MC BIT(8) /* Multicast Packet */
  132. #define FIFO_CFG4_BC BIT(9) /* Broadcast Packet */
  133. #define FIFO_CFG4_DR BIT(10) /* Dribble */
  134. #define FIFO_CFG4_CF BIT(11) /* Control Frame */
  135. #define FIFO_CFG4_PF BIT(12) /* Pause Frame */
  136. #define FIFO_CFG4_UO BIT(13) /* Unsupported Opcode */
  137. #define FIFO_CFG4_VT BIT(14) /* VLAN tag detected */
  138. #define FIFO_CFG4_LE BIT(15) /* Long Event */
  139. #define FIFO_CFG4_FT BIT(16) /* Frame Truncated */
  140. #define FIFO_CFG4_UC BIT(17) /* Unicast Packet */
  141. #define FIFO_CFG4_INIT (FIFO_CFG4_DE | FIFO_CFG4_DV | FIFO_CFG4_FC | \
  142. FIFO_CFG4_CE | FIFO_CFG4_CR | FIFO_CFG4_LM | \
  143. FIFO_CFG4_LO | FIFO_CFG4_OK | FIFO_CFG4_MC | \
  144. FIFO_CFG4_BC | FIFO_CFG4_DR | FIFO_CFG4_LE | \
  145. FIFO_CFG4_CF | FIFO_CFG4_PF | FIFO_CFG4_UO | \
  146. FIFO_CFG4_VT)
  147. #define AG71XX_REG_FIFO_CFG5 0x005c
  148. #define FIFO_CFG5_DE BIT(0) /* Drop Event */
  149. #define FIFO_CFG5_DV BIT(1) /* RX_DV Event */
  150. #define FIFO_CFG5_FC BIT(2) /* False Carrier */
  151. #define FIFO_CFG5_CE BIT(3) /* Code Error */
  152. #define FIFO_CFG5_CR BIT(4) /* CRC error */
  153. #define FIFO_CFG5_LM BIT(5) /* Length Mismatch */
  154. #define FIFO_CFG5_LO BIT(6) /* Length Out of Range */
  155. #define FIFO_CFG5_OK BIT(7) /* Packet is OK */
  156. #define FIFO_CFG5_MC BIT(8) /* Multicast Packet */
  157. #define FIFO_CFG5_BC BIT(9) /* Broadcast Packet */
  158. #define FIFO_CFG5_DR BIT(10) /* Dribble */
  159. #define FIFO_CFG5_CF BIT(11) /* Control Frame */
  160. #define FIFO_CFG5_PF BIT(12) /* Pause Frame */
  161. #define FIFO_CFG5_UO BIT(13) /* Unsupported Opcode */
  162. #define FIFO_CFG5_VT BIT(14) /* VLAN tag detected */
  163. #define FIFO_CFG5_LE BIT(15) /* Long Event */
  164. #define FIFO_CFG5_FT BIT(16) /* Frame Truncated */
  165. #define FIFO_CFG5_UC BIT(17) /* Unicast Packet */
  166. #define FIFO_CFG5_SF BIT(18) /* Short Frame */
  167. #define FIFO_CFG5_BM BIT(19) /* Byte Mode */
  168. #define FIFO_CFG5_INIT (FIFO_CFG5_DE | FIFO_CFG5_DV | FIFO_CFG5_FC | \
  169. FIFO_CFG5_CE | FIFO_CFG5_LM | FIFO_CFG5_LO | \
  170. FIFO_CFG5_OK | FIFO_CFG5_MC | FIFO_CFG5_BC | \
  171. FIFO_CFG5_DR | FIFO_CFG5_CF | FIFO_CFG5_UO | \
  172. FIFO_CFG5_VT | FIFO_CFG5_LE | FIFO_CFG5_FT | \
  173. FIFO_CFG5_UC | FIFO_CFG5_SF)
  174. #define AG71XX_REG_TX_CTRL 0x0180
  175. #define TX_CTRL_TXE BIT(0) /* Tx Enable */
  176. #define AG71XX_REG_TX_DESC 0x0184
  177. #define AG71XX_REG_TX_STATUS 0x0188
  178. #define TX_STATUS_PS BIT(0) /* Packet Sent */
  179. #define TX_STATUS_UR BIT(1) /* Tx Underrun */
  180. #define TX_STATUS_BE BIT(3) /* Bus Error */
  181. #define AG71XX_REG_RX_CTRL 0x018c
  182. #define RX_CTRL_RXE BIT(0) /* Rx Enable */
  183. #define AG71XX_DMA_RETRY 10
  184. #define AG71XX_DMA_DELAY 1
  185. #define AG71XX_REG_RX_DESC 0x0190
  186. #define AG71XX_REG_RX_STATUS 0x0194
  187. #define RX_STATUS_PR BIT(0) /* Packet Received */
  188. #define RX_STATUS_OF BIT(2) /* Rx Overflow */
  189. #define RX_STATUS_BE BIT(3) /* Bus Error */
  190. #define AG71XX_REG_INT_ENABLE 0x0198
  191. #define AG71XX_REG_INT_STATUS 0x019c
  192. #define AG71XX_INT_TX_PS BIT(0)
  193. #define AG71XX_INT_TX_UR BIT(1)
  194. #define AG71XX_INT_TX_BE BIT(3)
  195. #define AG71XX_INT_RX_PR BIT(4)
  196. #define AG71XX_INT_RX_OF BIT(6)
  197. #define AG71XX_INT_RX_BE BIT(7)
  198. #define AG71XX_REG_FIFO_DEPTH 0x01a8
  199. #define AG71XX_REG_RX_SM 0x01b0
  200. #define AG71XX_REG_TX_SM 0x01b4
  201. #define AG71XX_DEFAULT_MSG_ENABLE \
  202. (NETIF_MSG_DRV \
  203. | NETIF_MSG_PROBE \
  204. | NETIF_MSG_LINK \
  205. | NETIF_MSG_TIMER \
  206. | NETIF_MSG_IFDOWN \
  207. | NETIF_MSG_IFUP \
  208. | NETIF_MSG_RX_ERR \
  209. | NETIF_MSG_TX_ERR)
  210. struct ag71xx_statistic {
  211. unsigned short offset;
  212. u32 mask;
  213. const char name[ETH_GSTRING_LEN];
  214. };
  215. static const struct ag71xx_statistic ag71xx_statistics[] = {
  216. { 0x0080, GENMASK(17, 0), "Tx/Rx 64 Byte", },
  217. { 0x0084, GENMASK(17, 0), "Tx/Rx 65-127 Byte", },
  218. { 0x0088, GENMASK(17, 0), "Tx/Rx 128-255 Byte", },
  219. { 0x008C, GENMASK(17, 0), "Tx/Rx 256-511 Byte", },
  220. { 0x0090, GENMASK(17, 0), "Tx/Rx 512-1023 Byte", },
  221. { 0x0094, GENMASK(17, 0), "Tx/Rx 1024-1518 Byte", },
  222. { 0x0098, GENMASK(17, 0), "Tx/Rx 1519-1522 Byte VLAN", },
  223. { 0x009C, GENMASK(23, 0), "Rx Byte", },
  224. { 0x00A0, GENMASK(17, 0), "Rx Packet", },
  225. { 0x00A4, GENMASK(11, 0), "Rx FCS Error", },
  226. { 0x00A8, GENMASK(17, 0), "Rx Multicast Packet", },
  227. { 0x00AC, GENMASK(21, 0), "Rx Broadcast Packet", },
  228. { 0x00B0, GENMASK(17, 0), "Rx Control Frame Packet", },
  229. { 0x00B4, GENMASK(11, 0), "Rx Pause Frame Packet", },
  230. { 0x00B8, GENMASK(11, 0), "Rx Unknown OPCode Packet", },
  231. { 0x00BC, GENMASK(11, 0), "Rx Alignment Error", },
  232. { 0x00C0, GENMASK(15, 0), "Rx Frame Length Error", },
  233. { 0x00C4, GENMASK(11, 0), "Rx Code Error", },
  234. { 0x00C8, GENMASK(11, 0), "Rx Carrier Sense Error", },
  235. { 0x00CC, GENMASK(11, 0), "Rx Undersize Packet", },
  236. { 0x00D0, GENMASK(11, 0), "Rx Oversize Packet", },
  237. { 0x00D4, GENMASK(11, 0), "Rx Fragments", },
  238. { 0x00D8, GENMASK(11, 0), "Rx Jabber", },
  239. { 0x00DC, GENMASK(11, 0), "Rx Dropped Packet", },
  240. { 0x00E0, GENMASK(23, 0), "Tx Byte", },
  241. { 0x00E4, GENMASK(17, 0), "Tx Packet", },
  242. { 0x00E8, GENMASK(17, 0), "Tx Multicast Packet", },
  243. { 0x00EC, GENMASK(17, 0), "Tx Broadcast Packet", },
  244. { 0x00F0, GENMASK(11, 0), "Tx Pause Control Frame", },
  245. { 0x00F4, GENMASK(11, 0), "Tx Deferral Packet", },
  246. { 0x00F8, GENMASK(11, 0), "Tx Excessive Deferral Packet", },
  247. { 0x00FC, GENMASK(11, 0), "Tx Single Collision Packet", },
  248. { 0x0100, GENMASK(11, 0), "Tx Multiple Collision", },
  249. { 0x0104, GENMASK(11, 0), "Tx Late Collision Packet", },
  250. { 0x0108, GENMASK(11, 0), "Tx Excessive Collision Packet", },
  251. { 0x010C, GENMASK(12, 0), "Tx Total Collision", },
  252. { 0x0110, GENMASK(11, 0), "Tx Pause Frames Honored", },
  253. { 0x0114, GENMASK(11, 0), "Tx Drop Frame", },
  254. { 0x0118, GENMASK(11, 0), "Tx Jabber Frame", },
  255. { 0x011C, GENMASK(11, 0), "Tx FCS Error", },
  256. { 0x0120, GENMASK(11, 0), "Tx Control Frame", },
  257. { 0x0124, GENMASK(11, 0), "Tx Oversize Frame", },
  258. { 0x0128, GENMASK(11, 0), "Tx Undersize Frame", },
  259. { 0x012C, GENMASK(11, 0), "Tx Fragment", },
  260. };
  261. #define DESC_EMPTY BIT(31)
  262. #define DESC_MORE BIT(24)
  263. #define DESC_PKTLEN_M 0xfff
  264. struct ag71xx_desc {
  265. u32 data;
  266. u32 ctrl;
  267. u32 next;
  268. u32 pad;
  269. } __aligned(4);
  270. #define AG71XX_DESC_SIZE roundup(sizeof(struct ag71xx_desc), \
  271. L1_CACHE_BYTES)
  272. struct ag71xx_buf {
  273. union {
  274. struct {
  275. struct sk_buff *skb;
  276. unsigned int len;
  277. } tx;
  278. struct {
  279. dma_addr_t dma_addr;
  280. void *rx_buf;
  281. } rx;
  282. };
  283. };
  284. struct ag71xx_ring {
  285. /* "Hot" fields in the data path. */
  286. unsigned int curr;
  287. unsigned int dirty;
  288. /* "Cold" fields - not used in the data path. */
  289. struct ag71xx_buf *buf;
  290. u16 order;
  291. u16 desc_split;
  292. dma_addr_t descs_dma;
  293. u8 *descs_cpu;
  294. };
  295. enum ag71xx_type {
  296. AR7100,
  297. AR7240,
  298. AR9130,
  299. AR9330,
  300. AR9340,
  301. QCA9530,
  302. QCA9550,
  303. };
  304. struct ag71xx_dcfg {
  305. u32 max_frame_len;
  306. const u32 *fifodata;
  307. u16 desc_pktlen_mask;
  308. bool tx_hang_workaround;
  309. enum ag71xx_type type;
  310. };
  311. struct ag71xx {
  312. /* Critical data related to the per-packet data path are clustered
  313. * early in this structure to help improve the D-cache footprint.
  314. */
  315. struct ag71xx_ring rx_ring ____cacheline_aligned;
  316. struct ag71xx_ring tx_ring ____cacheline_aligned;
  317. u16 rx_buf_size;
  318. u8 rx_buf_offset;
  319. struct net_device *ndev;
  320. struct platform_device *pdev;
  321. struct napi_struct napi;
  322. u32 msg_enable;
  323. const struct ag71xx_dcfg *dcfg;
  324. /* From this point onwards we're not looking at per-packet fields. */
  325. void __iomem *mac_base;
  326. struct ag71xx_desc *stop_desc;
  327. dma_addr_t stop_desc_dma;
  328. phy_interface_t phy_if_mode;
  329. struct phylink *phylink;
  330. struct phylink_config phylink_config;
  331. struct delayed_work restart_work;
  332. struct timer_list oom_timer;
  333. struct reset_control *mac_reset;
  334. u32 fifodata[3];
  335. int mac_idx;
  336. struct clk *clk_mdio;
  337. };
  338. static int ag71xx_desc_empty(struct ag71xx_desc *desc)
  339. {
  340. return (desc->ctrl & DESC_EMPTY) != 0;
  341. }
  342. static struct ag71xx_desc *ag71xx_ring_desc(struct ag71xx_ring *ring, int idx)
  343. {
  344. return (struct ag71xx_desc *)&ring->descs_cpu[idx * AG71XX_DESC_SIZE];
  345. }
  346. static int ag71xx_ring_size_order(int size)
  347. {
  348. return fls(size - 1);
  349. }
  350. static bool ag71xx_is(struct ag71xx *ag, enum ag71xx_type type)
  351. {
  352. return ag->dcfg->type == type;
  353. }
  354. static void ag71xx_wr(struct ag71xx *ag, unsigned int reg, u32 value)
  355. {
  356. iowrite32(value, ag->mac_base + reg);
  357. /* flush write */
  358. (void)ioread32(ag->mac_base + reg);
  359. }
  360. static u32 ag71xx_rr(struct ag71xx *ag, unsigned int reg)
  361. {
  362. return ioread32(ag->mac_base + reg);
  363. }
  364. static void ag71xx_sb(struct ag71xx *ag, unsigned int reg, u32 mask)
  365. {
  366. void __iomem *r;
  367. r = ag->mac_base + reg;
  368. iowrite32(ioread32(r) | mask, r);
  369. /* flush write */
  370. (void)ioread32(r);
  371. }
  372. static void ag71xx_cb(struct ag71xx *ag, unsigned int reg, u32 mask)
  373. {
  374. void __iomem *r;
  375. r = ag->mac_base + reg;
  376. iowrite32(ioread32(r) & ~mask, r);
  377. /* flush write */
  378. (void)ioread32(r);
  379. }
  380. static void ag71xx_int_enable(struct ag71xx *ag, u32 ints)
  381. {
  382. ag71xx_sb(ag, AG71XX_REG_INT_ENABLE, ints);
  383. }
  384. static void ag71xx_int_disable(struct ag71xx *ag, u32 ints)
  385. {
  386. ag71xx_cb(ag, AG71XX_REG_INT_ENABLE, ints);
  387. }
  388. static int ag71xx_do_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd)
  389. {
  390. struct ag71xx *ag = netdev_priv(ndev);
  391. return phylink_mii_ioctl(ag->phylink, ifr, cmd);
  392. }
  393. static void ag71xx_get_drvinfo(struct net_device *ndev,
  394. struct ethtool_drvinfo *info)
  395. {
  396. struct ag71xx *ag = netdev_priv(ndev);
  397. strscpy(info->driver, "ag71xx", sizeof(info->driver));
  398. strscpy(info->bus_info, of_node_full_name(ag->pdev->dev.of_node),
  399. sizeof(info->bus_info));
  400. }
  401. static int ag71xx_get_link_ksettings(struct net_device *ndev,
  402. struct ethtool_link_ksettings *kset)
  403. {
  404. struct ag71xx *ag = netdev_priv(ndev);
  405. return phylink_ethtool_ksettings_get(ag->phylink, kset);
  406. }
  407. static int ag71xx_set_link_ksettings(struct net_device *ndev,
  408. const struct ethtool_link_ksettings *kset)
  409. {
  410. struct ag71xx *ag = netdev_priv(ndev);
  411. return phylink_ethtool_ksettings_set(ag->phylink, kset);
  412. }
  413. static int ag71xx_ethtool_nway_reset(struct net_device *ndev)
  414. {
  415. struct ag71xx *ag = netdev_priv(ndev);
  416. return phylink_ethtool_nway_reset(ag->phylink);
  417. }
  418. static void ag71xx_ethtool_get_pauseparam(struct net_device *ndev,
  419. struct ethtool_pauseparam *pause)
  420. {
  421. struct ag71xx *ag = netdev_priv(ndev);
  422. phylink_ethtool_get_pauseparam(ag->phylink, pause);
  423. }
  424. static int ag71xx_ethtool_set_pauseparam(struct net_device *ndev,
  425. struct ethtool_pauseparam *pause)
  426. {
  427. struct ag71xx *ag = netdev_priv(ndev);
  428. return phylink_ethtool_set_pauseparam(ag->phylink, pause);
  429. }
  430. static void ag71xx_ethtool_get_strings(struct net_device *netdev, u32 sset,
  431. u8 *data)
  432. {
  433. int i;
  434. switch (sset) {
  435. case ETH_SS_STATS:
  436. for (i = 0; i < ARRAY_SIZE(ag71xx_statistics); i++)
  437. ethtool_puts(&data, ag71xx_statistics[i].name);
  438. break;
  439. case ETH_SS_TEST:
  440. net_selftest_get_strings(data);
  441. break;
  442. }
  443. }
  444. static void ag71xx_ethtool_get_stats(struct net_device *ndev,
  445. struct ethtool_stats *stats, u64 *data)
  446. {
  447. struct ag71xx *ag = netdev_priv(ndev);
  448. int i;
  449. for (i = 0; i < ARRAY_SIZE(ag71xx_statistics); i++)
  450. *data++ = ag71xx_rr(ag, ag71xx_statistics[i].offset)
  451. & ag71xx_statistics[i].mask;
  452. }
  453. static int ag71xx_ethtool_get_sset_count(struct net_device *ndev, int sset)
  454. {
  455. switch (sset) {
  456. case ETH_SS_STATS:
  457. return ARRAY_SIZE(ag71xx_statistics);
  458. case ETH_SS_TEST:
  459. return net_selftest_get_count();
  460. default:
  461. return -EOPNOTSUPP;
  462. }
  463. }
  464. static const struct ethtool_ops ag71xx_ethtool_ops = {
  465. .get_drvinfo = ag71xx_get_drvinfo,
  466. .get_link = ethtool_op_get_link,
  467. .get_ts_info = ethtool_op_get_ts_info,
  468. .get_link_ksettings = ag71xx_get_link_ksettings,
  469. .set_link_ksettings = ag71xx_set_link_ksettings,
  470. .nway_reset = ag71xx_ethtool_nway_reset,
  471. .get_pauseparam = ag71xx_ethtool_get_pauseparam,
  472. .set_pauseparam = ag71xx_ethtool_set_pauseparam,
  473. .get_strings = ag71xx_ethtool_get_strings,
  474. .get_ethtool_stats = ag71xx_ethtool_get_stats,
  475. .get_sset_count = ag71xx_ethtool_get_sset_count,
  476. .self_test = net_selftest,
  477. };
  478. static int ag71xx_mdio_wait_busy(struct ag71xx *ag)
  479. {
  480. struct net_device *ndev = ag->ndev;
  481. int i;
  482. for (i = 0; i < AG71XX_MDIO_RETRY; i++) {
  483. u32 busy;
  484. udelay(AG71XX_MDIO_DELAY);
  485. busy = ag71xx_rr(ag, AG71XX_REG_MII_IND);
  486. if (!busy)
  487. return 0;
  488. udelay(AG71XX_MDIO_DELAY);
  489. }
  490. netif_err(ag, link, ndev, "MDIO operation timed out\n");
  491. return -ETIMEDOUT;
  492. }
  493. static int ag71xx_mdio_mii_read(struct mii_bus *bus, int addr, int reg)
  494. {
  495. struct ag71xx *ag = bus->priv;
  496. int err, val;
  497. err = ag71xx_mdio_wait_busy(ag);
  498. if (err)
  499. return err;
  500. ag71xx_wr(ag, AG71XX_REG_MII_ADDR,
  501. ((addr & 0x1f) << MII_ADDR_SHIFT) | (reg & 0xff));
  502. /* enable read mode */
  503. ag71xx_wr(ag, AG71XX_REG_MII_CMD, MII_CMD_READ);
  504. err = ag71xx_mdio_wait_busy(ag);
  505. if (err)
  506. return err;
  507. val = ag71xx_rr(ag, AG71XX_REG_MII_STATUS);
  508. /* disable read mode */
  509. ag71xx_wr(ag, AG71XX_REG_MII_CMD, 0);
  510. netif_dbg(ag, link, ag->ndev, "mii_read: addr=%04x, reg=%04x, value=%04x\n",
  511. addr, reg, val);
  512. return val;
  513. }
  514. static int ag71xx_mdio_mii_write(struct mii_bus *bus, int addr, int reg,
  515. u16 val)
  516. {
  517. struct ag71xx *ag = bus->priv;
  518. netif_dbg(ag, link, ag->ndev, "mii_write: addr=%04x, reg=%04x, value=%04x\n",
  519. addr, reg, val);
  520. ag71xx_wr(ag, AG71XX_REG_MII_ADDR,
  521. ((addr & 0x1f) << MII_ADDR_SHIFT) | (reg & 0xff));
  522. ag71xx_wr(ag, AG71XX_REG_MII_CTRL, val);
  523. return ag71xx_mdio_wait_busy(ag);
  524. }
  525. static const u32 ar71xx_mdio_div_table[] = {
  526. 4, 4, 6, 8, 10, 14, 20, 28,
  527. };
  528. static const u32 ar7240_mdio_div_table[] = {
  529. 2, 2, 4, 6, 8, 12, 18, 26, 32, 40, 48, 56, 62, 70, 78, 96,
  530. };
  531. static const u32 ar933x_mdio_div_table[] = {
  532. 4, 4, 6, 8, 10, 14, 20, 28, 34, 42, 50, 58, 66, 74, 82, 98,
  533. };
  534. static int ag71xx_mdio_get_divider(struct ag71xx *ag, u32 *div)
  535. {
  536. unsigned long ref_clock;
  537. const u32 *table;
  538. int ndivs, i;
  539. ref_clock = clk_get_rate(ag->clk_mdio);
  540. if (!ref_clock)
  541. return -EINVAL;
  542. if (ag71xx_is(ag, AR9330) || ag71xx_is(ag, AR9340)) {
  543. table = ar933x_mdio_div_table;
  544. ndivs = ARRAY_SIZE(ar933x_mdio_div_table);
  545. } else if (ag71xx_is(ag, AR7240)) {
  546. table = ar7240_mdio_div_table;
  547. ndivs = ARRAY_SIZE(ar7240_mdio_div_table);
  548. } else {
  549. table = ar71xx_mdio_div_table;
  550. ndivs = ARRAY_SIZE(ar71xx_mdio_div_table);
  551. }
  552. for (i = 0; i < ndivs; i++) {
  553. unsigned long t;
  554. t = ref_clock / table[i];
  555. if (t <= AG71XX_MDIO_MAX_CLK) {
  556. *div = i;
  557. return 0;
  558. }
  559. }
  560. return -ENOENT;
  561. }
  562. static int ag71xx_mdio_reset(struct mii_bus *bus)
  563. {
  564. struct ag71xx *ag = bus->priv;
  565. int err;
  566. u32 t;
  567. err = ag71xx_mdio_get_divider(ag, &t);
  568. if (err)
  569. return err;
  570. ag71xx_wr(ag, AG71XX_REG_MII_CFG, t | MII_CFG_RESET);
  571. usleep_range(100, 200);
  572. ag71xx_wr(ag, AG71XX_REG_MII_CFG, t);
  573. usleep_range(100, 200);
  574. return 0;
  575. }
  576. static int ag71xx_mdio_probe(struct ag71xx *ag)
  577. {
  578. struct device *dev = &ag->pdev->dev;
  579. struct net_device *ndev = ag->ndev;
  580. struct reset_control *mdio_reset;
  581. static struct mii_bus *mii_bus;
  582. struct device_node *np, *mnp;
  583. int err;
  584. np = dev->of_node;
  585. ag->clk_mdio = devm_clk_get_enabled(dev, "mdio");
  586. if (IS_ERR(ag->clk_mdio)) {
  587. netif_err(ag, probe, ndev, "Failed to get mdio clk.\n");
  588. return PTR_ERR(ag->clk_mdio);
  589. }
  590. mii_bus = devm_mdiobus_alloc(dev);
  591. if (!mii_bus)
  592. return -ENOMEM;
  593. mdio_reset = devm_reset_control_get_exclusive(dev, "mdio");
  594. if (IS_ERR(mdio_reset)) {
  595. netif_err(ag, probe, ndev, "Failed to get reset mdio.\n");
  596. return PTR_ERR(mdio_reset);
  597. }
  598. mii_bus->name = "ag71xx_mdio";
  599. mii_bus->read = ag71xx_mdio_mii_read;
  600. mii_bus->write = ag71xx_mdio_mii_write;
  601. mii_bus->reset = ag71xx_mdio_reset;
  602. mii_bus->priv = ag;
  603. mii_bus->parent = dev;
  604. snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s.%d", np->name, ag->mac_idx);
  605. reset_control_assert(mdio_reset);
  606. msleep(100);
  607. reset_control_deassert(mdio_reset);
  608. msleep(200);
  609. mnp = of_get_child_by_name(np, "mdio");
  610. err = devm_of_mdiobus_register(dev, mii_bus, mnp);
  611. of_node_put(mnp);
  612. if (err)
  613. return err;
  614. return 0;
  615. }
  616. static void ag71xx_hw_stop(struct ag71xx *ag)
  617. {
  618. /* disable all interrupts and stop the rx/tx engine */
  619. ag71xx_wr(ag, AG71XX_REG_INT_ENABLE, 0);
  620. ag71xx_wr(ag, AG71XX_REG_RX_CTRL, 0);
  621. ag71xx_wr(ag, AG71XX_REG_TX_CTRL, 0);
  622. }
  623. static bool ag71xx_check_dma_stuck(struct ag71xx *ag)
  624. {
  625. unsigned long timestamp;
  626. u32 rx_sm, tx_sm, rx_fd;
  627. timestamp = READ_ONCE(netdev_get_tx_queue(ag->ndev, 0)->trans_start);
  628. if (likely(time_before(jiffies, timestamp + HZ / 10)))
  629. return false;
  630. if (!netif_carrier_ok(ag->ndev))
  631. return false;
  632. rx_sm = ag71xx_rr(ag, AG71XX_REG_RX_SM);
  633. if ((rx_sm & 0x7) == 0x3 && ((rx_sm >> 4) & 0x7) == 0x6)
  634. return true;
  635. tx_sm = ag71xx_rr(ag, AG71XX_REG_TX_SM);
  636. rx_fd = ag71xx_rr(ag, AG71XX_REG_FIFO_DEPTH);
  637. if (((tx_sm >> 4) & 0x7) == 0 && ((rx_sm & 0x7) == 0) &&
  638. ((rx_sm >> 4) & 0x7) == 0 && rx_fd == 0)
  639. return true;
  640. return false;
  641. }
  642. static int ag71xx_tx_packets(struct ag71xx *ag, bool flush, int budget)
  643. {
  644. struct ag71xx_ring *ring = &ag->tx_ring;
  645. int sent = 0, bytes_compl = 0, n = 0;
  646. struct net_device *ndev = ag->ndev;
  647. int ring_mask, ring_size;
  648. bool dma_stuck = false;
  649. ring_mask = BIT(ring->order) - 1;
  650. ring_size = BIT(ring->order);
  651. netif_dbg(ag, tx_queued, ndev, "processing TX ring\n");
  652. while (ring->dirty + n != ring->curr) {
  653. struct ag71xx_desc *desc;
  654. struct sk_buff *skb;
  655. unsigned int i;
  656. i = (ring->dirty + n) & ring_mask;
  657. desc = ag71xx_ring_desc(ring, i);
  658. skb = ring->buf[i].tx.skb;
  659. if (!flush && !ag71xx_desc_empty(desc)) {
  660. if (ag->dcfg->tx_hang_workaround &&
  661. ag71xx_check_dma_stuck(ag)) {
  662. schedule_delayed_work(&ag->restart_work,
  663. HZ / 2);
  664. dma_stuck = true;
  665. }
  666. break;
  667. }
  668. if (flush)
  669. desc->ctrl |= DESC_EMPTY;
  670. n++;
  671. if (!skb)
  672. continue;
  673. napi_consume_skb(skb, budget);
  674. ring->buf[i].tx.skb = NULL;
  675. bytes_compl += ring->buf[i].tx.len;
  676. sent++;
  677. ring->dirty += n;
  678. while (n > 0) {
  679. ag71xx_wr(ag, AG71XX_REG_TX_STATUS, TX_STATUS_PS);
  680. n--;
  681. }
  682. }
  683. netif_dbg(ag, tx_done, ndev, "%d packets sent out\n", sent);
  684. if (!sent)
  685. return 0;
  686. ag->ndev->stats.tx_bytes += bytes_compl;
  687. ag->ndev->stats.tx_packets += sent;
  688. netdev_completed_queue(ag->ndev, sent, bytes_compl);
  689. if ((ring->curr - ring->dirty) < (ring_size * 3) / 4)
  690. netif_wake_queue(ag->ndev);
  691. if (!dma_stuck)
  692. cancel_delayed_work(&ag->restart_work);
  693. return sent;
  694. }
  695. static void ag71xx_dma_wait_stop(struct ag71xx *ag)
  696. {
  697. struct net_device *ndev = ag->ndev;
  698. int i;
  699. for (i = 0; i < AG71XX_DMA_RETRY; i++) {
  700. u32 rx, tx;
  701. mdelay(AG71XX_DMA_DELAY);
  702. rx = ag71xx_rr(ag, AG71XX_REG_RX_CTRL) & RX_CTRL_RXE;
  703. tx = ag71xx_rr(ag, AG71XX_REG_TX_CTRL) & TX_CTRL_TXE;
  704. if (!rx && !tx)
  705. return;
  706. }
  707. netif_err(ag, hw, ndev, "DMA stop operation timed out\n");
  708. }
  709. static void ag71xx_dma_reset(struct ag71xx *ag)
  710. {
  711. struct net_device *ndev = ag->ndev;
  712. u32 val;
  713. int i;
  714. /* stop RX and TX */
  715. ag71xx_wr(ag, AG71XX_REG_RX_CTRL, 0);
  716. ag71xx_wr(ag, AG71XX_REG_TX_CTRL, 0);
  717. /* give the hardware some time to really stop all rx/tx activity
  718. * clearing the descriptors too early causes random memory corruption
  719. */
  720. ag71xx_dma_wait_stop(ag);
  721. /* clear descriptor addresses */
  722. ag71xx_wr(ag, AG71XX_REG_TX_DESC, ag->stop_desc_dma);
  723. ag71xx_wr(ag, AG71XX_REG_RX_DESC, ag->stop_desc_dma);
  724. /* clear pending RX/TX interrupts */
  725. for (i = 0; i < 256; i++) {
  726. ag71xx_wr(ag, AG71XX_REG_RX_STATUS, RX_STATUS_PR);
  727. ag71xx_wr(ag, AG71XX_REG_TX_STATUS, TX_STATUS_PS);
  728. }
  729. /* clear pending errors */
  730. ag71xx_wr(ag, AG71XX_REG_RX_STATUS, RX_STATUS_BE | RX_STATUS_OF);
  731. ag71xx_wr(ag, AG71XX_REG_TX_STATUS, TX_STATUS_BE | TX_STATUS_UR);
  732. val = ag71xx_rr(ag, AG71XX_REG_RX_STATUS);
  733. if (val)
  734. netif_err(ag, hw, ndev, "unable to clear DMA Rx status: %08x\n",
  735. val);
  736. val = ag71xx_rr(ag, AG71XX_REG_TX_STATUS);
  737. /* mask out reserved bits */
  738. val &= ~0xff000000;
  739. if (val)
  740. netif_err(ag, hw, ndev, "unable to clear DMA Tx status: %08x\n",
  741. val);
  742. }
  743. static void ag71xx_hw_setup(struct ag71xx *ag)
  744. {
  745. u32 init = MAC_CFG1_INIT;
  746. /* setup MAC configuration registers */
  747. ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, init);
  748. ag71xx_sb(ag, AG71XX_REG_MAC_CFG2,
  749. MAC_CFG2_PAD_CRC_EN | MAC_CFG2_LEN_CHECK);
  750. /* setup max frame length to zero */
  751. ag71xx_wr(ag, AG71XX_REG_MAC_MFL, 0);
  752. /* setup FIFO configuration registers */
  753. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG0, FIFO_CFG0_INIT);
  754. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG1, ag->fifodata[0]);
  755. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG2, ag->fifodata[1]);
  756. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG4, FIFO_CFG4_INIT);
  757. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG5, FIFO_CFG5_INIT);
  758. }
  759. static unsigned int ag71xx_max_frame_len(unsigned int mtu)
  760. {
  761. return ETH_HLEN + VLAN_HLEN + mtu + ETH_FCS_LEN;
  762. }
  763. static void ag71xx_hw_set_macaddr(struct ag71xx *ag, const unsigned char *mac)
  764. {
  765. u32 t;
  766. t = (((u32)mac[5]) << 24) | (((u32)mac[4]) << 16)
  767. | (((u32)mac[3]) << 8) | ((u32)mac[2]);
  768. ag71xx_wr(ag, AG71XX_REG_MAC_ADDR1, t);
  769. t = (((u32)mac[1]) << 24) | (((u32)mac[0]) << 16);
  770. ag71xx_wr(ag, AG71XX_REG_MAC_ADDR2, t);
  771. }
  772. static void ag71xx_fast_reset(struct ag71xx *ag)
  773. {
  774. struct net_device *dev = ag->ndev;
  775. u32 rx_ds;
  776. u32 mii_reg;
  777. ag71xx_hw_stop(ag);
  778. mii_reg = ag71xx_rr(ag, AG71XX_REG_MII_CFG);
  779. rx_ds = ag71xx_rr(ag, AG71XX_REG_RX_DESC);
  780. ag71xx_tx_packets(ag, true, 0);
  781. reset_control_assert(ag->mac_reset);
  782. usleep_range(10, 20);
  783. reset_control_deassert(ag->mac_reset);
  784. usleep_range(10, 20);
  785. ag71xx_dma_reset(ag);
  786. ag71xx_hw_setup(ag);
  787. ag->tx_ring.curr = 0;
  788. ag->tx_ring.dirty = 0;
  789. netdev_reset_queue(ag->ndev);
  790. /* setup max frame length */
  791. ag71xx_wr(ag, AG71XX_REG_MAC_MFL,
  792. ag71xx_max_frame_len(ag->ndev->mtu));
  793. ag71xx_wr(ag, AG71XX_REG_RX_DESC, rx_ds);
  794. ag71xx_wr(ag, AG71XX_REG_TX_DESC, ag->tx_ring.descs_dma);
  795. ag71xx_wr(ag, AG71XX_REG_MII_CFG, mii_reg);
  796. ag71xx_hw_set_macaddr(ag, dev->dev_addr);
  797. }
  798. static void ag71xx_hw_start(struct ag71xx *ag)
  799. {
  800. /* start RX engine */
  801. ag71xx_wr(ag, AG71XX_REG_RX_CTRL, RX_CTRL_RXE);
  802. /* enable interrupts */
  803. ag71xx_wr(ag, AG71XX_REG_INT_ENABLE, AG71XX_INT_INIT);
  804. netif_wake_queue(ag->ndev);
  805. }
  806. static void ag71xx_mac_config(struct phylink_config *config, unsigned int mode,
  807. const struct phylink_link_state *state)
  808. {
  809. struct ag71xx *ag = netdev_priv(to_net_dev(config->dev));
  810. if (phylink_autoneg_inband(mode))
  811. return;
  812. if (!ag71xx_is(ag, AR7100) && !ag71xx_is(ag, AR9130))
  813. ag71xx_fast_reset(ag);
  814. if (ag->tx_ring.desc_split) {
  815. ag->fifodata[2] &= 0xffff;
  816. ag->fifodata[2] |= ((2048 - ag->tx_ring.desc_split) / 4) << 16;
  817. }
  818. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG3, ag->fifodata[2]);
  819. }
  820. static void ag71xx_mac_link_down(struct phylink_config *config,
  821. unsigned int mode, phy_interface_t interface)
  822. {
  823. struct ag71xx *ag = netdev_priv(to_net_dev(config->dev));
  824. ag71xx_hw_stop(ag);
  825. }
  826. static void ag71xx_mac_link_up(struct phylink_config *config,
  827. struct phy_device *phy,
  828. unsigned int mode, phy_interface_t interface,
  829. int speed, int duplex,
  830. bool tx_pause, bool rx_pause)
  831. {
  832. struct ag71xx *ag = netdev_priv(to_net_dev(config->dev));
  833. u32 cfg1, cfg2;
  834. u32 ifctl;
  835. u32 fifo5;
  836. cfg2 = ag71xx_rr(ag, AG71XX_REG_MAC_CFG2);
  837. cfg2 &= ~(MAC_CFG2_IF_1000 | MAC_CFG2_IF_10_100 | MAC_CFG2_FDX);
  838. cfg2 |= duplex ? MAC_CFG2_FDX : 0;
  839. ifctl = ag71xx_rr(ag, AG71XX_REG_MAC_IFCTL);
  840. ifctl &= ~(MAC_IFCTL_SPEED);
  841. fifo5 = ag71xx_rr(ag, AG71XX_REG_FIFO_CFG5);
  842. fifo5 &= ~FIFO_CFG5_BM;
  843. switch (speed) {
  844. case SPEED_1000:
  845. cfg2 |= MAC_CFG2_IF_1000;
  846. fifo5 |= FIFO_CFG5_BM;
  847. break;
  848. case SPEED_100:
  849. cfg2 |= MAC_CFG2_IF_10_100;
  850. ifctl |= MAC_IFCTL_SPEED;
  851. break;
  852. case SPEED_10:
  853. cfg2 |= MAC_CFG2_IF_10_100;
  854. break;
  855. default:
  856. return;
  857. }
  858. ag71xx_wr(ag, AG71XX_REG_MAC_CFG2, cfg2);
  859. ag71xx_wr(ag, AG71XX_REG_FIFO_CFG5, fifo5);
  860. ag71xx_wr(ag, AG71XX_REG_MAC_IFCTL, ifctl);
  861. cfg1 = ag71xx_rr(ag, AG71XX_REG_MAC_CFG1);
  862. cfg1 &= ~(MAC_CFG1_TFC | MAC_CFG1_RFC);
  863. if (tx_pause)
  864. cfg1 |= MAC_CFG1_TFC;
  865. if (rx_pause)
  866. cfg1 |= MAC_CFG1_RFC;
  867. ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, cfg1);
  868. ag71xx_hw_start(ag);
  869. }
  870. static const struct phylink_mac_ops ag71xx_phylink_mac_ops = {
  871. .mac_config = ag71xx_mac_config,
  872. .mac_link_down = ag71xx_mac_link_down,
  873. .mac_link_up = ag71xx_mac_link_up,
  874. };
  875. static int ag71xx_phylink_setup(struct ag71xx *ag)
  876. {
  877. struct phylink *phylink;
  878. ag->phylink_config.dev = &ag->ndev->dev;
  879. ag->phylink_config.type = PHYLINK_NETDEV;
  880. ag->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE |
  881. MAC_10 | MAC_100 | MAC_1000FD;
  882. if ((ag71xx_is(ag, AR9330) && ag->mac_idx == 0) ||
  883. ag71xx_is(ag, AR9340) ||
  884. ag71xx_is(ag, QCA9530) ||
  885. (ag71xx_is(ag, QCA9550) && ag->mac_idx == 1))
  886. __set_bit(PHY_INTERFACE_MODE_MII,
  887. ag->phylink_config.supported_interfaces);
  888. if ((ag71xx_is(ag, AR9330) && ag->mac_idx == 1) ||
  889. (ag71xx_is(ag, AR9340) && ag->mac_idx == 1) ||
  890. (ag71xx_is(ag, QCA9530) && ag->mac_idx == 1))
  891. __set_bit(PHY_INTERFACE_MODE_GMII,
  892. ag->phylink_config.supported_interfaces);
  893. if (ag71xx_is(ag, QCA9550) && ag->mac_idx == 0)
  894. __set_bit(PHY_INTERFACE_MODE_SGMII,
  895. ag->phylink_config.supported_interfaces);
  896. if (ag71xx_is(ag, AR9340) && ag->mac_idx == 0)
  897. __set_bit(PHY_INTERFACE_MODE_RMII,
  898. ag->phylink_config.supported_interfaces);
  899. if ((ag71xx_is(ag, AR9340) && ag->mac_idx == 0) ||
  900. (ag71xx_is(ag, QCA9550) && ag->mac_idx == 1))
  901. __set_bit(PHY_INTERFACE_MODE_RGMII,
  902. ag->phylink_config.supported_interfaces);
  903. phylink = phylink_create(&ag->phylink_config, ag->pdev->dev.fwnode,
  904. ag->phy_if_mode, &ag71xx_phylink_mac_ops);
  905. if (IS_ERR(phylink))
  906. return PTR_ERR(phylink);
  907. ag->phylink = phylink;
  908. return 0;
  909. }
  910. static void ag71xx_ring_tx_clean(struct ag71xx *ag)
  911. {
  912. struct ag71xx_ring *ring = &ag->tx_ring;
  913. int ring_mask = BIT(ring->order) - 1;
  914. u32 bytes_compl = 0, pkts_compl = 0;
  915. struct net_device *ndev = ag->ndev;
  916. while (ring->curr != ring->dirty) {
  917. struct ag71xx_desc *desc;
  918. u32 i = ring->dirty & ring_mask;
  919. desc = ag71xx_ring_desc(ring, i);
  920. if (!ag71xx_desc_empty(desc)) {
  921. desc->ctrl = 0;
  922. ndev->stats.tx_errors++;
  923. }
  924. if (ring->buf[i].tx.skb) {
  925. bytes_compl += ring->buf[i].tx.len;
  926. pkts_compl++;
  927. dev_kfree_skb_any(ring->buf[i].tx.skb);
  928. }
  929. ring->buf[i].tx.skb = NULL;
  930. ring->dirty++;
  931. }
  932. /* flush descriptors */
  933. wmb();
  934. netdev_completed_queue(ndev, pkts_compl, bytes_compl);
  935. }
  936. static void ag71xx_ring_tx_init(struct ag71xx *ag)
  937. {
  938. struct ag71xx_ring *ring = &ag->tx_ring;
  939. int ring_size = BIT(ring->order);
  940. int ring_mask = ring_size - 1;
  941. int i;
  942. for (i = 0; i < ring_size; i++) {
  943. struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
  944. desc->next = (u32)(ring->descs_dma +
  945. AG71XX_DESC_SIZE * ((i + 1) & ring_mask));
  946. desc->ctrl = DESC_EMPTY;
  947. ring->buf[i].tx.skb = NULL;
  948. }
  949. /* flush descriptors */
  950. wmb();
  951. ring->curr = 0;
  952. ring->dirty = 0;
  953. netdev_reset_queue(ag->ndev);
  954. }
  955. static void ag71xx_ring_rx_clean(struct ag71xx *ag)
  956. {
  957. struct ag71xx_ring *ring = &ag->rx_ring;
  958. int ring_size = BIT(ring->order);
  959. int i;
  960. if (!ring->buf)
  961. return;
  962. for (i = 0; i < ring_size; i++)
  963. if (ring->buf[i].rx.rx_buf) {
  964. dma_unmap_single(&ag->pdev->dev,
  965. ring->buf[i].rx.dma_addr,
  966. ag->rx_buf_size, DMA_FROM_DEVICE);
  967. skb_free_frag(ring->buf[i].rx.rx_buf);
  968. }
  969. }
  970. static int ag71xx_buffer_size(struct ag71xx *ag)
  971. {
  972. return ag->rx_buf_size +
  973. SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
  974. }
  975. static bool ag71xx_fill_rx_buf(struct ag71xx *ag, struct ag71xx_buf *buf,
  976. int offset,
  977. void *(*alloc)(unsigned int size))
  978. {
  979. struct ag71xx_ring *ring = &ag->rx_ring;
  980. struct ag71xx_desc *desc;
  981. void *data;
  982. desc = ag71xx_ring_desc(ring, buf - &ring->buf[0]);
  983. data = alloc(ag71xx_buffer_size(ag));
  984. if (!data)
  985. return false;
  986. buf->rx.rx_buf = data;
  987. buf->rx.dma_addr = dma_map_single(&ag->pdev->dev, data, ag->rx_buf_size,
  988. DMA_FROM_DEVICE);
  989. if (dma_mapping_error(&ag->pdev->dev, buf->rx.dma_addr)) {
  990. skb_free_frag(data);
  991. buf->rx.rx_buf = NULL;
  992. return false;
  993. }
  994. desc->data = (u32)buf->rx.dma_addr + offset;
  995. return true;
  996. }
  997. static int ag71xx_ring_rx_init(struct ag71xx *ag)
  998. {
  999. struct ag71xx_ring *ring = &ag->rx_ring;
  1000. struct net_device *ndev = ag->ndev;
  1001. int ring_mask = BIT(ring->order) - 1;
  1002. int ring_size = BIT(ring->order);
  1003. unsigned int i;
  1004. int ret;
  1005. ret = 0;
  1006. for (i = 0; i < ring_size; i++) {
  1007. struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
  1008. desc->next = (u32)(ring->descs_dma +
  1009. AG71XX_DESC_SIZE * ((i + 1) & ring_mask));
  1010. netif_dbg(ag, rx_status, ndev, "RX desc at %p, next is %08x\n",
  1011. desc, desc->next);
  1012. }
  1013. for (i = 0; i < ring_size; i++) {
  1014. struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
  1015. if (!ag71xx_fill_rx_buf(ag, &ring->buf[i], ag->rx_buf_offset,
  1016. netdev_alloc_frag)) {
  1017. ret = -ENOMEM;
  1018. break;
  1019. }
  1020. desc->ctrl = DESC_EMPTY;
  1021. }
  1022. /* flush descriptors */
  1023. wmb();
  1024. ring->curr = 0;
  1025. ring->dirty = 0;
  1026. return ret;
  1027. }
  1028. static int ag71xx_ring_rx_refill(struct ag71xx *ag)
  1029. {
  1030. struct ag71xx_ring *ring = &ag->rx_ring;
  1031. int ring_mask = BIT(ring->order) - 1;
  1032. int offset = ag->rx_buf_offset;
  1033. unsigned int count;
  1034. count = 0;
  1035. for (; ring->curr - ring->dirty > 0; ring->dirty++) {
  1036. struct ag71xx_desc *desc;
  1037. unsigned int i;
  1038. i = ring->dirty & ring_mask;
  1039. desc = ag71xx_ring_desc(ring, i);
  1040. if (!ring->buf[i].rx.rx_buf &&
  1041. !ag71xx_fill_rx_buf(ag, &ring->buf[i], offset,
  1042. napi_alloc_frag))
  1043. break;
  1044. desc->ctrl = DESC_EMPTY;
  1045. count++;
  1046. }
  1047. /* flush descriptors */
  1048. wmb();
  1049. netif_dbg(ag, rx_status, ag->ndev, "%u rx descriptors refilled\n",
  1050. count);
  1051. return count;
  1052. }
  1053. static int ag71xx_rings_init(struct ag71xx *ag)
  1054. {
  1055. struct ag71xx_ring *tx = &ag->tx_ring;
  1056. struct ag71xx_ring *rx = &ag->rx_ring;
  1057. int ring_size, tx_size;
  1058. ring_size = BIT(tx->order) + BIT(rx->order);
  1059. tx_size = BIT(tx->order);
  1060. tx->buf = kcalloc(ring_size, sizeof(*tx->buf), GFP_KERNEL);
  1061. if (!tx->buf)
  1062. return -ENOMEM;
  1063. tx->descs_cpu = dma_alloc_coherent(&ag->pdev->dev,
  1064. ring_size * AG71XX_DESC_SIZE,
  1065. &tx->descs_dma, GFP_KERNEL);
  1066. if (!tx->descs_cpu) {
  1067. kfree(tx->buf);
  1068. tx->buf = NULL;
  1069. return -ENOMEM;
  1070. }
  1071. rx->buf = &tx->buf[tx_size];
  1072. rx->descs_cpu = ((void *)tx->descs_cpu) + tx_size * AG71XX_DESC_SIZE;
  1073. rx->descs_dma = tx->descs_dma + tx_size * AG71XX_DESC_SIZE;
  1074. ag71xx_ring_tx_init(ag);
  1075. return ag71xx_ring_rx_init(ag);
  1076. }
  1077. static void ag71xx_rings_free(struct ag71xx *ag)
  1078. {
  1079. struct ag71xx_ring *tx = &ag->tx_ring;
  1080. struct ag71xx_ring *rx = &ag->rx_ring;
  1081. int ring_size;
  1082. ring_size = BIT(tx->order) + BIT(rx->order);
  1083. if (tx->descs_cpu)
  1084. dma_free_coherent(&ag->pdev->dev, ring_size * AG71XX_DESC_SIZE,
  1085. tx->descs_cpu, tx->descs_dma);
  1086. kfree(tx->buf);
  1087. tx->descs_cpu = NULL;
  1088. rx->descs_cpu = NULL;
  1089. tx->buf = NULL;
  1090. rx->buf = NULL;
  1091. }
  1092. static void ag71xx_rings_cleanup(struct ag71xx *ag)
  1093. {
  1094. ag71xx_ring_rx_clean(ag);
  1095. ag71xx_ring_tx_clean(ag);
  1096. ag71xx_rings_free(ag);
  1097. netdev_reset_queue(ag->ndev);
  1098. }
  1099. static void ag71xx_hw_init(struct ag71xx *ag)
  1100. {
  1101. ag71xx_hw_stop(ag);
  1102. ag71xx_sb(ag, AG71XX_REG_MAC_CFG1, MAC_CFG1_SR);
  1103. usleep_range(20, 30);
  1104. reset_control_assert(ag->mac_reset);
  1105. msleep(100);
  1106. reset_control_deassert(ag->mac_reset);
  1107. msleep(200);
  1108. ag71xx_hw_setup(ag);
  1109. ag71xx_dma_reset(ag);
  1110. }
  1111. static int ag71xx_hw_enable(struct ag71xx *ag)
  1112. {
  1113. int ret;
  1114. ret = ag71xx_rings_init(ag);
  1115. if (ret)
  1116. return ret;
  1117. napi_enable(&ag->napi);
  1118. ag71xx_wr(ag, AG71XX_REG_TX_DESC, ag->tx_ring.descs_dma);
  1119. ag71xx_wr(ag, AG71XX_REG_RX_DESC, ag->rx_ring.descs_dma);
  1120. netif_start_queue(ag->ndev);
  1121. return 0;
  1122. }
  1123. static void ag71xx_hw_disable(struct ag71xx *ag)
  1124. {
  1125. netif_stop_queue(ag->ndev);
  1126. ag71xx_hw_stop(ag);
  1127. ag71xx_dma_reset(ag);
  1128. napi_disable(&ag->napi);
  1129. del_timer_sync(&ag->oom_timer);
  1130. ag71xx_rings_cleanup(ag);
  1131. }
  1132. static int ag71xx_open(struct net_device *ndev)
  1133. {
  1134. struct ag71xx *ag = netdev_priv(ndev);
  1135. unsigned int max_frame_len;
  1136. int ret;
  1137. ret = phylink_of_phy_connect(ag->phylink, ag->pdev->dev.of_node, 0);
  1138. if (ret) {
  1139. netif_err(ag, link, ndev, "phylink_of_phy_connect filed with err: %i\n",
  1140. ret);
  1141. return ret;
  1142. }
  1143. max_frame_len = ag71xx_max_frame_len(ndev->mtu);
  1144. ag->rx_buf_size =
  1145. SKB_DATA_ALIGN(max_frame_len + NET_SKB_PAD + NET_IP_ALIGN);
  1146. /* setup max frame length */
  1147. ag71xx_wr(ag, AG71XX_REG_MAC_MFL, max_frame_len);
  1148. ag71xx_hw_set_macaddr(ag, ndev->dev_addr);
  1149. ret = ag71xx_hw_enable(ag);
  1150. if (ret)
  1151. goto err;
  1152. phylink_start(ag->phylink);
  1153. return 0;
  1154. err:
  1155. ag71xx_rings_cleanup(ag);
  1156. phylink_disconnect_phy(ag->phylink);
  1157. return ret;
  1158. }
  1159. static int ag71xx_stop(struct net_device *ndev)
  1160. {
  1161. struct ag71xx *ag = netdev_priv(ndev);
  1162. phylink_stop(ag->phylink);
  1163. phylink_disconnect_phy(ag->phylink);
  1164. ag71xx_hw_disable(ag);
  1165. return 0;
  1166. }
  1167. static int ag71xx_fill_dma_desc(struct ag71xx_ring *ring, u32 addr, int len)
  1168. {
  1169. int i, ring_mask, ndesc, split;
  1170. struct ag71xx_desc *desc;
  1171. ring_mask = BIT(ring->order) - 1;
  1172. ndesc = 0;
  1173. split = ring->desc_split;
  1174. if (!split)
  1175. split = len;
  1176. while (len > 0) {
  1177. unsigned int cur_len = len;
  1178. i = (ring->curr + ndesc) & ring_mask;
  1179. desc = ag71xx_ring_desc(ring, i);
  1180. if (!ag71xx_desc_empty(desc))
  1181. return -1;
  1182. if (cur_len > split) {
  1183. cur_len = split;
  1184. /* TX will hang if DMA transfers <= 4 bytes,
  1185. * make sure next segment is more than 4 bytes long.
  1186. */
  1187. if (len <= split + 4)
  1188. cur_len -= 4;
  1189. }
  1190. desc->data = addr;
  1191. addr += cur_len;
  1192. len -= cur_len;
  1193. if (len > 0)
  1194. cur_len |= DESC_MORE;
  1195. /* prevent early tx attempt of this descriptor */
  1196. if (!ndesc)
  1197. cur_len |= DESC_EMPTY;
  1198. desc->ctrl = cur_len;
  1199. ndesc++;
  1200. }
  1201. return ndesc;
  1202. }
  1203. static netdev_tx_t ag71xx_hard_start_xmit(struct sk_buff *skb,
  1204. struct net_device *ndev)
  1205. {
  1206. int i, n, ring_min, ring_mask, ring_size;
  1207. struct ag71xx *ag = netdev_priv(ndev);
  1208. struct ag71xx_ring *ring;
  1209. struct ag71xx_desc *desc;
  1210. dma_addr_t dma_addr;
  1211. ring = &ag->tx_ring;
  1212. ring_mask = BIT(ring->order) - 1;
  1213. ring_size = BIT(ring->order);
  1214. if (skb->len <= 4) {
  1215. netif_dbg(ag, tx_err, ndev, "packet len is too small\n");
  1216. goto err_drop;
  1217. }
  1218. dma_addr = dma_map_single(&ag->pdev->dev, skb->data, skb->len,
  1219. DMA_TO_DEVICE);
  1220. if (dma_mapping_error(&ag->pdev->dev, dma_addr)) {
  1221. netif_dbg(ag, tx_err, ndev, "DMA mapping error\n");
  1222. goto err_drop;
  1223. }
  1224. i = ring->curr & ring_mask;
  1225. desc = ag71xx_ring_desc(ring, i);
  1226. /* setup descriptor fields */
  1227. n = ag71xx_fill_dma_desc(ring, (u32)dma_addr,
  1228. skb->len & ag->dcfg->desc_pktlen_mask);
  1229. if (n < 0)
  1230. goto err_drop_unmap;
  1231. i = (ring->curr + n - 1) & ring_mask;
  1232. ring->buf[i].tx.len = skb->len;
  1233. ring->buf[i].tx.skb = skb;
  1234. netdev_sent_queue(ndev, skb->len);
  1235. skb_tx_timestamp(skb);
  1236. desc->ctrl &= ~DESC_EMPTY;
  1237. ring->curr += n;
  1238. /* flush descriptor */
  1239. wmb();
  1240. ring_min = 2;
  1241. if (ring->desc_split)
  1242. ring_min *= AG71XX_TX_RING_DS_PER_PKT;
  1243. if (ring->curr - ring->dirty >= ring_size - ring_min) {
  1244. netif_dbg(ag, tx_err, ndev, "tx queue full\n");
  1245. netif_stop_queue(ndev);
  1246. }
  1247. netif_dbg(ag, tx_queued, ndev, "packet injected into TX queue\n");
  1248. /* enable TX engine */
  1249. ag71xx_wr(ag, AG71XX_REG_TX_CTRL, TX_CTRL_TXE);
  1250. return NETDEV_TX_OK;
  1251. err_drop_unmap:
  1252. dma_unmap_single(&ag->pdev->dev, dma_addr, skb->len, DMA_TO_DEVICE);
  1253. err_drop:
  1254. ndev->stats.tx_dropped++;
  1255. dev_kfree_skb(skb);
  1256. return NETDEV_TX_OK;
  1257. }
  1258. static void ag71xx_oom_timer_handler(struct timer_list *t)
  1259. {
  1260. struct ag71xx *ag = from_timer(ag, t, oom_timer);
  1261. napi_schedule(&ag->napi);
  1262. }
  1263. static void ag71xx_tx_timeout(struct net_device *ndev, unsigned int txqueue)
  1264. {
  1265. struct ag71xx *ag = netdev_priv(ndev);
  1266. netif_err(ag, tx_err, ndev, "tx timeout\n");
  1267. schedule_delayed_work(&ag->restart_work, 1);
  1268. }
  1269. static void ag71xx_restart_work_func(struct work_struct *work)
  1270. {
  1271. struct ag71xx *ag = container_of(work, struct ag71xx,
  1272. restart_work.work);
  1273. rtnl_lock();
  1274. ag71xx_hw_disable(ag);
  1275. ag71xx_hw_enable(ag);
  1276. phylink_stop(ag->phylink);
  1277. phylink_start(ag->phylink);
  1278. rtnl_unlock();
  1279. }
  1280. static int ag71xx_rx_packets(struct ag71xx *ag, int limit)
  1281. {
  1282. struct net_device *ndev = ag->ndev;
  1283. int ring_mask, ring_size, done = 0;
  1284. unsigned int pktlen_mask, offset;
  1285. struct ag71xx_ring *ring;
  1286. struct list_head rx_list;
  1287. struct sk_buff *skb;
  1288. ring = &ag->rx_ring;
  1289. pktlen_mask = ag->dcfg->desc_pktlen_mask;
  1290. offset = ag->rx_buf_offset;
  1291. ring_mask = BIT(ring->order) - 1;
  1292. ring_size = BIT(ring->order);
  1293. netif_dbg(ag, rx_status, ndev, "rx packets, limit=%d, curr=%u, dirty=%u\n",
  1294. limit, ring->curr, ring->dirty);
  1295. INIT_LIST_HEAD(&rx_list);
  1296. while (done < limit) {
  1297. unsigned int i = ring->curr & ring_mask;
  1298. struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
  1299. int pktlen;
  1300. if (ag71xx_desc_empty(desc))
  1301. break;
  1302. if ((ring->dirty + ring_size) == ring->curr) {
  1303. WARN_ONCE(1, "RX out of ring");
  1304. break;
  1305. }
  1306. ag71xx_wr(ag, AG71XX_REG_RX_STATUS, RX_STATUS_PR);
  1307. pktlen = desc->ctrl & pktlen_mask;
  1308. pktlen -= ETH_FCS_LEN;
  1309. dma_unmap_single(&ag->pdev->dev, ring->buf[i].rx.dma_addr,
  1310. ag->rx_buf_size, DMA_FROM_DEVICE);
  1311. ndev->stats.rx_packets++;
  1312. ndev->stats.rx_bytes += pktlen;
  1313. skb = napi_build_skb(ring->buf[i].rx.rx_buf, ag71xx_buffer_size(ag));
  1314. if (!skb) {
  1315. ndev->stats.rx_errors++;
  1316. skb_free_frag(ring->buf[i].rx.rx_buf);
  1317. goto next;
  1318. }
  1319. skb_reserve(skb, offset);
  1320. skb_put(skb, pktlen);
  1321. skb->dev = ndev;
  1322. skb->ip_summed = CHECKSUM_NONE;
  1323. list_add_tail(&skb->list, &rx_list);
  1324. next:
  1325. ring->buf[i].rx.rx_buf = NULL;
  1326. done++;
  1327. ring->curr++;
  1328. }
  1329. ag71xx_ring_rx_refill(ag);
  1330. list_for_each_entry(skb, &rx_list, list)
  1331. skb->protocol = eth_type_trans(skb, ndev);
  1332. netif_receive_skb_list(&rx_list);
  1333. netif_dbg(ag, rx_status, ndev, "rx finish, curr=%u, dirty=%u, done=%d\n",
  1334. ring->curr, ring->dirty, done);
  1335. return done;
  1336. }
  1337. static int ag71xx_poll(struct napi_struct *napi, int limit)
  1338. {
  1339. struct ag71xx *ag = container_of(napi, struct ag71xx, napi);
  1340. struct ag71xx_ring *rx_ring = &ag->rx_ring;
  1341. int rx_ring_size = BIT(rx_ring->order);
  1342. struct net_device *ndev = ag->ndev;
  1343. int tx_done, rx_done;
  1344. u32 status;
  1345. tx_done = ag71xx_tx_packets(ag, false, limit);
  1346. netif_dbg(ag, rx_status, ndev, "processing RX ring\n");
  1347. rx_done = ag71xx_rx_packets(ag, limit);
  1348. if (!rx_ring->buf[rx_ring->dirty % rx_ring_size].rx.rx_buf)
  1349. goto oom;
  1350. status = ag71xx_rr(ag, AG71XX_REG_RX_STATUS);
  1351. if (unlikely(status & RX_STATUS_OF)) {
  1352. ag71xx_wr(ag, AG71XX_REG_RX_STATUS, RX_STATUS_OF);
  1353. ndev->stats.rx_fifo_errors++;
  1354. /* restart RX */
  1355. ag71xx_wr(ag, AG71XX_REG_RX_CTRL, RX_CTRL_RXE);
  1356. }
  1357. if (rx_done < limit) {
  1358. if (status & RX_STATUS_PR)
  1359. goto more;
  1360. status = ag71xx_rr(ag, AG71XX_REG_TX_STATUS);
  1361. if (status & TX_STATUS_PS)
  1362. goto more;
  1363. netif_dbg(ag, rx_status, ndev, "disable polling mode, rx=%d, tx=%d,limit=%d\n",
  1364. rx_done, tx_done, limit);
  1365. napi_complete(napi);
  1366. /* enable interrupts */
  1367. ag71xx_int_enable(ag, AG71XX_INT_POLL);
  1368. return rx_done;
  1369. }
  1370. more:
  1371. netif_dbg(ag, rx_status, ndev, "stay in polling mode, rx=%d, tx=%d, limit=%d\n",
  1372. rx_done, tx_done, limit);
  1373. return limit;
  1374. oom:
  1375. netif_err(ag, rx_err, ndev, "out of memory\n");
  1376. mod_timer(&ag->oom_timer, jiffies + AG71XX_OOM_REFILL);
  1377. napi_complete(napi);
  1378. return 0;
  1379. }
  1380. static irqreturn_t ag71xx_interrupt(int irq, void *dev_id)
  1381. {
  1382. struct net_device *ndev = dev_id;
  1383. struct ag71xx *ag;
  1384. u32 status;
  1385. ag = netdev_priv(ndev);
  1386. status = ag71xx_rr(ag, AG71XX_REG_INT_STATUS);
  1387. if (unlikely(!status))
  1388. return IRQ_NONE;
  1389. if (unlikely(status & AG71XX_INT_ERR)) {
  1390. if (status & AG71XX_INT_TX_BE) {
  1391. ag71xx_wr(ag, AG71XX_REG_TX_STATUS, TX_STATUS_BE);
  1392. netif_err(ag, intr, ndev, "TX BUS error\n");
  1393. }
  1394. if (status & AG71XX_INT_RX_BE) {
  1395. ag71xx_wr(ag, AG71XX_REG_RX_STATUS, RX_STATUS_BE);
  1396. netif_err(ag, intr, ndev, "RX BUS error\n");
  1397. }
  1398. }
  1399. if (likely(status & AG71XX_INT_POLL)) {
  1400. ag71xx_int_disable(ag, AG71XX_INT_POLL);
  1401. netif_dbg(ag, intr, ndev, "enable polling mode\n");
  1402. napi_schedule(&ag->napi);
  1403. }
  1404. return IRQ_HANDLED;
  1405. }
  1406. static int ag71xx_change_mtu(struct net_device *ndev, int new_mtu)
  1407. {
  1408. struct ag71xx *ag = netdev_priv(ndev);
  1409. WRITE_ONCE(ndev->mtu, new_mtu);
  1410. ag71xx_wr(ag, AG71XX_REG_MAC_MFL,
  1411. ag71xx_max_frame_len(ndev->mtu));
  1412. return 0;
  1413. }
  1414. static const struct net_device_ops ag71xx_netdev_ops = {
  1415. .ndo_open = ag71xx_open,
  1416. .ndo_stop = ag71xx_stop,
  1417. .ndo_start_xmit = ag71xx_hard_start_xmit,
  1418. .ndo_eth_ioctl = ag71xx_do_ioctl,
  1419. .ndo_tx_timeout = ag71xx_tx_timeout,
  1420. .ndo_change_mtu = ag71xx_change_mtu,
  1421. .ndo_set_mac_address = eth_mac_addr,
  1422. .ndo_validate_addr = eth_validate_addr,
  1423. };
  1424. static const u32 ar71xx_addr_ar7100[] = {
  1425. 0x19000000, 0x1a000000,
  1426. };
  1427. static int ag71xx_probe(struct platform_device *pdev)
  1428. {
  1429. struct device_node *np = pdev->dev.of_node;
  1430. const struct ag71xx_dcfg *dcfg;
  1431. struct net_device *ndev;
  1432. struct resource *res;
  1433. struct clk *clk_eth;
  1434. int tx_size, err, i;
  1435. struct ag71xx *ag;
  1436. if (!np)
  1437. return -ENODEV;
  1438. ndev = devm_alloc_etherdev(&pdev->dev, sizeof(*ag));
  1439. if (!ndev)
  1440. return -ENOMEM;
  1441. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1442. if (!res)
  1443. return -EINVAL;
  1444. dcfg = of_device_get_match_data(&pdev->dev);
  1445. if (!dcfg)
  1446. return -EINVAL;
  1447. ag = netdev_priv(ndev);
  1448. ag->mac_idx = -1;
  1449. for (i = 0; i < ARRAY_SIZE(ar71xx_addr_ar7100); i++) {
  1450. if (ar71xx_addr_ar7100[i] == res->start)
  1451. ag->mac_idx = i;
  1452. }
  1453. if (ag->mac_idx < 0) {
  1454. netif_err(ag, probe, ndev, "unknown mac idx\n");
  1455. return -EINVAL;
  1456. }
  1457. clk_eth = devm_clk_get_enabled(&pdev->dev, "eth");
  1458. if (IS_ERR(clk_eth)) {
  1459. netif_err(ag, probe, ndev, "Failed to get eth clk.\n");
  1460. return PTR_ERR(clk_eth);
  1461. }
  1462. SET_NETDEV_DEV(ndev, &pdev->dev);
  1463. ag->pdev = pdev;
  1464. ag->ndev = ndev;
  1465. ag->dcfg = dcfg;
  1466. ag->msg_enable = netif_msg_init(-1, AG71XX_DEFAULT_MSG_ENABLE);
  1467. memcpy(ag->fifodata, dcfg->fifodata, sizeof(ag->fifodata));
  1468. ag->mac_reset = devm_reset_control_get(&pdev->dev, "mac");
  1469. if (IS_ERR(ag->mac_reset)) {
  1470. netif_err(ag, probe, ndev, "missing mac reset\n");
  1471. return PTR_ERR(ag->mac_reset);
  1472. }
  1473. ag->mac_base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
  1474. if (!ag->mac_base)
  1475. return -ENOMEM;
  1476. /* ensure that HW is in manual polling mode before interrupts are
  1477. * activated. Otherwise ag71xx_interrupt might call napi_schedule
  1478. * before it is initialized by netif_napi_add.
  1479. */
  1480. ag71xx_int_disable(ag, AG71XX_INT_POLL);
  1481. ndev->irq = platform_get_irq(pdev, 0);
  1482. err = devm_request_irq(&pdev->dev, ndev->irq, ag71xx_interrupt,
  1483. 0x0, dev_name(&pdev->dev), ndev);
  1484. if (err) {
  1485. netif_err(ag, probe, ndev, "unable to request IRQ %d\n",
  1486. ndev->irq);
  1487. return err;
  1488. }
  1489. ndev->netdev_ops = &ag71xx_netdev_ops;
  1490. ndev->ethtool_ops = &ag71xx_ethtool_ops;
  1491. INIT_DELAYED_WORK(&ag->restart_work, ag71xx_restart_work_func);
  1492. timer_setup(&ag->oom_timer, ag71xx_oom_timer_handler, 0);
  1493. tx_size = AG71XX_TX_RING_SIZE_DEFAULT;
  1494. ag->rx_ring.order = ag71xx_ring_size_order(AG71XX_RX_RING_SIZE_DEFAULT);
  1495. ndev->min_mtu = 68;
  1496. ndev->max_mtu = dcfg->max_frame_len - ag71xx_max_frame_len(0);
  1497. ag->rx_buf_offset = NET_SKB_PAD;
  1498. if (!ag71xx_is(ag, AR7100) && !ag71xx_is(ag, AR9130))
  1499. ag->rx_buf_offset += NET_IP_ALIGN;
  1500. if (ag71xx_is(ag, AR7100)) {
  1501. ag->tx_ring.desc_split = AG71XX_TX_RING_SPLIT;
  1502. tx_size *= AG71XX_TX_RING_DS_PER_PKT;
  1503. }
  1504. ag->tx_ring.order = ag71xx_ring_size_order(tx_size);
  1505. ag->stop_desc = dmam_alloc_coherent(&pdev->dev,
  1506. sizeof(struct ag71xx_desc),
  1507. &ag->stop_desc_dma, GFP_KERNEL);
  1508. if (!ag->stop_desc)
  1509. return -ENOMEM;
  1510. ag->stop_desc->data = 0;
  1511. ag->stop_desc->ctrl = 0;
  1512. ag->stop_desc->next = (u32)ag->stop_desc_dma;
  1513. err = of_get_ethdev_address(np, ndev);
  1514. if (err == -EPROBE_DEFER)
  1515. return err;
  1516. if (err) {
  1517. netif_err(ag, probe, ndev, "invalid MAC address, using random address\n");
  1518. eth_hw_addr_random(ndev);
  1519. }
  1520. err = of_get_phy_mode(np, &ag->phy_if_mode);
  1521. if (err) {
  1522. netif_err(ag, probe, ndev, "missing phy-mode property in DT\n");
  1523. return err;
  1524. }
  1525. netif_napi_add_weight(ndev, &ag->napi, ag71xx_poll,
  1526. AG71XX_NAPI_WEIGHT);
  1527. ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, 0);
  1528. ag71xx_hw_init(ag);
  1529. err = ag71xx_mdio_probe(ag);
  1530. if (err)
  1531. return err;
  1532. platform_set_drvdata(pdev, ndev);
  1533. err = ag71xx_phylink_setup(ag);
  1534. if (err) {
  1535. netif_err(ag, probe, ndev, "failed to setup phylink (%d)\n", err);
  1536. return err;
  1537. }
  1538. err = devm_register_netdev(&pdev->dev, ndev);
  1539. if (err) {
  1540. netif_err(ag, probe, ndev, "unable to register net device\n");
  1541. platform_set_drvdata(pdev, NULL);
  1542. return err;
  1543. }
  1544. netif_info(ag, probe, ndev, "Atheros AG71xx at 0x%08lx, irq %d, mode:%s\n",
  1545. (unsigned long)ag->mac_base, ndev->irq,
  1546. phy_modes(ag->phy_if_mode));
  1547. return 0;
  1548. }
  1549. static const u32 ar71xx_fifo_ar7100[] = {
  1550. 0x0fff0000, 0x00001fff, 0x00780fff,
  1551. };
  1552. static const u32 ar71xx_fifo_ar9130[] = {
  1553. 0x0fff0000, 0x00001fff, 0x008001ff,
  1554. };
  1555. static const u32 ar71xx_fifo_ar9330[] = {
  1556. 0x0010ffff, 0x015500aa, 0x01f00140,
  1557. };
  1558. static const struct ag71xx_dcfg ag71xx_dcfg_ar7100 = {
  1559. .type = AR7100,
  1560. .fifodata = ar71xx_fifo_ar7100,
  1561. .max_frame_len = 1540,
  1562. .desc_pktlen_mask = SZ_4K - 1,
  1563. .tx_hang_workaround = false,
  1564. };
  1565. static const struct ag71xx_dcfg ag71xx_dcfg_ar7240 = {
  1566. .type = AR7240,
  1567. .fifodata = ar71xx_fifo_ar7100,
  1568. .max_frame_len = 1540,
  1569. .desc_pktlen_mask = SZ_4K - 1,
  1570. .tx_hang_workaround = true,
  1571. };
  1572. static const struct ag71xx_dcfg ag71xx_dcfg_ar9130 = {
  1573. .type = AR9130,
  1574. .fifodata = ar71xx_fifo_ar9130,
  1575. .max_frame_len = 1540,
  1576. .desc_pktlen_mask = SZ_4K - 1,
  1577. .tx_hang_workaround = false,
  1578. };
  1579. static const struct ag71xx_dcfg ag71xx_dcfg_ar9330 = {
  1580. .type = AR9330,
  1581. .fifodata = ar71xx_fifo_ar9330,
  1582. .max_frame_len = 1540,
  1583. .desc_pktlen_mask = SZ_4K - 1,
  1584. .tx_hang_workaround = true,
  1585. };
  1586. static const struct ag71xx_dcfg ag71xx_dcfg_ar9340 = {
  1587. .type = AR9340,
  1588. .fifodata = ar71xx_fifo_ar9330,
  1589. .max_frame_len = SZ_16K - 1,
  1590. .desc_pktlen_mask = SZ_16K - 1,
  1591. .tx_hang_workaround = true,
  1592. };
  1593. static const struct ag71xx_dcfg ag71xx_dcfg_qca9530 = {
  1594. .type = QCA9530,
  1595. .fifodata = ar71xx_fifo_ar9330,
  1596. .max_frame_len = SZ_16K - 1,
  1597. .desc_pktlen_mask = SZ_16K - 1,
  1598. .tx_hang_workaround = true,
  1599. };
  1600. static const struct ag71xx_dcfg ag71xx_dcfg_qca9550 = {
  1601. .type = QCA9550,
  1602. .fifodata = ar71xx_fifo_ar9330,
  1603. .max_frame_len = 1540,
  1604. .desc_pktlen_mask = SZ_16K - 1,
  1605. .tx_hang_workaround = true,
  1606. };
  1607. static const struct of_device_id ag71xx_match[] = {
  1608. { .compatible = "qca,ar7100-eth", .data = &ag71xx_dcfg_ar7100 },
  1609. { .compatible = "qca,ar7240-eth", .data = &ag71xx_dcfg_ar7240 },
  1610. { .compatible = "qca,ar7241-eth", .data = &ag71xx_dcfg_ar7240 },
  1611. { .compatible = "qca,ar7242-eth", .data = &ag71xx_dcfg_ar7240 },
  1612. { .compatible = "qca,ar9130-eth", .data = &ag71xx_dcfg_ar9130 },
  1613. { .compatible = "qca,ar9330-eth", .data = &ag71xx_dcfg_ar9330 },
  1614. { .compatible = "qca,ar9340-eth", .data = &ag71xx_dcfg_ar9340 },
  1615. { .compatible = "qca,qca9530-eth", .data = &ag71xx_dcfg_qca9530 },
  1616. { .compatible = "qca,qca9550-eth", .data = &ag71xx_dcfg_qca9550 },
  1617. { .compatible = "qca,qca9560-eth", .data = &ag71xx_dcfg_qca9550 },
  1618. {}
  1619. };
  1620. MODULE_DEVICE_TABLE(of, ag71xx_match);
  1621. static struct platform_driver ag71xx_driver = {
  1622. .probe = ag71xx_probe,
  1623. .driver = {
  1624. .name = "ag71xx",
  1625. .of_match_table = ag71xx_match,
  1626. }
  1627. };
  1628. module_platform_driver(ag71xx_driver);
  1629. MODULE_DESCRIPTION("Atheros AR71xx built-in ethernet mac driver");
  1630. MODULE_LICENSE("GPL v2");