rtase_main.c 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315
  1. // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
  2. /*
  3. * rtase is the Linux device driver released for Realtek Automotive Switch
  4. * controllers with PCI-Express interface.
  5. *
  6. * Copyright(c) 2024 Realtek Semiconductor Corp.
  7. *
  8. * Below is a simplified block diagram of the chip and its relevant interfaces.
  9. *
  10. * *************************
  11. * * *
  12. * * CPU network device *
  13. * * *
  14. * * +-------------+ *
  15. * * | PCIE Host | *
  16. * ***********++************
  17. * ||
  18. * PCIE
  19. * ||
  20. * ********************++**********************
  21. * * | PCIE Endpoint | *
  22. * * +---------------+ *
  23. * * | GMAC | *
  24. * * +--++--+ Realtek *
  25. * * || RTL90xx Series *
  26. * * || *
  27. * * +-------------++----------------+ *
  28. * * | | MAC | | *
  29. * * | +-----+ | *
  30. * * | | *
  31. * * | Ethernet Switch Core | *
  32. * * | | *
  33. * * | +-----+ +-----+ | *
  34. * * | | MAC |...........| MAC | | *
  35. * * +---+-----+-----------+-----+---+ *
  36. * * | PHY |...........| PHY | *
  37. * * +--++-+ +--++-+ *
  38. * *************||****************||***********
  39. *
  40. * The block of the Realtek RTL90xx series is our entire chip architecture,
  41. * the GMAC is connected to the switch core, and there is no PHY in between.
  42. * In addition, this driver is mainly used to control GMAC, but does not
  43. * control the switch core, so it is not the same as DSA. Linux only plays
  44. * the role of a normal leaf node in this model.
  45. */
  46. #include <linux/crc32.h>
  47. #include <linux/dma-mapping.h>
  48. #include <linux/etherdevice.h>
  49. #include <linux/if_vlan.h>
  50. #include <linux/in.h>
  51. #include <linux/init.h>
  52. #include <linux/interrupt.h>
  53. #include <linux/io.h>
  54. #include <linux/iopoll.h>
  55. #include <linux/ip.h>
  56. #include <linux/ipv6.h>
  57. #include <linux/mdio.h>
  58. #include <linux/module.h>
  59. #include <linux/netdevice.h>
  60. #include <linux/pci.h>
  61. #include <linux/pm_runtime.h>
  62. #include <linux/prefetch.h>
  63. #include <linux/rtnetlink.h>
  64. #include <linux/tcp.h>
  65. #include <asm/irq.h>
  66. #include <net/ip6_checksum.h>
  67. #include <net/netdev_queues.h>
  68. #include <net/page_pool/helpers.h>
  69. #include <net/pkt_cls.h>
  70. #include "rtase.h"
  71. #define RTK_OPTS1_DEBUG_VALUE 0x0BADBEEF
  72. #define RTK_MAGIC_NUMBER 0x0BADBADBADBADBAD
  73. static const struct pci_device_id rtase_pci_tbl[] = {
  74. {PCI_VDEVICE(REALTEK, 0x906A)},
  75. {}
  76. };
  77. MODULE_DEVICE_TABLE(pci, rtase_pci_tbl);
  78. MODULE_AUTHOR("Realtek ARD Software Team");
  79. MODULE_DESCRIPTION("Network Driver for the PCIe interface of Realtek Automotive Ethernet Switch");
  80. MODULE_LICENSE("Dual BSD/GPL");
  81. struct rtase_counters {
  82. __le64 tx_packets;
  83. __le64 rx_packets;
  84. __le64 tx_errors;
  85. __le32 rx_errors;
  86. __le16 rx_missed;
  87. __le16 align_errors;
  88. __le32 tx_one_collision;
  89. __le32 tx_multi_collision;
  90. __le64 rx_unicast;
  91. __le64 rx_broadcast;
  92. __le32 rx_multicast;
  93. __le16 tx_aborted;
  94. __le16 tx_underrun;
  95. } __packed;
  96. static void rtase_w8(const struct rtase_private *tp, u16 reg, u8 val8)
  97. {
  98. writeb(val8, tp->mmio_addr + reg);
  99. }
  100. static void rtase_w16(const struct rtase_private *tp, u16 reg, u16 val16)
  101. {
  102. writew(val16, tp->mmio_addr + reg);
  103. }
  104. static void rtase_w32(const struct rtase_private *tp, u16 reg, u32 val32)
  105. {
  106. writel(val32, tp->mmio_addr + reg);
  107. }
  108. static u8 rtase_r8(const struct rtase_private *tp, u16 reg)
  109. {
  110. return readb(tp->mmio_addr + reg);
  111. }
  112. static u16 rtase_r16(const struct rtase_private *tp, u16 reg)
  113. {
  114. return readw(tp->mmio_addr + reg);
  115. }
  116. static u32 rtase_r32(const struct rtase_private *tp, u16 reg)
  117. {
  118. return readl(tp->mmio_addr + reg);
  119. }
  120. static void rtase_free_desc(struct rtase_private *tp)
  121. {
  122. struct pci_dev *pdev = tp->pdev;
  123. u32 i;
  124. for (i = 0; i < tp->func_tx_queue_num; i++) {
  125. if (!tp->tx_ring[i].desc)
  126. continue;
  127. dma_free_coherent(&pdev->dev, RTASE_TX_RING_DESC_SIZE,
  128. tp->tx_ring[i].desc,
  129. tp->tx_ring[i].phy_addr);
  130. tp->tx_ring[i].desc = NULL;
  131. }
  132. for (i = 0; i < tp->func_rx_queue_num; i++) {
  133. if (!tp->rx_ring[i].desc)
  134. continue;
  135. dma_free_coherent(&pdev->dev, RTASE_RX_RING_DESC_SIZE,
  136. tp->rx_ring[i].desc,
  137. tp->rx_ring[i].phy_addr);
  138. tp->rx_ring[i].desc = NULL;
  139. }
  140. }
  141. static int rtase_alloc_desc(struct rtase_private *tp)
  142. {
  143. struct pci_dev *pdev = tp->pdev;
  144. u32 i;
  145. /* rx and tx descriptors needs 256 bytes alignment.
  146. * dma_alloc_coherent provides more.
  147. */
  148. for (i = 0; i < tp->func_tx_queue_num; i++) {
  149. tp->tx_ring[i].desc =
  150. dma_alloc_coherent(&pdev->dev,
  151. RTASE_TX_RING_DESC_SIZE,
  152. &tp->tx_ring[i].phy_addr,
  153. GFP_KERNEL);
  154. if (!tp->tx_ring[i].desc)
  155. goto err_out;
  156. }
  157. for (i = 0; i < tp->func_rx_queue_num; i++) {
  158. tp->rx_ring[i].desc =
  159. dma_alloc_coherent(&pdev->dev,
  160. RTASE_RX_RING_DESC_SIZE,
  161. &tp->rx_ring[i].phy_addr,
  162. GFP_KERNEL);
  163. if (!tp->rx_ring[i].desc)
  164. goto err_out;
  165. }
  166. return 0;
  167. err_out:
  168. rtase_free_desc(tp);
  169. return -ENOMEM;
  170. }
  171. static void rtase_unmap_tx_skb(struct pci_dev *pdev, u32 len,
  172. struct rtase_tx_desc *desc)
  173. {
  174. dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), len,
  175. DMA_TO_DEVICE);
  176. desc->opts1 = cpu_to_le32(RTK_OPTS1_DEBUG_VALUE);
  177. desc->opts2 = 0x00;
  178. desc->addr = cpu_to_le64(RTK_MAGIC_NUMBER);
  179. }
  180. static void rtase_tx_clear_range(struct rtase_ring *ring, u32 start, u32 n)
  181. {
  182. struct rtase_tx_desc *desc_base = ring->desc;
  183. struct rtase_private *tp = ring->ivec->tp;
  184. u32 i;
  185. for (i = 0; i < n; i++) {
  186. u32 entry = (start + i) % RTASE_NUM_DESC;
  187. struct rtase_tx_desc *desc = desc_base + entry;
  188. u32 len = ring->mis.len[entry];
  189. struct sk_buff *skb;
  190. if (len == 0)
  191. continue;
  192. rtase_unmap_tx_skb(tp->pdev, len, desc);
  193. ring->mis.len[entry] = 0;
  194. skb = ring->skbuff[entry];
  195. if (!skb)
  196. continue;
  197. tp->stats.tx_dropped++;
  198. dev_kfree_skb_any(skb);
  199. ring->skbuff[entry] = NULL;
  200. }
  201. }
  202. static void rtase_tx_clear(struct rtase_private *tp)
  203. {
  204. struct rtase_ring *ring;
  205. u16 i;
  206. for (i = 0; i < tp->func_tx_queue_num; i++) {
  207. ring = &tp->tx_ring[i];
  208. rtase_tx_clear_range(ring, ring->dirty_idx, RTASE_NUM_DESC);
  209. ring->cur_idx = 0;
  210. ring->dirty_idx = 0;
  211. }
  212. }
  213. static void rtase_mark_to_asic(union rtase_rx_desc *desc, u32 rx_buf_sz)
  214. {
  215. u32 eor = le32_to_cpu(desc->desc_cmd.opts1) & RTASE_RING_END;
  216. desc->desc_status.opts2 = 0;
  217. /* force memory writes to complete before releasing descriptor */
  218. dma_wmb();
  219. WRITE_ONCE(desc->desc_cmd.opts1,
  220. cpu_to_le32(RTASE_DESC_OWN | eor | rx_buf_sz));
  221. }
  222. static u32 rtase_tx_avail(struct rtase_ring *ring)
  223. {
  224. return READ_ONCE(ring->dirty_idx) + RTASE_NUM_DESC -
  225. READ_ONCE(ring->cur_idx);
  226. }
  227. static int tx_handler(struct rtase_ring *ring, int budget)
  228. {
  229. const struct rtase_private *tp = ring->ivec->tp;
  230. struct net_device *dev = tp->dev;
  231. u32 dirty_tx, tx_left;
  232. u32 bytes_compl = 0;
  233. u32 pkts_compl = 0;
  234. int workdone = 0;
  235. dirty_tx = ring->dirty_idx;
  236. tx_left = READ_ONCE(ring->cur_idx) - dirty_tx;
  237. while (tx_left > 0) {
  238. u32 entry = dirty_tx % RTASE_NUM_DESC;
  239. struct rtase_tx_desc *desc = ring->desc +
  240. sizeof(struct rtase_tx_desc) * entry;
  241. u32 status;
  242. status = le32_to_cpu(desc->opts1);
  243. if (status & RTASE_DESC_OWN)
  244. break;
  245. rtase_unmap_tx_skb(tp->pdev, ring->mis.len[entry], desc);
  246. ring->mis.len[entry] = 0;
  247. if (ring->skbuff[entry]) {
  248. pkts_compl++;
  249. bytes_compl += ring->skbuff[entry]->len;
  250. napi_consume_skb(ring->skbuff[entry], budget);
  251. ring->skbuff[entry] = NULL;
  252. }
  253. dirty_tx++;
  254. tx_left--;
  255. workdone++;
  256. if (workdone == RTASE_TX_BUDGET_DEFAULT)
  257. break;
  258. }
  259. if (ring->dirty_idx != dirty_tx) {
  260. dev_sw_netstats_tx_add(dev, pkts_compl, bytes_compl);
  261. WRITE_ONCE(ring->dirty_idx, dirty_tx);
  262. netif_subqueue_completed_wake(dev, ring->index, pkts_compl,
  263. bytes_compl,
  264. rtase_tx_avail(ring),
  265. RTASE_TX_START_THRS);
  266. if (ring->cur_idx != dirty_tx)
  267. rtase_w8(tp, RTASE_TPPOLL, BIT(ring->index));
  268. }
  269. return 0;
  270. }
  271. static void rtase_tx_desc_init(struct rtase_private *tp, u16 idx)
  272. {
  273. struct rtase_ring *ring = &tp->tx_ring[idx];
  274. struct rtase_tx_desc *desc;
  275. u32 i;
  276. memset(ring->desc, 0x0, RTASE_TX_RING_DESC_SIZE);
  277. memset(ring->skbuff, 0x0, sizeof(ring->skbuff));
  278. ring->cur_idx = 0;
  279. ring->dirty_idx = 0;
  280. ring->index = idx;
  281. ring->alloc_fail = 0;
  282. for (i = 0; i < RTASE_NUM_DESC; i++) {
  283. ring->mis.len[i] = 0;
  284. if ((RTASE_NUM_DESC - 1) == i) {
  285. desc = ring->desc + sizeof(struct rtase_tx_desc) * i;
  286. desc->opts1 = cpu_to_le32(RTASE_RING_END);
  287. }
  288. }
  289. ring->ring_handler = tx_handler;
  290. if (idx < 4) {
  291. ring->ivec = &tp->int_vector[idx];
  292. list_add_tail(&ring->ring_entry,
  293. &tp->int_vector[idx].ring_list);
  294. } else {
  295. ring->ivec = &tp->int_vector[0];
  296. list_add_tail(&ring->ring_entry, &tp->int_vector[0].ring_list);
  297. }
  298. }
  299. static void rtase_map_to_asic(union rtase_rx_desc *desc, dma_addr_t mapping,
  300. u32 rx_buf_sz)
  301. {
  302. desc->desc_cmd.addr = cpu_to_le64(mapping);
  303. rtase_mark_to_asic(desc, rx_buf_sz);
  304. }
  305. static void rtase_make_unusable_by_asic(union rtase_rx_desc *desc)
  306. {
  307. desc->desc_cmd.addr = cpu_to_le64(RTK_MAGIC_NUMBER);
  308. desc->desc_cmd.opts1 &= ~cpu_to_le32(RTASE_DESC_OWN | RSVD_MASK);
  309. }
  310. static int rtase_alloc_rx_data_buf(struct rtase_ring *ring,
  311. void **p_data_buf,
  312. union rtase_rx_desc *desc,
  313. dma_addr_t *rx_phy_addr)
  314. {
  315. struct rtase_int_vector *ivec = ring->ivec;
  316. const struct rtase_private *tp = ivec->tp;
  317. dma_addr_t mapping;
  318. struct page *page;
  319. page = page_pool_dev_alloc_pages(tp->page_pool);
  320. if (!page) {
  321. ring->alloc_fail++;
  322. goto err_out;
  323. }
  324. *p_data_buf = page_address(page);
  325. mapping = page_pool_get_dma_addr(page);
  326. *rx_phy_addr = mapping;
  327. rtase_map_to_asic(desc, mapping, tp->rx_buf_sz);
  328. return 0;
  329. err_out:
  330. rtase_make_unusable_by_asic(desc);
  331. return -ENOMEM;
  332. }
  333. static u32 rtase_rx_ring_fill(struct rtase_ring *ring, u32 ring_start,
  334. u32 ring_end)
  335. {
  336. union rtase_rx_desc *desc_base = ring->desc;
  337. u32 cur;
  338. for (cur = ring_start; ring_end - cur > 0; cur++) {
  339. u32 i = cur % RTASE_NUM_DESC;
  340. union rtase_rx_desc *desc = desc_base + i;
  341. int ret;
  342. if (ring->data_buf[i])
  343. continue;
  344. ret = rtase_alloc_rx_data_buf(ring, &ring->data_buf[i], desc,
  345. &ring->mis.data_phy_addr[i]);
  346. if (ret)
  347. break;
  348. }
  349. return cur - ring_start;
  350. }
  351. static void rtase_mark_as_last_descriptor(union rtase_rx_desc *desc)
  352. {
  353. desc->desc_cmd.opts1 |= cpu_to_le32(RTASE_RING_END);
  354. }
  355. static void rtase_rx_ring_clear(struct page_pool *page_pool,
  356. struct rtase_ring *ring)
  357. {
  358. union rtase_rx_desc *desc;
  359. struct page *page;
  360. u32 i;
  361. for (i = 0; i < RTASE_NUM_DESC; i++) {
  362. desc = ring->desc + sizeof(union rtase_rx_desc) * i;
  363. page = virt_to_head_page(ring->data_buf[i]);
  364. if (ring->data_buf[i])
  365. page_pool_put_full_page(page_pool, page, true);
  366. rtase_make_unusable_by_asic(desc);
  367. }
  368. }
  369. static int rtase_fragmented_frame(u32 status)
  370. {
  371. return (status & (RTASE_RX_FIRST_FRAG | RTASE_RX_LAST_FRAG)) !=
  372. (RTASE_RX_FIRST_FRAG | RTASE_RX_LAST_FRAG);
  373. }
  374. static void rtase_rx_csum(const struct rtase_private *tp, struct sk_buff *skb,
  375. const union rtase_rx_desc *desc)
  376. {
  377. u32 opts2 = le32_to_cpu(desc->desc_status.opts2);
  378. /* rx csum offload */
  379. if (((opts2 & RTASE_RX_V4F) && !(opts2 & RTASE_RX_IPF)) ||
  380. (opts2 & RTASE_RX_V6F)) {
  381. if (((opts2 & RTASE_RX_TCPT) && !(opts2 & RTASE_RX_TCPF)) ||
  382. ((opts2 & RTASE_RX_UDPT) && !(opts2 & RTASE_RX_UDPF)))
  383. skb->ip_summed = CHECKSUM_UNNECESSARY;
  384. else
  385. skb->ip_summed = CHECKSUM_NONE;
  386. } else {
  387. skb->ip_summed = CHECKSUM_NONE;
  388. }
  389. }
  390. static void rtase_rx_vlan_skb(union rtase_rx_desc *desc, struct sk_buff *skb)
  391. {
  392. u32 opts2 = le32_to_cpu(desc->desc_status.opts2);
  393. if (!(opts2 & RTASE_RX_VLAN_TAG))
  394. return;
  395. __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
  396. swab16(opts2 & RTASE_VLAN_TAG_MASK));
  397. }
  398. static void rtase_rx_skb(const struct rtase_ring *ring, struct sk_buff *skb)
  399. {
  400. struct rtase_int_vector *ivec = ring->ivec;
  401. napi_gro_receive(&ivec->napi, skb);
  402. }
  403. static int rx_handler(struct rtase_ring *ring, int budget)
  404. {
  405. union rtase_rx_desc *desc_base = ring->desc;
  406. u32 pkt_size, cur_rx, delta, entry, status;
  407. struct rtase_private *tp = ring->ivec->tp;
  408. struct net_device *dev = tp->dev;
  409. union rtase_rx_desc *desc;
  410. struct sk_buff *skb;
  411. int workdone = 0;
  412. cur_rx = ring->cur_idx;
  413. entry = cur_rx % RTASE_NUM_DESC;
  414. desc = &desc_base[entry];
  415. while (workdone < budget) {
  416. status = le32_to_cpu(desc->desc_status.opts1);
  417. if (status & RTASE_DESC_OWN)
  418. break;
  419. /* This barrier is needed to keep us from reading
  420. * any other fields out of the rx descriptor until
  421. * we know the status of RTASE_DESC_OWN
  422. */
  423. dma_rmb();
  424. if (unlikely(status & RTASE_RX_RES)) {
  425. if (net_ratelimit())
  426. netdev_warn(dev, "Rx ERROR. status = %08x\n",
  427. status);
  428. tp->stats.rx_errors++;
  429. if (status & (RTASE_RX_RWT | RTASE_RX_RUNT))
  430. tp->stats.rx_length_errors++;
  431. if (status & RTASE_RX_CRC)
  432. tp->stats.rx_crc_errors++;
  433. if (dev->features & NETIF_F_RXALL)
  434. goto process_pkt;
  435. rtase_mark_to_asic(desc, tp->rx_buf_sz);
  436. goto skip_process_pkt;
  437. }
  438. process_pkt:
  439. pkt_size = status & RTASE_RX_PKT_SIZE_MASK;
  440. if (likely(!(dev->features & NETIF_F_RXFCS)))
  441. pkt_size -= ETH_FCS_LEN;
  442. /* The driver does not support incoming fragmented frames.
  443. * They are seen as a symptom of over-mtu sized frames.
  444. */
  445. if (unlikely(rtase_fragmented_frame(status))) {
  446. tp->stats.rx_dropped++;
  447. tp->stats.rx_length_errors++;
  448. rtase_mark_to_asic(desc, tp->rx_buf_sz);
  449. goto skip_process_pkt;
  450. }
  451. dma_sync_single_for_cpu(&tp->pdev->dev,
  452. ring->mis.data_phy_addr[entry],
  453. tp->rx_buf_sz, DMA_FROM_DEVICE);
  454. skb = build_skb(ring->data_buf[entry], PAGE_SIZE);
  455. if (!skb) {
  456. tp->stats.rx_dropped++;
  457. rtase_mark_to_asic(desc, tp->rx_buf_sz);
  458. goto skip_process_pkt;
  459. }
  460. ring->data_buf[entry] = NULL;
  461. if (dev->features & NETIF_F_RXCSUM)
  462. rtase_rx_csum(tp, skb, desc);
  463. skb_put(skb, pkt_size);
  464. skb_mark_for_recycle(skb);
  465. skb->protocol = eth_type_trans(skb, dev);
  466. if (skb->pkt_type == PACKET_MULTICAST)
  467. tp->stats.multicast++;
  468. rtase_rx_vlan_skb(desc, skb);
  469. rtase_rx_skb(ring, skb);
  470. dev_sw_netstats_rx_add(dev, pkt_size);
  471. skip_process_pkt:
  472. workdone++;
  473. cur_rx++;
  474. entry = cur_rx % RTASE_NUM_DESC;
  475. desc = ring->desc + sizeof(union rtase_rx_desc) * entry;
  476. }
  477. ring->cur_idx = cur_rx;
  478. delta = rtase_rx_ring_fill(ring, ring->dirty_idx, ring->cur_idx);
  479. ring->dirty_idx += delta;
  480. return workdone;
  481. }
  482. static void rtase_rx_desc_init(struct rtase_private *tp, u16 idx)
  483. {
  484. struct rtase_ring *ring = &tp->rx_ring[idx];
  485. u16 i;
  486. memset(ring->desc, 0x0, RTASE_RX_RING_DESC_SIZE);
  487. memset(ring->data_buf, 0x0, sizeof(ring->data_buf));
  488. ring->cur_idx = 0;
  489. ring->dirty_idx = 0;
  490. ring->index = idx;
  491. ring->alloc_fail = 0;
  492. for (i = 0; i < RTASE_NUM_DESC; i++)
  493. ring->mis.data_phy_addr[i] = 0;
  494. ring->ring_handler = rx_handler;
  495. ring->ivec = &tp->int_vector[idx];
  496. list_add_tail(&ring->ring_entry, &tp->int_vector[idx].ring_list);
  497. }
  498. static void rtase_rx_clear(struct rtase_private *tp)
  499. {
  500. u32 i;
  501. for (i = 0; i < tp->func_rx_queue_num; i++)
  502. rtase_rx_ring_clear(tp->page_pool, &tp->rx_ring[i]);
  503. page_pool_destroy(tp->page_pool);
  504. tp->page_pool = NULL;
  505. }
  506. static int rtase_init_ring(const struct net_device *dev)
  507. {
  508. struct rtase_private *tp = netdev_priv(dev);
  509. struct page_pool_params pp_params = { 0 };
  510. struct page_pool *page_pool;
  511. u32 num;
  512. u16 i;
  513. pp_params.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;
  514. pp_params.order = 0;
  515. pp_params.pool_size = RTASE_NUM_DESC * tp->func_rx_queue_num;
  516. pp_params.nid = dev_to_node(&tp->pdev->dev);
  517. pp_params.dev = &tp->pdev->dev;
  518. pp_params.dma_dir = DMA_FROM_DEVICE;
  519. pp_params.max_len = PAGE_SIZE;
  520. pp_params.offset = 0;
  521. page_pool = page_pool_create(&pp_params);
  522. if (IS_ERR(page_pool)) {
  523. netdev_err(tp->dev, "failed to create page pool\n");
  524. return -ENOMEM;
  525. }
  526. tp->page_pool = page_pool;
  527. for (i = 0; i < tp->func_tx_queue_num; i++)
  528. rtase_tx_desc_init(tp, i);
  529. for (i = 0; i < tp->func_rx_queue_num; i++) {
  530. rtase_rx_desc_init(tp, i);
  531. num = rtase_rx_ring_fill(&tp->rx_ring[i], 0, RTASE_NUM_DESC);
  532. if (num != RTASE_NUM_DESC)
  533. goto err_out;
  534. rtase_mark_as_last_descriptor(tp->rx_ring[i].desc +
  535. sizeof(union rtase_rx_desc) *
  536. (RTASE_NUM_DESC - 1));
  537. }
  538. return 0;
  539. err_out:
  540. rtase_rx_clear(tp);
  541. return -ENOMEM;
  542. }
  543. static void rtase_interrupt_mitigation(const struct rtase_private *tp)
  544. {
  545. u32 i;
  546. for (i = 0; i < tp->func_tx_queue_num; i++)
  547. rtase_w16(tp, RTASE_INT_MITI_TX + i * 2, tp->tx_int_mit);
  548. for (i = 0; i < tp->func_rx_queue_num; i++)
  549. rtase_w16(tp, RTASE_INT_MITI_RX + i * 2, tp->rx_int_mit);
  550. }
  551. static void rtase_tally_counter_addr_fill(const struct rtase_private *tp)
  552. {
  553. rtase_w32(tp, RTASE_DTCCR4, upper_32_bits(tp->tally_paddr));
  554. rtase_w32(tp, RTASE_DTCCR0, lower_32_bits(tp->tally_paddr));
  555. }
  556. static void rtase_tally_counter_clear(const struct rtase_private *tp)
  557. {
  558. u32 cmd = lower_32_bits(tp->tally_paddr);
  559. rtase_w32(tp, RTASE_DTCCR4, upper_32_bits(tp->tally_paddr));
  560. rtase_w32(tp, RTASE_DTCCR0, cmd | RTASE_COUNTER_RESET);
  561. }
  562. static void rtase_desc_addr_fill(const struct rtase_private *tp)
  563. {
  564. const struct rtase_ring *ring;
  565. u16 i, cmd, val;
  566. int err;
  567. for (i = 0; i < tp->func_tx_queue_num; i++) {
  568. ring = &tp->tx_ring[i];
  569. rtase_w32(tp, RTASE_TX_DESC_ADDR0,
  570. lower_32_bits(ring->phy_addr));
  571. rtase_w32(tp, RTASE_TX_DESC_ADDR4,
  572. upper_32_bits(ring->phy_addr));
  573. cmd = i | RTASE_TX_DESC_CMD_WE | RTASE_TX_DESC_CMD_CS;
  574. rtase_w16(tp, RTASE_TX_DESC_COMMAND, cmd);
  575. err = read_poll_timeout(rtase_r16, val,
  576. !(val & RTASE_TX_DESC_CMD_CS), 10,
  577. 1000, false, tp,
  578. RTASE_TX_DESC_COMMAND);
  579. if (err == -ETIMEDOUT)
  580. netdev_err(tp->dev,
  581. "error occurred in fill tx descriptor\n");
  582. }
  583. for (i = 0; i < tp->func_rx_queue_num; i++) {
  584. ring = &tp->rx_ring[i];
  585. if (i == 0) {
  586. rtase_w32(tp, RTASE_Q0_RX_DESC_ADDR0,
  587. lower_32_bits(ring->phy_addr));
  588. rtase_w32(tp, RTASE_Q0_RX_DESC_ADDR4,
  589. upper_32_bits(ring->phy_addr));
  590. } else {
  591. rtase_w32(tp, (RTASE_Q1_RX_DESC_ADDR0 + ((i - 1) * 8)),
  592. lower_32_bits(ring->phy_addr));
  593. rtase_w32(tp, (RTASE_Q1_RX_DESC_ADDR4 + ((i - 1) * 8)),
  594. upper_32_bits(ring->phy_addr));
  595. }
  596. }
  597. }
  598. static void rtase_hw_set_features(const struct net_device *dev,
  599. netdev_features_t features)
  600. {
  601. const struct rtase_private *tp = netdev_priv(dev);
  602. u16 rx_config, val;
  603. rx_config = rtase_r16(tp, RTASE_RX_CONFIG_0);
  604. if (features & NETIF_F_RXALL)
  605. rx_config |= (RTASE_ACCEPT_ERR | RTASE_ACCEPT_RUNT);
  606. else
  607. rx_config &= ~(RTASE_ACCEPT_ERR | RTASE_ACCEPT_RUNT);
  608. rtase_w16(tp, RTASE_RX_CONFIG_0, rx_config);
  609. val = rtase_r16(tp, RTASE_CPLUS_CMD);
  610. if (features & NETIF_F_RXCSUM)
  611. rtase_w16(tp, RTASE_CPLUS_CMD, val | RTASE_RX_CHKSUM);
  612. else
  613. rtase_w16(tp, RTASE_CPLUS_CMD, val & ~RTASE_RX_CHKSUM);
  614. rx_config = rtase_r16(tp, RTASE_RX_CONFIG_1);
  615. if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
  616. rx_config |= (RTASE_INNER_VLAN_DETAG_EN |
  617. RTASE_OUTER_VLAN_DETAG_EN);
  618. else
  619. rx_config &= ~(RTASE_INNER_VLAN_DETAG_EN |
  620. RTASE_OUTER_VLAN_DETAG_EN);
  621. rtase_w16(tp, RTASE_RX_CONFIG_1, rx_config);
  622. }
  623. static void rtase_hw_set_rx_packet_filter(struct net_device *dev)
  624. {
  625. u32 mc_filter[2] = { 0xFFFFFFFF, 0xFFFFFFFF };
  626. struct rtase_private *tp = netdev_priv(dev);
  627. u16 rx_mode;
  628. rx_mode = rtase_r16(tp, RTASE_RX_CONFIG_0) & ~RTASE_ACCEPT_MASK;
  629. rx_mode |= RTASE_ACCEPT_BROADCAST | RTASE_ACCEPT_MYPHYS;
  630. if (dev->flags & IFF_PROMISC) {
  631. rx_mode |= RTASE_ACCEPT_MULTICAST | RTASE_ACCEPT_ALLPHYS;
  632. } else if (dev->flags & IFF_ALLMULTI) {
  633. rx_mode |= RTASE_ACCEPT_MULTICAST;
  634. } else {
  635. struct netdev_hw_addr *hw_addr;
  636. mc_filter[0] = 0;
  637. mc_filter[1] = 0;
  638. netdev_for_each_mc_addr(hw_addr, dev) {
  639. u32 bit_nr = eth_hw_addr_crc(hw_addr);
  640. u32 idx = u32_get_bits(bit_nr, BIT(31));
  641. u32 bit = u32_get_bits(bit_nr,
  642. RTASE_MULTICAST_FILTER_MASK);
  643. mc_filter[idx] |= BIT(bit);
  644. rx_mode |= RTASE_ACCEPT_MULTICAST;
  645. }
  646. }
  647. if (dev->features & NETIF_F_RXALL)
  648. rx_mode |= RTASE_ACCEPT_ERR | RTASE_ACCEPT_RUNT;
  649. rtase_w32(tp, RTASE_MAR0, swab32(mc_filter[1]));
  650. rtase_w32(tp, RTASE_MAR1, swab32(mc_filter[0]));
  651. rtase_w16(tp, RTASE_RX_CONFIG_0, rx_mode);
  652. }
  653. static void rtase_irq_dis_and_clear(const struct rtase_private *tp)
  654. {
  655. const struct rtase_int_vector *ivec = &tp->int_vector[0];
  656. u32 val1;
  657. u16 val2;
  658. u8 i;
  659. rtase_w32(tp, ivec->imr_addr, 0);
  660. val1 = rtase_r32(tp, ivec->isr_addr);
  661. rtase_w32(tp, ivec->isr_addr, val1);
  662. for (i = 1; i < tp->int_nums; i++) {
  663. ivec = &tp->int_vector[i];
  664. rtase_w16(tp, ivec->imr_addr, 0);
  665. val2 = rtase_r16(tp, ivec->isr_addr);
  666. rtase_w16(tp, ivec->isr_addr, val2);
  667. }
  668. }
  669. static void rtase_poll_timeout(const struct rtase_private *tp, u32 cond,
  670. u32 sleep_us, u64 timeout_us, u16 reg)
  671. {
  672. int err;
  673. u8 val;
  674. err = read_poll_timeout(rtase_r8, val, val & cond, sleep_us,
  675. timeout_us, false, tp, reg);
  676. if (err == -ETIMEDOUT)
  677. netdev_err(tp->dev, "poll reg 0x00%x timeout\n", reg);
  678. }
  679. static void rtase_nic_reset(const struct net_device *dev)
  680. {
  681. const struct rtase_private *tp = netdev_priv(dev);
  682. u16 rx_config;
  683. u8 val;
  684. rx_config = rtase_r16(tp, RTASE_RX_CONFIG_0);
  685. rtase_w16(tp, RTASE_RX_CONFIG_0, rx_config & ~RTASE_ACCEPT_MASK);
  686. val = rtase_r8(tp, RTASE_MISC);
  687. rtase_w8(tp, RTASE_MISC, val | RTASE_RX_DV_GATE_EN);
  688. val = rtase_r8(tp, RTASE_CHIP_CMD);
  689. rtase_w8(tp, RTASE_CHIP_CMD, val | RTASE_STOP_REQ);
  690. mdelay(2);
  691. rtase_poll_timeout(tp, RTASE_STOP_REQ_DONE, 100, 150000,
  692. RTASE_CHIP_CMD);
  693. rtase_poll_timeout(tp, RTASE_TX_FIFO_EMPTY, 100, 100000,
  694. RTASE_FIFOR);
  695. rtase_poll_timeout(tp, RTASE_RX_FIFO_EMPTY, 100, 100000,
  696. RTASE_FIFOR);
  697. val = rtase_r8(tp, RTASE_CHIP_CMD);
  698. rtase_w8(tp, RTASE_CHIP_CMD, val & ~(RTASE_TE | RTASE_RE));
  699. val = rtase_r8(tp, RTASE_CHIP_CMD);
  700. rtase_w8(tp, RTASE_CHIP_CMD, val & ~RTASE_STOP_REQ);
  701. rtase_w16(tp, RTASE_RX_CONFIG_0, rx_config);
  702. }
  703. static void rtase_hw_reset(const struct net_device *dev)
  704. {
  705. const struct rtase_private *tp = netdev_priv(dev);
  706. rtase_irq_dis_and_clear(tp);
  707. rtase_nic_reset(dev);
  708. }
  709. static void rtase_set_rx_queue(const struct rtase_private *tp)
  710. {
  711. u16 reg_data;
  712. reg_data = rtase_r16(tp, RTASE_FCR);
  713. switch (tp->func_rx_queue_num) {
  714. case 1:
  715. u16p_replace_bits(&reg_data, 0x1, RTASE_FCR_RXQ_MASK);
  716. break;
  717. case 2:
  718. u16p_replace_bits(&reg_data, 0x2, RTASE_FCR_RXQ_MASK);
  719. break;
  720. case 4:
  721. u16p_replace_bits(&reg_data, 0x3, RTASE_FCR_RXQ_MASK);
  722. break;
  723. }
  724. rtase_w16(tp, RTASE_FCR, reg_data);
  725. }
  726. static void rtase_set_tx_queue(const struct rtase_private *tp)
  727. {
  728. u16 reg_data;
  729. reg_data = rtase_r16(tp, RTASE_TX_CONFIG_1);
  730. switch (tp->tx_queue_ctrl) {
  731. case 1:
  732. u16p_replace_bits(&reg_data, 0x0, RTASE_TC_MODE_MASK);
  733. break;
  734. case 2:
  735. u16p_replace_bits(&reg_data, 0x1, RTASE_TC_MODE_MASK);
  736. break;
  737. case 3:
  738. case 4:
  739. u16p_replace_bits(&reg_data, 0x2, RTASE_TC_MODE_MASK);
  740. break;
  741. default:
  742. u16p_replace_bits(&reg_data, 0x3, RTASE_TC_MODE_MASK);
  743. break;
  744. }
  745. rtase_w16(tp, RTASE_TX_CONFIG_1, reg_data);
  746. }
  747. static void rtase_hw_config(struct net_device *dev)
  748. {
  749. const struct rtase_private *tp = netdev_priv(dev);
  750. u32 reg_data32;
  751. u16 reg_data16;
  752. rtase_hw_reset(dev);
  753. /* set rx dma burst */
  754. reg_data16 = rtase_r16(tp, RTASE_RX_CONFIG_0);
  755. reg_data16 &= ~(RTASE_RX_SINGLE_TAG | RTASE_RX_SINGLE_FETCH);
  756. u16p_replace_bits(&reg_data16, RTASE_RX_DMA_BURST_256,
  757. RTASE_RX_MX_DMA_MASK);
  758. rtase_w16(tp, RTASE_RX_CONFIG_0, reg_data16);
  759. /* new rx descritpor */
  760. reg_data16 = rtase_r16(tp, RTASE_RX_CONFIG_1);
  761. reg_data16 |= RTASE_RX_NEW_DESC_FORMAT_EN | RTASE_PCIE_NEW_FLOW;
  762. u16p_replace_bits(&reg_data16, 0xF, RTASE_RX_MAX_FETCH_DESC_MASK);
  763. rtase_w16(tp, RTASE_RX_CONFIG_1, reg_data16);
  764. rtase_set_rx_queue(tp);
  765. rtase_interrupt_mitigation(tp);
  766. /* set tx dma burst size and interframe gap time */
  767. reg_data32 = rtase_r32(tp, RTASE_TX_CONFIG_0);
  768. u32p_replace_bits(&reg_data32, RTASE_TX_DMA_BURST_UNLIMITED,
  769. RTASE_TX_DMA_MASK);
  770. u32p_replace_bits(&reg_data32, RTASE_INTERFRAMEGAP,
  771. RTASE_TX_INTER_FRAME_GAP_MASK);
  772. rtase_w32(tp, RTASE_TX_CONFIG_0, reg_data32);
  773. /* new tx descriptor */
  774. reg_data16 = rtase_r16(tp, RTASE_TFUN_CTRL);
  775. rtase_w16(tp, RTASE_TFUN_CTRL, reg_data16 |
  776. RTASE_TX_NEW_DESC_FORMAT_EN);
  777. /* tx fetch desc number */
  778. rtase_w8(tp, RTASE_TDFNR, 0x10);
  779. /* tag num select */
  780. reg_data16 = rtase_r16(tp, RTASE_MTPS);
  781. u16p_replace_bits(&reg_data16, 0x4, RTASE_TAG_NUM_SEL_MASK);
  782. rtase_w16(tp, RTASE_MTPS, reg_data16);
  783. rtase_set_tx_queue(tp);
  784. rtase_w16(tp, RTASE_TOKSEL, 0x5555);
  785. rtase_tally_counter_addr_fill(tp);
  786. rtase_desc_addr_fill(tp);
  787. rtase_hw_set_features(dev, dev->features);
  788. /* enable flow control */
  789. reg_data16 = rtase_r16(tp, RTASE_CPLUS_CMD);
  790. reg_data16 |= (RTASE_FORCE_TXFLOW_EN | RTASE_FORCE_RXFLOW_EN);
  791. rtase_w16(tp, RTASE_CPLUS_CMD, reg_data16);
  792. /* set near fifo threshold - rx missed issue. */
  793. rtase_w16(tp, RTASE_RFIFONFULL, 0x190);
  794. rtase_w16(tp, RTASE_RMS, tp->rx_buf_sz);
  795. rtase_hw_set_rx_packet_filter(dev);
  796. }
  797. static void rtase_nic_enable(const struct net_device *dev)
  798. {
  799. const struct rtase_private *tp = netdev_priv(dev);
  800. u16 rcr = rtase_r16(tp, RTASE_RX_CONFIG_1);
  801. u8 val;
  802. rtase_w16(tp, RTASE_RX_CONFIG_1, rcr & ~RTASE_PCIE_RELOAD_EN);
  803. rtase_w16(tp, RTASE_RX_CONFIG_1, rcr | RTASE_PCIE_RELOAD_EN);
  804. val = rtase_r8(tp, RTASE_CHIP_CMD);
  805. rtase_w8(tp, RTASE_CHIP_CMD, val | RTASE_TE | RTASE_RE);
  806. val = rtase_r8(tp, RTASE_MISC);
  807. rtase_w8(tp, RTASE_MISC, val & ~RTASE_RX_DV_GATE_EN);
  808. }
  809. static void rtase_enable_hw_interrupt(const struct rtase_private *tp)
  810. {
  811. const struct rtase_int_vector *ivec = &tp->int_vector[0];
  812. u32 i;
  813. rtase_w32(tp, ivec->imr_addr, ivec->imr);
  814. for (i = 1; i < tp->int_nums; i++) {
  815. ivec = &tp->int_vector[i];
  816. rtase_w16(tp, ivec->imr_addr, ivec->imr);
  817. }
  818. }
  819. static void rtase_hw_start(const struct net_device *dev)
  820. {
  821. const struct rtase_private *tp = netdev_priv(dev);
  822. rtase_nic_enable(dev);
  823. rtase_enable_hw_interrupt(tp);
  824. }
  825. /* the interrupt handler does RXQ0 and TXQ0, TXQ4~7 interrutp status
  826. */
  827. static irqreturn_t rtase_interrupt(int irq, void *dev_instance)
  828. {
  829. const struct rtase_private *tp;
  830. struct rtase_int_vector *ivec;
  831. u32 status;
  832. ivec = dev_instance;
  833. tp = ivec->tp;
  834. status = rtase_r32(tp, ivec->isr_addr);
  835. rtase_w32(tp, ivec->imr_addr, 0x0);
  836. rtase_w32(tp, ivec->isr_addr, status & ~RTASE_FOVW);
  837. if (napi_schedule_prep(&ivec->napi))
  838. __napi_schedule(&ivec->napi);
  839. return IRQ_HANDLED;
  840. }
  841. /* the interrupt handler does RXQ1&TXQ1 or RXQ2&TXQ2 or RXQ3&TXQ3 interrupt
  842. * status according to interrupt vector
  843. */
  844. static irqreturn_t rtase_q_interrupt(int irq, void *dev_instance)
  845. {
  846. const struct rtase_private *tp;
  847. struct rtase_int_vector *ivec;
  848. u16 status;
  849. ivec = dev_instance;
  850. tp = ivec->tp;
  851. status = rtase_r16(tp, ivec->isr_addr);
  852. rtase_w16(tp, ivec->imr_addr, 0x0);
  853. rtase_w16(tp, ivec->isr_addr, status);
  854. if (napi_schedule_prep(&ivec->napi))
  855. __napi_schedule(&ivec->napi);
  856. return IRQ_HANDLED;
  857. }
  858. static int rtase_poll(struct napi_struct *napi, int budget)
  859. {
  860. const struct rtase_int_vector *ivec;
  861. const struct rtase_private *tp;
  862. struct rtase_ring *ring;
  863. int total_workdone = 0;
  864. ivec = container_of(napi, struct rtase_int_vector, napi);
  865. tp = ivec->tp;
  866. list_for_each_entry(ring, &ivec->ring_list, ring_entry)
  867. total_workdone += ring->ring_handler(ring, budget);
  868. if (total_workdone >= budget)
  869. return budget;
  870. if (napi_complete_done(napi, total_workdone)) {
  871. if (!ivec->index)
  872. rtase_w32(tp, ivec->imr_addr, ivec->imr);
  873. else
  874. rtase_w16(tp, ivec->imr_addr, ivec->imr);
  875. }
  876. return total_workdone;
  877. }
  878. static int rtase_open(struct net_device *dev)
  879. {
  880. struct rtase_private *tp = netdev_priv(dev);
  881. const struct pci_dev *pdev = tp->pdev;
  882. struct rtase_int_vector *ivec;
  883. u16 i = 0, j;
  884. int ret;
  885. ivec = &tp->int_vector[0];
  886. tp->rx_buf_sz = RTASE_RX_BUF_SIZE;
  887. ret = rtase_alloc_desc(tp);
  888. if (ret)
  889. return ret;
  890. ret = rtase_init_ring(dev);
  891. if (ret)
  892. goto err_free_all_allocated_mem;
  893. rtase_hw_config(dev);
  894. if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED) {
  895. ret = request_irq(ivec->irq, rtase_interrupt, 0,
  896. dev->name, ivec);
  897. if (ret)
  898. goto err_free_all_allocated_irq;
  899. /* request other interrupts to handle multiqueue */
  900. for (i = 1; i < tp->int_nums; i++) {
  901. ivec = &tp->int_vector[i];
  902. snprintf(ivec->name, sizeof(ivec->name), "%s_int%i",
  903. tp->dev->name, i);
  904. ret = request_irq(ivec->irq, rtase_q_interrupt, 0,
  905. ivec->name, ivec);
  906. if (ret)
  907. goto err_free_all_allocated_irq;
  908. }
  909. } else {
  910. ret = request_irq(pdev->irq, rtase_interrupt, 0, dev->name,
  911. ivec);
  912. if (ret)
  913. goto err_free_all_allocated_mem;
  914. }
  915. rtase_hw_start(dev);
  916. for (i = 0; i < tp->int_nums; i++) {
  917. ivec = &tp->int_vector[i];
  918. napi_enable(&ivec->napi);
  919. }
  920. netif_carrier_on(dev);
  921. netif_wake_queue(dev);
  922. return 0;
  923. err_free_all_allocated_irq:
  924. for (j = 0; j < i; j++)
  925. free_irq(tp->int_vector[j].irq, &tp->int_vector[j]);
  926. err_free_all_allocated_mem:
  927. rtase_free_desc(tp);
  928. return ret;
  929. }
  930. static void rtase_down(struct net_device *dev)
  931. {
  932. struct rtase_private *tp = netdev_priv(dev);
  933. struct rtase_int_vector *ivec;
  934. struct rtase_ring *ring, *tmp;
  935. u32 i;
  936. for (i = 0; i < tp->int_nums; i++) {
  937. ivec = &tp->int_vector[i];
  938. napi_disable(&ivec->napi);
  939. list_for_each_entry_safe(ring, tmp, &ivec->ring_list,
  940. ring_entry)
  941. list_del(&ring->ring_entry);
  942. }
  943. netif_tx_disable(dev);
  944. netif_carrier_off(dev);
  945. rtase_hw_reset(dev);
  946. rtase_tx_clear(tp);
  947. rtase_rx_clear(tp);
  948. }
  949. static int rtase_close(struct net_device *dev)
  950. {
  951. struct rtase_private *tp = netdev_priv(dev);
  952. const struct pci_dev *pdev = tp->pdev;
  953. u32 i;
  954. rtase_down(dev);
  955. if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED) {
  956. for (i = 0; i < tp->int_nums; i++)
  957. free_irq(tp->int_vector[i].irq, &tp->int_vector[i]);
  958. } else {
  959. free_irq(pdev->irq, &tp->int_vector[0]);
  960. }
  961. rtase_free_desc(tp);
  962. return 0;
  963. }
  964. static u32 rtase_tx_vlan_tag(const struct rtase_private *tp,
  965. const struct sk_buff *skb)
  966. {
  967. return (skb_vlan_tag_present(skb)) ?
  968. (RTASE_TX_VLAN_TAG | swab16(skb_vlan_tag_get(skb))) : 0x00;
  969. }
  970. static u32 rtase_tx_csum(struct sk_buff *skb, const struct net_device *dev)
  971. {
  972. u32 csum_cmd = 0;
  973. u8 ip_protocol;
  974. switch (vlan_get_protocol(skb)) {
  975. case htons(ETH_P_IP):
  976. csum_cmd = RTASE_TX_IPCS_C;
  977. ip_protocol = ip_hdr(skb)->protocol;
  978. break;
  979. case htons(ETH_P_IPV6):
  980. csum_cmd = RTASE_TX_IPV6F_C;
  981. ip_protocol = ipv6_hdr(skb)->nexthdr;
  982. break;
  983. default:
  984. ip_protocol = IPPROTO_RAW;
  985. break;
  986. }
  987. if (ip_protocol == IPPROTO_TCP)
  988. csum_cmd |= RTASE_TX_TCPCS_C;
  989. else if (ip_protocol == IPPROTO_UDP)
  990. csum_cmd |= RTASE_TX_UDPCS_C;
  991. csum_cmd |= u32_encode_bits(skb_transport_offset(skb),
  992. RTASE_TCPHO_MASK);
  993. return csum_cmd;
  994. }
  995. static int rtase_xmit_frags(struct rtase_ring *ring, struct sk_buff *skb,
  996. u32 opts1, u32 opts2)
  997. {
  998. const struct skb_shared_info *info = skb_shinfo(skb);
  999. const struct rtase_private *tp = ring->ivec->tp;
  1000. const u8 nr_frags = info->nr_frags;
  1001. struct rtase_tx_desc *txd = NULL;
  1002. u32 cur_frag, entry;
  1003. entry = ring->cur_idx;
  1004. for (cur_frag = 0; cur_frag < nr_frags; cur_frag++) {
  1005. const skb_frag_t *frag = &info->frags[cur_frag];
  1006. dma_addr_t mapping;
  1007. u32 status, len;
  1008. void *addr;
  1009. entry = (entry + 1) % RTASE_NUM_DESC;
  1010. txd = ring->desc + sizeof(struct rtase_tx_desc) * entry;
  1011. len = skb_frag_size(frag);
  1012. addr = skb_frag_address(frag);
  1013. mapping = dma_map_single(&tp->pdev->dev, addr, len,
  1014. DMA_TO_DEVICE);
  1015. if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
  1016. if (unlikely(net_ratelimit()))
  1017. netdev_err(tp->dev,
  1018. "Failed to map TX fragments DMA!\n");
  1019. goto err_out;
  1020. }
  1021. if (((entry + 1) % RTASE_NUM_DESC) == 0)
  1022. status = (opts1 | len | RTASE_RING_END);
  1023. else
  1024. status = opts1 | len;
  1025. if (cur_frag == (nr_frags - 1)) {
  1026. ring->skbuff[entry] = skb;
  1027. status |= RTASE_TX_LAST_FRAG;
  1028. }
  1029. ring->mis.len[entry] = len;
  1030. txd->addr = cpu_to_le64(mapping);
  1031. txd->opts2 = cpu_to_le32(opts2);
  1032. /* make sure the operating fields have been updated */
  1033. dma_wmb();
  1034. txd->opts1 = cpu_to_le32(status);
  1035. }
  1036. return cur_frag;
  1037. err_out:
  1038. rtase_tx_clear_range(ring, ring->cur_idx + 1, cur_frag);
  1039. return -EIO;
  1040. }
  1041. static netdev_tx_t rtase_start_xmit(struct sk_buff *skb,
  1042. struct net_device *dev)
  1043. {
  1044. struct skb_shared_info *shinfo = skb_shinfo(skb);
  1045. struct rtase_private *tp = netdev_priv(dev);
  1046. u32 q_idx, entry, len, opts1, opts2;
  1047. struct netdev_queue *tx_queue;
  1048. bool stop_queue, door_bell;
  1049. u32 mss = shinfo->gso_size;
  1050. struct rtase_tx_desc *txd;
  1051. struct rtase_ring *ring;
  1052. dma_addr_t mapping;
  1053. int frags;
  1054. /* multiqueues */
  1055. q_idx = skb_get_queue_mapping(skb);
  1056. ring = &tp->tx_ring[q_idx];
  1057. tx_queue = netdev_get_tx_queue(dev, q_idx);
  1058. if (unlikely(!rtase_tx_avail(ring))) {
  1059. if (net_ratelimit())
  1060. netdev_err(dev,
  1061. "BUG! Tx Ring full when queue awake!\n");
  1062. netif_stop_queue(dev);
  1063. return NETDEV_TX_BUSY;
  1064. }
  1065. entry = ring->cur_idx % RTASE_NUM_DESC;
  1066. txd = ring->desc + sizeof(struct rtase_tx_desc) * entry;
  1067. opts1 = RTASE_DESC_OWN;
  1068. opts2 = rtase_tx_vlan_tag(tp, skb);
  1069. /* tcp segmentation offload (or tcp large send) */
  1070. if (mss) {
  1071. if (shinfo->gso_type & SKB_GSO_TCPV4) {
  1072. opts1 |= RTASE_GIANT_SEND_V4;
  1073. } else if (shinfo->gso_type & SKB_GSO_TCPV6) {
  1074. if (skb_cow_head(skb, 0))
  1075. goto err_dma_0;
  1076. tcp_v6_gso_csum_prep(skb);
  1077. opts1 |= RTASE_GIANT_SEND_V6;
  1078. } else {
  1079. WARN_ON_ONCE(1);
  1080. }
  1081. opts1 |= u32_encode_bits(skb_transport_offset(skb),
  1082. RTASE_TCPHO_MASK);
  1083. opts2 |= u32_encode_bits(mss, RTASE_MSS_MASK);
  1084. } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
  1085. opts2 |= rtase_tx_csum(skb, dev);
  1086. }
  1087. frags = rtase_xmit_frags(ring, skb, opts1, opts2);
  1088. if (unlikely(frags < 0))
  1089. goto err_dma_0;
  1090. if (frags) {
  1091. len = skb_headlen(skb);
  1092. opts1 |= RTASE_TX_FIRST_FRAG;
  1093. } else {
  1094. len = skb->len;
  1095. ring->skbuff[entry] = skb;
  1096. opts1 |= RTASE_TX_FIRST_FRAG | RTASE_TX_LAST_FRAG;
  1097. }
  1098. if (((entry + 1) % RTASE_NUM_DESC) == 0)
  1099. opts1 |= (len | RTASE_RING_END);
  1100. else
  1101. opts1 |= len;
  1102. mapping = dma_map_single(&tp->pdev->dev, skb->data, len,
  1103. DMA_TO_DEVICE);
  1104. if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
  1105. if (unlikely(net_ratelimit()))
  1106. netdev_err(dev, "Failed to map TX DMA!\n");
  1107. goto err_dma_1;
  1108. }
  1109. ring->mis.len[entry] = len;
  1110. txd->addr = cpu_to_le64(mapping);
  1111. txd->opts2 = cpu_to_le32(opts2);
  1112. txd->opts1 = cpu_to_le32(opts1 & ~RTASE_DESC_OWN);
  1113. /* make sure the operating fields have been updated */
  1114. dma_wmb();
  1115. door_bell = __netdev_tx_sent_queue(tx_queue, skb->len,
  1116. netdev_xmit_more());
  1117. txd->opts1 = cpu_to_le32(opts1);
  1118. skb_tx_timestamp(skb);
  1119. /* tx needs to see descriptor changes before updated cur_idx */
  1120. smp_wmb();
  1121. WRITE_ONCE(ring->cur_idx, ring->cur_idx + frags + 1);
  1122. stop_queue = !netif_subqueue_maybe_stop(dev, ring->index,
  1123. rtase_tx_avail(ring),
  1124. RTASE_TX_STOP_THRS,
  1125. RTASE_TX_START_THRS);
  1126. if (door_bell || stop_queue)
  1127. rtase_w8(tp, RTASE_TPPOLL, BIT(ring->index));
  1128. return NETDEV_TX_OK;
  1129. err_dma_1:
  1130. ring->skbuff[entry] = NULL;
  1131. rtase_tx_clear_range(ring, ring->cur_idx + 1, frags);
  1132. err_dma_0:
  1133. tp->stats.tx_dropped++;
  1134. dev_kfree_skb_any(skb);
  1135. return NETDEV_TX_OK;
  1136. }
  1137. static void rtase_set_rx_mode(struct net_device *dev)
  1138. {
  1139. rtase_hw_set_rx_packet_filter(dev);
  1140. }
  1141. static void rtase_enable_eem_write(const struct rtase_private *tp)
  1142. {
  1143. u8 val;
  1144. val = rtase_r8(tp, RTASE_EEM);
  1145. rtase_w8(tp, RTASE_EEM, val | RTASE_EEM_UNLOCK);
  1146. }
  1147. static void rtase_disable_eem_write(const struct rtase_private *tp)
  1148. {
  1149. u8 val;
  1150. val = rtase_r8(tp, RTASE_EEM);
  1151. rtase_w8(tp, RTASE_EEM, val & ~RTASE_EEM_UNLOCK);
  1152. }
  1153. static void rtase_rar_set(const struct rtase_private *tp, const u8 *addr)
  1154. {
  1155. u32 rar_low, rar_high;
  1156. rar_low = (u32)addr[0] | ((u32)addr[1] << 8) |
  1157. ((u32)addr[2] << 16) | ((u32)addr[3] << 24);
  1158. rar_high = (u32)addr[4] | ((u32)addr[5] << 8);
  1159. rtase_enable_eem_write(tp);
  1160. rtase_w32(tp, RTASE_MAC0, rar_low);
  1161. rtase_w32(tp, RTASE_MAC4, rar_high);
  1162. rtase_disable_eem_write(tp);
  1163. rtase_w16(tp, RTASE_LBK_CTRL, RTASE_LBK_ATLD | RTASE_LBK_CLR);
  1164. }
  1165. static int rtase_set_mac_address(struct net_device *dev, void *p)
  1166. {
  1167. struct rtase_private *tp = netdev_priv(dev);
  1168. int ret;
  1169. ret = eth_mac_addr(dev, p);
  1170. if (ret)
  1171. return ret;
  1172. rtase_rar_set(tp, dev->dev_addr);
  1173. return 0;
  1174. }
  1175. static int rtase_change_mtu(struct net_device *dev, int new_mtu)
  1176. {
  1177. dev->mtu = new_mtu;
  1178. netdev_update_features(dev);
  1179. return 0;
  1180. }
  1181. static void rtase_wait_for_quiescence(const struct net_device *dev)
  1182. {
  1183. struct rtase_private *tp = netdev_priv(dev);
  1184. struct rtase_int_vector *ivec;
  1185. u32 i;
  1186. for (i = 0; i < tp->int_nums; i++) {
  1187. ivec = &tp->int_vector[i];
  1188. synchronize_irq(ivec->irq);
  1189. /* wait for any pending NAPI task to complete */
  1190. napi_disable(&ivec->napi);
  1191. }
  1192. rtase_irq_dis_and_clear(tp);
  1193. for (i = 0; i < tp->int_nums; i++) {
  1194. ivec = &tp->int_vector[i];
  1195. napi_enable(&ivec->napi);
  1196. }
  1197. }
  1198. static void rtase_sw_reset(struct net_device *dev)
  1199. {
  1200. struct rtase_private *tp = netdev_priv(dev);
  1201. struct rtase_ring *ring, *tmp;
  1202. struct rtase_int_vector *ivec;
  1203. int ret;
  1204. u32 i;
  1205. netif_stop_queue(dev);
  1206. netif_carrier_off(dev);
  1207. rtase_hw_reset(dev);
  1208. /* let's wait a bit while any (async) irq lands on */
  1209. rtase_wait_for_quiescence(dev);
  1210. rtase_tx_clear(tp);
  1211. rtase_rx_clear(tp);
  1212. for (i = 0; i < tp->int_nums; i++) {
  1213. ivec = &tp->int_vector[i];
  1214. list_for_each_entry_safe(ring, tmp, &ivec->ring_list,
  1215. ring_entry)
  1216. list_del(&ring->ring_entry);
  1217. }
  1218. ret = rtase_init_ring(dev);
  1219. if (ret) {
  1220. netdev_err(dev, "unable to init ring\n");
  1221. rtase_free_desc(tp);
  1222. return;
  1223. }
  1224. rtase_hw_config(dev);
  1225. /* always link, so start to transmit & receive */
  1226. rtase_hw_start(dev);
  1227. netif_carrier_on(dev);
  1228. netif_wake_queue(dev);
  1229. }
  1230. static void rtase_dump_tally_counter(const struct rtase_private *tp)
  1231. {
  1232. dma_addr_t paddr = tp->tally_paddr;
  1233. u32 cmd = lower_32_bits(paddr);
  1234. u32 val;
  1235. int err;
  1236. rtase_w32(tp, RTASE_DTCCR4, upper_32_bits(paddr));
  1237. rtase_w32(tp, RTASE_DTCCR0, cmd);
  1238. rtase_w32(tp, RTASE_DTCCR0, cmd | RTASE_COUNTER_DUMP);
  1239. err = read_poll_timeout(rtase_r32, val, !(val & RTASE_COUNTER_DUMP),
  1240. 10, 250, false, tp, RTASE_DTCCR0);
  1241. if (err == -ETIMEDOUT)
  1242. netdev_err(tp->dev, "error occurred in dump tally counter\n");
  1243. }
  1244. static void rtase_dump_state(const struct net_device *dev)
  1245. {
  1246. const struct rtase_private *tp = netdev_priv(dev);
  1247. int max_reg_size = RTASE_PCI_REGS_SIZE;
  1248. const struct rtase_counters *counters;
  1249. const struct rtase_ring *ring;
  1250. u32 dword_rd;
  1251. int n = 0;
  1252. ring = &tp->tx_ring[0];
  1253. netdev_err(dev, "Tx descriptor info:\n");
  1254. netdev_err(dev, "Tx curIdx = 0x%x\n", ring->cur_idx);
  1255. netdev_err(dev, "Tx dirtyIdx = 0x%x\n", ring->dirty_idx);
  1256. netdev_err(dev, "Tx phyAddr = %pad\n", &ring->phy_addr);
  1257. ring = &tp->rx_ring[0];
  1258. netdev_err(dev, "Rx descriptor info:\n");
  1259. netdev_err(dev, "Rx curIdx = 0x%x\n", ring->cur_idx);
  1260. netdev_err(dev, "Rx dirtyIdx = 0x%x\n", ring->dirty_idx);
  1261. netdev_err(dev, "Rx phyAddr = %pad\n", &ring->phy_addr);
  1262. netdev_err(dev, "Device Registers:\n");
  1263. netdev_err(dev, "Chip Command = 0x%02x\n",
  1264. rtase_r8(tp, RTASE_CHIP_CMD));
  1265. netdev_err(dev, "IMR = %08x\n", rtase_r32(tp, RTASE_IMR0));
  1266. netdev_err(dev, "ISR = %08x\n", rtase_r32(tp, RTASE_ISR0));
  1267. netdev_err(dev, "Boot Ctrl Reg(0xE004) = %04x\n",
  1268. rtase_r16(tp, RTASE_BOOT_CTL));
  1269. netdev_err(dev, "EPHY ISR(0xE014) = %04x\n",
  1270. rtase_r16(tp, RTASE_EPHY_ISR));
  1271. netdev_err(dev, "EPHY IMR(0xE016) = %04x\n",
  1272. rtase_r16(tp, RTASE_EPHY_IMR));
  1273. netdev_err(dev, "CLKSW SET REG(0xE018) = %04x\n",
  1274. rtase_r16(tp, RTASE_CLKSW_SET));
  1275. netdev_err(dev, "Dump PCI Registers:\n");
  1276. while (n < max_reg_size) {
  1277. if ((n % RTASE_DWORD_MOD) == 0)
  1278. netdev_err(tp->dev, "0x%03x:\n", n);
  1279. pci_read_config_dword(tp->pdev, n, &dword_rd);
  1280. netdev_err(tp->dev, "%08x\n", dword_rd);
  1281. n += 4;
  1282. }
  1283. netdev_err(dev, "Dump tally counter:\n");
  1284. counters = tp->tally_vaddr;
  1285. rtase_dump_tally_counter(tp);
  1286. netdev_err(dev, "tx_packets %lld\n",
  1287. le64_to_cpu(counters->tx_packets));
  1288. netdev_err(dev, "rx_packets %lld\n",
  1289. le64_to_cpu(counters->rx_packets));
  1290. netdev_err(dev, "tx_errors %lld\n",
  1291. le64_to_cpu(counters->tx_errors));
  1292. netdev_err(dev, "rx_errors %d\n",
  1293. le32_to_cpu(counters->rx_errors));
  1294. netdev_err(dev, "rx_missed %d\n",
  1295. le16_to_cpu(counters->rx_missed));
  1296. netdev_err(dev, "align_errors %d\n",
  1297. le16_to_cpu(counters->align_errors));
  1298. netdev_err(dev, "tx_one_collision %d\n",
  1299. le32_to_cpu(counters->tx_one_collision));
  1300. netdev_err(dev, "tx_multi_collision %d\n",
  1301. le32_to_cpu(counters->tx_multi_collision));
  1302. netdev_err(dev, "rx_unicast %lld\n",
  1303. le64_to_cpu(counters->rx_unicast));
  1304. netdev_err(dev, "rx_broadcast %lld\n",
  1305. le64_to_cpu(counters->rx_broadcast));
  1306. netdev_err(dev, "rx_multicast %d\n",
  1307. le32_to_cpu(counters->rx_multicast));
  1308. netdev_err(dev, "tx_aborted %d\n",
  1309. le16_to_cpu(counters->tx_aborted));
  1310. netdev_err(dev, "tx_underrun %d\n",
  1311. le16_to_cpu(counters->tx_underrun));
  1312. }
  1313. static void rtase_tx_timeout(struct net_device *dev, unsigned int txqueue)
  1314. {
  1315. rtase_dump_state(dev);
  1316. rtase_sw_reset(dev);
  1317. }
  1318. static void rtase_get_stats64(struct net_device *dev,
  1319. struct rtnl_link_stats64 *stats)
  1320. {
  1321. const struct rtase_private *tp = netdev_priv(dev);
  1322. const struct rtase_counters *counters;
  1323. counters = tp->tally_vaddr;
  1324. dev_fetch_sw_netstats(stats, dev->tstats);
  1325. /* fetch additional counter values missing in stats collected by driver
  1326. * from tally counter
  1327. */
  1328. rtase_dump_tally_counter(tp);
  1329. stats->rx_errors = tp->stats.rx_errors;
  1330. stats->tx_errors = le64_to_cpu(counters->tx_errors);
  1331. stats->rx_dropped = tp->stats.rx_dropped;
  1332. stats->tx_dropped = tp->stats.tx_dropped;
  1333. stats->multicast = tp->stats.multicast;
  1334. stats->rx_length_errors = tp->stats.rx_length_errors;
  1335. }
  1336. static netdev_features_t rtase_fix_features(struct net_device *dev,
  1337. netdev_features_t features)
  1338. {
  1339. netdev_features_t features_fix = features;
  1340. /* not support TSO for jumbo frames */
  1341. if (dev->mtu > ETH_DATA_LEN)
  1342. features_fix &= ~NETIF_F_ALL_TSO;
  1343. return features_fix;
  1344. }
  1345. static int rtase_set_features(struct net_device *dev,
  1346. netdev_features_t features)
  1347. {
  1348. netdev_features_t features_set = features;
  1349. features_set &= NETIF_F_RXALL | NETIF_F_RXCSUM |
  1350. NETIF_F_HW_VLAN_CTAG_RX;
  1351. if (features_set ^ dev->features)
  1352. rtase_hw_set_features(dev, features_set);
  1353. return 0;
  1354. }
  1355. static const struct net_device_ops rtase_netdev_ops = {
  1356. .ndo_open = rtase_open,
  1357. .ndo_stop = rtase_close,
  1358. .ndo_start_xmit = rtase_start_xmit,
  1359. .ndo_set_rx_mode = rtase_set_rx_mode,
  1360. .ndo_set_mac_address = rtase_set_mac_address,
  1361. .ndo_change_mtu = rtase_change_mtu,
  1362. .ndo_tx_timeout = rtase_tx_timeout,
  1363. .ndo_get_stats64 = rtase_get_stats64,
  1364. .ndo_fix_features = rtase_fix_features,
  1365. .ndo_set_features = rtase_set_features,
  1366. };
  1367. static void rtase_get_mac_address(struct net_device *dev)
  1368. {
  1369. struct rtase_private *tp = netdev_priv(dev);
  1370. u8 mac_addr[ETH_ALEN] __aligned(2) = {};
  1371. u32 i;
  1372. for (i = 0; i < ETH_ALEN; i++)
  1373. mac_addr[i] = rtase_r8(tp, RTASE_MAC0 + i);
  1374. if (!is_valid_ether_addr(mac_addr)) {
  1375. eth_hw_addr_random(dev);
  1376. netdev_warn(dev, "Random ether addr %pM\n", dev->dev_addr);
  1377. } else {
  1378. eth_hw_addr_set(dev, mac_addr);
  1379. ether_addr_copy(dev->perm_addr, dev->dev_addr);
  1380. }
  1381. rtase_rar_set(tp, dev->dev_addr);
  1382. }
  1383. static int rtase_get_settings(struct net_device *dev,
  1384. struct ethtool_link_ksettings *cmd)
  1385. {
  1386. u32 supported = SUPPORTED_MII | SUPPORTED_Pause | SUPPORTED_Asym_Pause;
  1387. const struct rtase_private *tp = netdev_priv(dev);
  1388. ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
  1389. supported);
  1390. switch (tp->hw_ver) {
  1391. case RTASE_HW_VER_906X_7XA:
  1392. case RTASE_HW_VER_906X_7XC:
  1393. cmd->base.speed = SPEED_5000;
  1394. break;
  1395. case RTASE_HW_VER_907XD_V1:
  1396. cmd->base.speed = SPEED_10000;
  1397. break;
  1398. }
  1399. cmd->base.duplex = DUPLEX_FULL;
  1400. cmd->base.port = PORT_MII;
  1401. cmd->base.autoneg = AUTONEG_DISABLE;
  1402. return 0;
  1403. }
  1404. static void rtase_get_pauseparam(struct net_device *dev,
  1405. struct ethtool_pauseparam *pause)
  1406. {
  1407. const struct rtase_private *tp = netdev_priv(dev);
  1408. u16 value = rtase_r16(tp, RTASE_CPLUS_CMD);
  1409. pause->autoneg = AUTONEG_DISABLE;
  1410. pause->tx_pause = !!(value & RTASE_FORCE_TXFLOW_EN);
  1411. pause->rx_pause = !!(value & RTASE_FORCE_RXFLOW_EN);
  1412. }
  1413. static int rtase_set_pauseparam(struct net_device *dev,
  1414. struct ethtool_pauseparam *pause)
  1415. {
  1416. const struct rtase_private *tp = netdev_priv(dev);
  1417. u16 value = rtase_r16(tp, RTASE_CPLUS_CMD);
  1418. if (pause->autoneg)
  1419. return -EOPNOTSUPP;
  1420. value &= ~(RTASE_FORCE_TXFLOW_EN | RTASE_FORCE_RXFLOW_EN);
  1421. if (pause->tx_pause)
  1422. value |= RTASE_FORCE_TXFLOW_EN;
  1423. if (pause->rx_pause)
  1424. value |= RTASE_FORCE_RXFLOW_EN;
  1425. rtase_w16(tp, RTASE_CPLUS_CMD, value);
  1426. return 0;
  1427. }
  1428. static void rtase_get_eth_mac_stats(struct net_device *dev,
  1429. struct ethtool_eth_mac_stats *stats)
  1430. {
  1431. struct rtase_private *tp = netdev_priv(dev);
  1432. const struct rtase_counters *counters;
  1433. counters = tp->tally_vaddr;
  1434. rtase_dump_tally_counter(tp);
  1435. stats->FramesTransmittedOK = le64_to_cpu(counters->tx_packets);
  1436. stats->FramesReceivedOK = le64_to_cpu(counters->rx_packets);
  1437. stats->FramesLostDueToIntMACXmitError =
  1438. le64_to_cpu(counters->tx_errors);
  1439. stats->BroadcastFramesReceivedOK = le64_to_cpu(counters->rx_broadcast);
  1440. }
  1441. static const struct ethtool_ops rtase_ethtool_ops = {
  1442. .get_link = ethtool_op_get_link,
  1443. .get_link_ksettings = rtase_get_settings,
  1444. .get_pauseparam = rtase_get_pauseparam,
  1445. .set_pauseparam = rtase_set_pauseparam,
  1446. .get_eth_mac_stats = rtase_get_eth_mac_stats,
  1447. .get_ts_info = ethtool_op_get_ts_info,
  1448. };
  1449. static void rtase_init_netdev_ops(struct net_device *dev)
  1450. {
  1451. dev->netdev_ops = &rtase_netdev_ops;
  1452. dev->ethtool_ops = &rtase_ethtool_ops;
  1453. }
  1454. static void rtase_reset_interrupt(struct pci_dev *pdev,
  1455. const struct rtase_private *tp)
  1456. {
  1457. if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED)
  1458. pci_disable_msix(pdev);
  1459. else
  1460. pci_disable_msi(pdev);
  1461. }
  1462. static int rtase_alloc_msix(struct pci_dev *pdev, struct rtase_private *tp)
  1463. {
  1464. int ret, irq;
  1465. u16 i;
  1466. memset(tp->msix_entry, 0x0, RTASE_NUM_MSIX *
  1467. sizeof(struct msix_entry));
  1468. for (i = 0; i < RTASE_NUM_MSIX; i++)
  1469. tp->msix_entry[i].entry = i;
  1470. ret = pci_enable_msix_exact(pdev, tp->msix_entry, tp->int_nums);
  1471. if (ret)
  1472. return ret;
  1473. for (i = 0; i < tp->int_nums; i++) {
  1474. irq = pci_irq_vector(pdev, i);
  1475. if (irq < 0) {
  1476. pci_disable_msix(pdev);
  1477. return irq;
  1478. }
  1479. tp->int_vector[i].irq = irq;
  1480. }
  1481. return 0;
  1482. }
  1483. static int rtase_alloc_interrupt(struct pci_dev *pdev,
  1484. struct rtase_private *tp)
  1485. {
  1486. int ret;
  1487. ret = rtase_alloc_msix(pdev, tp);
  1488. if (ret) {
  1489. ret = pci_enable_msi(pdev);
  1490. if (ret) {
  1491. dev_err(&pdev->dev,
  1492. "unable to alloc interrupt.(MSI)\n");
  1493. return ret;
  1494. }
  1495. tp->sw_flag |= RTASE_SWF_MSI_ENABLED;
  1496. } else {
  1497. tp->sw_flag |= RTASE_SWF_MSIX_ENABLED;
  1498. }
  1499. return 0;
  1500. }
  1501. static void rtase_init_hardware(const struct rtase_private *tp)
  1502. {
  1503. u16 i;
  1504. for (i = 0; i < RTASE_VLAN_FILTER_ENTRY_NUM; i++)
  1505. rtase_w32(tp, RTASE_VLAN_ENTRY_0 + i * 4, 0);
  1506. }
  1507. static void rtase_init_int_vector(struct rtase_private *tp)
  1508. {
  1509. u16 i;
  1510. /* interrupt vector 0 */
  1511. tp->int_vector[0].tp = tp;
  1512. tp->int_vector[0].index = 0;
  1513. tp->int_vector[0].imr_addr = RTASE_IMR0;
  1514. tp->int_vector[0].isr_addr = RTASE_ISR0;
  1515. tp->int_vector[0].imr = RTASE_ROK | RTASE_RDU | RTASE_TOK |
  1516. RTASE_TOK4 | RTASE_TOK5 | RTASE_TOK6 |
  1517. RTASE_TOK7;
  1518. tp->int_vector[0].poll = rtase_poll;
  1519. memset(tp->int_vector[0].name, 0x0, sizeof(tp->int_vector[0].name));
  1520. INIT_LIST_HEAD(&tp->int_vector[0].ring_list);
  1521. netif_napi_add(tp->dev, &tp->int_vector[0].napi,
  1522. tp->int_vector[0].poll);
  1523. /* interrupt vector 1 ~ 3 */
  1524. for (i = 1; i < tp->int_nums; i++) {
  1525. tp->int_vector[i].tp = tp;
  1526. tp->int_vector[i].index = i;
  1527. tp->int_vector[i].imr_addr = RTASE_IMR1 + (i - 1) * 4;
  1528. tp->int_vector[i].isr_addr = RTASE_ISR1 + (i - 1) * 4;
  1529. tp->int_vector[i].imr = RTASE_Q_ROK | RTASE_Q_RDU |
  1530. RTASE_Q_TOK;
  1531. tp->int_vector[i].poll = rtase_poll;
  1532. memset(tp->int_vector[i].name, 0x0,
  1533. sizeof(tp->int_vector[0].name));
  1534. INIT_LIST_HEAD(&tp->int_vector[i].ring_list);
  1535. netif_napi_add(tp->dev, &tp->int_vector[i].napi,
  1536. tp->int_vector[i].poll);
  1537. }
  1538. }
  1539. static u16 rtase_calc_time_mitigation(u32 time_us)
  1540. {
  1541. u8 msb, time_count, time_unit;
  1542. u16 int_miti;
  1543. time_us = min_t(int, time_us, RTASE_MITI_MAX_TIME);
  1544. if (time_us > RTASE_MITI_TIME_COUNT_MASK) {
  1545. msb = fls(time_us);
  1546. time_unit = msb - RTASE_MITI_COUNT_BIT_NUM;
  1547. time_count = time_us >> (msb - RTASE_MITI_COUNT_BIT_NUM);
  1548. } else {
  1549. time_unit = 0;
  1550. time_count = time_us;
  1551. }
  1552. int_miti = u16_encode_bits(time_count, RTASE_MITI_TIME_COUNT_MASK) |
  1553. u16_encode_bits(time_unit, RTASE_MITI_TIME_UNIT_MASK);
  1554. return int_miti;
  1555. }
  1556. static u16 rtase_calc_packet_num_mitigation(u16 pkt_num)
  1557. {
  1558. u8 msb, pkt_num_count, pkt_num_unit;
  1559. u16 int_miti;
  1560. pkt_num = min_t(int, pkt_num, RTASE_MITI_MAX_PKT_NUM);
  1561. if (pkt_num > 60) {
  1562. pkt_num_unit = RTASE_MITI_MAX_PKT_NUM_IDX;
  1563. pkt_num_count = pkt_num / RTASE_MITI_MAX_PKT_NUM_UNIT;
  1564. } else {
  1565. msb = fls(pkt_num);
  1566. if (msb >= RTASE_MITI_COUNT_BIT_NUM) {
  1567. pkt_num_unit = msb - RTASE_MITI_COUNT_BIT_NUM;
  1568. pkt_num_count = pkt_num >> (msb -
  1569. RTASE_MITI_COUNT_BIT_NUM);
  1570. } else {
  1571. pkt_num_unit = 0;
  1572. pkt_num_count = pkt_num;
  1573. }
  1574. }
  1575. int_miti = u16_encode_bits(pkt_num_count,
  1576. RTASE_MITI_PKT_NUM_COUNT_MASK) |
  1577. u16_encode_bits(pkt_num_unit,
  1578. RTASE_MITI_PKT_NUM_UNIT_MASK);
  1579. return int_miti;
  1580. }
  1581. static void rtase_init_software_variable(struct pci_dev *pdev,
  1582. struct rtase_private *tp)
  1583. {
  1584. u16 int_miti;
  1585. tp->tx_queue_ctrl = RTASE_TXQ_CTRL;
  1586. tp->func_tx_queue_num = RTASE_FUNC_TXQ_NUM;
  1587. tp->func_rx_queue_num = RTASE_FUNC_RXQ_NUM;
  1588. tp->int_nums = RTASE_INTERRUPT_NUM;
  1589. int_miti = rtase_calc_time_mitigation(RTASE_MITI_DEFAULT_TIME) |
  1590. rtase_calc_packet_num_mitigation(RTASE_MITI_DEFAULT_PKT_NUM);
  1591. tp->tx_int_mit = int_miti;
  1592. tp->rx_int_mit = int_miti;
  1593. tp->sw_flag = 0;
  1594. rtase_init_int_vector(tp);
  1595. /* MTU range: 60 - hw-specific max */
  1596. tp->dev->min_mtu = ETH_ZLEN;
  1597. tp->dev->max_mtu = RTASE_MAX_JUMBO_SIZE;
  1598. }
  1599. static int rtase_check_mac_version_valid(struct rtase_private *tp)
  1600. {
  1601. int ret = -ENODEV;
  1602. tp->hw_ver = rtase_r32(tp, RTASE_TX_CONFIG_0) & RTASE_HW_VER_MASK;
  1603. switch (tp->hw_ver) {
  1604. case RTASE_HW_VER_906X_7XA:
  1605. case RTASE_HW_VER_906X_7XC:
  1606. case RTASE_HW_VER_907XD_V1:
  1607. ret = 0;
  1608. break;
  1609. }
  1610. return ret;
  1611. }
  1612. static int rtase_init_board(struct pci_dev *pdev, struct net_device **dev_out,
  1613. void __iomem **ioaddr_out)
  1614. {
  1615. struct net_device *dev;
  1616. void __iomem *ioaddr;
  1617. int ret = -ENOMEM;
  1618. /* dev zeroed in alloc_etherdev */
  1619. dev = alloc_etherdev_mq(sizeof(struct rtase_private),
  1620. RTASE_FUNC_TXQ_NUM);
  1621. if (!dev)
  1622. goto err_out;
  1623. SET_NETDEV_DEV(dev, &pdev->dev);
  1624. ret = pci_enable_device(pdev);
  1625. if (ret < 0)
  1626. goto err_out_free_dev;
  1627. /* make sure PCI base addr 1 is MMIO */
  1628. if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
  1629. ret = -ENODEV;
  1630. goto err_out_disable;
  1631. }
  1632. /* check for weird/broken PCI region reporting */
  1633. if (pci_resource_len(pdev, 2) < RTASE_REGS_SIZE) {
  1634. ret = -ENODEV;
  1635. goto err_out_disable;
  1636. }
  1637. ret = pci_request_regions(pdev, KBUILD_MODNAME);
  1638. if (ret < 0)
  1639. goto err_out_disable;
  1640. ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
  1641. if (ret) {
  1642. dev_err(&pdev->dev, "no usable dma addressing method\n");
  1643. goto err_out_free_res;
  1644. }
  1645. pci_set_master(pdev);
  1646. /* ioremap MMIO region */
  1647. ioaddr = ioremap(pci_resource_start(pdev, 2),
  1648. pci_resource_len(pdev, 2));
  1649. if (!ioaddr) {
  1650. ret = -EIO;
  1651. goto err_out_free_res;
  1652. }
  1653. *ioaddr_out = ioaddr;
  1654. *dev_out = dev;
  1655. return ret;
  1656. err_out_free_res:
  1657. pci_release_regions(pdev);
  1658. err_out_disable:
  1659. pci_disable_device(pdev);
  1660. err_out_free_dev:
  1661. free_netdev(dev);
  1662. err_out:
  1663. *ioaddr_out = NULL;
  1664. *dev_out = NULL;
  1665. return ret;
  1666. }
  1667. static void rtase_release_board(struct pci_dev *pdev, struct net_device *dev,
  1668. void __iomem *ioaddr)
  1669. {
  1670. const struct rtase_private *tp = netdev_priv(dev);
  1671. rtase_rar_set(tp, tp->dev->perm_addr);
  1672. iounmap(ioaddr);
  1673. if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED)
  1674. pci_disable_msix(pdev);
  1675. else
  1676. pci_disable_msi(pdev);
  1677. pci_release_regions(pdev);
  1678. pci_disable_device(pdev);
  1679. free_netdev(dev);
  1680. }
  1681. static int rtase_init_one(struct pci_dev *pdev,
  1682. const struct pci_device_id *ent)
  1683. {
  1684. struct net_device *dev = NULL;
  1685. struct rtase_int_vector *ivec;
  1686. void __iomem *ioaddr = NULL;
  1687. struct rtase_private *tp;
  1688. int ret, i;
  1689. if (!pdev->is_physfn && pdev->is_virtfn) {
  1690. dev_err(&pdev->dev,
  1691. "This module does not support a virtual function.");
  1692. return -EINVAL;
  1693. }
  1694. dev_dbg(&pdev->dev, "Automotive Switch Ethernet driver loaded\n");
  1695. ret = rtase_init_board(pdev, &dev, &ioaddr);
  1696. if (ret != 0)
  1697. return ret;
  1698. tp = netdev_priv(dev);
  1699. tp->mmio_addr = ioaddr;
  1700. tp->dev = dev;
  1701. tp->pdev = pdev;
  1702. /* identify chip attached to board */
  1703. ret = rtase_check_mac_version_valid(tp);
  1704. if (ret != 0) {
  1705. dev_err(&pdev->dev,
  1706. "unknown chip version: 0x%08x, contact rtase maintainers (see MAINTAINERS file)\n",
  1707. tp->hw_ver);
  1708. goto err_out_release_board;
  1709. }
  1710. rtase_init_software_variable(pdev, tp);
  1711. rtase_init_hardware(tp);
  1712. ret = rtase_alloc_interrupt(pdev, tp);
  1713. if (ret < 0) {
  1714. dev_err(&pdev->dev, "unable to alloc MSIX/MSI\n");
  1715. goto err_out_1;
  1716. }
  1717. rtase_init_netdev_ops(dev);
  1718. dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
  1719. dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
  1720. NETIF_F_IP_CSUM | NETIF_F_HIGHDMA |
  1721. NETIF_F_RXCSUM | NETIF_F_SG |
  1722. NETIF_F_TSO | NETIF_F_IPV6_CSUM |
  1723. NETIF_F_TSO6;
  1724. dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
  1725. NETIF_F_TSO | NETIF_F_RXCSUM |
  1726. NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
  1727. NETIF_F_RXALL | NETIF_F_RXFCS |
  1728. NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
  1729. dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
  1730. NETIF_F_HIGHDMA;
  1731. dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
  1732. netif_set_tso_max_size(dev, RTASE_LSO_64K);
  1733. netif_set_tso_max_segs(dev, RTASE_NIC_MAX_PHYS_BUF_COUNT_LSO2);
  1734. rtase_get_mac_address(dev);
  1735. tp->tally_vaddr = dma_alloc_coherent(&pdev->dev,
  1736. sizeof(*tp->tally_vaddr),
  1737. &tp->tally_paddr,
  1738. GFP_KERNEL);
  1739. if (!tp->tally_vaddr) {
  1740. ret = -ENOMEM;
  1741. goto err_out;
  1742. }
  1743. rtase_tally_counter_clear(tp);
  1744. pci_set_drvdata(pdev, dev);
  1745. netif_carrier_off(dev);
  1746. ret = register_netdev(dev);
  1747. if (ret != 0)
  1748. goto err_out;
  1749. netdev_dbg(dev, "%pM, IRQ %d\n", dev->dev_addr, dev->irq);
  1750. return 0;
  1751. err_out:
  1752. if (tp->tally_vaddr) {
  1753. dma_free_coherent(&pdev->dev,
  1754. sizeof(*tp->tally_vaddr),
  1755. tp->tally_vaddr,
  1756. tp->tally_paddr);
  1757. tp->tally_vaddr = NULL;
  1758. }
  1759. err_out_1:
  1760. for (i = 0; i < tp->int_nums; i++) {
  1761. ivec = &tp->int_vector[i];
  1762. netif_napi_del(&ivec->napi);
  1763. }
  1764. err_out_release_board:
  1765. rtase_release_board(pdev, dev, ioaddr);
  1766. return ret;
  1767. }
  1768. static void rtase_remove_one(struct pci_dev *pdev)
  1769. {
  1770. struct net_device *dev = pci_get_drvdata(pdev);
  1771. struct rtase_private *tp = netdev_priv(dev);
  1772. struct rtase_int_vector *ivec;
  1773. u32 i;
  1774. unregister_netdev(dev);
  1775. for (i = 0; i < tp->int_nums; i++) {
  1776. ivec = &tp->int_vector[i];
  1777. netif_napi_del(&ivec->napi);
  1778. }
  1779. rtase_reset_interrupt(pdev, tp);
  1780. if (tp->tally_vaddr) {
  1781. dma_free_coherent(&pdev->dev,
  1782. sizeof(*tp->tally_vaddr),
  1783. tp->tally_vaddr,
  1784. tp->tally_paddr);
  1785. tp->tally_vaddr = NULL;
  1786. }
  1787. rtase_release_board(pdev, dev, tp->mmio_addr);
  1788. pci_set_drvdata(pdev, NULL);
  1789. }
  1790. static void rtase_shutdown(struct pci_dev *pdev)
  1791. {
  1792. struct net_device *dev = pci_get_drvdata(pdev);
  1793. const struct rtase_private *tp;
  1794. tp = netdev_priv(dev);
  1795. if (netif_running(dev))
  1796. rtase_close(dev);
  1797. rtase_reset_interrupt(pdev, tp);
  1798. }
  1799. static int rtase_suspend(struct device *device)
  1800. {
  1801. struct net_device *dev = dev_get_drvdata(device);
  1802. if (netif_running(dev)) {
  1803. netif_device_detach(dev);
  1804. rtase_hw_reset(dev);
  1805. }
  1806. return 0;
  1807. }
  1808. static int rtase_resume(struct device *device)
  1809. {
  1810. struct net_device *dev = dev_get_drvdata(device);
  1811. struct rtase_private *tp = netdev_priv(dev);
  1812. int ret;
  1813. /* restore last modified mac address */
  1814. rtase_rar_set(tp, dev->dev_addr);
  1815. if (!netif_running(dev))
  1816. goto out;
  1817. rtase_wait_for_quiescence(dev);
  1818. rtase_tx_clear(tp);
  1819. rtase_rx_clear(tp);
  1820. ret = rtase_init_ring(dev);
  1821. if (ret) {
  1822. netdev_err(dev, "unable to init ring\n");
  1823. rtase_free_desc(tp);
  1824. return -ENOMEM;
  1825. }
  1826. rtase_hw_config(dev);
  1827. /* always link, so start to transmit & receive */
  1828. rtase_hw_start(dev);
  1829. netif_device_attach(dev);
  1830. out:
  1831. return 0;
  1832. }
  1833. static const struct dev_pm_ops rtase_pm_ops = {
  1834. SYSTEM_SLEEP_PM_OPS(rtase_suspend, rtase_resume)
  1835. };
  1836. static struct pci_driver rtase_pci_driver = {
  1837. .name = KBUILD_MODNAME,
  1838. .id_table = rtase_pci_tbl,
  1839. .probe = rtase_init_one,
  1840. .remove = rtase_remove_one,
  1841. .shutdown = rtase_shutdown,
  1842. .driver.pm = pm_ptr(&rtase_pm_ops),
  1843. };
  1844. module_pci_driver(rtase_pci_driver);