mtk_star_emac.c 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766
  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_child_by_name(of_node, "mdio");
  1170. if (!mdio_node)
  1171. return -ENODEV;
  1172. if (!of_device_is_available(mdio_node)) {
  1173. ret = -ENODEV;
  1174. goto out_put_node;
  1175. }
  1176. priv->mii = devm_mdiobus_alloc(dev);
  1177. if (!priv->mii) {
  1178. ret = -ENOMEM;
  1179. goto out_put_node;
  1180. }
  1181. snprintf(priv->mii->id, MII_BUS_ID_SIZE, "%s", dev_name(dev));
  1182. priv->mii->name = "mtk-mac-mdio";
  1183. priv->mii->parent = dev;
  1184. priv->mii->read = mtk_star_mdio_read;
  1185. priv->mii->write = mtk_star_mdio_write;
  1186. priv->mii->priv = priv;
  1187. ret = devm_of_mdiobus_register(dev, priv->mii, mdio_node);
  1188. out_put_node:
  1189. of_node_put(mdio_node);
  1190. return ret;
  1191. }
  1192. static __maybe_unused int mtk_star_suspend(struct device *dev)
  1193. {
  1194. struct mtk_star_priv *priv;
  1195. struct net_device *ndev;
  1196. ndev = dev_get_drvdata(dev);
  1197. priv = netdev_priv(ndev);
  1198. if (netif_running(ndev))
  1199. mtk_star_disable(ndev);
  1200. netif_device_detach(ndev);
  1201. clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
  1202. return 0;
  1203. }
  1204. static __maybe_unused int mtk_star_resume(struct device *dev)
  1205. {
  1206. struct mtk_star_priv *priv;
  1207. struct net_device *ndev;
  1208. int ret;
  1209. ndev = dev_get_drvdata(dev);
  1210. priv = netdev_priv(ndev);
  1211. ret = clk_bulk_prepare_enable(MTK_STAR_NCLKS, priv->clks);
  1212. if (ret)
  1213. return ret;
  1214. if (netif_running(ndev)) {
  1215. ret = mtk_star_enable(ndev);
  1216. if (ret)
  1217. clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
  1218. }
  1219. netif_device_attach(ndev);
  1220. return ret;
  1221. }
  1222. static void mtk_star_clk_disable_unprepare(void *data)
  1223. {
  1224. struct mtk_star_priv *priv = data;
  1225. clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
  1226. }
  1227. static int mtk_star_set_timing(struct mtk_star_priv *priv)
  1228. {
  1229. struct device *dev = mtk_star_get_dev(priv);
  1230. unsigned int delay_val = 0;
  1231. switch (priv->phy_intf) {
  1232. case PHY_INTERFACE_MODE_MII:
  1233. case PHY_INTERFACE_MODE_RMII:
  1234. delay_val |= FIELD_PREP(MTK_STAR_BIT_INV_RX_CLK, priv->rx_inv);
  1235. delay_val |= FIELD_PREP(MTK_STAR_BIT_INV_TX_CLK, priv->tx_inv);
  1236. break;
  1237. default:
  1238. dev_err(dev, "This interface not supported\n");
  1239. return -EINVAL;
  1240. }
  1241. return regmap_write(priv->regs, MTK_STAR_REG_TEST0, delay_val);
  1242. }
  1243. static int mtk_star_probe(struct platform_device *pdev)
  1244. {
  1245. struct device_node *of_node;
  1246. struct mtk_star_priv *priv;
  1247. struct phy_device *phydev;
  1248. struct net_device *ndev;
  1249. struct device *dev;
  1250. void __iomem *base;
  1251. int ret, i;
  1252. dev = &pdev->dev;
  1253. of_node = dev->of_node;
  1254. ndev = devm_alloc_etherdev(dev, sizeof(*priv));
  1255. if (!ndev)
  1256. return -ENOMEM;
  1257. priv = netdev_priv(ndev);
  1258. priv->ndev = ndev;
  1259. priv->compat_data = of_device_get_match_data(&pdev->dev);
  1260. SET_NETDEV_DEV(ndev, dev);
  1261. platform_set_drvdata(pdev, ndev);
  1262. ndev->min_mtu = ETH_ZLEN;
  1263. ndev->max_mtu = MTK_STAR_MAX_FRAME_SIZE;
  1264. spin_lock_init(&priv->lock);
  1265. base = devm_platform_ioremap_resource(pdev, 0);
  1266. if (IS_ERR(base))
  1267. return PTR_ERR(base);
  1268. /* We won't be checking the return values of regmap read & write
  1269. * functions. They can only fail for mmio if there's a clock attached
  1270. * to regmap which is not the case here.
  1271. */
  1272. priv->regs = devm_regmap_init_mmio(dev, base,
  1273. &mtk_star_regmap_config);
  1274. if (IS_ERR(priv->regs))
  1275. return PTR_ERR(priv->regs);
  1276. priv->pericfg = syscon_regmap_lookup_by_phandle(of_node,
  1277. "mediatek,pericfg");
  1278. if (IS_ERR(priv->pericfg)) {
  1279. dev_err(dev, "Failed to lookup the PERICFG syscon\n");
  1280. return PTR_ERR(priv->pericfg);
  1281. }
  1282. ndev->irq = platform_get_irq(pdev, 0);
  1283. if (ndev->irq < 0)
  1284. return ndev->irq;
  1285. for (i = 0; i < MTK_STAR_NCLKS; i++)
  1286. priv->clks[i].id = mtk_star_clk_names[i];
  1287. ret = devm_clk_bulk_get(dev, MTK_STAR_NCLKS, priv->clks);
  1288. if (ret)
  1289. return ret;
  1290. ret = clk_bulk_prepare_enable(MTK_STAR_NCLKS, priv->clks);
  1291. if (ret)
  1292. return ret;
  1293. ret = devm_add_action_or_reset(dev,
  1294. mtk_star_clk_disable_unprepare, priv);
  1295. if (ret)
  1296. return ret;
  1297. ret = of_get_phy_mode(of_node, &priv->phy_intf);
  1298. if (ret) {
  1299. return ret;
  1300. } else if (priv->phy_intf != PHY_INTERFACE_MODE_RMII &&
  1301. priv->phy_intf != PHY_INTERFACE_MODE_MII) {
  1302. dev_err(dev, "unsupported phy mode: %s\n",
  1303. phy_modes(priv->phy_intf));
  1304. return -EINVAL;
  1305. }
  1306. priv->phy_node = of_parse_phandle(of_node, "phy-handle", 0);
  1307. if (!priv->phy_node) {
  1308. dev_err(dev, "failed to retrieve the phy handle from device tree\n");
  1309. return -ENODEV;
  1310. }
  1311. priv->rmii_rxc = of_property_read_bool(of_node, "mediatek,rmii-rxc");
  1312. priv->rx_inv = of_property_read_bool(of_node, "mediatek,rxc-inverse");
  1313. priv->tx_inv = of_property_read_bool(of_node, "mediatek,txc-inverse");
  1314. if (priv->compat_data->set_interface_mode) {
  1315. ret = priv->compat_data->set_interface_mode(ndev);
  1316. if (ret) {
  1317. dev_err(dev, "Failed to set phy interface, err = %d\n", ret);
  1318. return -EINVAL;
  1319. }
  1320. }
  1321. ret = mtk_star_set_timing(priv);
  1322. if (ret) {
  1323. dev_err(dev, "Failed to set timing, err = %d\n", ret);
  1324. return -EINVAL;
  1325. }
  1326. ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
  1327. if (ret) {
  1328. dev_err(dev, "unsupported DMA mask\n");
  1329. return ret;
  1330. }
  1331. priv->ring_base = dmam_alloc_coherent(dev, MTK_STAR_DMA_SIZE,
  1332. &priv->dma_addr,
  1333. GFP_KERNEL | GFP_DMA);
  1334. if (!priv->ring_base)
  1335. return -ENOMEM;
  1336. mtk_star_nic_disable_pd(priv);
  1337. mtk_star_init_config(priv);
  1338. ret = mtk_star_mdio_init(ndev);
  1339. if (ret)
  1340. return ret;
  1341. ret = platform_get_ethdev_address(dev, ndev);
  1342. if (ret || !is_valid_ether_addr(ndev->dev_addr))
  1343. eth_hw_addr_random(ndev);
  1344. ndev->netdev_ops = &mtk_star_netdev_ops;
  1345. ndev->ethtool_ops = &mtk_star_ethtool_ops;
  1346. netif_napi_add(ndev, &priv->rx_napi, mtk_star_rx_poll);
  1347. netif_napi_add_tx(ndev, &priv->tx_napi, mtk_star_tx_poll);
  1348. phydev = of_phy_find_device(priv->phy_node);
  1349. if (phydev) {
  1350. phydev->mac_managed_pm = true;
  1351. put_device(&phydev->mdio.dev);
  1352. }
  1353. return devm_register_netdev(dev, ndev);
  1354. }
  1355. #ifdef CONFIG_OF
  1356. static int mt8516_set_interface_mode(struct net_device *ndev)
  1357. {
  1358. struct mtk_star_priv *priv = netdev_priv(ndev);
  1359. struct device *dev = mtk_star_get_dev(priv);
  1360. unsigned int intf_val, ret, rmii_rxc;
  1361. switch (priv->phy_intf) {
  1362. case PHY_INTERFACE_MODE_MII:
  1363. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_MII;
  1364. rmii_rxc = 0;
  1365. break;
  1366. case PHY_INTERFACE_MODE_RMII:
  1367. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_RMII;
  1368. rmii_rxc = priv->rmii_rxc ? 0 : MTK_PERICFG_BIT_NIC_CFG_CON_CLK;
  1369. break;
  1370. default:
  1371. dev_err(dev, "This interface not supported\n");
  1372. return -EINVAL;
  1373. }
  1374. ret = regmap_update_bits(priv->pericfg,
  1375. MTK_PERICFG_REG_NIC_CFG1_CON,
  1376. MTK_PERICFG_BIT_NIC_CFG_CON_CLK,
  1377. rmii_rxc);
  1378. if (ret)
  1379. return ret;
  1380. return regmap_update_bits(priv->pericfg,
  1381. MTK_PERICFG_REG_NIC_CFG0_CON,
  1382. MTK_PERICFG_REG_NIC_CFG_CON_CFG_INTF,
  1383. intf_val);
  1384. }
  1385. static int mt8365_set_interface_mode(struct net_device *ndev)
  1386. {
  1387. struct mtk_star_priv *priv = netdev_priv(ndev);
  1388. struct device *dev = mtk_star_get_dev(priv);
  1389. unsigned int intf_val;
  1390. switch (priv->phy_intf) {
  1391. case PHY_INTERFACE_MODE_MII:
  1392. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_MII;
  1393. break;
  1394. case PHY_INTERFACE_MODE_RMII:
  1395. intf_val = MTK_PERICFG_BIT_NIC_CFG_CON_RMII;
  1396. intf_val |= priv->rmii_rxc ? 0 : MTK_PERICFG_BIT_NIC_CFG_CON_CLK_V2;
  1397. break;
  1398. default:
  1399. dev_err(dev, "This interface not supported\n");
  1400. return -EINVAL;
  1401. }
  1402. return regmap_update_bits(priv->pericfg,
  1403. MTK_PERICFG_REG_NIC_CFG_CON_V2,
  1404. MTK_PERICFG_REG_NIC_CFG_CON_CFG_INTF |
  1405. MTK_PERICFG_BIT_NIC_CFG_CON_CLK_V2,
  1406. intf_val);
  1407. }
  1408. static const struct mtk_star_compat mtk_star_mt8516_compat = {
  1409. .set_interface_mode = mt8516_set_interface_mode,
  1410. .bit_clk_div = MTK_STAR_BIT_CLK_DIV_10,
  1411. };
  1412. static const struct mtk_star_compat mtk_star_mt8365_compat = {
  1413. .set_interface_mode = mt8365_set_interface_mode,
  1414. .bit_clk_div = MTK_STAR_BIT_CLK_DIV_50,
  1415. };
  1416. static const struct of_device_id mtk_star_of_match[] = {
  1417. { .compatible = "mediatek,mt8516-eth",
  1418. .data = &mtk_star_mt8516_compat },
  1419. { .compatible = "mediatek,mt8518-eth",
  1420. .data = &mtk_star_mt8516_compat },
  1421. { .compatible = "mediatek,mt8175-eth",
  1422. .data = &mtk_star_mt8516_compat },
  1423. { .compatible = "mediatek,mt8365-eth",
  1424. .data = &mtk_star_mt8365_compat },
  1425. { }
  1426. };
  1427. MODULE_DEVICE_TABLE(of, mtk_star_of_match);
  1428. #endif
  1429. static SIMPLE_DEV_PM_OPS(mtk_star_pm_ops,
  1430. mtk_star_suspend, mtk_star_resume);
  1431. static struct platform_driver mtk_star_driver = {
  1432. .driver = {
  1433. .name = MTK_STAR_DRVNAME,
  1434. .pm = &mtk_star_pm_ops,
  1435. .of_match_table = of_match_ptr(mtk_star_of_match),
  1436. },
  1437. .probe = mtk_star_probe,
  1438. };
  1439. module_platform_driver(mtk_star_driver);
  1440. MODULE_AUTHOR("Bartosz Golaszewski <bgolaszewski@baylibre.com>");
  1441. MODULE_DESCRIPTION("Mediatek STAR Ethernet MAC Driver");
  1442. MODULE_LICENSE("GPL");