bcmasp_intf.c 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414
  1. // SPDX-License-Identifier: GPL-2.0
  2. #define pr_fmt(fmt) "bcmasp_intf: " fmt
  3. #include <asm/byteorder.h>
  4. #include <linux/brcmphy.h>
  5. #include <linux/clk.h>
  6. #include <linux/delay.h>
  7. #include <linux/etherdevice.h>
  8. #include <linux/netdevice.h>
  9. #include <linux/of_net.h>
  10. #include <linux/of_mdio.h>
  11. #include <linux/phy.h>
  12. #include <linux/phy_fixed.h>
  13. #include <linux/ptp_classify.h>
  14. #include <linux/platform_device.h>
  15. #include <net/ip.h>
  16. #include <net/ipv6.h>
  17. #include "bcmasp.h"
  18. #include "bcmasp_intf_defs.h"
  19. static int incr_ring(int index, int ring_count)
  20. {
  21. index++;
  22. if (index == ring_count)
  23. return 0;
  24. return index;
  25. }
  26. /* Points to last byte of descriptor */
  27. static dma_addr_t incr_last_byte(dma_addr_t addr, dma_addr_t beg,
  28. int ring_count)
  29. {
  30. dma_addr_t end = beg + (ring_count * DESC_SIZE);
  31. addr += DESC_SIZE;
  32. if (addr > end)
  33. return beg + DESC_SIZE - 1;
  34. return addr;
  35. }
  36. /* Points to first byte of descriptor */
  37. static dma_addr_t incr_first_byte(dma_addr_t addr, dma_addr_t beg,
  38. int ring_count)
  39. {
  40. dma_addr_t end = beg + (ring_count * DESC_SIZE);
  41. addr += DESC_SIZE;
  42. if (addr >= end)
  43. return beg;
  44. return addr;
  45. }
  46. static void bcmasp_enable_tx(struct bcmasp_intf *intf, int en)
  47. {
  48. if (en) {
  49. tx_spb_ctrl_wl(intf, TX_SPB_CTRL_ENABLE_EN, TX_SPB_CTRL_ENABLE);
  50. tx_epkt_core_wl(intf, (TX_EPKT_C_CFG_MISC_EN |
  51. TX_EPKT_C_CFG_MISC_PT |
  52. (intf->port << TX_EPKT_C_CFG_MISC_PS_SHIFT)),
  53. TX_EPKT_C_CFG_MISC);
  54. } else {
  55. tx_spb_ctrl_wl(intf, 0x0, TX_SPB_CTRL_ENABLE);
  56. tx_epkt_core_wl(intf, 0x0, TX_EPKT_C_CFG_MISC);
  57. }
  58. }
  59. static void bcmasp_enable_rx(struct bcmasp_intf *intf, int en)
  60. {
  61. if (en)
  62. rx_edpkt_cfg_wl(intf, RX_EDPKT_CFG_ENABLE_EN,
  63. RX_EDPKT_CFG_ENABLE);
  64. else
  65. rx_edpkt_cfg_wl(intf, 0x0, RX_EDPKT_CFG_ENABLE);
  66. }
  67. static void bcmasp_set_rx_mode(struct net_device *dev)
  68. {
  69. unsigned char mask[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
  70. struct bcmasp_intf *intf = netdev_priv(dev);
  71. struct netdev_hw_addr *ha;
  72. int ret;
  73. spin_lock_bh(&intf->parent->mda_lock);
  74. bcmasp_disable_all_filters(intf);
  75. if (dev->flags & IFF_PROMISC)
  76. goto set_promisc;
  77. bcmasp_set_promisc(intf, 0);
  78. bcmasp_set_broad(intf, 1);
  79. bcmasp_set_oaddr(intf, dev->dev_addr, 1);
  80. if (dev->flags & IFF_ALLMULTI) {
  81. bcmasp_set_allmulti(intf, 1);
  82. } else {
  83. bcmasp_set_allmulti(intf, 0);
  84. netdev_for_each_mc_addr(ha, dev) {
  85. ret = bcmasp_set_en_mda_filter(intf, ha->addr, mask);
  86. if (ret) {
  87. intf->mib.mc_filters_full_cnt++;
  88. goto set_promisc;
  89. }
  90. }
  91. }
  92. netdev_for_each_uc_addr(ha, dev) {
  93. ret = bcmasp_set_en_mda_filter(intf, ha->addr, mask);
  94. if (ret) {
  95. intf->mib.uc_filters_full_cnt++;
  96. goto set_promisc;
  97. }
  98. }
  99. spin_unlock_bh(&intf->parent->mda_lock);
  100. return;
  101. set_promisc:
  102. bcmasp_set_promisc(intf, 1);
  103. intf->mib.promisc_filters_cnt++;
  104. /* disable all filters used by this port */
  105. bcmasp_disable_all_filters(intf);
  106. spin_unlock_bh(&intf->parent->mda_lock);
  107. }
  108. static void bcmasp_clean_txcb(struct bcmasp_intf *intf, int index)
  109. {
  110. struct bcmasp_tx_cb *txcb = &intf->tx_cbs[index];
  111. txcb->skb = NULL;
  112. dma_unmap_addr_set(txcb, dma_addr, 0);
  113. dma_unmap_len_set(txcb, dma_len, 0);
  114. txcb->last = false;
  115. }
  116. static int tx_spb_ring_full(struct bcmasp_intf *intf, int cnt)
  117. {
  118. int next_index, i;
  119. /* Check if we have enough room for cnt descriptors */
  120. for (i = 0; i < cnt; i++) {
  121. next_index = incr_ring(intf->tx_spb_index, DESC_RING_COUNT);
  122. if (next_index == intf->tx_spb_clean_index)
  123. return 1;
  124. }
  125. return 0;
  126. }
  127. static struct sk_buff *bcmasp_csum_offload(struct net_device *dev,
  128. struct sk_buff *skb,
  129. bool *csum_hw)
  130. {
  131. struct bcmasp_intf *intf = netdev_priv(dev);
  132. u32 header = 0, header2 = 0, epkt = 0;
  133. struct bcmasp_pkt_offload *offload;
  134. unsigned int header_cnt = 0;
  135. u8 ip_proto;
  136. int ret;
  137. if (skb->ip_summed != CHECKSUM_PARTIAL)
  138. return skb;
  139. ret = skb_cow_head(skb, sizeof(*offload));
  140. if (ret < 0) {
  141. intf->mib.tx_realloc_offload_failed++;
  142. goto help;
  143. }
  144. switch (skb->protocol) {
  145. case htons(ETH_P_IP):
  146. header |= PKT_OFFLOAD_HDR_SIZE_2((ip_hdrlen(skb) >> 8) & 0xf);
  147. header2 |= PKT_OFFLOAD_HDR2_SIZE_2(ip_hdrlen(skb) & 0xff);
  148. epkt |= PKT_OFFLOAD_EPKT_IP(0) | PKT_OFFLOAD_EPKT_CSUM_L2;
  149. ip_proto = ip_hdr(skb)->protocol;
  150. header_cnt += 2;
  151. break;
  152. case htons(ETH_P_IPV6):
  153. header |= PKT_OFFLOAD_HDR_SIZE_2((IP6_HLEN >> 8) & 0xf);
  154. header2 |= PKT_OFFLOAD_HDR2_SIZE_2(IP6_HLEN & 0xff);
  155. epkt |= PKT_OFFLOAD_EPKT_IP(1) | PKT_OFFLOAD_EPKT_CSUM_L2;
  156. ip_proto = ipv6_hdr(skb)->nexthdr;
  157. header_cnt += 2;
  158. break;
  159. default:
  160. goto help;
  161. }
  162. switch (ip_proto) {
  163. case IPPROTO_TCP:
  164. header2 |= PKT_OFFLOAD_HDR2_SIZE_3(tcp_hdrlen(skb));
  165. epkt |= PKT_OFFLOAD_EPKT_TP(0) | PKT_OFFLOAD_EPKT_CSUM_L3;
  166. header_cnt++;
  167. break;
  168. case IPPROTO_UDP:
  169. header2 |= PKT_OFFLOAD_HDR2_SIZE_3(UDP_HLEN);
  170. epkt |= PKT_OFFLOAD_EPKT_TP(1) | PKT_OFFLOAD_EPKT_CSUM_L3;
  171. header_cnt++;
  172. break;
  173. default:
  174. goto help;
  175. }
  176. offload = (struct bcmasp_pkt_offload *)skb_push(skb, sizeof(*offload));
  177. header |= PKT_OFFLOAD_HDR_OP | PKT_OFFLOAD_HDR_COUNT(header_cnt) |
  178. PKT_OFFLOAD_HDR_SIZE_1(ETH_HLEN);
  179. epkt |= PKT_OFFLOAD_EPKT_OP;
  180. offload->nop = htonl(PKT_OFFLOAD_NOP);
  181. offload->header = htonl(header);
  182. offload->header2 = htonl(header2);
  183. offload->epkt = htonl(epkt);
  184. offload->end = htonl(PKT_OFFLOAD_END_OP);
  185. *csum_hw = true;
  186. return skb;
  187. help:
  188. skb_checksum_help(skb);
  189. return skb;
  190. }
  191. static unsigned long bcmasp_rx_edpkt_dma_rq(struct bcmasp_intf *intf)
  192. {
  193. return rx_edpkt_dma_rq(intf, RX_EDPKT_DMA_VALID);
  194. }
  195. static void bcmasp_rx_edpkt_cfg_wq(struct bcmasp_intf *intf, dma_addr_t addr)
  196. {
  197. rx_edpkt_cfg_wq(intf, addr, RX_EDPKT_RING_BUFFER_READ);
  198. }
  199. static void bcmasp_rx_edpkt_dma_wq(struct bcmasp_intf *intf, dma_addr_t addr)
  200. {
  201. rx_edpkt_dma_wq(intf, addr, RX_EDPKT_DMA_READ);
  202. }
  203. static unsigned long bcmasp_tx_spb_dma_rq(struct bcmasp_intf *intf)
  204. {
  205. return tx_spb_dma_rq(intf, TX_SPB_DMA_READ);
  206. }
  207. static void bcmasp_tx_spb_dma_wq(struct bcmasp_intf *intf, dma_addr_t addr)
  208. {
  209. tx_spb_dma_wq(intf, addr, TX_SPB_DMA_VALID);
  210. }
  211. static const struct bcmasp_intf_ops bcmasp_intf_ops = {
  212. .rx_desc_read = bcmasp_rx_edpkt_dma_rq,
  213. .rx_buffer_write = bcmasp_rx_edpkt_cfg_wq,
  214. .rx_desc_write = bcmasp_rx_edpkt_dma_wq,
  215. .tx_read = bcmasp_tx_spb_dma_rq,
  216. .tx_write = bcmasp_tx_spb_dma_wq,
  217. };
  218. static netdev_tx_t bcmasp_xmit(struct sk_buff *skb, struct net_device *dev)
  219. {
  220. struct bcmasp_intf *intf = netdev_priv(dev);
  221. unsigned int total_bytes, size;
  222. int spb_index, nr_frags, i, j;
  223. struct bcmasp_tx_cb *txcb;
  224. dma_addr_t mapping, valid;
  225. struct bcmasp_desc *desc;
  226. bool csum_hw = false;
  227. struct device *kdev;
  228. skb_frag_t *frag;
  229. kdev = &intf->parent->pdev->dev;
  230. nr_frags = skb_shinfo(skb)->nr_frags;
  231. if (tx_spb_ring_full(intf, nr_frags + 1)) {
  232. netif_stop_queue(dev);
  233. if (net_ratelimit())
  234. netdev_err(dev, "Tx Ring Full!\n");
  235. return NETDEV_TX_BUSY;
  236. }
  237. /* Save skb len before adding csum offload header */
  238. total_bytes = skb->len;
  239. skb = bcmasp_csum_offload(dev, skb, &csum_hw);
  240. if (!skb)
  241. return NETDEV_TX_OK;
  242. spb_index = intf->tx_spb_index;
  243. valid = intf->tx_spb_dma_valid;
  244. for (i = 0; i <= nr_frags; i++) {
  245. if (!i) {
  246. size = skb_headlen(skb);
  247. if (!nr_frags && size < (ETH_ZLEN + ETH_FCS_LEN)) {
  248. if (skb_put_padto(skb, ETH_ZLEN + ETH_FCS_LEN))
  249. return NETDEV_TX_OK;
  250. size = skb->len;
  251. }
  252. mapping = dma_map_single(kdev, skb->data, size,
  253. DMA_TO_DEVICE);
  254. } else {
  255. frag = &skb_shinfo(skb)->frags[i - 1];
  256. size = skb_frag_size(frag);
  257. mapping = skb_frag_dma_map(kdev, frag, 0, size,
  258. DMA_TO_DEVICE);
  259. }
  260. if (dma_mapping_error(kdev, mapping)) {
  261. intf->mib.tx_dma_failed++;
  262. spb_index = intf->tx_spb_index;
  263. for (j = 0; j < i; j++) {
  264. bcmasp_clean_txcb(intf, spb_index);
  265. spb_index = incr_ring(spb_index,
  266. DESC_RING_COUNT);
  267. }
  268. /* Rewind so we do not have a hole */
  269. spb_index = intf->tx_spb_index;
  270. dev_kfree_skb(skb);
  271. return NETDEV_TX_OK;
  272. }
  273. txcb = &intf->tx_cbs[spb_index];
  274. desc = &intf->tx_spb_cpu[spb_index];
  275. memset(desc, 0, sizeof(*desc));
  276. txcb->skb = skb;
  277. txcb->bytes_sent = total_bytes;
  278. dma_unmap_addr_set(txcb, dma_addr, mapping);
  279. dma_unmap_len_set(txcb, dma_len, size);
  280. if (!i) {
  281. desc->flags |= DESC_SOF;
  282. if (csum_hw)
  283. desc->flags |= DESC_EPKT_CMD;
  284. }
  285. if (i == nr_frags) {
  286. desc->flags |= DESC_EOF;
  287. txcb->last = true;
  288. }
  289. desc->buf = mapping;
  290. desc->size = size;
  291. desc->flags |= DESC_INT_EN;
  292. netif_dbg(intf, tx_queued, dev,
  293. "%s dma_buf=%pad dma_len=0x%x flags=0x%x index=0x%x\n",
  294. __func__, &mapping, desc->size, desc->flags,
  295. spb_index);
  296. spb_index = incr_ring(spb_index, DESC_RING_COUNT);
  297. valid = incr_last_byte(valid, intf->tx_spb_dma_addr,
  298. DESC_RING_COUNT);
  299. }
  300. /* Ensure all descriptors have been written to DRAM for the
  301. * hardware to see up-to-date contents.
  302. */
  303. wmb();
  304. intf->tx_spb_index = spb_index;
  305. intf->tx_spb_dma_valid = valid;
  306. bcmasp_intf_tx_write(intf, intf->tx_spb_dma_valid);
  307. if (tx_spb_ring_full(intf, MAX_SKB_FRAGS + 1))
  308. netif_stop_queue(dev);
  309. return NETDEV_TX_OK;
  310. }
  311. static void bcmasp_netif_start(struct net_device *dev)
  312. {
  313. struct bcmasp_intf *intf = netdev_priv(dev);
  314. bcmasp_set_rx_mode(dev);
  315. napi_enable(&intf->tx_napi);
  316. napi_enable(&intf->rx_napi);
  317. bcmasp_enable_rx_irq(intf, 1);
  318. bcmasp_enable_tx_irq(intf, 1);
  319. bcmasp_enable_phy_irq(intf, 1);
  320. phy_start(dev->phydev);
  321. }
  322. static void umac_reset(struct bcmasp_intf *intf)
  323. {
  324. umac_wl(intf, 0x0, UMC_CMD);
  325. umac_wl(intf, UMC_CMD_SW_RESET, UMC_CMD);
  326. usleep_range(10, 100);
  327. /* We hold the umac in reset and bring it out of
  328. * reset when phy link is up.
  329. */
  330. }
  331. static void umac_set_hw_addr(struct bcmasp_intf *intf,
  332. const unsigned char *addr)
  333. {
  334. u32 mac0 = (addr[0] << 24) | (addr[1] << 16) | (addr[2] << 8) |
  335. addr[3];
  336. u32 mac1 = (addr[4] << 8) | addr[5];
  337. umac_wl(intf, mac0, UMC_MAC0);
  338. umac_wl(intf, mac1, UMC_MAC1);
  339. }
  340. static void umac_enable_set(struct bcmasp_intf *intf, u32 mask,
  341. unsigned int enable)
  342. {
  343. u32 reg;
  344. reg = umac_rl(intf, UMC_CMD);
  345. if (reg & UMC_CMD_SW_RESET)
  346. return;
  347. if (enable)
  348. reg |= mask;
  349. else
  350. reg &= ~mask;
  351. umac_wl(intf, reg, UMC_CMD);
  352. /* UniMAC stops on a packet boundary, wait for a full-sized packet
  353. * to be processed (1 msec).
  354. */
  355. if (enable == 0)
  356. usleep_range(1000, 2000);
  357. }
  358. static void umac_init(struct bcmasp_intf *intf)
  359. {
  360. umac_wl(intf, 0x800, UMC_FRM_LEN);
  361. umac_wl(intf, 0xffff, UMC_PAUSE_CNTRL);
  362. umac_wl(intf, 0x800, UMC_RX_MAX_PKT_SZ);
  363. }
  364. static int bcmasp_tx_reclaim(struct bcmasp_intf *intf)
  365. {
  366. struct bcmasp_intf_stats64 *stats = &intf->stats64;
  367. struct device *kdev = &intf->parent->pdev->dev;
  368. unsigned long read, released = 0;
  369. struct bcmasp_tx_cb *txcb;
  370. struct bcmasp_desc *desc;
  371. dma_addr_t mapping;
  372. read = bcmasp_intf_tx_read(intf);
  373. while (intf->tx_spb_dma_read != read) {
  374. txcb = &intf->tx_cbs[intf->tx_spb_clean_index];
  375. mapping = dma_unmap_addr(txcb, dma_addr);
  376. dma_unmap_single(kdev, mapping,
  377. dma_unmap_len(txcb, dma_len),
  378. DMA_TO_DEVICE);
  379. if (txcb->last) {
  380. dev_consume_skb_any(txcb->skb);
  381. u64_stats_update_begin(&stats->syncp);
  382. u64_stats_inc(&stats->tx_packets);
  383. u64_stats_add(&stats->tx_bytes, txcb->bytes_sent);
  384. u64_stats_update_end(&stats->syncp);
  385. }
  386. desc = &intf->tx_spb_cpu[intf->tx_spb_clean_index];
  387. netif_dbg(intf, tx_done, intf->ndev,
  388. "%s dma_buf=%pad dma_len=0x%x flags=0x%x c_index=0x%x\n",
  389. __func__, &mapping, desc->size, desc->flags,
  390. intf->tx_spb_clean_index);
  391. bcmasp_clean_txcb(intf, intf->tx_spb_clean_index);
  392. released++;
  393. intf->tx_spb_clean_index = incr_ring(intf->tx_spb_clean_index,
  394. DESC_RING_COUNT);
  395. intf->tx_spb_dma_read = incr_first_byte(intf->tx_spb_dma_read,
  396. intf->tx_spb_dma_addr,
  397. DESC_RING_COUNT);
  398. }
  399. return released;
  400. }
  401. static int bcmasp_tx_poll(struct napi_struct *napi, int budget)
  402. {
  403. struct bcmasp_intf *intf =
  404. container_of(napi, struct bcmasp_intf, tx_napi);
  405. int released = 0;
  406. released = bcmasp_tx_reclaim(intf);
  407. napi_complete(&intf->tx_napi);
  408. bcmasp_enable_tx_irq(intf, 1);
  409. if (released)
  410. netif_wake_queue(intf->ndev);
  411. return 0;
  412. }
  413. static int bcmasp_rx_poll(struct napi_struct *napi, int budget)
  414. {
  415. struct bcmasp_intf *intf =
  416. container_of(napi, struct bcmasp_intf, rx_napi);
  417. struct bcmasp_intf_stats64 *stats = &intf->stats64;
  418. struct device *kdev = &intf->parent->pdev->dev;
  419. unsigned long processed = 0;
  420. struct bcmasp_desc *desc;
  421. struct sk_buff *skb;
  422. dma_addr_t valid;
  423. void *data;
  424. u64 flags;
  425. u32 len;
  426. valid = bcmasp_intf_rx_desc_read(intf) + 1;
  427. if (valid == intf->rx_edpkt_dma_addr + DESC_RING_SIZE)
  428. valid = intf->rx_edpkt_dma_addr;
  429. while ((processed < budget) && (valid != intf->rx_edpkt_dma_read)) {
  430. desc = &intf->rx_edpkt_cpu[intf->rx_edpkt_index];
  431. /* Ensure that descriptor has been fully written to DRAM by
  432. * hardware before reading by the CPU
  433. */
  434. rmb();
  435. /* Calculate virt addr by offsetting from physical addr */
  436. data = intf->rx_ring_cpu +
  437. (DESC_ADDR(desc->buf) - intf->rx_ring_dma);
  438. flags = DESC_FLAGS(desc->buf);
  439. if (unlikely(flags & (DESC_CRC_ERR | DESC_RX_SYM_ERR))) {
  440. if (net_ratelimit()) {
  441. netif_err(intf, rx_status, intf->ndev,
  442. "flags=0x%llx\n", flags);
  443. }
  444. u64_stats_update_begin(&stats->syncp);
  445. if (flags & DESC_CRC_ERR)
  446. u64_stats_inc(&stats->rx_crc_errs);
  447. if (flags & DESC_RX_SYM_ERR)
  448. u64_stats_inc(&stats->rx_sym_errs);
  449. u64_stats_update_end(&stats->syncp);
  450. goto next;
  451. }
  452. dma_sync_single_for_cpu(kdev, DESC_ADDR(desc->buf), desc->size,
  453. DMA_FROM_DEVICE);
  454. len = desc->size;
  455. skb = napi_alloc_skb(napi, len);
  456. if (!skb) {
  457. u64_stats_update_begin(&stats->syncp);
  458. u64_stats_inc(&stats->rx_dropped);
  459. u64_stats_update_end(&stats->syncp);
  460. intf->mib.alloc_rx_skb_failed++;
  461. goto next;
  462. }
  463. skb_put(skb, len);
  464. memcpy(skb->data, data, len);
  465. skb_pull(skb, 2);
  466. len -= 2;
  467. if (likely(intf->crc_fwd)) {
  468. skb_trim(skb, len - ETH_FCS_LEN);
  469. len -= ETH_FCS_LEN;
  470. }
  471. if ((intf->ndev->features & NETIF_F_RXCSUM) &&
  472. (desc->buf & DESC_CHKSUM))
  473. skb->ip_summed = CHECKSUM_UNNECESSARY;
  474. skb->protocol = eth_type_trans(skb, intf->ndev);
  475. napi_gro_receive(napi, skb);
  476. u64_stats_update_begin(&stats->syncp);
  477. u64_stats_inc(&stats->rx_packets);
  478. u64_stats_add(&stats->rx_bytes, len);
  479. u64_stats_update_end(&stats->syncp);
  480. next:
  481. bcmasp_intf_rx_buffer_write(intf, (DESC_ADDR(desc->buf) +
  482. desc->size));
  483. processed++;
  484. intf->rx_edpkt_dma_read =
  485. incr_first_byte(intf->rx_edpkt_dma_read,
  486. intf->rx_edpkt_dma_addr,
  487. DESC_RING_COUNT);
  488. intf->rx_edpkt_index = incr_ring(intf->rx_edpkt_index,
  489. DESC_RING_COUNT);
  490. }
  491. bcmasp_intf_rx_desc_write(intf, intf->rx_edpkt_dma_read);
  492. if (processed < budget) {
  493. napi_complete_done(&intf->rx_napi, processed);
  494. bcmasp_enable_rx_irq(intf, 1);
  495. }
  496. return processed;
  497. }
  498. static void bcmasp_adj_link(struct net_device *dev)
  499. {
  500. struct bcmasp_intf *intf = netdev_priv(dev);
  501. struct phy_device *phydev = dev->phydev;
  502. u32 cmd_bits = 0, reg;
  503. int changed = 0;
  504. bool active;
  505. if (intf->old_link != phydev->link) {
  506. changed = 1;
  507. intf->old_link = phydev->link;
  508. }
  509. if (intf->old_duplex != phydev->duplex) {
  510. changed = 1;
  511. intf->old_duplex = phydev->duplex;
  512. }
  513. switch (phydev->speed) {
  514. case SPEED_2500:
  515. cmd_bits = UMC_CMD_SPEED_2500;
  516. break;
  517. case SPEED_1000:
  518. cmd_bits = UMC_CMD_SPEED_1000;
  519. break;
  520. case SPEED_100:
  521. cmd_bits = UMC_CMD_SPEED_100;
  522. break;
  523. case SPEED_10:
  524. cmd_bits = UMC_CMD_SPEED_10;
  525. break;
  526. default:
  527. break;
  528. }
  529. cmd_bits <<= UMC_CMD_SPEED_SHIFT;
  530. if (phydev->duplex == DUPLEX_HALF)
  531. cmd_bits |= UMC_CMD_HD_EN;
  532. if (intf->old_pause != phydev->pause) {
  533. changed = 1;
  534. intf->old_pause = phydev->pause;
  535. }
  536. if (!phydev->pause)
  537. cmd_bits |= UMC_CMD_RX_PAUSE_IGNORE | UMC_CMD_TX_PAUSE_IGNORE;
  538. if (!changed)
  539. return;
  540. if (phydev->link) {
  541. reg = umac_rl(intf, UMC_CMD);
  542. reg &= ~((UMC_CMD_SPEED_MASK << UMC_CMD_SPEED_SHIFT) |
  543. UMC_CMD_HD_EN | UMC_CMD_RX_PAUSE_IGNORE |
  544. UMC_CMD_TX_PAUSE_IGNORE);
  545. reg |= cmd_bits;
  546. if (reg & UMC_CMD_SW_RESET) {
  547. reg &= ~UMC_CMD_SW_RESET;
  548. umac_wl(intf, reg, UMC_CMD);
  549. udelay(2);
  550. reg |= UMC_CMD_TX_EN | UMC_CMD_RX_EN | UMC_CMD_PROMISC;
  551. }
  552. umac_wl(intf, reg, UMC_CMD);
  553. active = phy_init_eee(phydev, 0) >= 0;
  554. bcmasp_eee_enable_set(intf, active);
  555. }
  556. reg = rgmii_rl(intf, RGMII_OOB_CNTRL);
  557. if (phydev->link)
  558. reg |= RGMII_LINK;
  559. else
  560. reg &= ~RGMII_LINK;
  561. rgmii_wl(intf, reg, RGMII_OOB_CNTRL);
  562. if (changed)
  563. phy_print_status(phydev);
  564. }
  565. static int bcmasp_alloc_buffers(struct bcmasp_intf *intf)
  566. {
  567. struct device *kdev = &intf->parent->pdev->dev;
  568. struct page *buffer_pg;
  569. /* Alloc RX */
  570. intf->rx_buf_order = get_order(RING_BUFFER_SIZE);
  571. buffer_pg = alloc_pages(GFP_KERNEL, intf->rx_buf_order);
  572. if (!buffer_pg)
  573. return -ENOMEM;
  574. intf->rx_ring_cpu = page_to_virt(buffer_pg);
  575. intf->rx_ring_dma = dma_map_page(kdev, buffer_pg, 0, RING_BUFFER_SIZE,
  576. DMA_FROM_DEVICE);
  577. if (dma_mapping_error(kdev, intf->rx_ring_dma))
  578. goto free_rx_buffer;
  579. intf->rx_edpkt_cpu = dma_alloc_coherent(kdev, DESC_RING_SIZE,
  580. &intf->rx_edpkt_dma_addr, GFP_KERNEL);
  581. if (!intf->rx_edpkt_cpu)
  582. goto free_rx_buffer_dma;
  583. /* Alloc TX */
  584. intf->tx_spb_cpu = dma_alloc_coherent(kdev, DESC_RING_SIZE,
  585. &intf->tx_spb_dma_addr, GFP_KERNEL);
  586. if (!intf->tx_spb_cpu)
  587. goto free_rx_edpkt_dma;
  588. intf->tx_cbs = kcalloc(DESC_RING_COUNT, sizeof(struct bcmasp_tx_cb),
  589. GFP_KERNEL);
  590. if (!intf->tx_cbs)
  591. goto free_tx_spb_dma;
  592. return 0;
  593. free_tx_spb_dma:
  594. dma_free_coherent(kdev, DESC_RING_SIZE, intf->tx_spb_cpu,
  595. intf->tx_spb_dma_addr);
  596. free_rx_edpkt_dma:
  597. dma_free_coherent(kdev, DESC_RING_SIZE, intf->rx_edpkt_cpu,
  598. intf->rx_edpkt_dma_addr);
  599. free_rx_buffer_dma:
  600. dma_unmap_page(kdev, intf->rx_ring_dma, RING_BUFFER_SIZE,
  601. DMA_FROM_DEVICE);
  602. free_rx_buffer:
  603. __free_pages(buffer_pg, intf->rx_buf_order);
  604. return -ENOMEM;
  605. }
  606. static void bcmasp_reclaim_free_buffers(struct bcmasp_intf *intf)
  607. {
  608. struct device *kdev = &intf->parent->pdev->dev;
  609. /* RX buffers */
  610. dma_free_coherent(kdev, DESC_RING_SIZE, intf->rx_edpkt_cpu,
  611. intf->rx_edpkt_dma_addr);
  612. dma_unmap_page(kdev, intf->rx_ring_dma, RING_BUFFER_SIZE,
  613. DMA_FROM_DEVICE);
  614. __free_pages(virt_to_page(intf->rx_ring_cpu), intf->rx_buf_order);
  615. /* TX buffers */
  616. dma_free_coherent(kdev, DESC_RING_SIZE, intf->tx_spb_cpu,
  617. intf->tx_spb_dma_addr);
  618. kfree(intf->tx_cbs);
  619. }
  620. static void bcmasp_init_rx(struct bcmasp_intf *intf)
  621. {
  622. /* Restart from index 0 */
  623. intf->rx_ring_dma_valid = intf->rx_ring_dma + RING_BUFFER_SIZE - 1;
  624. intf->rx_edpkt_dma_valid = intf->rx_edpkt_dma_addr + (DESC_RING_SIZE - 1);
  625. intf->rx_edpkt_dma_read = intf->rx_edpkt_dma_addr;
  626. intf->rx_edpkt_index = 0;
  627. /* Make sure channels are disabled */
  628. rx_edpkt_cfg_wl(intf, 0x0, RX_EDPKT_CFG_ENABLE);
  629. /* Rx SPB */
  630. rx_edpkt_cfg_wq(intf, intf->rx_ring_dma, RX_EDPKT_RING_BUFFER_READ);
  631. rx_edpkt_cfg_wq(intf, intf->rx_ring_dma, RX_EDPKT_RING_BUFFER_WRITE);
  632. rx_edpkt_cfg_wq(intf, intf->rx_ring_dma, RX_EDPKT_RING_BUFFER_BASE);
  633. rx_edpkt_cfg_wq(intf, intf->rx_ring_dma_valid,
  634. RX_EDPKT_RING_BUFFER_END);
  635. rx_edpkt_cfg_wq(intf, intf->rx_ring_dma_valid,
  636. RX_EDPKT_RING_BUFFER_VALID);
  637. /* EDPKT */
  638. rx_edpkt_cfg_wl(intf, (RX_EDPKT_CFG_CFG0_RBUF_4K <<
  639. RX_EDPKT_CFG_CFG0_DBUF_SHIFT) |
  640. (RX_EDPKT_CFG_CFG0_64_ALN <<
  641. RX_EDPKT_CFG_CFG0_BALN_SHIFT) |
  642. (RX_EDPKT_CFG_CFG0_EFRM_STUF),
  643. RX_EDPKT_CFG_CFG0);
  644. rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr, RX_EDPKT_DMA_WRITE);
  645. rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr, RX_EDPKT_DMA_READ);
  646. rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr, RX_EDPKT_DMA_BASE);
  647. rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_valid, RX_EDPKT_DMA_END);
  648. rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_valid, RX_EDPKT_DMA_VALID);
  649. umac2fb_wl(intf, UMAC2FB_CFG_DEFAULT_EN | ((intf->channel + 11) <<
  650. UMAC2FB_CFG_CHID_SHIFT) | (0xd << UMAC2FB_CFG_OK_SEND_SHIFT),
  651. UMAC2FB_CFG);
  652. }
  653. static void bcmasp_init_tx(struct bcmasp_intf *intf)
  654. {
  655. /* Restart from index 0 */
  656. intf->tx_spb_dma_valid = intf->tx_spb_dma_addr + DESC_RING_SIZE - 1;
  657. intf->tx_spb_dma_read = intf->tx_spb_dma_addr;
  658. intf->tx_spb_index = 0;
  659. intf->tx_spb_clean_index = 0;
  660. memset(intf->tx_cbs, 0, sizeof(struct bcmasp_tx_cb) * DESC_RING_COUNT);
  661. /* Make sure channels are disabled */
  662. tx_spb_ctrl_wl(intf, 0x0, TX_SPB_CTRL_ENABLE);
  663. tx_epkt_core_wl(intf, 0x0, TX_EPKT_C_CFG_MISC);
  664. /* Tx SPB */
  665. tx_spb_ctrl_wl(intf, ((intf->channel + 8) << TX_SPB_CTRL_XF_BID_SHIFT),
  666. TX_SPB_CTRL_XF_CTRL2);
  667. tx_pause_ctrl_wl(intf, (1 << (intf->channel + 8)), TX_PAUSE_MAP_VECTOR);
  668. tx_spb_top_wl(intf, 0x1e, TX_SPB_TOP_BLKOUT);
  669. tx_spb_top_wl(intf, 0x0, TX_SPB_TOP_SPRE_BW_CTRL);
  670. tx_spb_dma_wq(intf, intf->tx_spb_dma_addr, TX_SPB_DMA_READ);
  671. tx_spb_dma_wq(intf, intf->tx_spb_dma_addr, TX_SPB_DMA_BASE);
  672. tx_spb_dma_wq(intf, intf->tx_spb_dma_valid, TX_SPB_DMA_END);
  673. tx_spb_dma_wq(intf, intf->tx_spb_dma_valid, TX_SPB_DMA_VALID);
  674. }
  675. static void bcmasp_ephy_enable_set(struct bcmasp_intf *intf, bool enable)
  676. {
  677. u32 mask = RGMII_EPHY_CFG_IDDQ_BIAS | RGMII_EPHY_CFG_EXT_PWRDOWN |
  678. RGMII_EPHY_CFG_IDDQ_GLOBAL;
  679. u32 reg;
  680. reg = rgmii_rl(intf, RGMII_EPHY_CNTRL);
  681. if (enable) {
  682. reg &= ~RGMII_EPHY_CK25_DIS;
  683. rgmii_wl(intf, reg, RGMII_EPHY_CNTRL);
  684. mdelay(1);
  685. reg &= ~mask;
  686. reg |= RGMII_EPHY_RESET;
  687. rgmii_wl(intf, reg, RGMII_EPHY_CNTRL);
  688. mdelay(1);
  689. reg &= ~RGMII_EPHY_RESET;
  690. } else {
  691. reg |= mask | RGMII_EPHY_RESET;
  692. rgmii_wl(intf, reg, RGMII_EPHY_CNTRL);
  693. mdelay(1);
  694. reg |= RGMII_EPHY_CK25_DIS;
  695. }
  696. rgmii_wl(intf, reg, RGMII_EPHY_CNTRL);
  697. mdelay(1);
  698. /* Set or clear the LED control override to avoid lighting up LEDs
  699. * while the EPHY is powered off and drawing unnecessary current.
  700. */
  701. reg = rgmii_rl(intf, RGMII_SYS_LED_CNTRL);
  702. if (enable)
  703. reg &= ~RGMII_SYS_LED_CNTRL_LINK_OVRD;
  704. else
  705. reg |= RGMII_SYS_LED_CNTRL_LINK_OVRD;
  706. rgmii_wl(intf, reg, RGMII_SYS_LED_CNTRL);
  707. }
  708. static void bcmasp_rgmii_mode_en_set(struct bcmasp_intf *intf, bool enable)
  709. {
  710. u32 reg;
  711. reg = rgmii_rl(intf, RGMII_OOB_CNTRL);
  712. reg &= ~RGMII_OOB_DIS;
  713. if (enable)
  714. reg |= RGMII_MODE_EN;
  715. else
  716. reg &= ~RGMII_MODE_EN;
  717. rgmii_wl(intf, reg, RGMII_OOB_CNTRL);
  718. }
  719. static void bcmasp_netif_deinit(struct net_device *dev)
  720. {
  721. struct bcmasp_intf *intf = netdev_priv(dev);
  722. u32 reg, timeout = 1000;
  723. napi_disable(&intf->tx_napi);
  724. bcmasp_enable_tx(intf, 0);
  725. /* Flush any TX packets in the pipe */
  726. tx_spb_dma_wl(intf, TX_SPB_DMA_FIFO_FLUSH, TX_SPB_DMA_FIFO_CTRL);
  727. do {
  728. reg = tx_spb_dma_rl(intf, TX_SPB_DMA_FIFO_STATUS);
  729. if (!(reg & TX_SPB_DMA_FIFO_FLUSH))
  730. break;
  731. usleep_range(1000, 2000);
  732. } while (timeout-- > 0);
  733. tx_spb_dma_wl(intf, 0x0, TX_SPB_DMA_FIFO_CTRL);
  734. bcmasp_tx_reclaim(intf);
  735. umac_enable_set(intf, UMC_CMD_TX_EN, 0);
  736. phy_stop(dev->phydev);
  737. umac_enable_set(intf, UMC_CMD_RX_EN, 0);
  738. bcmasp_flush_rx_port(intf);
  739. usleep_range(1000, 2000);
  740. bcmasp_enable_rx(intf, 0);
  741. napi_disable(&intf->rx_napi);
  742. /* Disable interrupts */
  743. bcmasp_enable_tx_irq(intf, 0);
  744. bcmasp_enable_rx_irq(intf, 0);
  745. bcmasp_enable_phy_irq(intf, 0);
  746. netif_napi_del(&intf->tx_napi);
  747. netif_napi_del(&intf->rx_napi);
  748. }
  749. static int bcmasp_stop(struct net_device *dev)
  750. {
  751. struct bcmasp_intf *intf = netdev_priv(dev);
  752. netif_dbg(intf, ifdown, dev, "bcmasp stop\n");
  753. /* Stop tx from updating HW */
  754. netif_tx_disable(dev);
  755. bcmasp_netif_deinit(dev);
  756. bcmasp_reclaim_free_buffers(intf);
  757. phy_disconnect(dev->phydev);
  758. /* Disable internal EPHY or external PHY */
  759. if (intf->internal_phy)
  760. bcmasp_ephy_enable_set(intf, false);
  761. else
  762. bcmasp_rgmii_mode_en_set(intf, false);
  763. /* Disable the interface clocks */
  764. bcmasp_core_clock_set_intf(intf, false);
  765. clk_disable_unprepare(intf->parent->clk);
  766. return 0;
  767. }
  768. static void bcmasp_configure_port(struct bcmasp_intf *intf)
  769. {
  770. u32 reg, id_mode_dis = 0;
  771. reg = rgmii_rl(intf, RGMII_PORT_CNTRL);
  772. reg &= ~RGMII_PORT_MODE_MASK;
  773. switch (intf->phy_interface) {
  774. case PHY_INTERFACE_MODE_RGMII:
  775. /* RGMII_NO_ID: TXC transitions at the same time as TXD
  776. * (requires PCB or receiver-side delay)
  777. * RGMII: Add 2ns delay on TXC (90 degree shift)
  778. *
  779. * ID is implicitly disabled for 100Mbps (RG)MII operation.
  780. */
  781. id_mode_dis = RGMII_ID_MODE_DIS;
  782. fallthrough;
  783. case PHY_INTERFACE_MODE_RGMII_TXID:
  784. reg |= RGMII_PORT_MODE_EXT_GPHY;
  785. break;
  786. case PHY_INTERFACE_MODE_MII:
  787. reg |= RGMII_PORT_MODE_EXT_EPHY;
  788. break;
  789. default:
  790. break;
  791. }
  792. if (intf->internal_phy)
  793. reg |= RGMII_PORT_MODE_EPHY;
  794. rgmii_wl(intf, reg, RGMII_PORT_CNTRL);
  795. reg = rgmii_rl(intf, RGMII_OOB_CNTRL);
  796. reg &= ~RGMII_ID_MODE_DIS;
  797. reg |= id_mode_dis;
  798. rgmii_wl(intf, reg, RGMII_OOB_CNTRL);
  799. }
  800. static int bcmasp_netif_init(struct net_device *dev, bool phy_connect)
  801. {
  802. struct bcmasp_intf *intf = netdev_priv(dev);
  803. phy_interface_t phy_iface = intf->phy_interface;
  804. u32 phy_flags = PHY_BRCM_AUTO_PWRDWN_ENABLE |
  805. PHY_BRCM_DIS_TXCRXC_NOENRGY |
  806. PHY_BRCM_IDDQ_SUSPEND;
  807. struct phy_device *phydev = NULL;
  808. int ret;
  809. /* Always enable interface clocks */
  810. bcmasp_core_clock_set_intf(intf, true);
  811. /* Enable internal PHY or external PHY before any MAC activity */
  812. if (intf->internal_phy)
  813. bcmasp_ephy_enable_set(intf, true);
  814. else
  815. bcmasp_rgmii_mode_en_set(intf, true);
  816. bcmasp_configure_port(intf);
  817. /* This is an ugly quirk but we have not been correctly
  818. * interpreting the phy_interface values and we have done that
  819. * across different drivers, so at least we are consistent in
  820. * our mistakes.
  821. *
  822. * When the Generic PHY driver is in use either the PHY has
  823. * been strapped or programmed correctly by the boot loader so
  824. * we should stick to our incorrect interpretation since we
  825. * have validated it.
  826. *
  827. * Now when a dedicated PHY driver is in use, we need to
  828. * reverse the meaning of the phy_interface_mode values to
  829. * something that the PHY driver will interpret and act on such
  830. * that we have two mistakes canceling themselves so to speak.
  831. * We only do this for the two modes that GENET driver
  832. * officially supports on Broadcom STB chips:
  833. * PHY_INTERFACE_MODE_RGMII and PHY_INTERFACE_MODE_RGMII_TXID.
  834. * Other modes are not *officially* supported with the boot
  835. * loader and the scripted environment generating Device Tree
  836. * blobs for those platforms.
  837. *
  838. * Note that internal PHY and fixed-link configurations are not
  839. * affected because they use different phy_interface_t values
  840. * or the Generic PHY driver.
  841. */
  842. switch (phy_iface) {
  843. case PHY_INTERFACE_MODE_RGMII:
  844. phy_iface = PHY_INTERFACE_MODE_RGMII_ID;
  845. break;
  846. case PHY_INTERFACE_MODE_RGMII_TXID:
  847. phy_iface = PHY_INTERFACE_MODE_RGMII_RXID;
  848. break;
  849. default:
  850. break;
  851. }
  852. if (phy_connect) {
  853. phydev = of_phy_connect(dev, intf->phy_dn,
  854. bcmasp_adj_link, phy_flags,
  855. phy_iface);
  856. if (!phydev) {
  857. ret = -ENODEV;
  858. netdev_err(dev, "could not attach to PHY\n");
  859. goto err_phy_disable;
  860. }
  861. if (intf->internal_phy)
  862. dev->phydev->irq = PHY_MAC_INTERRUPT;
  863. /* Indicate that the MAC is responsible for PHY PM */
  864. phydev->mac_managed_pm = true;
  865. }
  866. umac_reset(intf);
  867. umac_init(intf);
  868. umac_set_hw_addr(intf, dev->dev_addr);
  869. intf->old_duplex = -1;
  870. intf->old_link = -1;
  871. intf->old_pause = -1;
  872. bcmasp_init_tx(intf);
  873. netif_napi_add_tx(intf->ndev, &intf->tx_napi, bcmasp_tx_poll);
  874. bcmasp_enable_tx(intf, 1);
  875. bcmasp_init_rx(intf);
  876. netif_napi_add(intf->ndev, &intf->rx_napi, bcmasp_rx_poll);
  877. bcmasp_enable_rx(intf, 1);
  878. intf->crc_fwd = !!(umac_rl(intf, UMC_CMD) & UMC_CMD_CRC_FWD);
  879. bcmasp_netif_start(dev);
  880. netif_start_queue(dev);
  881. return 0;
  882. err_phy_disable:
  883. if (intf->internal_phy)
  884. bcmasp_ephy_enable_set(intf, false);
  885. else
  886. bcmasp_rgmii_mode_en_set(intf, false);
  887. return ret;
  888. }
  889. static int bcmasp_open(struct net_device *dev)
  890. {
  891. struct bcmasp_intf *intf = netdev_priv(dev);
  892. int ret;
  893. netif_dbg(intf, ifup, dev, "bcmasp open\n");
  894. ret = bcmasp_alloc_buffers(intf);
  895. if (ret)
  896. return ret;
  897. ret = clk_prepare_enable(intf->parent->clk);
  898. if (ret)
  899. goto err_free_mem;
  900. ret = bcmasp_netif_init(dev, true);
  901. if (ret) {
  902. clk_disable_unprepare(intf->parent->clk);
  903. goto err_free_mem;
  904. }
  905. return ret;
  906. err_free_mem:
  907. bcmasp_reclaim_free_buffers(intf);
  908. return ret;
  909. }
  910. static void bcmasp_tx_timeout(struct net_device *dev, unsigned int txqueue)
  911. {
  912. struct bcmasp_intf *intf = netdev_priv(dev);
  913. netif_dbg(intf, tx_err, dev, "transmit timeout!\n");
  914. intf->mib.tx_timeout_cnt++;
  915. }
  916. static int bcmasp_get_phys_port_name(struct net_device *dev,
  917. char *name, size_t len)
  918. {
  919. struct bcmasp_intf *intf = netdev_priv(dev);
  920. if (snprintf(name, len, "p%d", intf->port) >= len)
  921. return -EINVAL;
  922. return 0;
  923. }
  924. static void bcmasp_get_stats64(struct net_device *dev,
  925. struct rtnl_link_stats64 *stats)
  926. {
  927. struct bcmasp_intf *intf = netdev_priv(dev);
  928. struct bcmasp_intf_stats64 *lstats;
  929. unsigned int start;
  930. lstats = &intf->stats64;
  931. do {
  932. start = u64_stats_fetch_begin(&lstats->syncp);
  933. stats->rx_packets = u64_stats_read(&lstats->rx_packets);
  934. stats->rx_bytes = u64_stats_read(&lstats->rx_bytes);
  935. stats->rx_dropped = u64_stats_read(&lstats->rx_dropped);
  936. stats->rx_crc_errors = u64_stats_read(&lstats->rx_crc_errs);
  937. stats->rx_frame_errors = u64_stats_read(&lstats->rx_sym_errs);
  938. stats->rx_errors = stats->rx_crc_errors + stats->rx_frame_errors;
  939. stats->tx_packets = u64_stats_read(&lstats->tx_packets);
  940. stats->tx_bytes = u64_stats_read(&lstats->tx_bytes);
  941. } while (u64_stats_fetch_retry(&lstats->syncp, start));
  942. }
  943. static const struct net_device_ops bcmasp_netdev_ops = {
  944. .ndo_open = bcmasp_open,
  945. .ndo_stop = bcmasp_stop,
  946. .ndo_start_xmit = bcmasp_xmit,
  947. .ndo_tx_timeout = bcmasp_tx_timeout,
  948. .ndo_set_rx_mode = bcmasp_set_rx_mode,
  949. .ndo_get_phys_port_name = bcmasp_get_phys_port_name,
  950. .ndo_eth_ioctl = phy_do_ioctl_running,
  951. .ndo_set_mac_address = eth_mac_addr,
  952. .ndo_get_stats64 = bcmasp_get_stats64,
  953. };
  954. static void bcmasp_map_res(struct bcmasp_priv *priv, struct bcmasp_intf *intf)
  955. {
  956. /* Per port */
  957. intf->res.umac = priv->base + UMC_OFFSET(intf);
  958. intf->res.umac2fb = priv->base + (priv->hw_info->umac2fb +
  959. (intf->port * 0x4));
  960. intf->res.rgmii = priv->base + RGMII_OFFSET(intf);
  961. /* Per ch */
  962. intf->tx_spb_dma = priv->base + TX_SPB_DMA_OFFSET(intf);
  963. intf->res.tx_spb_ctrl = priv->base + TX_SPB_CTRL_OFFSET(intf);
  964. intf->res.tx_spb_top = priv->base + TX_SPB_TOP_OFFSET(intf);
  965. intf->res.tx_epkt_core = priv->base + TX_EPKT_C_OFFSET(intf);
  966. intf->res.tx_pause_ctrl = priv->base + TX_PAUSE_CTRL_OFFSET(intf);
  967. intf->rx_edpkt_dma = priv->base + RX_EDPKT_DMA_OFFSET(intf);
  968. intf->rx_edpkt_cfg = priv->base + RX_EDPKT_CFG_OFFSET(intf);
  969. }
  970. #define MAX_IRQ_STR_LEN 64
  971. struct bcmasp_intf *bcmasp_interface_create(struct bcmasp_priv *priv,
  972. struct device_node *ndev_dn, int i)
  973. {
  974. struct device *dev = &priv->pdev->dev;
  975. struct bcmasp_intf *intf;
  976. struct net_device *ndev;
  977. int ch, port, ret;
  978. if (of_property_read_u32(ndev_dn, "reg", &port)) {
  979. dev_warn(dev, "%s: invalid port number\n", ndev_dn->name);
  980. goto err;
  981. }
  982. if (of_property_read_u32(ndev_dn, "brcm,channel", &ch)) {
  983. dev_warn(dev, "%s: invalid ch number\n", ndev_dn->name);
  984. goto err;
  985. }
  986. ndev = alloc_etherdev(sizeof(struct bcmasp_intf));
  987. if (!ndev) {
  988. dev_warn(dev, "%s: unable to alloc ndev\n", ndev_dn->name);
  989. goto err;
  990. }
  991. intf = netdev_priv(ndev);
  992. intf->parent = priv;
  993. intf->ndev = ndev;
  994. intf->channel = ch;
  995. intf->port = port;
  996. intf->ndev_dn = ndev_dn;
  997. intf->index = i;
  998. ret = of_get_phy_mode(ndev_dn, &intf->phy_interface);
  999. if (ret < 0) {
  1000. dev_err(dev, "invalid PHY mode property\n");
  1001. goto err_free_netdev;
  1002. }
  1003. if (intf->phy_interface == PHY_INTERFACE_MODE_INTERNAL)
  1004. intf->internal_phy = true;
  1005. intf->phy_dn = of_parse_phandle(ndev_dn, "phy-handle", 0);
  1006. if (!intf->phy_dn && of_phy_is_fixed_link(ndev_dn)) {
  1007. ret = of_phy_register_fixed_link(ndev_dn);
  1008. if (ret) {
  1009. dev_warn(dev, "%s: failed to register fixed PHY\n",
  1010. ndev_dn->name);
  1011. goto err_free_netdev;
  1012. }
  1013. intf->phy_dn = ndev_dn;
  1014. }
  1015. /* Map resource */
  1016. bcmasp_map_res(priv, intf);
  1017. if ((!phy_interface_mode_is_rgmii(intf->phy_interface) &&
  1018. intf->phy_interface != PHY_INTERFACE_MODE_MII &&
  1019. intf->phy_interface != PHY_INTERFACE_MODE_INTERNAL) ||
  1020. (intf->port != 1 && intf->internal_phy)) {
  1021. netdev_err(intf->ndev, "invalid PHY mode: %s for port %d\n",
  1022. phy_modes(intf->phy_interface), intf->port);
  1023. ret = -EINVAL;
  1024. goto err_free_netdev;
  1025. }
  1026. ret = of_get_ethdev_address(ndev_dn, ndev);
  1027. if (ret) {
  1028. netdev_warn(ndev, "using random Ethernet MAC\n");
  1029. eth_hw_addr_random(ndev);
  1030. }
  1031. SET_NETDEV_DEV(ndev, dev);
  1032. intf->ops = &bcmasp_intf_ops;
  1033. ndev->netdev_ops = &bcmasp_netdev_ops;
  1034. ndev->ethtool_ops = &bcmasp_ethtool_ops;
  1035. intf->msg_enable = netif_msg_init(-1, NETIF_MSG_DRV |
  1036. NETIF_MSG_PROBE |
  1037. NETIF_MSG_LINK);
  1038. ndev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
  1039. NETIF_F_RXCSUM;
  1040. ndev->hw_features |= ndev->features;
  1041. ndev->needed_headroom += sizeof(struct bcmasp_pkt_offload);
  1042. return intf;
  1043. err_free_netdev:
  1044. free_netdev(ndev);
  1045. err:
  1046. return NULL;
  1047. }
  1048. void bcmasp_interface_destroy(struct bcmasp_intf *intf)
  1049. {
  1050. if (intf->ndev->reg_state == NETREG_REGISTERED)
  1051. unregister_netdev(intf->ndev);
  1052. if (of_phy_is_fixed_link(intf->ndev_dn))
  1053. of_phy_deregister_fixed_link(intf->ndev_dn);
  1054. free_netdev(intf->ndev);
  1055. }
  1056. static void bcmasp_suspend_to_wol(struct bcmasp_intf *intf)
  1057. {
  1058. struct net_device *ndev = intf->ndev;
  1059. u32 reg;
  1060. reg = umac_rl(intf, UMC_MPD_CTRL);
  1061. if (intf->wolopts & (WAKE_MAGIC | WAKE_MAGICSECURE))
  1062. reg |= UMC_MPD_CTRL_MPD_EN;
  1063. reg &= ~UMC_MPD_CTRL_PSW_EN;
  1064. if (intf->wolopts & WAKE_MAGICSECURE) {
  1065. /* Program the SecureOn password */
  1066. umac_wl(intf, get_unaligned_be16(&intf->sopass[0]),
  1067. UMC_PSW_MS);
  1068. umac_wl(intf, get_unaligned_be32(&intf->sopass[2]),
  1069. UMC_PSW_LS);
  1070. reg |= UMC_MPD_CTRL_PSW_EN;
  1071. }
  1072. umac_wl(intf, reg, UMC_MPD_CTRL);
  1073. if (intf->wolopts & WAKE_FILTER)
  1074. bcmasp_netfilt_suspend(intf);
  1075. /* Bring UniMAC out of reset if needed and enable RX */
  1076. reg = umac_rl(intf, UMC_CMD);
  1077. if (reg & UMC_CMD_SW_RESET)
  1078. reg &= ~UMC_CMD_SW_RESET;
  1079. reg |= UMC_CMD_RX_EN | UMC_CMD_PROMISC;
  1080. umac_wl(intf, reg, UMC_CMD);
  1081. umac_enable_set(intf, UMC_CMD_RX_EN, 1);
  1082. if (intf->parent->wol_irq > 0) {
  1083. wakeup_intr2_core_wl(intf->parent, 0xffffffff,
  1084. ASP_WAKEUP_INTR2_MASK_CLEAR);
  1085. }
  1086. if (intf->eee.eee_enabled && intf->parent->eee_fixup)
  1087. intf->parent->eee_fixup(intf, true);
  1088. netif_dbg(intf, wol, ndev, "entered WOL mode\n");
  1089. }
  1090. int bcmasp_interface_suspend(struct bcmasp_intf *intf)
  1091. {
  1092. struct device *kdev = &intf->parent->pdev->dev;
  1093. struct net_device *dev = intf->ndev;
  1094. if (!netif_running(dev))
  1095. return 0;
  1096. netif_device_detach(dev);
  1097. bcmasp_netif_deinit(dev);
  1098. if (!intf->wolopts) {
  1099. if (intf->internal_phy)
  1100. bcmasp_ephy_enable_set(intf, false);
  1101. else
  1102. bcmasp_rgmii_mode_en_set(intf, false);
  1103. /* If Wake-on-LAN is disabled, we can safely
  1104. * disable the network interface clocks.
  1105. */
  1106. bcmasp_core_clock_set_intf(intf, false);
  1107. }
  1108. if (device_may_wakeup(kdev) && intf->wolopts)
  1109. bcmasp_suspend_to_wol(intf);
  1110. clk_disable_unprepare(intf->parent->clk);
  1111. return 0;
  1112. }
  1113. static void bcmasp_resume_from_wol(struct bcmasp_intf *intf)
  1114. {
  1115. u32 reg;
  1116. if (intf->eee.eee_enabled && intf->parent->eee_fixup)
  1117. intf->parent->eee_fixup(intf, false);
  1118. reg = umac_rl(intf, UMC_MPD_CTRL);
  1119. reg &= ~UMC_MPD_CTRL_MPD_EN;
  1120. umac_wl(intf, reg, UMC_MPD_CTRL);
  1121. if (intf->parent->wol_irq > 0) {
  1122. wakeup_intr2_core_wl(intf->parent, 0xffffffff,
  1123. ASP_WAKEUP_INTR2_MASK_SET);
  1124. }
  1125. }
  1126. int bcmasp_interface_resume(struct bcmasp_intf *intf)
  1127. {
  1128. struct net_device *dev = intf->ndev;
  1129. int ret;
  1130. if (!netif_running(dev))
  1131. return 0;
  1132. ret = clk_prepare_enable(intf->parent->clk);
  1133. if (ret)
  1134. return ret;
  1135. ret = bcmasp_netif_init(dev, false);
  1136. if (ret)
  1137. goto out;
  1138. bcmasp_resume_from_wol(intf);
  1139. if (intf->eee.eee_enabled)
  1140. bcmasp_eee_enable_set(intf, true);
  1141. netif_device_attach(dev);
  1142. return 0;
  1143. out:
  1144. clk_disable_unprepare(intf->parent->clk);
  1145. return ret;
  1146. }