mtk_star_emac.c 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2020 MediaTek Corporation
  4. * Copyright (c) 2020 BayLibre SAS
  5. *
  6. * Author: Bartosz Golaszewski <bgolaszewski@baylibre.com>
  7. */
  8. #include <linux/bits.h>
  9. #include <linux/clk.h>
  10. #include <linux/compiler.h>
  11. #include <linux/dma-mapping.h>
  12. #include <linux/etherdevice.h>
  13. #include <linux/kernel.h>
  14. #include <linux/mfd/syscon.h>
  15. #include <linux/mii.h>
  16. #include <linux/module.h>
  17. #include <linux/netdevice.h>
  18. #include <linux/of.h>
  19. #include <linux/of_mdio.h>
  20. #include <linux/of_net.h>
  21. #include <linux/platform_device.h>
  22. #include <linux/pm.h>
  23. #include <linux/regmap.h>
  24. #include <linux/skbuff.h>
  25. #include <linux/spinlock.h>
  26. #define MTK_STAR_DRVNAME "mtk_star_emac"
  27. #define MTK_STAR_WAIT_TIMEOUT 300
  28. #define MTK_STAR_MAX_FRAME_SIZE 1514
  29. #define MTK_STAR_SKB_ALIGNMENT 16
  30. #define MTK_STAR_HASHTABLE_MC_LIMIT 256
  31. #define MTK_STAR_HASHTABLE_SIZE_MAX 512
  32. #define MTK_STAR_DESC_NEEDED (MAX_SKB_FRAGS + 4)
  33. /* Normally we'd use NET_IP_ALIGN but on arm64 its value is 0 and it doesn't
  34. * work for this controller.
  35. */
  36. #define MTK_STAR_IP_ALIGN 2
  37. static const char *const mtk_star_clk_names[] = { "core", "reg", "trans" };
  38. #define MTK_STAR_NCLKS ARRAY_SIZE(mtk_star_clk_names)
  39. /* PHY Control Register 0 */
  40. #define MTK_STAR_REG_PHY_CTRL0 0x0000
  41. #define MTK_STAR_BIT_PHY_CTRL0_WTCMD BIT(13)
  42. #define MTK_STAR_BIT_PHY_CTRL0_RDCMD BIT(14)
  43. #define MTK_STAR_BIT_PHY_CTRL0_RWOK BIT(15)
  44. #define MTK_STAR_MSK_PHY_CTRL0_PREG GENMASK(12, 8)
  45. #define MTK_STAR_OFF_PHY_CTRL0_PREG 8
  46. #define MTK_STAR_MSK_PHY_CTRL0_RWDATA GENMASK(31, 16)
  47. #define MTK_STAR_OFF_PHY_CTRL0_RWDATA 16
  48. /* PHY Control Register 1 */
  49. #define MTK_STAR_REG_PHY_CTRL1 0x0004
  50. #define MTK_STAR_BIT_PHY_CTRL1_LINK_ST BIT(0)
  51. #define MTK_STAR_BIT_PHY_CTRL1_AN_EN BIT(8)
  52. #define MTK_STAR_OFF_PHY_CTRL1_FORCE_SPD 9
  53. #define MTK_STAR_VAL_PHY_CTRL1_FORCE_SPD_10M 0x00
  54. #define MTK_STAR_VAL_PHY_CTRL1_FORCE_SPD_100M 0x01
  55. #define MTK_STAR_VAL_PHY_CTRL1_FORCE_SPD_1000M 0x02
  56. #define MTK_STAR_BIT_PHY_CTRL1_FORCE_DPX BIT(11)
  57. #define MTK_STAR_BIT_PHY_CTRL1_FORCE_FC_RX BIT(12)
  58. #define MTK_STAR_BIT_PHY_CTRL1_FORCE_FC_TX BIT(13)
  59. /* MAC Configuration Register */
  60. #define MTK_STAR_REG_MAC_CFG 0x0008
  61. #define MTK_STAR_OFF_MAC_CFG_IPG 10
  62. #define MTK_STAR_VAL_MAC_CFG_IPG_96BIT GENMASK(4, 0)
  63. #define MTK_STAR_BIT_MAC_CFG_MAXLEN_1522 BIT(16)
  64. #define MTK_STAR_BIT_MAC_CFG_AUTO_PAD BIT(19)
  65. #define MTK_STAR_BIT_MAC_CFG_CRC_STRIP BIT(20)
  66. #define MTK_STAR_BIT_MAC_CFG_VLAN_STRIP BIT(22)
  67. #define MTK_STAR_BIT_MAC_CFG_NIC_PD BIT(31)
  68. /* Flow-Control Configuration Register */
  69. #define MTK_STAR_REG_FC_CFG 0x000c
  70. #define MTK_STAR_BIT_FC_CFG_BP_EN BIT(7)
  71. #define MTK_STAR_BIT_FC_CFG_UC_PAUSE_DIR BIT(8)
  72. #define MTK_STAR_OFF_FC_CFG_SEND_PAUSE_TH 16
  73. #define MTK_STAR_MSK_FC_CFG_SEND_PAUSE_TH GENMASK(27, 16)
  74. #define MTK_STAR_VAL_FC_CFG_SEND_PAUSE_TH_2K 0x800
  75. /* ARL Configuration Register */
  76. #define MTK_STAR_REG_ARL_CFG 0x0010
  77. #define MTK_STAR_BIT_ARL_CFG_HASH_ALG BIT(0)
  78. #define MTK_STAR_BIT_ARL_CFG_MISC_MODE BIT(4)
  79. /* MAC High and Low Bytes Registers */
  80. #define MTK_STAR_REG_MY_MAC_H 0x0014
  81. #define MTK_STAR_REG_MY_MAC_L 0x0018
  82. /* Hash Table Control Register */
  83. #define MTK_STAR_REG_HASH_CTRL 0x001c
  84. #define MTK_STAR_MSK_HASH_CTRL_HASH_BIT_ADDR GENMASK(8, 0)
  85. #define MTK_STAR_BIT_HASH_CTRL_HASH_BIT_DATA BIT(12)
  86. #define MTK_STAR_BIT_HASH_CTRL_ACC_CMD BIT(13)
  87. #define MTK_STAR_BIT_HASH_CTRL_CMD_START BIT(14)
  88. #define MTK_STAR_BIT_HASH_CTRL_BIST_OK BIT(16)
  89. #define MTK_STAR_BIT_HASH_CTRL_BIST_DONE BIT(17)
  90. #define MTK_STAR_BIT_HASH_CTRL_BIST_EN BIT(31)
  91. /* TX DMA Control Register */
  92. #define MTK_STAR_REG_TX_DMA_CTRL 0x0034
  93. #define MTK_STAR_BIT_TX_DMA_CTRL_START BIT(0)
  94. #define MTK_STAR_BIT_TX_DMA_CTRL_STOP BIT(1)
  95. #define MTK_STAR_BIT_TX_DMA_CTRL_RESUME BIT(2)
  96. /* RX DMA Control Register */
  97. #define MTK_STAR_REG_RX_DMA_CTRL 0x0038
  98. #define MTK_STAR_BIT_RX_DMA_CTRL_START BIT(0)
  99. #define MTK_STAR_BIT_RX_DMA_CTRL_STOP BIT(1)
  100. #define MTK_STAR_BIT_RX_DMA_CTRL_RESUME BIT(2)
  101. /* DMA Address Registers */
  102. #define MTK_STAR_REG_TX_DPTR 0x003c
  103. #define MTK_STAR_REG_RX_DPTR 0x0040
  104. #define MTK_STAR_REG_TX_BASE_ADDR 0x0044
  105. #define MTK_STAR_REG_RX_BASE_ADDR 0x0048
  106. /* Interrupt Status Register */
  107. #define MTK_STAR_REG_INT_STS 0x0050
  108. #define MTK_STAR_REG_INT_STS_PORT_STS_CHG BIT(2)
  109. #define MTK_STAR_REG_INT_STS_MIB_CNT_TH BIT(3)
  110. #define MTK_STAR_BIT_INT_STS_FNRC BIT(6)
  111. #define MTK_STAR_BIT_INT_STS_TNTC BIT(8)
  112. /* Interrupt Mask Register */
  113. #define MTK_STAR_REG_INT_MASK 0x0054
  114. #define MTK_STAR_BIT_INT_MASK_FNRC BIT(6)
  115. /* Delay-Macro Register */
  116. #define MTK_STAR_REG_TEST0 0x0058
  117. #define MTK_STAR_BIT_INV_RX_CLK BIT(30)
  118. #define MTK_STAR_BIT_INV_TX_CLK BIT(31)
  119. /* Misc. Config Register */
  120. #define MTK_STAR_REG_TEST1 0x005c
  121. #define MTK_STAR_BIT_TEST1_RST_HASH_MBIST BIT(31)
  122. /* Extended Configuration Register */
  123. #define MTK_STAR_REG_EXT_CFG 0x0060
  124. #define MTK_STAR_OFF_EXT_CFG_SND_PAUSE_RLS 16
  125. #define MTK_STAR_MSK_EXT_CFG_SND_PAUSE_RLS GENMASK(26, 16)
  126. #define MTK_STAR_VAL_EXT_CFG_SND_PAUSE_RLS_1K 0x400
  127. /* EthSys Configuration Register */
  128. #define MTK_STAR_REG_SYS_CONF 0x0094
  129. #define MTK_STAR_BIT_MII_PAD_OUT_ENABLE BIT(0)
  130. #define MTK_STAR_BIT_EXT_MDC_MODE BIT(1)
  131. #define MTK_STAR_BIT_SWC_MII_MODE BIT(2)
  132. /* MAC Clock Configuration Register */
  133. #define MTK_STAR_REG_MAC_CLK_CONF 0x00ac
  134. #define MTK_STAR_MSK_MAC_CLK_CONF GENMASK(7, 0)
  135. #define MTK_STAR_BIT_CLK_DIV_10 0x0a
  136. #define MTK_STAR_BIT_CLK_DIV_50 0x32
  137. /* Counter registers. */
  138. #define MTK_STAR_REG_C_RXOKPKT 0x0100
  139. #define MTK_STAR_REG_C_RXOKBYTE 0x0104
  140. #define MTK_STAR_REG_C_RXRUNT 0x0108
  141. #define MTK_STAR_REG_C_RXLONG 0x010c
  142. #define MTK_STAR_REG_C_RXDROP 0x0110
  143. #define MTK_STAR_REG_C_RXCRC 0x0114
  144. #define MTK_STAR_REG_C_RXARLDROP 0x0118
  145. #define MTK_STAR_REG_C_RXVLANDROP 0x011c
  146. #define MTK_STAR_REG_C_RXCSERR 0x0120
  147. #define MTK_STAR_REG_C_RXPAUSE 0x0124
  148. #define MTK_STAR_REG_C_TXOKPKT 0x0128
  149. #define MTK_STAR_REG_C_TXOKBYTE 0x012c
  150. #define MTK_STAR_REG_C_TXPAUSECOL 0x0130
  151. #define MTK_STAR_REG_C_TXRTY 0x0134
  152. #define MTK_STAR_REG_C_TXSKIP 0x0138
  153. #define MTK_STAR_REG_C_TX_ARP 0x013c
  154. #define MTK_STAR_REG_C_RX_RERR 0x01d8
  155. #define MTK_STAR_REG_C_RX_UNI 0x01dc
  156. #define MTK_STAR_REG_C_RX_MULTI 0x01e0
  157. #define MTK_STAR_REG_C_RX_BROAD 0x01e4
  158. #define MTK_STAR_REG_C_RX_ALIGNERR 0x01e8
  159. #define MTK_STAR_REG_C_TX_UNI 0x01ec
  160. #define MTK_STAR_REG_C_TX_MULTI 0x01f0
  161. #define MTK_STAR_REG_C_TX_BROAD 0x01f4
  162. #define MTK_STAR_REG_C_TX_TIMEOUT 0x01f8
  163. #define MTK_STAR_REG_C_TX_LATECOL 0x01fc
  164. #define MTK_STAR_REG_C_RX_LENGTHERR 0x0214
  165. #define MTK_STAR_REG_C_RX_TWIST 0x0218
  166. /* Ethernet CFG Control */
  167. #define MTK_PERICFG_REG_NIC_CFG0_CON 0x03c4
  168. #define MTK_PERICFG_REG_NIC_CFG1_CON 0x03c8
  169. #define MTK_PERICFG_REG_NIC_CFG_CON_V2 0x0c10
  170. #define MTK_PERICFG_REG_NIC_CFG_CON_CFG_INTF GENMASK(3, 0)
  171. #define MTK_PERICFG_BIT_NIC_CFG_CON_MII 0
  172. #define MTK_PERICFG_BIT_NIC_CFG_CON_RMII 1
  173. #define MTK_PERICFG_BIT_NIC_CFG_CON_CLK BIT(0)
  174. #define MTK_PERICFG_BIT_NIC_CFG_CON_CLK_V2 BIT(8)
  175. /* Represents the actual structure of descriptors used by the MAC. We can
  176. * reuse the same structure for both TX and RX - the layout is the same, only
  177. * the flags differ slightly.
  178. */
  179. struct mtk_star_ring_desc {
  180. /* Contains both the status flags as well as packet length. */
  181. u32 status;
  182. u32 data_ptr;
  183. u32 vtag;
  184. u32 reserved;
  185. };
  186. #define MTK_STAR_DESC_MSK_LEN GENMASK(15, 0)
  187. #define MTK_STAR_DESC_BIT_RX_CRCE BIT(24)
  188. #define MTK_STAR_DESC_BIT_RX_OSIZE BIT(25)
  189. #define MTK_STAR_DESC_BIT_INT BIT(27)
  190. #define MTK_STAR_DESC_BIT_LS BIT(28)
  191. #define MTK_STAR_DESC_BIT_FS BIT(29)
  192. #define MTK_STAR_DESC_BIT_EOR BIT(30)
  193. #define MTK_STAR_DESC_BIT_COWN BIT(31)
  194. /* Helper structure for storing data read from/written to descriptors in order
  195. * to limit reads from/writes to DMA memory.
  196. */
  197. struct mtk_star_ring_desc_data {
  198. unsigned int len;
  199. unsigned int flags;
  200. dma_addr_t dma_addr;
  201. struct sk_buff *skb;
  202. };
  203. #define MTK_STAR_RING_NUM_DESCS 512
  204. #define MTK_STAR_TX_THRESH (MTK_STAR_RING_NUM_DESCS / 4)
  205. #define MTK_STAR_NUM_TX_DESCS MTK_STAR_RING_NUM_DESCS
  206. #define MTK_STAR_NUM_RX_DESCS MTK_STAR_RING_NUM_DESCS
  207. #define MTK_STAR_NUM_DESCS_TOTAL (MTK_STAR_RING_NUM_DESCS * 2)
  208. #define MTK_STAR_DMA_SIZE \
  209. (MTK_STAR_NUM_DESCS_TOTAL * sizeof(struct mtk_star_ring_desc))
  210. struct mtk_star_ring {
  211. struct mtk_star_ring_desc *descs;
  212. struct sk_buff *skbs[MTK_STAR_RING_NUM_DESCS];
  213. dma_addr_t dma_addrs[MTK_STAR_RING_NUM_DESCS];
  214. unsigned int head;
  215. unsigned int tail;
  216. };
  217. struct mtk_star_compat {
  218. int (*set_interface_mode)(struct net_device *ndev);
  219. unsigned char bit_clk_div;
  220. };
  221. struct mtk_star_priv {
  222. struct net_device *ndev;
  223. struct regmap *regs;
  224. struct regmap *pericfg;
  225. struct clk_bulk_data clks[MTK_STAR_NCLKS];
  226. void *ring_base;
  227. struct mtk_star_ring_desc *descs_base;
  228. dma_addr_t dma_addr;
  229. struct mtk_star_ring tx_ring;
  230. struct mtk_star_ring rx_ring;
  231. struct mii_bus *mii;
  232. struct napi_struct tx_napi;
  233. struct napi_struct rx_napi;
  234. struct device_node *phy_node;
  235. phy_interface_t phy_intf;
  236. struct phy_device *phydev;
  237. unsigned int link;
  238. int speed;
  239. int duplex;
  240. int pause;
  241. bool rmii_rxc;
  242. bool rx_inv;
  243. bool tx_inv;
  244. const struct mtk_star_compat *compat_data;
  245. /* Protects against concurrent descriptor access. */
  246. spinlock_t lock;
  247. struct rtnl_link_stats64 stats;
  248. };
  249. static struct device *mtk_star_get_dev(struct mtk_star_priv *priv)
  250. {
  251. return priv->ndev->dev.parent;
  252. }
  253. static const struct regmap_config mtk_star_regmap_config = {
  254. .reg_bits = 32,
  255. .val_bits = 32,
  256. .reg_stride = 4,
  257. .disable_locking = true,
  258. };
  259. static void mtk_star_ring_init(struct mtk_star_ring *ring,
  260. struct mtk_star_ring_desc *descs)
  261. {
  262. memset(ring, 0, sizeof(*ring));
  263. ring->descs = descs;
  264. ring->head = 0;
  265. ring->tail = 0;
  266. }
  267. static int mtk_star_ring_pop_tail(struct mtk_star_ring *ring,
  268. struct mtk_star_ring_desc_data *desc_data)
  269. {
  270. struct mtk_star_ring_desc *desc = &ring->descs[ring->tail];
  271. unsigned int status;
  272. status = READ_ONCE(desc->status);
  273. dma_rmb(); /* Make sure we read the status bits before checking it. */
  274. if (!(status & MTK_STAR_DESC_BIT_COWN))
  275. return -1;
  276. desc_data->len = status & MTK_STAR_DESC_MSK_LEN;
  277. desc_data->flags = status & ~MTK_STAR_DESC_MSK_LEN;
  278. desc_data->dma_addr = ring->dma_addrs[ring->tail];
  279. desc_data->skb = ring->skbs[ring->tail];
  280. ring->dma_addrs[ring->tail] = 0;
  281. ring->skbs[ring->tail] = NULL;
  282. status &= MTK_STAR_DESC_BIT_COWN | MTK_STAR_DESC_BIT_EOR;
  283. WRITE_ONCE(desc->data_ptr, 0);
  284. WRITE_ONCE(desc->status, status);
  285. ring->tail = (ring->tail + 1) % MTK_STAR_RING_NUM_DESCS;
  286. return 0;
  287. }
  288. static void mtk_star_ring_push_head(struct mtk_star_ring *ring,
  289. struct mtk_star_ring_desc_data *desc_data,
  290. unsigned int flags)
  291. {
  292. struct mtk_star_ring_desc *desc = &ring->descs[ring->head];
  293. unsigned int status;
  294. status = READ_ONCE(desc->status);
  295. ring->skbs[ring->head] = desc_data->skb;
  296. ring->dma_addrs[ring->head] = desc_data->dma_addr;
  297. status |= desc_data->len;
  298. if (flags)
  299. status |= flags;
  300. WRITE_ONCE(desc->data_ptr, desc_data->dma_addr);
  301. WRITE_ONCE(desc->status, status);
  302. status &= ~MTK_STAR_DESC_BIT_COWN;
  303. /* Flush previous modifications before ownership change. */
  304. dma_wmb();
  305. WRITE_ONCE(desc->status, status);
  306. ring->head = (ring->head + 1) % MTK_STAR_RING_NUM_DESCS;
  307. }
  308. static void
  309. mtk_star_ring_push_head_rx(struct mtk_star_ring *ring,
  310. struct mtk_star_ring_desc_data *desc_data)
  311. {
  312. mtk_star_ring_push_head(ring, desc_data, 0);
  313. }
  314. static void
  315. mtk_star_ring_push_head_tx(struct mtk_star_ring *ring,
  316. struct mtk_star_ring_desc_data *desc_data)
  317. {
  318. static const unsigned int flags = MTK_STAR_DESC_BIT_FS |
  319. MTK_STAR_DESC_BIT_LS |
  320. MTK_STAR_DESC_BIT_INT;
  321. mtk_star_ring_push_head(ring, desc_data, flags);
  322. }
  323. static unsigned int mtk_star_tx_ring_avail(struct mtk_star_ring *ring)
  324. {
  325. u32 avail;
  326. if (ring->tail > ring->head)
  327. avail = ring->tail - ring->head - 1;
  328. else
  329. avail = MTK_STAR_RING_NUM_DESCS - ring->head + ring->tail - 1;
  330. return avail;
  331. }
  332. static dma_addr_t mtk_star_dma_map_rx(struct mtk_star_priv *priv,
  333. struct sk_buff *skb)
  334. {
  335. struct device *dev = mtk_star_get_dev(priv);
  336. /* Data pointer for the RX DMA descriptor must be aligned to 4N + 2. */
  337. return dma_map_single(dev, skb_tail_pointer(skb) - 2,
  338. skb_tailroom(skb), DMA_FROM_DEVICE);
  339. }
  340. static void mtk_star_dma_unmap_rx(struct mtk_star_priv *priv,
  341. struct mtk_star_ring_desc_data *desc_data)
  342. {
  343. struct device *dev = mtk_star_get_dev(priv);
  344. dma_unmap_single(dev, desc_data->dma_addr,
  345. skb_tailroom(desc_data->skb), DMA_FROM_DEVICE);
  346. }
  347. static dma_addr_t mtk_star_dma_map_tx(struct mtk_star_priv *priv,
  348. struct sk_buff *skb)
  349. {
  350. struct device *dev = mtk_star_get_dev(priv);
  351. return dma_map_single(dev, skb->data, skb_headlen(skb), DMA_TO_DEVICE);
  352. }
  353. static void mtk_star_dma_unmap_tx(struct mtk_star_priv *priv,
  354. struct mtk_star_ring_desc_data *desc_data)
  355. {
  356. struct device *dev = mtk_star_get_dev(priv);
  357. return dma_unmap_single(dev, desc_data->dma_addr,
  358. skb_headlen(desc_data->skb), DMA_TO_DEVICE);
  359. }
  360. static void mtk_star_nic_disable_pd(struct mtk_star_priv *priv)
  361. {
  362. regmap_clear_bits(priv->regs, MTK_STAR_REG_MAC_CFG,
  363. MTK_STAR_BIT_MAC_CFG_NIC_PD);
  364. }
  365. static void mtk_star_enable_dma_irq(struct mtk_star_priv *priv,
  366. bool rx, bool tx)
  367. {
  368. u32 value;
  369. regmap_read(priv->regs, MTK_STAR_REG_INT_MASK, &value);
  370. if (tx)
  371. value &= ~MTK_STAR_BIT_INT_STS_TNTC;
  372. if (rx)
  373. value &= ~MTK_STAR_BIT_INT_STS_FNRC;
  374. regmap_write(priv->regs, MTK_STAR_REG_INT_MASK, value);
  375. }
  376. static void mtk_star_disable_dma_irq(struct mtk_star_priv *priv,
  377. bool rx, bool tx)
  378. {
  379. u32 value;
  380. regmap_read(priv->regs, MTK_STAR_REG_INT_MASK, &value);
  381. if (tx)
  382. value |= MTK_STAR_BIT_INT_STS_TNTC;
  383. if (rx)
  384. value |= MTK_STAR_BIT_INT_STS_FNRC;
  385. regmap_write(priv->regs, MTK_STAR_REG_INT_MASK, value);
  386. }
  387. /* Unmask the three interrupts we care about, mask all others. */
  388. static void mtk_star_intr_enable(struct mtk_star_priv *priv)
  389. {
  390. unsigned int val = MTK_STAR_BIT_INT_STS_TNTC |
  391. MTK_STAR_BIT_INT_STS_FNRC |
  392. MTK_STAR_REG_INT_STS_MIB_CNT_TH;
  393. regmap_write(priv->regs, MTK_STAR_REG_INT_MASK, ~val);
  394. }
  395. static void mtk_star_intr_disable(struct mtk_star_priv *priv)
  396. {
  397. regmap_write(priv->regs, MTK_STAR_REG_INT_MASK, ~0);
  398. }
  399. static unsigned int mtk_star_intr_ack_all(struct mtk_star_priv *priv)
  400. {
  401. unsigned int val;
  402. regmap_read(priv->regs, MTK_STAR_REG_INT_STS, &val);
  403. regmap_write(priv->regs, MTK_STAR_REG_INT_STS, val);
  404. return val;
  405. }
  406. static void mtk_star_dma_init(struct mtk_star_priv *priv)
  407. {
  408. struct mtk_star_ring_desc *desc;
  409. unsigned int val;
  410. int i;
  411. priv->descs_base = (struct mtk_star_ring_desc *)priv->ring_base;
  412. for (i = 0; i < MTK_STAR_NUM_DESCS_TOTAL; i++) {
  413. desc = &priv->descs_base[i];
  414. memset(desc, 0, sizeof(*desc));
  415. desc->status = MTK_STAR_DESC_BIT_COWN;
  416. if ((i == MTK_STAR_NUM_TX_DESCS - 1) ||
  417. (i == MTK_STAR_NUM_DESCS_TOTAL - 1))
  418. desc->status |= MTK_STAR_DESC_BIT_EOR;
  419. }
  420. mtk_star_ring_init(&priv->tx_ring, priv->descs_base);
  421. mtk_star_ring_init(&priv->rx_ring,
  422. priv->descs_base + MTK_STAR_NUM_TX_DESCS);
  423. /* Set DMA pointers. */
  424. val = (unsigned int)priv->dma_addr;
  425. regmap_write(priv->regs, MTK_STAR_REG_TX_BASE_ADDR, val);
  426. regmap_write(priv->regs, MTK_STAR_REG_TX_DPTR, val);
  427. val += sizeof(struct mtk_star_ring_desc) * MTK_STAR_NUM_TX_DESCS;
  428. regmap_write(priv->regs, MTK_STAR_REG_RX_BASE_ADDR, val);
  429. regmap_write(priv->regs, MTK_STAR_REG_RX_DPTR, val);
  430. }
  431. static void mtk_star_dma_start(struct mtk_star_priv *priv)
  432. {
  433. regmap_set_bits(priv->regs, MTK_STAR_REG_TX_DMA_CTRL,
  434. MTK_STAR_BIT_TX_DMA_CTRL_START);
  435. regmap_set_bits(priv->regs, MTK_STAR_REG_RX_DMA_CTRL,
  436. MTK_STAR_BIT_RX_DMA_CTRL_START);
  437. }
  438. static void mtk_star_dma_stop(struct mtk_star_priv *priv)
  439. {
  440. regmap_write(priv->regs, MTK_STAR_REG_TX_DMA_CTRL,
  441. MTK_STAR_BIT_TX_DMA_CTRL_STOP);
  442. regmap_write(priv->regs, MTK_STAR_REG_RX_DMA_CTRL,
  443. MTK_STAR_BIT_RX_DMA_CTRL_STOP);
  444. }
  445. static void mtk_star_dma_disable(struct mtk_star_priv *priv)
  446. {
  447. int i;
  448. mtk_star_dma_stop(priv);
  449. /* Take back all descriptors. */
  450. for (i = 0; i < MTK_STAR_NUM_DESCS_TOTAL; i++)
  451. priv->descs_base[i].status |= MTK_STAR_DESC_BIT_COWN;
  452. }
  453. static void mtk_star_dma_resume_rx(struct mtk_star_priv *priv)
  454. {
  455. regmap_set_bits(priv->regs, MTK_STAR_REG_RX_DMA_CTRL,
  456. MTK_STAR_BIT_RX_DMA_CTRL_RESUME);
  457. }
  458. static void mtk_star_dma_resume_tx(struct mtk_star_priv *priv)
  459. {
  460. regmap_set_bits(priv->regs, MTK_STAR_REG_TX_DMA_CTRL,
  461. MTK_STAR_BIT_TX_DMA_CTRL_RESUME);
  462. }
  463. static void mtk_star_set_mac_addr(struct net_device *ndev)
  464. {
  465. struct mtk_star_priv *priv = netdev_priv(ndev);
  466. const u8 *mac_addr = ndev->dev_addr;
  467. unsigned int high, low;
  468. high = mac_addr[0] << 8 | mac_addr[1] << 0;
  469. low = mac_addr[2] << 24 | mac_addr[3] << 16 |
  470. mac_addr[4] << 8 | mac_addr[5];
  471. regmap_write(priv->regs, MTK_STAR_REG_MY_MAC_H, high);
  472. regmap_write(priv->regs, MTK_STAR_REG_MY_MAC_L, low);
  473. }
  474. static void mtk_star_reset_counters(struct mtk_star_priv *priv)
  475. {
  476. static const unsigned int counter_regs[] = {
  477. MTK_STAR_REG_C_RXOKPKT,
  478. MTK_STAR_REG_C_RXOKBYTE,
  479. MTK_STAR_REG_C_RXRUNT,
  480. MTK_STAR_REG_C_RXLONG,
  481. MTK_STAR_REG_C_RXDROP,
  482. MTK_STAR_REG_C_RXCRC,
  483. MTK_STAR_REG_C_RXARLDROP,
  484. MTK_STAR_REG_C_RXVLANDROP,
  485. MTK_STAR_REG_C_RXCSERR,
  486. MTK_STAR_REG_C_RXPAUSE,
  487. MTK_STAR_REG_C_TXOKPKT,
  488. MTK_STAR_REG_C_TXOKBYTE,
  489. MTK_STAR_REG_C_TXPAUSECOL,
  490. MTK_STAR_REG_C_TXRTY,
  491. MTK_STAR_REG_C_TXSKIP,
  492. MTK_STAR_REG_C_TX_ARP,
  493. MTK_STAR_REG_C_RX_RERR,
  494. MTK_STAR_REG_C_RX_UNI,
  495. MTK_STAR_REG_C_RX_MULTI,
  496. MTK_STAR_REG_C_RX_BROAD,
  497. MTK_STAR_REG_C_RX_ALIGNERR,
  498. MTK_STAR_REG_C_TX_UNI,
  499. MTK_STAR_REG_C_TX_MULTI,
  500. MTK_STAR_REG_C_TX_BROAD,
  501. MTK_STAR_REG_C_TX_TIMEOUT,
  502. MTK_STAR_REG_C_TX_LATECOL,
  503. MTK_STAR_REG_C_RX_LENGTHERR,
  504. MTK_STAR_REG_C_RX_TWIST,
  505. };
  506. unsigned int i, val;
  507. for (i = 0; i < ARRAY_SIZE(counter_regs); i++)
  508. regmap_read(priv->regs, counter_regs[i], &val);
  509. }
  510. static void mtk_star_update_stat(struct mtk_star_priv *priv,
  511. unsigned int reg, u64 *stat)
  512. {
  513. unsigned int val;
  514. regmap_read(priv->regs, reg, &val);
  515. *stat += val;
  516. }
  517. /* Try to get as many stats as possible from the internal registers instead
  518. * of tracking them ourselves.
  519. */
  520. static void mtk_star_update_stats(struct mtk_star_priv *priv)
  521. {
  522. struct rtnl_link_stats64 *stats = &priv->stats;
  523. /* OK packets and bytes. */
  524. mtk_star_update_stat(priv, MTK_STAR_REG_C_RXOKPKT, &stats->rx_packets);
  525. mtk_star_update_stat(priv, MTK_STAR_REG_C_TXOKPKT, &stats->tx_packets);
  526. mtk_star_update_stat(priv, MTK_STAR_REG_C_RXOKBYTE, &stats->rx_bytes);
  527. mtk_star_update_stat(priv, MTK_STAR_REG_C_TXOKBYTE, &stats->tx_bytes);
  528. /* RX & TX multicast. */
  529. mtk_star_update_stat(priv, MTK_STAR_REG_C_RX_MULTI, &stats->multicast);
  530. mtk_star_update_stat(priv, MTK_STAR_REG_C_TX_MULTI, &stats->multicast);
  531. /* Collisions. */
  532. mtk_star_update_stat(priv, MTK_STAR_REG_C_TXPAUSECOL,
  533. &stats->collisions);
  534. mtk_star_update_stat(priv, MTK_STAR_REG_C_TX_LATECOL,
  535. &stats->collisions);
  536. mtk_star_update_stat(priv, MTK_STAR_REG_C_RXRUNT, &stats->collisions);
  537. /* RX Errors. */
  538. mtk_star_update_stat(priv, MTK_STAR_REG_C_RX_LENGTHERR,
  539. &stats->rx_length_errors);
  540. mtk_star_update_stat(priv, MTK_STAR_REG_C_RXLONG,
  541. &stats->rx_over_errors);
  542. mtk_star_update_stat(priv, MTK_STAR_REG_C_RXCRC, &stats->rx_crc_errors);
  543. mtk_star_update_stat(priv, MTK_STAR_REG_C_RX_ALIGNERR,
  544. &stats->rx_frame_errors);
  545. mtk_star_update_stat(priv, MTK_STAR_REG_C_RXDROP,
  546. &stats->rx_fifo_errors);
  547. /* Sum of the general RX error counter + all of the above. */
  548. mtk_star_update_stat(priv, MTK_STAR_REG_C_RX_RERR, &stats->rx_errors);
  549. stats->rx_errors += stats->rx_length_errors;
  550. stats->rx_errors += stats->rx_over_errors;
  551. stats->rx_errors += stats->rx_crc_errors;
  552. stats->rx_errors += stats->rx_frame_errors;
  553. stats->rx_errors += stats->rx_fifo_errors;
  554. }
  555. static struct sk_buff *mtk_star_alloc_skb(struct net_device *ndev)
  556. {
  557. uintptr_t tail, offset;
  558. struct sk_buff *skb;
  559. skb = dev_alloc_skb(MTK_STAR_MAX_FRAME_SIZE);
  560. if (!skb)
  561. return NULL;
  562. /* Align to 16 bytes. */
  563. tail = (uintptr_t)skb_tail_pointer(skb);
  564. if (tail & (MTK_STAR_SKB_ALIGNMENT - 1)) {
  565. offset = tail & (MTK_STAR_SKB_ALIGNMENT - 1);
  566. skb_reserve(skb, MTK_STAR_SKB_ALIGNMENT - offset);
  567. }
  568. /* Ensure 16-byte alignment of the skb pointer: eth_type_trans() will
  569. * extract the Ethernet header (14 bytes) so we need two more bytes.
  570. */
  571. skb_reserve(skb, MTK_STAR_IP_ALIGN);
  572. return skb;
  573. }
  574. static int mtk_star_prepare_rx_skbs(struct net_device *ndev)
  575. {
  576. struct mtk_star_priv *priv = netdev_priv(ndev);
  577. struct mtk_star_ring *ring = &priv->rx_ring;
  578. struct device *dev = mtk_star_get_dev(priv);
  579. struct mtk_star_ring_desc *desc;
  580. struct sk_buff *skb;
  581. dma_addr_t dma_addr;
  582. int i;
  583. for (i = 0; i < MTK_STAR_NUM_RX_DESCS; i++) {
  584. skb = mtk_star_alloc_skb(ndev);
  585. if (!skb)
  586. return -ENOMEM;
  587. dma_addr = mtk_star_dma_map_rx(priv, skb);
  588. if (dma_mapping_error(dev, dma_addr)) {
  589. dev_kfree_skb(skb);
  590. return -ENOMEM;
  591. }
  592. desc = &ring->descs[i];
  593. desc->data_ptr = dma_addr;
  594. desc->status |= skb_tailroom(skb) & MTK_STAR_DESC_MSK_LEN;
  595. desc->status &= ~MTK_STAR_DESC_BIT_COWN;
  596. ring->skbs[i] = skb;
  597. ring->dma_addrs[i] = dma_addr;
  598. }
  599. return 0;
  600. }
  601. static void
  602. mtk_star_ring_free_skbs(struct mtk_star_priv *priv, struct mtk_star_ring *ring,
  603. void (*unmap_func)(struct mtk_star_priv *,
  604. struct mtk_star_ring_desc_data *))
  605. {
  606. struct mtk_star_ring_desc_data desc_data;
  607. int i;
  608. for (i = 0; i < MTK_STAR_RING_NUM_DESCS; i++) {
  609. if (!ring->dma_addrs[i])
  610. continue;
  611. desc_data.dma_addr = ring->dma_addrs[i];
  612. desc_data.skb = ring->skbs[i];
  613. unmap_func(priv, &desc_data);
  614. dev_kfree_skb(desc_data.skb);
  615. }
  616. }
  617. static void mtk_star_free_rx_skbs(struct mtk_star_priv *priv)
  618. {
  619. struct mtk_star_ring *ring = &priv->rx_ring;
  620. mtk_star_ring_free_skbs(priv, ring, mtk_star_dma_unmap_rx);
  621. }
  622. static void mtk_star_free_tx_skbs(struct mtk_star_priv *priv)
  623. {
  624. struct mtk_star_ring *ring = &priv->tx_ring;
  625. mtk_star_ring_free_skbs(priv, ring, mtk_star_dma_unmap_tx);
  626. }
  627. /**
  628. * mtk_star_handle_irq - Interrupt Handler.
  629. * @irq: interrupt number.
  630. * @data: pointer to a network interface device structure.
  631. * Description : this is the driver interrupt service routine.
  632. * it mainly handles:
  633. * 1. tx complete interrupt for frame transmission.
  634. * 2. rx complete interrupt for frame reception.
  635. * 3. MAC Management Counter interrupt to avoid counter overflow.
  636. **/
  637. static irqreturn_t mtk_star_handle_irq(int irq, void *data)
  638. {
  639. struct net_device *ndev = data;
  640. struct mtk_star_priv *priv = netdev_priv(ndev);
  641. unsigned int intr_status = mtk_star_intr_ack_all(priv);
  642. bool rx, tx;
  643. rx = (intr_status & MTK_STAR_BIT_INT_STS_FNRC) &&
  644. napi_schedule_prep(&priv->rx_napi);
  645. tx = (intr_status & MTK_STAR_BIT_INT_STS_TNTC) &&
  646. napi_schedule_prep(&priv->tx_napi);
  647. if (rx || tx) {
  648. spin_lock(&priv->lock);
  649. /* mask Rx and TX Complete interrupt */
  650. mtk_star_disable_dma_irq(priv, rx, tx);
  651. spin_unlock(&priv->lock);
  652. if (rx)
  653. __napi_schedule(&priv->rx_napi);
  654. if (tx)
  655. __napi_schedule(&priv->tx_napi);
  656. }
  657. /* interrupt is triggered once any counters reach 0x8000000 */
  658. if (intr_status & MTK_STAR_REG_INT_STS_MIB_CNT_TH) {
  659. mtk_star_update_stats(priv);
  660. mtk_star_reset_counters(priv);
  661. }
  662. return IRQ_HANDLED;
  663. }
  664. /* Wait for the completion of any previous command - CMD_START bit must be
  665. * cleared by hardware.
  666. */
  667. static int mtk_star_hash_wait_cmd_start(struct mtk_star_priv *priv)
  668. {
  669. unsigned int val;
  670. return regmap_read_poll_timeout_atomic(priv->regs,
  671. MTK_STAR_REG_HASH_CTRL, val,
  672. !(val & MTK_STAR_BIT_HASH_CTRL_CMD_START),
  673. 10, MTK_STAR_WAIT_TIMEOUT);
  674. }
  675. static int mtk_star_hash_wait_ok(struct mtk_star_priv *priv)
  676. {
  677. unsigned int val;
  678. int ret;
  679. /* Wait for BIST_DONE bit. */
  680. ret = regmap_read_poll_timeout_atomic(priv->regs,
  681. MTK_STAR_REG_HASH_CTRL, val,
  682. val & MTK_STAR_BIT_HASH_CTRL_BIST_DONE,
  683. 10, MTK_STAR_WAIT_TIMEOUT);
  684. if (ret)
  685. return ret;
  686. /* Check the BIST_OK bit. */
  687. if (!regmap_test_bits(priv->regs, MTK_STAR_REG_HASH_CTRL,
  688. MTK_STAR_BIT_HASH_CTRL_BIST_OK))
  689. return -EIO;
  690. return 0;
  691. }
  692. static int mtk_star_set_hashbit(struct mtk_star_priv *priv,
  693. unsigned int hash_addr)
  694. {
  695. unsigned int val;
  696. int ret;
  697. ret = mtk_star_hash_wait_cmd_start(priv);
  698. if (ret)
  699. return ret;
  700. val = hash_addr & MTK_STAR_MSK_HASH_CTRL_HASH_BIT_ADDR;
  701. val |= MTK_STAR_BIT_HASH_CTRL_ACC_CMD;
  702. val |= MTK_STAR_BIT_HASH_CTRL_CMD_START;
  703. val |= MTK_STAR_BIT_HASH_CTRL_BIST_EN;
  704. val |= MTK_STAR_BIT_HASH_CTRL_HASH_BIT_DATA;
  705. regmap_write(priv->regs, MTK_STAR_REG_HASH_CTRL, val);
  706. return mtk_star_hash_wait_ok(priv);
  707. }
  708. static int mtk_star_reset_hash_table(struct mtk_star_priv *priv)
  709. {
  710. int ret;
  711. ret = mtk_star_hash_wait_cmd_start(priv);
  712. if (ret)
  713. return ret;
  714. regmap_set_bits(priv->regs, MTK_STAR_REG_HASH_CTRL,
  715. MTK_STAR_BIT_HASH_CTRL_BIST_EN);
  716. regmap_set_bits(priv->regs, MTK_STAR_REG_TEST1,
  717. MTK_STAR_BIT_TEST1_RST_HASH_MBIST);
  718. return mtk_star_hash_wait_ok(priv);
  719. }
  720. static void mtk_star_phy_config(struct mtk_star_priv *priv)
  721. {
  722. unsigned int val;
  723. if (priv->speed == SPEED_1000)
  724. val = MTK_STAR_VAL_PHY_CTRL1_FORCE_SPD_1000M;
  725. else if (priv->speed == SPEED_100)
  726. val = MTK_STAR_VAL_PHY_CTRL1_FORCE_SPD_100M;
  727. else
  728. val = MTK_STAR_VAL_PHY_CTRL1_FORCE_SPD_10M;
  729. val <<= MTK_STAR_OFF_PHY_CTRL1_FORCE_SPD;
  730. val |= MTK_STAR_BIT_PHY_CTRL1_AN_EN;
  731. if (priv->pause) {
  732. val |= MTK_STAR_BIT_PHY_CTRL1_FORCE_FC_RX;
  733. val |= MTK_STAR_BIT_PHY_CTRL1_FORCE_FC_TX;
  734. val |= MTK_STAR_BIT_PHY_CTRL1_FORCE_DPX;
  735. } else {
  736. val &= ~MTK_STAR_BIT_PHY_CTRL1_FORCE_FC_RX;
  737. val &= ~MTK_STAR_BIT_PHY_CTRL1_FORCE_FC_TX;
  738. val &= ~MTK_STAR_BIT_PHY_CTRL1_FORCE_DPX;
  739. }
  740. regmap_write(priv->regs, MTK_STAR_REG_PHY_CTRL1, val);
  741. val = MTK_STAR_VAL_FC_CFG_SEND_PAUSE_TH_2K;
  742. val <<= MTK_STAR_OFF_FC_CFG_SEND_PAUSE_TH;
  743. val |= MTK_STAR_BIT_FC_CFG_UC_PAUSE_DIR;
  744. regmap_update_bits(priv->regs, MTK_STAR_REG_FC_CFG,
  745. MTK_STAR_MSK_FC_CFG_SEND_PAUSE_TH |
  746. MTK_STAR_BIT_FC_CFG_UC_PAUSE_DIR, val);
  747. val = MTK_STAR_VAL_EXT_CFG_SND_PAUSE_RLS_1K;
  748. val <<= MTK_STAR_OFF_EXT_CFG_SND_PAUSE_RLS;
  749. regmap_update_bits(priv->regs, MTK_STAR_REG_EXT_CFG,
  750. MTK_STAR_MSK_EXT_CFG_SND_PAUSE_RLS, val);
  751. }
  752. static void mtk_star_adjust_link(struct net_device *ndev)
  753. {
  754. struct mtk_star_priv *priv = netdev_priv(ndev);
  755. struct phy_device *phydev = priv->phydev;
  756. bool new_state = false;
  757. if (phydev->link) {
  758. if (!priv->link) {
  759. priv->link = phydev->link;
  760. new_state = true;
  761. }
  762. if (priv->speed != phydev->speed) {
  763. priv->speed = phydev->speed;
  764. new_state = true;
  765. }
  766. if (priv->pause != phydev->pause) {
  767. priv->pause = phydev->pause;
  768. new_state = true;
  769. }
  770. } else {
  771. if (priv->link) {
  772. priv->link = phydev->link;
  773. new_state = true;
  774. }
  775. }
  776. if (new_state) {
  777. if (phydev->link)
  778. mtk_star_phy_config(priv);
  779. phy_print_status(ndev->phydev);
  780. }
  781. }
  782. static void mtk_star_init_config(struct mtk_star_priv *priv)
  783. {
  784. unsigned int val;
  785. val = (MTK_STAR_BIT_MII_PAD_OUT_ENABLE |
  786. MTK_STAR_BIT_EXT_MDC_MODE |
  787. MTK_STAR_BIT_SWC_MII_MODE);
  788. regmap_write(priv->regs, MTK_STAR_REG_SYS_CONF, val);
  789. regmap_update_bits(priv->regs, MTK_STAR_REG_MAC_CLK_CONF,
  790. MTK_STAR_MSK_MAC_CLK_CONF,
  791. priv->compat_data->bit_clk_div);
  792. }
  793. static int mtk_star_enable(struct net_device *ndev)
  794. {
  795. struct mtk_star_priv *priv = netdev_priv(ndev);
  796. unsigned int val;
  797. int ret;
  798. mtk_star_nic_disable_pd(priv);
  799. mtk_star_intr_disable(priv);
  800. mtk_star_dma_stop(priv);
  801. mtk_star_set_mac_addr(ndev);
  802. /* Configure the MAC */
  803. val = MTK_STAR_VAL_MAC_CFG_IPG_96BIT;
  804. val <<= MTK_STAR_OFF_MAC_CFG_IPG;
  805. val |= MTK_STAR_BIT_MAC_CFG_MAXLEN_1522;
  806. val |= MTK_STAR_BIT_MAC_CFG_AUTO_PAD;
  807. val |= MTK_STAR_BIT_MAC_CFG_CRC_STRIP;
  808. regmap_write(priv->regs, MTK_STAR_REG_MAC_CFG, val);
  809. /* Enable Hash Table BIST and reset it */
  810. ret = mtk_star_reset_hash_table(priv);
  811. if (ret)
  812. return ret;
  813. /* Setup the hashing algorithm */
  814. regmap_clear_bits(priv->regs, MTK_STAR_REG_ARL_CFG,
  815. MTK_STAR_BIT_ARL_CFG_HASH_ALG |
  816. MTK_STAR_BIT_ARL_CFG_MISC_MODE);
  817. /* Don't strip VLAN tags */
  818. regmap_clear_bits(priv->regs, MTK_STAR_REG_MAC_CFG,
  819. MTK_STAR_BIT_MAC_CFG_VLAN_STRIP);
  820. /* Setup DMA */
  821. mtk_star_dma_init(priv);
  822. ret = mtk_star_prepare_rx_skbs(ndev);
  823. if (ret)
  824. goto err_out;
  825. /* Request the interrupt */
  826. ret = request_irq(ndev->irq, mtk_star_handle_irq,
  827. IRQF_TRIGGER_NONE, ndev->name, ndev);
  828. if (ret)
  829. goto err_free_skbs;
  830. napi_enable(&priv->tx_napi);
  831. napi_enable(&priv->rx_napi);
  832. mtk_star_intr_ack_all(priv);
  833. mtk_star_intr_enable(priv);
  834. /* Connect to and start PHY */
  835. priv->phydev = of_phy_connect(ndev, priv->phy_node,
  836. mtk_star_adjust_link, 0, priv->phy_intf);
  837. if (!priv->phydev) {
  838. netdev_err(ndev, "failed to connect to PHY\n");
  839. ret = -ENODEV;
  840. goto err_free_irq;
  841. }
  842. mtk_star_dma_start(priv);
  843. phy_start(priv->phydev);
  844. netif_start_queue(ndev);
  845. return 0;
  846. err_free_irq:
  847. napi_disable(&priv->rx_napi);
  848. napi_disable(&priv->tx_napi);
  849. free_irq(ndev->irq, ndev);
  850. err_free_skbs:
  851. mtk_star_free_rx_skbs(priv);
  852. err_out:
  853. return ret;
  854. }
  855. static void mtk_star_disable(struct net_device *ndev)
  856. {
  857. struct mtk_star_priv *priv = netdev_priv(ndev);
  858. netif_stop_queue(ndev);
  859. napi_disable(&priv->tx_napi);
  860. napi_disable(&priv->rx_napi);
  861. mtk_star_intr_disable(priv);
  862. mtk_star_dma_disable(priv);
  863. mtk_star_intr_ack_all(priv);
  864. phy_stop(priv->phydev);
  865. phy_disconnect(priv->phydev);
  866. free_irq(ndev->irq, ndev);
  867. mtk_star_free_rx_skbs(priv);
  868. mtk_star_free_tx_skbs(priv);
  869. }
  870. static int mtk_star_netdev_open(struct net_device *ndev)
  871. {
  872. return mtk_star_enable(ndev);
  873. }
  874. static int mtk_star_netdev_stop(struct net_device *ndev)
  875. {
  876. mtk_star_disable(ndev);
  877. return 0;
  878. }
  879. static int mtk_star_netdev_ioctl(struct net_device *ndev,
  880. struct ifreq *req, int cmd)
  881. {
  882. if (!netif_running(ndev))
  883. return -EINVAL;
  884. return phy_mii_ioctl(ndev->phydev, req, cmd);
  885. }
  886. static int __mtk_star_maybe_stop_tx(struct mtk_star_priv *priv, u16 size)
  887. {
  888. netif_stop_queue(priv->ndev);
  889. /* Might race with mtk_star_tx_poll, check again */
  890. smp_mb();
  891. if (likely(mtk_star_tx_ring_avail(&priv->tx_ring) < size))
  892. return -EBUSY;
  893. netif_start_queue(priv->ndev);
  894. return 0;
  895. }
  896. static inline int mtk_star_maybe_stop_tx(struct mtk_star_priv *priv, u16 size)
  897. {
  898. if (likely(mtk_star_tx_ring_avail(&priv->tx_ring) >= size))
  899. return 0;
  900. return __mtk_star_maybe_stop_tx(priv, size);
  901. }
  902. static netdev_tx_t mtk_star_netdev_start_xmit(struct sk_buff *skb,
  903. struct net_device *ndev)
  904. {
  905. struct mtk_star_priv *priv = netdev_priv(ndev);
  906. struct mtk_star_ring *ring = &priv->tx_ring;
  907. struct device *dev = mtk_star_get_dev(priv);
  908. struct mtk_star_ring_desc_data desc_data;
  909. int nfrags = skb_shinfo(skb)->nr_frags;
  910. if (unlikely(mtk_star_tx_ring_avail(ring) < nfrags + 1)) {
  911. if (!netif_queue_stopped(ndev)) {
  912. netif_stop_queue(ndev);
  913. /* This is a hard error, log it. */
  914. pr_err_ratelimited("Tx ring full when queue awake\n");
  915. }
  916. return NETDEV_TX_BUSY;
  917. }
  918. desc_data.dma_addr = mtk_star_dma_map_tx(priv, skb);
  919. if (dma_mapping_error(dev, desc_data.dma_addr))
  920. goto err_drop_packet;
  921. desc_data.skb = skb;
  922. desc_data.len = skb->len;
  923. mtk_star_ring_push_head_tx(ring, &desc_data);
  924. netdev_sent_queue(ndev, skb->len);
  925. mtk_star_maybe_stop_tx(priv, MTK_STAR_DESC_NEEDED);
  926. mtk_star_dma_resume_tx(priv);
  927. return NETDEV_TX_OK;
  928. err_drop_packet:
  929. dev_kfree_skb(skb);
  930. ndev->stats.tx_dropped++;
  931. return NETDEV_TX_OK;
  932. }
  933. /* Returns the number of bytes sent or a negative number on the first
  934. * descriptor owned by DMA.
  935. */
  936. static int mtk_star_tx_complete_one(struct mtk_star_priv *priv)
  937. {
  938. struct mtk_star_ring *ring = &priv->tx_ring;
  939. struct mtk_star_ring_desc_data desc_data;
  940. int ret;
  941. ret = mtk_star_ring_pop_tail(ring, &desc_data);
  942. if (ret)
  943. return ret;
  944. mtk_star_dma_unmap_tx(priv, &desc_data);
  945. ret = desc_data.skb->len;
  946. dev_kfree_skb_irq(desc_data.skb);
  947. return ret;
  948. }
  949. static int mtk_star_tx_poll(struct napi_struct *napi, int budget)
  950. {
  951. struct mtk_star_priv *priv = container_of(napi, struct mtk_star_priv,
  952. tx_napi);
  953. int ret = 0, pkts_compl = 0, bytes_compl = 0, count = 0;
  954. struct mtk_star_ring *ring = &priv->tx_ring;
  955. struct net_device *ndev = priv->ndev;
  956. unsigned int head = ring->head;
  957. unsigned int entry = ring->tail;
  958. unsigned long flags;
  959. while (entry != head && count < (MTK_STAR_RING_NUM_DESCS - 1)) {
  960. ret = mtk_star_tx_complete_one(priv);
  961. if (ret < 0)
  962. break;
  963. count++;
  964. pkts_compl++;
  965. bytes_compl += ret;
  966. entry = ring->tail;
  967. }
  968. netdev_completed_queue(ndev, pkts_compl, bytes_compl);
  969. if (unlikely(netif_queue_stopped(ndev)) &&
  970. (mtk_star_tx_ring_avail(ring) > MTK_STAR_TX_THRESH))
  971. netif_wake_queue(ndev);
  972. if (napi_complete(napi)) {
  973. spin_lock_irqsave(&priv->lock, flags);
  974. mtk_star_enable_dma_irq(priv, false, true);
  975. spin_unlock_irqrestore(&priv->lock, flags);
  976. }
  977. return 0;
  978. }
  979. static void mtk_star_netdev_get_stats64(struct net_device *ndev,
  980. struct rtnl_link_stats64 *stats)
  981. {
  982. struct mtk_star_priv *priv = netdev_priv(ndev);
  983. mtk_star_update_stats(priv);
  984. memcpy(stats, &priv->stats, sizeof(*stats));
  985. }
  986. static void mtk_star_set_rx_mode(struct net_device *ndev)
  987. {
  988. struct mtk_star_priv *priv = netdev_priv(ndev);
  989. struct netdev_hw_addr *hw_addr;
  990. unsigned int hash_addr, i;
  991. int ret;
  992. if (ndev->flags & IFF_PROMISC) {
  993. regmap_set_bits(priv->regs, MTK_STAR_REG_ARL_CFG,
  994. MTK_STAR_BIT_ARL_CFG_MISC_MODE);
  995. } else if (netdev_mc_count(ndev) > MTK_STAR_HASHTABLE_MC_LIMIT ||
  996. ndev->flags & IFF_ALLMULTI) {
  997. for (i = 0; i < MTK_STAR_HASHTABLE_SIZE_MAX; i++) {
  998. ret = mtk_star_set_hashbit(priv, i);
  999. if (ret)
  1000. goto hash_fail;
  1001. }
  1002. } else {
  1003. /* Clear previous settings. */
  1004. ret = mtk_star_reset_hash_table(priv);
  1005. if (ret)
  1006. goto hash_fail;
  1007. netdev_for_each_mc_addr(hw_addr, ndev) {
  1008. hash_addr = (hw_addr->addr[0] & 0x01) << 8;
  1009. hash_addr += hw_addr->addr[5];
  1010. ret = mtk_star_set_hashbit(priv, hash_addr);
  1011. if (ret)
  1012. goto hash_fail;
  1013. }
  1014. }
  1015. return;
  1016. hash_fail:
  1017. if (ret == -ETIMEDOUT)
  1018. netdev_err(ndev, "setting hash bit timed out\n");
  1019. else
  1020. /* Should be -EIO */
  1021. netdev_err(ndev, "unable to set hash bit");
  1022. }
  1023. static const struct net_device_ops mtk_star_netdev_ops = {
  1024. .ndo_open = mtk_star_netdev_open,
  1025. .ndo_stop = mtk_star_netdev_stop,
  1026. .ndo_start_xmit = mtk_star_netdev_start_xmit,
  1027. .ndo_get_stats64 = mtk_star_netdev_get_stats64,
  1028. .ndo_set_rx_mode = mtk_star_set_rx_mode,
  1029. .ndo_eth_ioctl = mtk_star_netdev_ioctl,
  1030. .ndo_set_mac_address = eth_mac_addr,
  1031. .ndo_validate_addr = eth_validate_addr,
  1032. };
  1033. static void mtk_star_get_drvinfo(struct net_device *dev,
  1034. struct ethtool_drvinfo *info)
  1035. {
  1036. strscpy(info->driver, MTK_STAR_DRVNAME, sizeof(info->driver));
  1037. }
  1038. /* TODO Add ethtool stats. */
  1039. static const struct ethtool_ops mtk_star_ethtool_ops = {
  1040. .get_drvinfo = mtk_star_get_drvinfo,
  1041. .get_link = ethtool_op_get_link,
  1042. .get_link_ksettings = phy_ethtool_get_link_ksettings,
  1043. .set_link_ksettings = phy_ethtool_set_link_ksettings,
  1044. };
  1045. static int mtk_star_rx(struct mtk_star_priv *priv, int budget)
  1046. {
  1047. struct mtk_star_ring *ring = &priv->rx_ring;
  1048. struct device *dev = mtk_star_get_dev(priv);
  1049. struct mtk_star_ring_desc_data desc_data;
  1050. struct net_device *ndev = priv->ndev;
  1051. struct sk_buff *curr_skb, *new_skb;
  1052. dma_addr_t new_dma_addr;
  1053. int ret, count = 0;
  1054. while (count < budget) {
  1055. ret = mtk_star_ring_pop_tail(ring, &desc_data);
  1056. if (ret)
  1057. return -1;
  1058. curr_skb = desc_data.skb;
  1059. if ((desc_data.flags & MTK_STAR_DESC_BIT_RX_CRCE) ||
  1060. (desc_data.flags & MTK_STAR_DESC_BIT_RX_OSIZE)) {
  1061. /* Error packet -> drop and reuse skb. */
  1062. new_skb = curr_skb;
  1063. goto push_new_skb;
  1064. }
  1065. /* Prepare new skb before receiving the current one.
  1066. * Reuse the current skb if we fail at any point.
  1067. */
  1068. new_skb = mtk_star_alloc_skb(ndev);
  1069. if (!new_skb) {
  1070. ndev->stats.rx_dropped++;
  1071. new_skb = curr_skb;
  1072. goto push_new_skb;
  1073. }
  1074. new_dma_addr = mtk_star_dma_map_rx(priv, new_skb);
  1075. if (dma_mapping_error(dev, new_dma_addr)) {
  1076. ndev->stats.rx_dropped++;
  1077. dev_kfree_skb(new_skb);
  1078. new_skb = curr_skb;
  1079. netdev_err(ndev, "DMA mapping error of RX descriptor\n");
  1080. goto push_new_skb;
  1081. }
  1082. /* We can't fail anymore at this point:
  1083. * it's safe to unmap the skb.
  1084. */
  1085. mtk_star_dma_unmap_rx(priv, &desc_data);
  1086. skb_put(desc_data.skb, desc_data.len);
  1087. desc_data.skb->ip_summed = CHECKSUM_NONE;
  1088. desc_data.skb->protocol = eth_type_trans(desc_data.skb, ndev);
  1089. desc_data.skb->dev = ndev;
  1090. netif_receive_skb(desc_data.skb);
  1091. /* update dma_addr for new skb */
  1092. desc_data.dma_addr = new_dma_addr;
  1093. push_new_skb:
  1094. count++;
  1095. desc_data.len = skb_tailroom(new_skb);
  1096. desc_data.skb = new_skb;
  1097. mtk_star_ring_push_head_rx(ring, &desc_data);
  1098. }
  1099. mtk_star_dma_resume_rx(priv);
  1100. return count;
  1101. }
  1102. static int mtk_star_rx_poll(struct napi_struct *napi, int budget)
  1103. {
  1104. struct mtk_star_priv *priv;
  1105. unsigned long flags;
  1106. int work_done = 0;
  1107. priv = container_of(napi, struct mtk_star_priv, rx_napi);
  1108. work_done = mtk_star_rx(priv, budget);
  1109. if (work_done < budget && napi_complete_done(napi, work_done)) {
  1110. spin_lock_irqsave(&priv->lock, flags);
  1111. mtk_star_enable_dma_irq(priv, true, false);
  1112. spin_unlock_irqrestore(&priv->lock, flags);
  1113. }
  1114. return work_done;
  1115. }
  1116. static void mtk_star_mdio_rwok_clear(struct mtk_star_priv *priv)
  1117. {
  1118. regmap_write(priv->regs, MTK_STAR_REG_PHY_CTRL0,
  1119. MTK_STAR_BIT_PHY_CTRL0_RWOK);
  1120. }
  1121. static int mtk_star_mdio_rwok_wait(struct mtk_star_priv *priv)
  1122. {
  1123. unsigned int val;
  1124. return regmap_read_poll_timeout(priv->regs, MTK_STAR_REG_PHY_CTRL0,
  1125. val, val & MTK_STAR_BIT_PHY_CTRL0_RWOK,
  1126. 10, MTK_STAR_WAIT_TIMEOUT);
  1127. }
  1128. static int mtk_star_mdio_read(struct mii_bus *mii, int phy_id, int regnum)
  1129. {
  1130. struct mtk_star_priv *priv = mii->priv;
  1131. unsigned int val, data;
  1132. int ret;
  1133. mtk_star_mdio_rwok_clear(priv);
  1134. val = (regnum << MTK_STAR_OFF_PHY_CTRL0_PREG);
  1135. val &= MTK_STAR_MSK_PHY_CTRL0_PREG;
  1136. val |= MTK_STAR_BIT_PHY_CTRL0_RDCMD;
  1137. regmap_write(priv->regs, MTK_STAR_REG_PHY_CTRL0, val);
  1138. ret = mtk_star_mdio_rwok_wait(priv);
  1139. if (ret)
  1140. return ret;
  1141. regmap_read(priv->regs, MTK_STAR_REG_PHY_CTRL0, &data);
  1142. data &= MTK_STAR_MSK_PHY_CTRL0_RWDATA;
  1143. data >>= MTK_STAR_OFF_PHY_CTRL0_RWDATA;
  1144. return data;
  1145. }
  1146. static int mtk_star_mdio_write(struct mii_bus *mii, int phy_id,
  1147. int regnum, u16 data)
  1148. {
  1149. struct mtk_star_priv *priv = mii->priv;
  1150. unsigned int val;
  1151. mtk_star_mdio_rwok_clear(priv);
  1152. val = data;
  1153. val <<= MTK_STAR_OFF_PHY_CTRL0_RWDATA;
  1154. val &= MTK_STAR_MSK_PHY_CTRL0_RWDATA;
  1155. regnum <<= MTK_STAR_OFF_PHY_CTRL0_PREG;
  1156. regnum &= MTK_STAR_MSK_PHY_CTRL0_PREG;
  1157. val |= regnum;
  1158. val |= MTK_STAR_BIT_PHY_CTRL0_WTCMD;
  1159. regmap_write(priv->regs, MTK_STAR_REG_PHY_CTRL0, val);
  1160. return mtk_star_mdio_rwok_wait(priv);
  1161. }
  1162. static int mtk_star_mdio_init(struct net_device *ndev)
  1163. {
  1164. struct mtk_star_priv *priv = netdev_priv(ndev);
  1165. struct device *dev = mtk_star_get_dev(priv);
  1166. struct device_node *of_node, *mdio_node;
  1167. int ret;
  1168. of_node = dev->of_node;
  1169. mdio_node = of_get_available_child_by_name(of_node, "mdio");
  1170. if (!mdio_node)
  1171. return -ENODEV;
  1172. priv->mii = devm_mdiobus_alloc(dev);
  1173. if (!priv->mii) {
  1174. ret = -ENOMEM;
  1175. goto out_put_node;
  1176. }
  1177. snprintf(priv->mii->id, MII_BUS_ID_SIZE, "%s", dev_name(dev));
  1178. priv->mii->name = "mtk-mac-mdio";
  1179. priv->mii->parent = dev;
  1180. priv->mii->read = mtk_star_mdio_read;
  1181. priv->mii->write = mtk_star_mdio_write;
  1182. priv->mii->priv = priv;
  1183. ret = devm_of_mdiobus_register(dev, priv->mii, mdio_node);
  1184. out_put_node:
  1185. of_node_put(mdio_node);
  1186. return ret;
  1187. }
  1188. static __maybe_unused int mtk_star_suspend(struct device *dev)
  1189. {
  1190. struct mtk_star_priv *priv;
  1191. struct net_device *ndev;
  1192. ndev = dev_get_drvdata(dev);
  1193. priv = netdev_priv(ndev);
  1194. if (netif_running(ndev))
  1195. mtk_star_disable(ndev);
  1196. netif_device_detach(ndev);
  1197. clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
  1198. return 0;
  1199. }
  1200. static __maybe_unused int mtk_star_resume(struct device *dev)
  1201. {
  1202. struct mtk_star_priv *priv;
  1203. struct net_device *ndev;
  1204. int ret;
  1205. ndev = dev_get_drvdata(dev);
  1206. priv = netdev_priv(ndev);
  1207. ret = clk_bulk_prepare_enable(MTK_STAR_NCLKS, priv->clks);
  1208. if (ret)
  1209. return ret;
  1210. if (netif_running(ndev)) {
  1211. ret = mtk_star_enable(ndev);
  1212. if (ret)
  1213. clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
  1214. }
  1215. netif_device_attach(ndev);
  1216. return ret;
  1217. }
  1218. static void mtk_star_clk_disable_unprepare(void *data)
  1219. {
  1220. struct mtk_star_priv *priv = data;
  1221. clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
  1222. }
  1223. static int mtk_star_set_timing(struct mtk_star_priv *priv)
  1224. {
  1225. struct device *dev = mtk_star_get_dev(priv);
  1226. unsigned int delay_val = 0;
  1227. switch (priv->phy_intf) {
  1228. case PHY_INTERFACE_MODE_MII:
  1229. case PHY_INTERFACE_MODE_RMII:
  1230. delay_val |= FIELD_PREP(MTK_STAR_BIT_INV_RX_CLK, priv->rx_inv);
  1231. delay_val |= FIELD_PREP(MTK_STAR_BIT_INV_TX_CLK, priv->tx_inv);
  1232. break;
  1233. default:
  1234. dev_err(dev, "This interface not supported\n");
  1235. return -EINVAL;
  1236. }
  1237. return regmap_write(priv->regs, MTK_STAR_REG_TEST0, delay_val);
  1238. }
  1239. static int mtk_star_probe(struct platform_device *pdev)
  1240. {
  1241. struct device_node *of_node;
  1242. struct mtk_star_priv *priv;
  1243. struct phy_device *phydev;
  1244. struct net_device *ndev;
  1245. struct device *dev;
  1246. void __iomem *base;
  1247. int ret, i;
  1248. dev = &pdev->dev;
  1249. of_node = dev->of_node;
  1250. ndev = devm_alloc_etherdev(dev, sizeof(*priv));
  1251. if (!ndev)
  1252. return -ENOMEM;
  1253. priv = netdev_priv(ndev);
  1254. priv->ndev = ndev;
  1255. priv->compat_data = of_device_get_match_data(&pdev->dev);
  1256. SET_NETDEV_DEV(ndev, dev);
  1257. platform_set_drvdata(pdev, ndev);
  1258. ndev->min_mtu = ETH_ZLEN;
  1259. ndev->max_mtu = MTK_STAR_MAX_FRAME_SIZE;
  1260. spin_lock_init(&priv->lock);
  1261. base = devm_platform_ioremap_resource(pdev, 0);
  1262. if (IS_ERR(base))
  1263. return PTR_ERR(base);
  1264. /* We won't be checking the return values of regmap read & write
  1265. * functions. They can only fail for mmio if there's a clock attached
  1266. * to regmap which is not the case here.
  1267. */
  1268. priv->regs = devm_regmap_init_mmio(dev, base,
  1269. &mtk_star_regmap_config);
  1270. if (IS_ERR(priv->regs))
  1271. return PTR_ERR(priv->regs);
  1272. priv->pericfg = syscon_regmap_lookup_by_phandle(of_node,
  1273. "mediatek,pericfg");
  1274. if (IS_ERR(priv->pericfg)) {
  1275. dev_err(dev, "Failed to lookup the PERICFG syscon\n");
  1276. return PTR_ERR(priv->pericfg);
  1277. }
  1278. ndev->irq = platform_get_irq(pdev, 0);
  1279. if (ndev->irq < 0)
  1280. return ndev->irq;
  1281. for (i = 0; i < MTK_STAR_NCLKS; i++)
  1282. priv->clks[i].id = mtk_star_clk_names[i];
  1283. ret = devm_clk_bulk_get(dev, MTK_STAR_NCLKS, priv->clks);
  1284. if (ret)
  1285. return ret;
  1286. ret = clk_bulk_prepare_enable(MTK_STAR_NCLKS, priv->clks);
  1287. if (ret)
  1288. return ret;
  1289. ret = devm_add_action_or_reset(dev,
  1290. mtk_star_clk_disable_unprepare, priv);
  1291. if (ret)
  1292. return ret;
  1293. ret = of_get_phy_mode(of_node, &priv->phy_intf);
  1294. if (ret) {
  1295. return ret;
  1296. } else if (priv->phy_intf != PHY_INTERFACE_MODE_RMII &&
  1297. priv->phy_intf != PHY_INTERFACE_MODE_MII) {
  1298. dev_err(dev, "unsupported phy mode: %s\n",
  1299. phy_modes(priv->phy_intf));
  1300. return -EINVAL;
  1301. }
  1302. priv->phy_node = of_parse_phandle(of_node, "phy-handle", 0);
  1303. if (!priv->phy_node) {
  1304. dev_err(dev, "failed to retrieve the phy handle from device tree\n");
  1305. return -ENODEV;
  1306. }
  1307. priv->rmii_rxc = of_property_read_bool(of_node, "mediatek,rmii-rxc");
  1308. priv->rx_inv = of_property_read_bool(of_node, "mediatek,rxc-inverse");
  1309. priv->tx_inv = of_property_read_bool(of_node, "mediatek,txc-inverse");
  1310. if (priv->compat_data->set_interface_mode) {
  1311. ret = priv->compat_data->set_interface_mode(ndev);
  1312. if (ret) {
  1313. dev_err(dev, "Failed to set phy interface, err = %d\n", ret);
  1314. return -EINVAL;
  1315. }
  1316. }
  1317. ret = mtk_star_set_timing(priv);
  1318. if (ret) {
  1319. dev_err(dev, "Failed to set timing, err = %d\n", ret);
  1320. return -EINVAL;
  1321. }
  1322. ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
  1323. if (ret) {
  1324. dev_err(dev, "unsupported DMA mask\n");
  1325. return ret;
  1326. }
  1327. priv->ring_base = dmam_alloc_coherent(dev, MTK_STAR_DMA_SIZE,
  1328. &priv->dma_addr,
  1329. GFP_KERNEL | GFP_DMA);
  1330. if (!priv->ring_base)
  1331. return -ENOMEM;
  1332. mtk_star_nic_disable_pd(priv);
  1333. mtk_star_init_config(priv);
  1334. ret = mtk_star_mdio_init(ndev);
  1335. if (ret)
  1336. return ret;
  1337. ret = platform_get_ethdev_address(dev, ndev);
  1338. if (ret || !is_valid_ether_addr(ndev->dev_addr))
  1339. eth_hw_addr_random(ndev);
  1340. ndev->netdev_ops = &mtk_star_netdev_ops;
  1341. ndev->ethtool_ops = &mtk_star_ethtool_ops;
  1342. netif_napi_add(ndev, &priv->rx_napi, mtk_star_rx_poll);
  1343. netif_napi_add_tx(ndev, &priv->tx_napi, mtk_star_tx_poll);
  1344. phydev = of_phy_find_device(priv->phy_node);
  1345. if (phydev) {
  1346. phydev->mac_managed_pm = true;
  1347. put_device(&phydev->mdio.dev);
  1348. }
  1349. return devm_register_netdev(dev, ndev);
  1350. }
  1351. #ifdef CONFIG_OF
  1352. static int mt8516_set_interface_mode(struct net_device *ndev)
  1353. {
  1354. struct mtk_star_priv *priv = netdev_priv(ndev);
  1355. struct device *dev = mtk_star_get_dev(priv);
  1356. unsigned int intf_val, ret, rmii_rxc;
  1357. switch (priv->phy_intf) {
  1358. case PHY_INTERFACE_MODE_MII:
  1359. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_MII;
  1360. rmii_rxc = 0;
  1361. break;
  1362. case PHY_INTERFACE_MODE_RMII:
  1363. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_RMII;
  1364. rmii_rxc = priv->rmii_rxc ? 0 : MTK_PERICFG_BIT_NIC_CFG_CON_CLK;
  1365. break;
  1366. default:
  1367. dev_err(dev, "This interface not supported\n");
  1368. return -EINVAL;
  1369. }
  1370. ret = regmap_update_bits(priv->pericfg,
  1371. MTK_PERICFG_REG_NIC_CFG1_CON,
  1372. MTK_PERICFG_BIT_NIC_CFG_CON_CLK,
  1373. rmii_rxc);
  1374. if (ret)
  1375. return ret;
  1376. return regmap_update_bits(priv->pericfg,
  1377. MTK_PERICFG_REG_NIC_CFG0_CON,
  1378. MTK_PERICFG_REG_NIC_CFG_CON_CFG_INTF,
  1379. intf_val);
  1380. }
  1381. static int mt8365_set_interface_mode(struct net_device *ndev)
  1382. {
  1383. struct mtk_star_priv *priv = netdev_priv(ndev);
  1384. struct device *dev = mtk_star_get_dev(priv);
  1385. unsigned int intf_val;
  1386. switch (priv->phy_intf) {
  1387. case PHY_INTERFACE_MODE_MII:
  1388. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_MII;
  1389. break;
  1390. case PHY_INTERFACE_MODE_RMII:
  1391. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_RMII;
  1392. intf_val |= priv->rmii_rxc ? 0 : MTK_PERICFG_BIT_NIC_CFG_CON_CLK_V2;
  1393. break;
  1394. default:
  1395. dev_err(dev, "This interface not supported\n");
  1396. return -EINVAL;
  1397. }
  1398. return regmap_update_bits(priv->pericfg,
  1399. MTK_PERICFG_REG_NIC_CFG_CON_V2,
  1400. MTK_PERICFG_REG_NIC_CFG_CON_CFG_INTF |
  1401. MTK_PERICFG_BIT_NIC_CFG_CON_CLK_V2,
  1402. intf_val);
  1403. }
  1404. static const struct mtk_star_compat mtk_star_mt8516_compat = {
  1405. .set_interface_mode = mt8516_set_interface_mode,
  1406. .bit_clk_div = MTK_STAR_BIT_CLK_DIV_10,
  1407. };
  1408. static const struct mtk_star_compat mtk_star_mt8365_compat = {
  1409. .set_interface_mode = mt8365_set_interface_mode,
  1410. .bit_clk_div = MTK_STAR_BIT_CLK_DIV_50,
  1411. };
  1412. static const struct of_device_id mtk_star_of_match[] = {
  1413. { .compatible = "mediatek,mt8516-eth",
  1414. .data = &mtk_star_mt8516_compat },
  1415. { .compatible = "mediatek,mt8518-eth",
  1416. .data = &mtk_star_mt8516_compat },
  1417. { .compatible = "mediatek,mt8175-eth",
  1418. .data = &mtk_star_mt8516_compat },
  1419. { .compatible = "mediatek,mt8365-eth",
  1420. .data = &mtk_star_mt8365_compat },
  1421. { }
  1422. };
  1423. MODULE_DEVICE_TABLE(of, mtk_star_of_match);
  1424. #endif
  1425. static SIMPLE_DEV_PM_OPS(mtk_star_pm_ops,
  1426. mtk_star_suspend, mtk_star_resume);
  1427. static struct platform_driver mtk_star_driver = {
  1428. .driver = {
  1429. .name = MTK_STAR_DRVNAME,
  1430. .pm = &mtk_star_pm_ops,
  1431. .of_match_table = of_match_ptr(mtk_star_of_match),
  1432. },
  1433. .probe = mtk_star_probe,
  1434. };
  1435. module_platform_driver(mtk_star_driver);
  1436. MODULE_AUTHOR("Bartosz Golaszewski <bgolaszewski@baylibre.com>");
  1437. MODULE_DESCRIPTION("Mediatek STAR Ethernet MAC Driver");
  1438. MODULE_LICENSE("GPL");