1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) 2014-2015 Hisilicon Limited.
4 */
5
6#include <linux/clk.h>
7#include <linux/cpumask.h>
8#include <linux/etherdevice.h>
9#include <linux/if_vlan.h>
10#include <linux/interrupt.h>
11#include <linux/io.h>
12#include <linux/ip.h>
13#include <linux/ipv6.h>
14#include <linux/irq.h>
15#include <linux/module.h>
16#include <linux/phy.h>
17#include <linux/platform_device.h>
18#include <linux/skbuff.h>
19
20#include "hnae.h"
21#include "hns_enet.h"
22#include "hns_dsaf_mac.h"
23
24#define NIC_MAX_Q_PER_VF 16
25#define HNS_NIC_TX_TIMEOUT (5 * HZ)
26
27#define SERVICE_TIMER_HZ (1 * HZ)
28
29#define RCB_IRQ_NOT_INITED 0
30#define RCB_IRQ_INITED 1
31#define HNS_BUFFER_SIZE_2048 2048
32
33#define BD_MAX_SEND_SIZE 8191
34#define SKB_TMP_LEN(SKB) \
35	(((SKB)->transport_header - (SKB)->mac_header) + tcp_hdrlen(SKB))
36
37static void fill_v2_desc_hw(struct hnae_ring *ring, void *priv, int size,
38			    int send_sz, dma_addr_t dma, int frag_end,
39			    int buf_num, enum hns_desc_type type, int mtu)
40{
41	struct hnae_desc *desc = &ring->desc[ring->next_to_use];
42	struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use];
43	struct iphdr *iphdr;
44	struct ipv6hdr *ipv6hdr;
45	struct sk_buff *skb;
46	__be16 protocol;
47	u8 bn_pid = 0;
48	u8 rrcfv = 0;
49	u8 ip_offset = 0;
50	u8 tvsvsn = 0;
51	u16 mss = 0;
52	u8 l4_len = 0;
53	u16 paylen = 0;
54
55	desc_cb->priv = priv;
56	desc_cb->length = size;
57	desc_cb->dma = dma;
58	desc_cb->type = type;
59
60	desc->addr = cpu_to_le64(dma);
61	desc->tx.send_size = cpu_to_le16((u16)send_sz);
62
63	/* config bd buffer end */
64	hnae_set_bit(rrcfv, HNSV2_TXD_VLD_B, 1);
65	hnae_set_field(bn_pid, HNSV2_TXD_BUFNUM_M, 0, buf_num - 1);
66
67	/* fill port_id in the tx bd for sending management pkts */
68	hnae_set_field(bn_pid, HNSV2_TXD_PORTID_M,
69		       HNSV2_TXD_PORTID_S, ring->q->handle->dport_id);
70
71	if (type == DESC_TYPE_SKB) {
72		skb = (struct sk_buff *)priv;
73
74		if (skb->ip_summed == CHECKSUM_PARTIAL) {
75			skb_reset_mac_len(skb);
76			protocol = skb->protocol;
77			ip_offset = ETH_HLEN;
78
79			if (protocol == htons(ETH_P_8021Q)) {
80				ip_offset += VLAN_HLEN;
81				protocol = vlan_get_protocol(skb);
82				skb->protocol = protocol;
83			}
84
85			if (skb->protocol == htons(ETH_P_IP)) {
86				iphdr = ip_hdr(skb);
87				hnae_set_bit(rrcfv, HNSV2_TXD_L3CS_B, 1);
88				hnae_set_bit(rrcfv, HNSV2_TXD_L4CS_B, 1);
89
90				/* check for tcp/udp header */
91				if (iphdr->protocol == IPPROTO_TCP &&
92				    skb_is_gso(skb)) {
93					hnae_set_bit(tvsvsn,
94						     HNSV2_TXD_TSE_B, 1);
95					l4_len = tcp_hdrlen(skb);
96					mss = skb_shinfo(skb)->gso_size;
97					paylen = skb->len - SKB_TMP_LEN(skb);
98				}
99			} else if (skb->protocol == htons(ETH_P_IPV6)) {
100				hnae_set_bit(tvsvsn, HNSV2_TXD_IPV6_B, 1);
101				ipv6hdr = ipv6_hdr(skb);
102				hnae_set_bit(rrcfv, HNSV2_TXD_L4CS_B, 1);
103
104				/* check for tcp/udp header */
105				if (ipv6hdr->nexthdr == IPPROTO_TCP &&
106				    skb_is_gso(skb) && skb_is_gso_v6(skb)) {
107					hnae_set_bit(tvsvsn,
108						     HNSV2_TXD_TSE_B, 1);
109					l4_len = tcp_hdrlen(skb);
110					mss = skb_shinfo(skb)->gso_size;
111					paylen = skb->len - SKB_TMP_LEN(skb);
112				}
113			}
114			desc->tx.ip_offset = ip_offset;
115			desc->tx.tse_vlan_snap_v6_sctp_nth = tvsvsn;
116			desc->tx.mss = cpu_to_le16(mss);
117			desc->tx.l4_len = l4_len;
118			desc->tx.paylen = cpu_to_le16(paylen);
119		}
120	}
121
122	hnae_set_bit(rrcfv, HNSV2_TXD_FE_B, frag_end);
123
124	desc->tx.bn_pid = bn_pid;
125	desc->tx.ra_ri_cs_fe_vld = rrcfv;
126
127	ring_ptr_move_fw(ring, next_to_use);
128}
129
130static void fill_v2_desc(struct hnae_ring *ring, void *priv,
131			 int size, dma_addr_t dma, int frag_end,
132			 int buf_num, enum hns_desc_type type, int mtu)
133{
134	fill_v2_desc_hw(ring, priv, size, size, dma, frag_end,
135			buf_num, type, mtu);
136}
137
138static const struct acpi_device_id hns_enet_acpi_match[] = {
139	{ "HISI00C1", 0 },
140	{ "HISI00C2", 0 },
141	{ },
142};
143MODULE_DEVICE_TABLE(acpi, hns_enet_acpi_match);
144
145static void fill_desc(struct hnae_ring *ring, void *priv,
146		      int size, dma_addr_t dma, int frag_end,
147		      int buf_num, enum hns_desc_type type, int mtu)
148{
149	struct hnae_desc *desc = &ring->desc[ring->next_to_use];
150	struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use];
151	struct sk_buff *skb;
152	__be16 protocol;
153	u32 ip_offset;
154	u32 asid_bufnum_pid = 0;
155	u32 flag_ipoffset = 0;
156
157	desc_cb->priv = priv;
158	desc_cb->length = size;
159	desc_cb->dma = dma;
160	desc_cb->type = type;
161
162	desc->addr = cpu_to_le64(dma);
163	desc->tx.send_size = cpu_to_le16((u16)size);
164
165	/*config bd buffer end */
166	flag_ipoffset |= 1 << HNS_TXD_VLD_B;
167
168	asid_bufnum_pid |= buf_num << HNS_TXD_BUFNUM_S;
169
170	if (type == DESC_TYPE_SKB) {
171		skb = (struct sk_buff *)priv;
172
173		if (skb->ip_summed == CHECKSUM_PARTIAL) {
174			protocol = skb->protocol;
175			ip_offset = ETH_HLEN;
176
177			/*if it is a SW VLAN check the next protocol*/
178			if (protocol == htons(ETH_P_8021Q)) {
179				ip_offset += VLAN_HLEN;
180				protocol = vlan_get_protocol(skb);
181				skb->protocol = protocol;
182			}
183
184			if (skb->protocol == htons(ETH_P_IP)) {
185				flag_ipoffset |= 1 << HNS_TXD_L3CS_B;
186				/* check for tcp/udp header */
187				flag_ipoffset |= 1 << HNS_TXD_L4CS_B;
188
189			} else if (skb->protocol == htons(ETH_P_IPV6)) {
190				/* ipv6 has not l3 cs, check for L4 header */
191				flag_ipoffset |= 1 << HNS_TXD_L4CS_B;
192			}
193
194			flag_ipoffset |= ip_offset << HNS_TXD_IPOFFSET_S;
195		}
196	}
197
198	flag_ipoffset |= frag_end << HNS_TXD_FE_B;
199
200	desc->tx.asid_bufnum_pid = cpu_to_le16(asid_bufnum_pid);
201	desc->tx.flag_ipoffset = cpu_to_le32(flag_ipoffset);
202
203	ring_ptr_move_fw(ring, next_to_use);
204}
205
206static void unfill_desc(struct hnae_ring *ring)
207{
208	ring_ptr_move_bw(ring, next_to_use);
209}
210
211static int hns_nic_maybe_stop_tx(
212	struct sk_buff **out_skb, int *bnum, struct hnae_ring *ring)
213{
214	struct sk_buff *skb = *out_skb;
215	struct sk_buff *new_skb = NULL;
216	int buf_num;
217
218	/* no. of segments (plus a header) */
219	buf_num = skb_shinfo(skb)->nr_frags + 1;
220
221	if (unlikely(buf_num > ring->max_desc_num_per_pkt)) {
222		if (ring_space(ring) < 1)
223			return -EBUSY;
224
225		new_skb = skb_copy(skb, GFP_ATOMIC);
226		if (!new_skb)
227			return -ENOMEM;
228
229		dev_kfree_skb_any(skb);
230		*out_skb = new_skb;
231		buf_num = 1;
232	} else if (buf_num > ring_space(ring)) {
233		return -EBUSY;
234	}
235
236	*bnum = buf_num;
237	return 0;
238}
239
240static int hns_nic_maybe_stop_tso(
241	struct sk_buff **out_skb, int *bnum, struct hnae_ring *ring)
242{
243	int i;
244	int size;
245	int buf_num;
246	int frag_num;
247	struct sk_buff *skb = *out_skb;
248	struct sk_buff *new_skb = NULL;
249	skb_frag_t *frag;
250
251	size = skb_headlen(skb);
252	buf_num = (size + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE;
253
254	frag_num = skb_shinfo(skb)->nr_frags;
255	for (i = 0; i < frag_num; i++) {
256		frag = &skb_shinfo(skb)->frags[i];
257		size = skb_frag_size(frag);
258		buf_num += (size + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE;
259	}
260
261	if (unlikely(buf_num > ring->max_desc_num_per_pkt)) {
262		buf_num = (skb->len + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE;
263		if (ring_space(ring) < buf_num)
264			return -EBUSY;
265		/* manual split the send packet */
266		new_skb = skb_copy(skb, GFP_ATOMIC);
267		if (!new_skb)
268			return -ENOMEM;
269		dev_kfree_skb_any(skb);
270		*out_skb = new_skb;
271
272	} else if (ring_space(ring) < buf_num) {
273		return -EBUSY;
274	}
275
276	*bnum = buf_num;
277	return 0;
278}
279
280static void fill_tso_desc(struct hnae_ring *ring, void *priv,
281			  int size, dma_addr_t dma, int frag_end,
282			  int buf_num, enum hns_desc_type type, int mtu)
283{
284	int frag_buf_num;
285	int sizeoflast;
286	int k;
287
288	frag_buf_num = (size + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE;
289	sizeoflast = size % BD_MAX_SEND_SIZE;
290	sizeoflast = sizeoflast ? sizeoflast : BD_MAX_SEND_SIZE;
291
292	/* when the frag size is bigger than hardware, split this frag */
293	for (k = 0; k < frag_buf_num; k++)
294		fill_v2_desc_hw(ring, priv, k == 0 ? size : 0,
295				(k == frag_buf_num - 1) ?
296					sizeoflast : BD_MAX_SEND_SIZE,
297				dma + BD_MAX_SEND_SIZE * k,
298				frag_end && (k == frag_buf_num - 1) ? 1 : 0,
299				buf_num,
300				(type == DESC_TYPE_SKB && !k) ?
301					DESC_TYPE_SKB : DESC_TYPE_PAGE,
302				mtu);
303}
304
305netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
306				struct sk_buff *skb,
307				struct hns_nic_ring_data *ring_data)
308{
309	struct hns_nic_priv *priv = netdev_priv(ndev);
310	struct hnae_ring *ring = ring_data->ring;
311	struct device *dev = ring_to_dev(ring);
312	struct netdev_queue *dev_queue;
313	skb_frag_t *frag;
314	int buf_num;
315	int seg_num;
316	dma_addr_t dma;
317	int size, next_to_use;
318	int i;
319
320	switch (priv->ops.maybe_stop_tx(&skb, &buf_num, ring)) {
321	case -EBUSY:
322		ring->stats.tx_busy++;
323		goto out_net_tx_busy;
324	case -ENOMEM:
325		ring->stats.sw_err_cnt++;
326		netdev_err(ndev, "no memory to xmit!\n");
327		goto out_err_tx_ok;
328	default:
329		break;
330	}
331
332	/* no. of segments (plus a header) */
333	seg_num = skb_shinfo(skb)->nr_frags + 1;
334	next_to_use = ring->next_to_use;
335
336	/* fill the first part */
337	size = skb_headlen(skb);
338	dma = dma_map_single(dev, skb->data, size, DMA_TO_DEVICE);
339	if (dma_mapping_error(dev, dma)) {
340		netdev_err(ndev, "TX head DMA map failed\n");
341		ring->stats.sw_err_cnt++;
342		goto out_err_tx_ok;
343	}
344	priv->ops.fill_desc(ring, skb, size, dma, seg_num == 1 ? 1 : 0,
345			    buf_num, DESC_TYPE_SKB, ndev->mtu);
346
347	/* fill the fragments */
348	for (i = 1; i < seg_num; i++) {
349		frag = &skb_shinfo(skb)->frags[i - 1];
350		size = skb_frag_size(frag);
351		dma = skb_frag_dma_map(dev, frag, 0, size, DMA_TO_DEVICE);
352		if (dma_mapping_error(dev, dma)) {
353			netdev_err(ndev, "TX frag(%d) DMA map failed\n", i);
354			ring->stats.sw_err_cnt++;
355			goto out_map_frag_fail;
356		}
357		priv->ops.fill_desc(ring, skb_frag_page(frag), size, dma,
358				    seg_num - 1 == i ? 1 : 0, buf_num,
359				    DESC_TYPE_PAGE, ndev->mtu);
360	}
361
362	/*complete translate all packets*/
363	dev_queue = netdev_get_tx_queue(ndev, skb->queue_mapping);
364	netdev_tx_sent_queue(dev_queue, skb->len);
365
366	netif_trans_update(ndev);
367	ndev->stats.tx_bytes += skb->len;
368	ndev->stats.tx_packets++;
369
370	wmb(); /* commit all data before submit */
371	assert(skb->queue_mapping < priv->ae_handle->q_num);
372	hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);
373
374	return NETDEV_TX_OK;
375
376out_map_frag_fail:
377
378	while (ring->next_to_use != next_to_use) {
379		unfill_desc(ring);
380		if (ring->next_to_use != next_to_use)
381			dma_unmap_page(dev,
382				       ring->desc_cb[ring->next_to_use].dma,
383				       ring->desc_cb[ring->next_to_use].length,
384				       DMA_TO_DEVICE);
385		else
386			dma_unmap_single(dev,
387					 ring->desc_cb[next_to_use].dma,
388					 ring->desc_cb[next_to_use].length,
389					 DMA_TO_DEVICE);
390	}
391
392out_err_tx_ok:
393
394	dev_kfree_skb_any(skb);
395	return NETDEV_TX_OK;
396
397out_net_tx_busy:
398
399	netif_stop_subqueue(ndev, skb->queue_mapping);
400
401	/* Herbert's original patch had:
402	 *  smp_mb__after_netif_stop_queue();
403	 * but since that doesn't exist yet, just open code it.
404	 */
405	smp_mb();
406	return NETDEV_TX_BUSY;
407}
408
409static void hns_nic_reuse_page(struct sk_buff *skb, int i,
410			       struct hnae_ring *ring, int pull_len,
411			       struct hnae_desc_cb *desc_cb)
412{
413	struct hnae_desc *desc;
414	u32 truesize;
415	int size;
416	int last_offset;
417	bool twobufs;
418
419	twobufs = ((PAGE_SIZE < 8192) &&
420		hnae_buf_size(ring) == HNS_BUFFER_SIZE_2048);
421
422	desc = &ring->desc[ring->next_to_clean];
423	size = le16_to_cpu(desc->rx.size);
424
425	if (twobufs) {
426		truesize = hnae_buf_size(ring);
427	} else {
428		truesize = ALIGN(size, L1_CACHE_BYTES);
429		last_offset = hnae_page_size(ring) - hnae_buf_size(ring);
430	}
431
432	skb_add_rx_frag(skb, i, desc_cb->priv, desc_cb->page_offset + pull_len,
433			size - pull_len, truesize);
434
435	 /* avoid re-using remote pages,flag default unreuse */
436	if (unlikely(page_to_nid(desc_cb->priv) != numa_node_id()))
437		return;
438
439	if (twobufs) {
440		/* if we are only owner of page we can reuse it */
441		if (likely(page_count(desc_cb->priv) == 1)) {
442			/* flip page offset to other buffer */
443			desc_cb->page_offset ^= truesize;
444
445			desc_cb->reuse_flag = 1;
446			/* bump ref count on page before it is given*/
447			get_page(desc_cb->priv);
448		}
449		return;
450	}
451
452	/* move offset up to the next cache line */
453	desc_cb->page_offset += truesize;
454
455	if (desc_cb->page_offset <= last_offset) {
456		desc_cb->reuse_flag = 1;
457		/* bump ref count on page before it is given*/
458		get_page(desc_cb->priv);
459	}
460}
461
462static void get_v2rx_desc_bnum(u32 bnum_flag, int *out_bnum)
463{
464	*out_bnum = hnae_get_field(bnum_flag,
465				   HNS_RXD_BUFNUM_M, HNS_RXD_BUFNUM_S) + 1;
466}
467
468static void get_rx_desc_bnum(u32 bnum_flag, int *out_bnum)
469{
470	*out_bnum = hnae_get_field(bnum_flag,
471				   HNS_RXD_BUFNUM_M, HNS_RXD_BUFNUM_S);
472}
473
474static void hns_nic_rx_checksum(struct hns_nic_ring_data *ring_data,
475				struct sk_buff *skb, u32 flag)
476{
477	struct net_device *netdev = ring_data->napi.dev;
478	u32 l3id;
479	u32 l4id;
480
481	/* check if RX checksum offload is enabled */
482	if (unlikely(!(netdev->features & NETIF_F_RXCSUM)))
483		return;
484
485	/* In hardware, we only support checksum for the following protocols:
486	 * 1) IPv4,
487	 * 2) TCP(over IPv4 or IPv6),
488	 * 3) UDP(over IPv4 or IPv6),
489	 * 4) SCTP(over IPv4 or IPv6)
490	 * but we support many L3(IPv4, IPv6, MPLS, PPPoE etc) and L4(TCP,
491	 * UDP, GRE, SCTP, IGMP, ICMP etc.) protocols.
492	 *
493	 * Hardware limitation:
494	 * Our present hardware RX Descriptor lacks L3/L4 checksum "Status &
495	 * Error" bit (which usually can be used to indicate whether checksum
496	 * was calculated by the hardware and if there was any error encountered
497	 * during checksum calculation).
498	 *
499	 * Software workaround:
500	 * We do get info within the RX descriptor about the kind of L3/L4
501	 * protocol coming in the packet and the error status. These errors
502	 * might not just be checksum errors but could be related to version,
503	 * length of IPv4, UDP, TCP etc.
504	 * Because there is no-way of knowing if it is a L3/L4 error due to bad
505	 * checksum or any other L3/L4 error, we will not (cannot) convey
506	 * checksum status for such cases to upper stack and will not maintain
507	 * the RX L3/L4 checksum counters as well.
508	 */
509
510	l3id = hnae_get_field(flag, HNS_RXD_L3ID_M, HNS_RXD_L3ID_S);
511	l4id = hnae_get_field(flag, HNS_RXD_L4ID_M, HNS_RXD_L4ID_S);
512
513	/*  check L3 protocol for which checksum is supported */
514	if ((l3id != HNS_RX_FLAG_L3ID_IPV4) && (l3id != HNS_RX_FLAG_L3ID_IPV6))
515		return;
516
517	/* check for any(not just checksum)flagged L3 protocol errors */
518	if (unlikely(hnae_get_bit(flag, HNS_RXD_L3E_B)))
519		return;
520
521	/* we do not support checksum of fragmented packets */
522	if (unlikely(hnae_get_bit(flag, HNS_RXD_FRAG_B)))
523		return;
524
525	/*  check L4 protocol for which checksum is supported */
526	if ((l4id != HNS_RX_FLAG_L4ID_TCP) &&
527	    (l4id != HNS_RX_FLAG_L4ID_UDP) &&
528	    (l4id != HNS_RX_FLAG_L4ID_SCTP))
529		return;
530
531	/* check for any(not just checksum)flagged L4 protocol errors */
532	if (unlikely(hnae_get_bit(flag, HNS_RXD_L4E_B)))
533		return;
534
535	/* now, this has to be a packet with valid RX checksum */
536	skb->ip_summed = CHECKSUM_UNNECESSARY;
537}
538
539static int hns_nic_poll_rx_skb(struct hns_nic_ring_data *ring_data,
540			       struct sk_buff **out_skb, int *out_bnum)
541{
542	struct hnae_ring *ring = ring_data->ring;
543	struct net_device *ndev = ring_data->napi.dev;
544	struct hns_nic_priv *priv = netdev_priv(ndev);
545	struct sk_buff *skb;
546	struct hnae_desc *desc;
547	struct hnae_desc_cb *desc_cb;
548	unsigned char *va;
549	int bnum, length, i;
550	int pull_len;
551	u32 bnum_flag;
552
553	desc = &ring->desc[ring->next_to_clean];
554	desc_cb = &ring->desc_cb[ring->next_to_clean];
555
556	prefetch(desc);
557
558	va = (unsigned char *)desc_cb->buf + desc_cb->page_offset;
559
560	/* prefetch first cache line of first page */
561	net_prefetch(va);
562
563	skb = *out_skb = napi_alloc_skb(&ring_data->napi,
564					HNS_RX_HEAD_SIZE);
565	if (unlikely(!skb)) {
566		ring->stats.sw_err_cnt++;
567		return -ENOMEM;
568	}
569
570	prefetchw(skb->data);
571	length = le16_to_cpu(desc->rx.pkt_len);
572	bnum_flag = le32_to_cpu(desc->rx.ipoff_bnum_pid_flag);
573	priv->ops.get_rxd_bnum(bnum_flag, &bnum);
574	*out_bnum = bnum;
575
576	if (length <= HNS_RX_HEAD_SIZE) {
577		memcpy(__skb_put(skb, length), va, ALIGN(length, sizeof(long)));
578
579		/* we can reuse buffer as-is, just make sure it is local */
580		if (likely(page_to_nid(desc_cb->priv) == numa_node_id()))
581			desc_cb->reuse_flag = 1;
582		else /* this page cannot be reused so discard it */
583			put_page(desc_cb->priv);
584
585		ring_ptr_move_fw(ring, next_to_clean);
586
587		if (unlikely(bnum != 1)) { /* check err*/
588			*out_bnum = 1;
589			goto out_bnum_err;
590		}
591	} else {
592		ring->stats.seg_pkt_cnt++;
593
594		pull_len = eth_get_headlen(ndev, va, HNS_RX_HEAD_SIZE);
595		memcpy(__skb_put(skb, pull_len), va,
596		       ALIGN(pull_len, sizeof(long)));
597
598		hns_nic_reuse_page(skb, 0, ring, pull_len, desc_cb);
599		ring_ptr_move_fw(ring, next_to_clean);
600
601		if (unlikely(bnum >= (int)MAX_SKB_FRAGS)) { /* check err*/
602			*out_bnum = 1;
603			goto out_bnum_err;
604		}
605		for (i = 1; i < bnum; i++) {
606			desc = &ring->desc[ring->next_to_clean];
607			desc_cb = &ring->desc_cb[ring->next_to_clean];
608
609			hns_nic_reuse_page(skb, i, ring, 0, desc_cb);
610			ring_ptr_move_fw(ring, next_to_clean);
611		}
612	}
613
614	/* check except process, free skb and jump the desc */
615	if (unlikely((!bnum) || (bnum > ring->max_desc_num_per_pkt))) {
616out_bnum_err:
617		*out_bnum = *out_bnum ? *out_bnum : 1; /* ntc moved,cannot 0*/
618		netdev_err(ndev, "invalid bnum(%d,%d,%d,%d),%016llx,%016llx\n",
619			   bnum, ring->max_desc_num_per_pkt,
620			   length, (int)MAX_SKB_FRAGS,
621			   ((u64 *)desc)[0], ((u64 *)desc)[1]);
622		ring->stats.err_bd_num++;
623		dev_kfree_skb_any(skb);
624		return -EDOM;
625	}
626
627	bnum_flag = le32_to_cpu(desc->rx.ipoff_bnum_pid_flag);
628
629	if (unlikely(!hnae_get_bit(bnum_flag, HNS_RXD_VLD_B))) {
630		netdev_err(ndev, "no valid bd,%016llx,%016llx\n",
631			   ((u64 *)desc)[0], ((u64 *)desc)[1]);
632		ring->stats.non_vld_descs++;
633		dev_kfree_skb_any(skb);
634		return -EINVAL;
635	}
636
637	if (unlikely((!desc->rx.pkt_len) ||
638		     hnae_get_bit(bnum_flag, HNS_RXD_DROP_B))) {
639		ring->stats.err_pkt_len++;
640		dev_kfree_skb_any(skb);
641		return -EFAULT;
642	}
643
644	if (unlikely(hnae_get_bit(bnum_flag, HNS_RXD_L2E_B))) {
645		ring->stats.l2_err++;
646		dev_kfree_skb_any(skb);
647		return -EFAULT;
648	}
649
650	ring->stats.rx_pkts++;
651	ring->stats.rx_bytes += skb->len;
652
653	/* indicate to upper stack if our hardware has already calculated
654	 * the RX checksum
655	 */
656	hns_nic_rx_checksum(ring_data, skb, bnum_flag);
657
658	return 0;
659}
660
661static void
662hns_nic_alloc_rx_buffers(struct hns_nic_ring_data *ring_data, int cleand_count)
663{
664	int i, ret;
665	struct hnae_desc_cb res_cbs;
666	struct hnae_desc_cb *desc_cb;
667	struct hnae_ring *ring = ring_data->ring;
668	struct net_device *ndev = ring_data->napi.dev;
669
670	for (i = 0; i < cleand_count; i++) {
671		desc_cb = &ring->desc_cb[ring->next_to_use];
672		if (desc_cb->reuse_flag) {
673			ring->stats.reuse_pg_cnt++;
674			hnae_reuse_buffer(ring, ring->next_to_use);
675		} else {
676			ret = hnae_reserve_buffer_map(ring, &res_cbs);
677			if (ret) {
678				ring->stats.sw_err_cnt++;
679				netdev_err(ndev, "hnae reserve buffer map failed.\n");
680				break;
681			}
682			hnae_replace_buffer(ring, ring->next_to_use, &res_cbs);
683		}
684
685		ring_ptr_move_fw(ring, next_to_use);
686	}
687
688	wmb(); /* make all data has been write before submit */
689	writel_relaxed(i, ring->io_base + RCB_REG_HEAD);
690}
691
692/* return error number for error or number of desc left to take
693 */
694static void hns_nic_rx_up_pro(struct hns_nic_ring_data *ring_data,
695			      struct sk_buff *skb)
696{
697	struct net_device *ndev = ring_data->napi.dev;
698
699	skb->protocol = eth_type_trans(skb, ndev);
700	napi_gro_receive(&ring_data->napi, skb);
701}
702
703static int hns_desc_unused(struct hnae_ring *ring)
704{
705	int ntc = ring->next_to_clean;
706	int ntu = ring->next_to_use;
707
708	return ((ntc >= ntu) ? 0 : ring->desc_num) + ntc - ntu;
709}
710
711#define HNS_LOWEST_LATENCY_RATE		27	/* 27 MB/s */
712#define HNS_LOW_LATENCY_RATE			80	/* 80 MB/s */
713
714#define HNS_COAL_BDNUM			3
715
716static u32 hns_coal_rx_bdnum(struct hnae_ring *ring)
717{
718	bool coal_enable = ring->q->handle->coal_adapt_en;
719
720	if (coal_enable &&
721	    ring->coal_last_rx_bytes > HNS_LOWEST_LATENCY_RATE)
722		return HNS_COAL_BDNUM;
723	else
724		return 0;
725}
726
727static void hns_update_rx_rate(struct hnae_ring *ring)
728{
729	bool coal_enable = ring->q->handle->coal_adapt_en;
730	u32 time_passed_ms;
731	u64 total_bytes;
732
733	if (!coal_enable ||
734	    time_before(jiffies, ring->coal_last_jiffies + (HZ >> 4)))
735		return;
736
737	/* ring->stats.rx_bytes overflowed */
738	if (ring->coal_last_rx_bytes > ring->stats.rx_bytes) {
739		ring->coal_last_rx_bytes = ring->stats.rx_bytes;
740		ring->coal_last_jiffies = jiffies;
741		return;
742	}
743
744	total_bytes = ring->stats.rx_bytes - ring->coal_last_rx_bytes;
745	time_passed_ms = jiffies_to_msecs(jiffies - ring->coal_last_jiffies);
746	do_div(total_bytes, time_passed_ms);
747	ring->coal_rx_rate = total_bytes >> 10;
748
749	ring->coal_last_rx_bytes = ring->stats.rx_bytes;
750	ring->coal_last_jiffies = jiffies;
751}
752
753/**
754 * smooth_alg - smoothing algrithm for adjusting coalesce parameter
755 * @new_param: new value
756 * @old_param: old value
757 **/
758static u32 smooth_alg(u32 new_param, u32 old_param)
759{
760	u32 gap = (new_param > old_param) ? new_param - old_param
761					  : old_param - new_param;
762
763	if (gap > 8)
764		gap >>= 3;
765
766	if (new_param > old_param)
767		return old_param + gap;
768	else
769		return old_param - gap;
770}
771
772/**
773 * hns_nic_adp_coalesce - self adapte coalesce according to rx rate
774 * @ring_data: pointer to hns_nic_ring_data
775 **/
776static void hns_nic_adpt_coalesce(struct hns_nic_ring_data *ring_data)
777{
778	struct hnae_ring *ring = ring_data->ring;
779	struct hnae_handle *handle = ring->q->handle;
780	u32 new_coal_param, old_coal_param = ring->coal_param;
781
782	if (ring->coal_rx_rate < HNS_LOWEST_LATENCY_RATE)
783		new_coal_param = HNAE_LOWEST_LATENCY_COAL_PARAM;
784	else if (ring->coal_rx_rate < HNS_LOW_LATENCY_RATE)
785		new_coal_param = HNAE_LOW_LATENCY_COAL_PARAM;
786	else
787		new_coal_param = HNAE_BULK_LATENCY_COAL_PARAM;
788
789	if (new_coal_param == old_coal_param &&
790	    new_coal_param == handle->coal_param)
791		return;
792
793	new_coal_param = smooth_alg(new_coal_param, old_coal_param);
794	ring->coal_param = new_coal_param;
795
796	/**
797	 * Because all ring in one port has one coalesce param, when one ring
798	 * calculate its own coalesce param, it cannot write to hardware at
799	 * once. There are three conditions as follows:
800	 *       1. current ring's coalesce param is larger than the hardware.
801	 *       2. or ring which adapt last time can change again.
802	 *       3. timeout.
803	 */
804	if (new_coal_param == handle->coal_param) {
805		handle->coal_last_jiffies = jiffies;
806		handle->coal_ring_idx = ring_data->queue_index;
807	} else if (new_coal_param > handle->coal_param ||
808		   handle->coal_ring_idx == ring_data->queue_index ||
809		   time_after(jiffies, handle->coal_last_jiffies + (HZ >> 4))) {
810		handle->dev->ops->set_coalesce_usecs(handle,
811					new_coal_param);
812		handle->dev->ops->set_coalesce_frames(handle,
813					1, new_coal_param);
814		handle->coal_param = new_coal_param;
815		handle->coal_ring_idx = ring_data->queue_index;
816		handle->coal_last_jiffies = jiffies;
817	}
818}
819
820static int hns_nic_rx_poll_one(struct hns_nic_ring_data *ring_data,
821			       int budget, void *v)
822{
823	struct hnae_ring *ring = ring_data->ring;
824	struct sk_buff *skb;
825	int num, bnum;
826#define RCB_NOF_ALLOC_RX_BUFF_ONCE 16
827	int recv_pkts, recv_bds, clean_count, err;
828	int unused_count = hns_desc_unused(ring);
829
830	num = readl_relaxed(ring->io_base + RCB_REG_FBDNUM);
831	rmb(); /* make sure num taken effect before the other data is touched */
832
833	recv_pkts = 0, recv_bds = 0, clean_count = 0;
834	num -= unused_count;
835
836	while (recv_pkts < budget && recv_bds < num) {
837		/* reuse or realloc buffers */
838		if (clean_count + unused_count >= RCB_NOF_ALLOC_RX_BUFF_ONCE) {
839			hns_nic_alloc_rx_buffers(ring_data,
840						 clean_count + unused_count);
841			clean_count = 0;
842			unused_count = hns_desc_unused(ring);
843		}
844
845		/* poll one pkt */
846		err = hns_nic_poll_rx_skb(ring_data, &skb, &bnum);
847		if (unlikely(!skb)) /* this fault cannot be repaired */
848			goto out;
849
850		recv_bds += bnum;
851		clean_count += bnum;
852		if (unlikely(err)) {  /* do jump the err */
853			recv_pkts++;
854			continue;
855		}
856
857		/* do update ip stack process*/
858		((void (*)(struct hns_nic_ring_data *, struct sk_buff *))v)(
859							ring_data, skb);
860		recv_pkts++;
861	}
862
863out:
864	/* make all data has been write before submit */
865	if (clean_count + unused_count > 0)
866		hns_nic_alloc_rx_buffers(ring_data,
867					 clean_count + unused_count);
868
869	return recv_pkts;
870}
871
872static bool hns_nic_rx_fini_pro(struct hns_nic_ring_data *ring_data)
873{
874	struct hnae_ring *ring = ring_data->ring;
875	int num = 0;
876	bool rx_stopped;
877
878	hns_update_rx_rate(ring);
879
880	/* for hardware bug fixed */
881	ring_data->ring->q->handle->dev->ops->toggle_ring_irq(ring, 0);
882	num = readl_relaxed(ring->io_base + RCB_REG_FBDNUM);
883
884	if (num <= hns_coal_rx_bdnum(ring)) {
885		if (ring->q->handle->coal_adapt_en)
886			hns_nic_adpt_coalesce(ring_data);
887
888		rx_stopped = true;
889	} else {
890		ring_data->ring->q->handle->dev->ops->toggle_ring_irq(
891			ring_data->ring, 1);
892
893		rx_stopped = false;
894	}
895
896	return rx_stopped;
897}
898
899static bool hns_nic_rx_fini_pro_v2(struct hns_nic_ring_data *ring_data)
900{
901	struct hnae_ring *ring = ring_data->ring;
902	int num;
903
904	hns_update_rx_rate(ring);
905	num = readl_relaxed(ring->io_base + RCB_REG_FBDNUM);
906
907	if (num <= hns_coal_rx_bdnum(ring)) {
908		if (ring->q->handle->coal_adapt_en)
909			hns_nic_adpt_coalesce(ring_data);
910
911		return true;
912	}
913
914	return false;
915}
916
917static inline void hns_nic_reclaim_one_desc(struct hnae_ring *ring,
918					    int *bytes, int *pkts)
919{
920	struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_clean];
921
922	(*pkts) += (desc_cb->type == DESC_TYPE_SKB);
923	(*bytes) += desc_cb->length;
924	/* desc_cb will be cleaned, after hnae_free_buffer_detach*/
925	hnae_free_buffer_detach(ring, ring->next_to_clean);
926
927	ring_ptr_move_fw(ring, next_to_clean);
928}
929
930static int is_valid_clean_head(struct hnae_ring *ring, int h)
931{
932	int u = ring->next_to_use;
933	int c = ring->next_to_clean;
934
935	if (unlikely(h > ring->desc_num))
936		return 0;
937
938	assert(u > 0 && u < ring->desc_num);
939	assert(c > 0 && c < ring->desc_num);
940	assert(u != c && h != c); /* must be checked before call this func */
941
942	return u > c ? (h > c && h <= u) : (h > c || h <= u);
943}
944
945/* reclaim all desc in one budget
946 * return error or number of desc left
947 */
948static int hns_nic_tx_poll_one(struct hns_nic_ring_data *ring_data,
949			       int budget, void *v)
950{
951	struct hnae_ring *ring = ring_data->ring;
952	struct net_device *ndev = ring_data->napi.dev;
953	struct netdev_queue *dev_queue;
954	struct hns_nic_priv *priv = netdev_priv(ndev);
955	int head;
956	int bytes, pkts;
957
958	head = readl_relaxed(ring->io_base + RCB_REG_HEAD);
959	rmb(); /* make sure head is ready before touch any data */
960
961	if (is_ring_empty(ring) || head == ring->next_to_clean)
962		return 0; /* no data to poll */
963
964	if (!is_valid_clean_head(ring, head)) {
965		netdev_err(ndev, "wrong head (%d, %d-%d)\n", head,
966			   ring->next_to_use, ring->next_to_clean);
967		ring->stats.io_err_cnt++;
968		return -EIO;
969	}
970
971	bytes = 0;
972	pkts = 0;
973	while (head != ring->next_to_clean) {
974		hns_nic_reclaim_one_desc(ring, &bytes, &pkts);
975		/* issue prefetch for next Tx descriptor */
976		prefetch(&ring->desc_cb[ring->next_to_clean]);
977	}
978	/* update tx ring statistics. */
979	ring->stats.tx_pkts += pkts;
980	ring->stats.tx_bytes += bytes;
981
982	dev_queue = netdev_get_tx_queue(ndev, ring_data->queue_index);
983	netdev_tx_completed_queue(dev_queue, pkts, bytes);
984
985	if (unlikely(priv->link && !netif_carrier_ok(ndev)))
986		netif_carrier_on(ndev);
987
988	if (unlikely(pkts && netif_carrier_ok(ndev) &&
989		     (ring_space(ring) >= ring->max_desc_num_per_pkt * 2))) {
990		/* Make sure that anybody stopping the queue after this
991		 * sees the new next_to_clean.
992		 */
993		smp_mb();
994		if (netif_tx_queue_stopped(dev_queue) &&
995		    !test_bit(NIC_STATE_DOWN, &priv->state)) {
996			netif_tx_wake_queue(dev_queue);
997			ring->stats.restart_queue++;
998		}
999	}
1000	return 0;
1001}
1002
1003static bool hns_nic_tx_fini_pro(struct hns_nic_ring_data *ring_data)
1004{
1005	struct hnae_ring *ring = ring_data->ring;
1006	int head;
1007
1008	ring_data->ring->q->handle->dev->ops->toggle_ring_irq(ring, 0);
1009
1010	head = readl_relaxed(ring->io_base + RCB_REG_HEAD);
1011
1012	if (head != ring->next_to_clean) {
1013		ring_data->ring->q->handle->dev->ops->toggle_ring_irq(
1014			ring_data->ring, 1);
1015
1016		return false;
1017	} else {
1018		return true;
1019	}
1020}
1021
1022static bool hns_nic_tx_fini_pro_v2(struct hns_nic_ring_data *ring_data)
1023{
1024	struct hnae_ring *ring = ring_data->ring;
1025	int head = readl_relaxed(ring->io_base + RCB_REG_HEAD);
1026
1027	if (head == ring->next_to_clean)
1028		return true;
1029	else
1030		return false;
1031}
1032
1033static void hns_nic_tx_clr_all_bufs(struct hns_nic_ring_data *ring_data)
1034{
1035	struct hnae_ring *ring = ring_data->ring;
1036	struct net_device *ndev = ring_data->napi.dev;
1037	struct netdev_queue *dev_queue;
1038	int head;
1039	int bytes, pkts;
1040
1041	head = ring->next_to_use; /* ntu :soft setted ring position*/
1042	bytes = 0;
1043	pkts = 0;
1044	while (head != ring->next_to_clean)
1045		hns_nic_reclaim_one_desc(ring, &bytes, &pkts);
1046
1047	dev_queue = netdev_get_tx_queue(ndev, ring_data->queue_index);
1048	netdev_tx_reset_queue(dev_queue);
1049}
1050
1051static int hns_nic_common_poll(struct napi_struct *napi, int budget)
1052{
1053	int clean_complete = 0;
1054	struct hns_nic_ring_data *ring_data =
1055		container_of(napi, struct hns_nic_ring_data, napi);
1056	struct hnae_ring *ring = ring_data->ring;
1057
1058	clean_complete += ring_data->poll_one(
1059				ring_data, budget - clean_complete,
1060				ring_data->ex_process);
1061
1062	if (clean_complete < budget) {
1063		if (ring_data->fini_process(ring_data)) {
1064			napi_complete(napi);
1065			ring->q->handle->dev->ops->toggle_ring_irq(ring, 0);
1066		} else {
1067			return budget;
1068		}
1069	}
1070
1071	return clean_complete;
1072}
1073
1074static irqreturn_t hns_irq_handle(int irq, void *dev)
1075{
1076	struct hns_nic_ring_data *ring_data = (struct hns_nic_ring_data *)dev;
1077
1078	ring_data->ring->q->handle->dev->ops->toggle_ring_irq(
1079		ring_data->ring, 1);
1080	napi_schedule(&ring_data->napi);
1081
1082	return IRQ_HANDLED;
1083}
1084
1085/**
1086 *hns_nic_adjust_link - adjust net work mode by the phy stat or new param
1087 *@ndev: net device
1088 */
1089static void hns_nic_adjust_link(struct net_device *ndev)
1090{
1091	struct hns_nic_priv *priv = netdev_priv(ndev);
1092	struct hnae_handle *h = priv->ae_handle;
1093	int state = 1;
1094
1095	/* If there is no phy, do not need adjust link */
1096	if (ndev->phydev) {
1097		/* When phy link down, do nothing */
1098		if (ndev->phydev->link == 0)
1099			return;
1100
1101		if (h->dev->ops->need_adjust_link(h, ndev->phydev->speed,
1102						  ndev->phydev->duplex)) {
1103			/* because Hi161X chip don't support to change gmac
1104			 * speed and duplex with traffic. Delay 200ms to
1105			 * make sure there is no more data in chip FIFO.
1106			 */
1107			netif_carrier_off(ndev);
1108			msleep(200);
1109			h->dev->ops->adjust_link(h, ndev->phydev->speed,
1110						 ndev->phydev->duplex);
1111			netif_carrier_on(ndev);
1112		}
1113	}
1114
1115	state = state && h->dev->ops->get_status(h);
1116
1117	if (state != priv->link) {
1118		if (state) {
1119			netif_carrier_on(ndev);
1120			netif_tx_wake_all_queues(ndev);
1121			netdev_info(ndev, "link up\n");
1122		} else {
1123			netif_carrier_off(ndev);
1124			netdev_info(ndev, "link down\n");
1125		}
1126		priv->link = state;
1127	}
1128}
1129
1130/**
1131 *hns_nic_init_phy - init phy
1132 *@ndev: net device
1133 *@h: ae handle
1134 * Return 0 on success, negative on failure
1135 */
1136int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
1137{
1138	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported) = { 0, };
1139	struct phy_device *phy_dev = h->phy_dev;
1140	int ret;
1141
1142	if (!h->phy_dev)
1143		return 0;
1144
1145	ethtool_convert_legacy_u32_to_link_mode(supported, h->if_support);
1146	linkmode_and(phy_dev->supported, phy_dev->supported, supported);
1147	linkmode_copy(phy_dev->advertising, phy_dev->supported);
1148
1149	if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
1150		phy_dev->autoneg = false;
1151
1152	if (h->phy_if != PHY_INTERFACE_MODE_XGMII) {
1153		phy_dev->dev_flags = 0;
1154
1155		ret = phy_connect_direct(ndev, phy_dev, hns_nic_adjust_link,
1156					 h->phy_if);
1157	} else {
1158		ret = phy_attach_direct(ndev, phy_dev, 0, h->phy_if);
1159	}
1160	if (unlikely(ret))
1161		return -ENODEV;
1162
1163	phy_attached_info(phy_dev);
1164
1165	return 0;
1166}
1167
1168static int hns_nic_ring_open(struct net_device *netdev, int idx)
1169{
1170	struct hns_nic_priv *priv = netdev_priv(netdev);
1171	struct hnae_handle *h = priv->ae_handle;
1172
1173	napi_enable(&priv->ring_data[idx].napi);
1174
1175	enable_irq(priv->ring_data[idx].ring->irq);
1176	h->dev->ops->toggle_ring_irq(priv->ring_data[idx].ring, 0);
1177
1178	return 0;
1179}
1180
1181static int hns_nic_net_set_mac_address(struct net_device *ndev, void *p)
1182{
1183	struct hns_nic_priv *priv = netdev_priv(ndev);
1184	struct hnae_handle *h = priv->ae_handle;
1185	struct sockaddr *mac_addr = p;
1186	int ret;
1187
1188	if (!mac_addr || !is_valid_ether_addr((const u8 *)mac_addr->sa_data))
1189		return -EADDRNOTAVAIL;
1190
1191	ret = h->dev->ops->set_mac_addr(h, mac_addr->sa_data);
1192	if (ret) {
1193		netdev_err(ndev, "set_mac_address fail, ret=%d!\n", ret);
1194		return ret;
1195	}
1196
1197	memcpy(ndev->dev_addr, mac_addr->sa_data, ndev->addr_len);
1198
1199	return 0;
1200}
1201
1202static void hns_nic_update_stats(struct net_device *netdev)
1203{
1204	struct hns_nic_priv *priv = netdev_priv(netdev);
1205	struct hnae_handle *h = priv->ae_handle;
1206
1207	h->dev->ops->update_stats(h, &netdev->stats);
1208}
1209
1210/* set mac addr if it is configed. or leave it to the AE driver */
1211static void hns_init_mac_addr(struct net_device *ndev)
1212{
1213	struct hns_nic_priv *priv = netdev_priv(ndev);
1214
1215	if (!device_get_mac_address(priv->dev, ndev->dev_addr, ETH_ALEN)) {
1216		eth_hw_addr_random(ndev);
1217		dev_warn(priv->dev, "No valid mac, use random mac %pM",
1218			 ndev->dev_addr);
1219	}
1220}
1221
1222static void hns_nic_ring_close(struct net_device *netdev, int idx)
1223{
1224	struct hns_nic_priv *priv = netdev_priv(netdev);
1225	struct hnae_handle *h = priv->ae_handle;
1226
1227	h->dev->ops->toggle_ring_irq(priv->ring_data[idx].ring, 1);
1228	disable_irq(priv->ring_data[idx].ring->irq);
1229
1230	napi_disable(&priv->ring_data[idx].napi);
1231}
1232
1233static int hns_nic_init_affinity_mask(int q_num, int ring_idx,
1234				      struct hnae_ring *ring, cpumask_t *mask)
1235{
1236	int cpu;
1237
1238	/* Diffrent irq banlance between 16core and 32core.
1239	 * The cpu mask set by ring index according to the ring flag
1240	 * which indicate the ring is tx or rx.
1241	 */
1242	if (q_num == num_possible_cpus()) {
1243		if (is_tx_ring(ring))
1244			cpu = ring_idx;
1245		else
1246			cpu = ring_idx - q_num;
1247	} else {
1248		if (is_tx_ring(ring))
1249			cpu = ring_idx * 2;
1250		else
1251			cpu = (ring_idx - q_num) * 2 + 1;
1252	}
1253
1254	cpumask_clear(mask);
1255	cpumask_set_cpu(cpu, mask);
1256
1257	return cpu;
1258}
1259
1260static void hns_nic_free_irq(int q_num, struct hns_nic_priv *priv)
1261{
1262	int i;
1263
1264	for (i = 0; i < q_num * 2; i++) {
1265		if (priv->ring_data[i].ring->irq_init_flag == RCB_IRQ_INITED) {
1266			irq_set_affinity_hint(priv->ring_data[i].ring->irq,
1267					      NULL);
1268			free_irq(priv->ring_data[i].ring->irq,
1269				 &priv->ring_data[i]);
1270			priv->ring_data[i].ring->irq_init_flag =
1271				RCB_IRQ_NOT_INITED;
1272		}
1273	}
1274}
1275
1276static int hns_nic_init_irq(struct hns_nic_priv *priv)
1277{
1278	struct hnae_handle *h = priv->ae_handle;
1279	struct hns_nic_ring_data *rd;
1280	int i;
1281	int ret;
1282	int cpu;
1283
1284	for (i = 0; i < h->q_num * 2; i++) {
1285		rd = &priv->ring_data[i];
1286
1287		if (rd->ring->irq_init_flag == RCB_IRQ_INITED)
1288			break;
1289
1290		snprintf(rd->ring->ring_name, RCB_RING_NAME_LEN,
1291			 "%s-%s%d", priv->netdev->name,
1292			 (is_tx_ring(rd->ring) ? "tx" : "rx"), rd->queue_index);
1293
1294		rd->ring->ring_name[RCB_RING_NAME_LEN - 1] = '\0';
1295
1296		irq_set_status_flags(rd->ring->irq, IRQ_NOAUTOEN);
1297		ret = request_irq(rd->ring->irq,
1298				  hns_irq_handle, 0, rd->ring->ring_name, rd);
1299		if (ret) {
1300			netdev_err(priv->netdev, "request irq(%d) fail\n",
1301				   rd->ring->irq);
1302			goto out_free_irq;
1303		}
1304
1305		cpu = hns_nic_init_affinity_mask(h->q_num, i,
1306						 rd->ring, &rd->mask);
1307
1308		if (cpu_online(cpu))
1309			irq_set_affinity_hint(rd->ring->irq,
1310					      &rd->mask);
1311
1312		rd->ring->irq_init_flag = RCB_IRQ_INITED;
1313	}
1314
1315	return 0;
1316
1317out_free_irq:
1318	hns_nic_free_irq(h->q_num, priv);
1319	return ret;
1320}
1321
1322static int hns_nic_net_up(struct net_device *ndev)
1323{
1324	struct hns_nic_priv *priv = netdev_priv(ndev);
1325	struct hnae_handle *h = priv->ae_handle;
1326	int i, j;
1327	int ret;
1328
1329	if (!test_bit(NIC_STATE_DOWN, &priv->state))
1330		return 0;
1331
1332	ret = hns_nic_init_irq(priv);
1333	if (ret != 0) {
1334		netdev_err(ndev, "hns init irq failed! ret=%d\n", ret);
1335		return ret;
1336	}
1337
1338	for (i = 0; i < h->q_num * 2; i++) {
1339		ret = hns_nic_ring_open(ndev, i);
1340		if (ret)
1341			goto out_has_some_queues;
1342	}
1343
1344	ret = h->dev->ops->set_mac_addr(h, ndev->dev_addr);
1345	if (ret)
1346		goto out_set_mac_addr_err;
1347
1348	ret = h->dev->ops->start ? h->dev->ops->start(h) : 0;
1349	if (ret)
1350		goto out_start_err;
1351
1352	if (ndev->phydev)
1353		phy_start(ndev->phydev);
1354
1355	clear_bit(NIC_STATE_DOWN, &priv->state);
1356	(void)mod_timer(&priv->service_timer, jiffies + SERVICE_TIMER_HZ);
1357
1358	return 0;
1359
1360out_start_err:
1361	netif_stop_queue(ndev);
1362out_set_mac_addr_err:
1363out_has_some_queues:
1364	for (j = i - 1; j >= 0; j--)
1365		hns_nic_ring_close(ndev, j);
1366
1367	hns_nic_free_irq(h->q_num, priv);
1368	set_bit(NIC_STATE_DOWN, &priv->state);
1369
1370	return ret;
1371}
1372
1373static void hns_nic_net_down(struct net_device *ndev)
1374{
1375	int i;
1376	struct hnae_ae_ops *ops;
1377	struct hns_nic_priv *priv = netdev_priv(ndev);
1378
1379	if (test_and_set_bit(NIC_STATE_DOWN, &priv->state))
1380		return;
1381
1382	(void)del_timer_sync(&priv->service_timer);
1383	netif_tx_stop_all_queues(ndev);
1384	netif_carrier_off(ndev);
1385	netif_tx_disable(ndev);
1386	priv->link = 0;
1387
1388	if (ndev->phydev)
1389		phy_stop(ndev->phydev);
1390
1391	ops = priv->ae_handle->dev->ops;
1392
1393	if (ops->stop)
1394		ops->stop(priv->ae_handle);
1395
1396	netif_tx_stop_all_queues(ndev);
1397
1398	for (i = priv->ae_handle->q_num - 1; i >= 0; i--) {
1399		hns_nic_ring_close(ndev, i);
1400		hns_nic_ring_close(ndev, i + priv->ae_handle->q_num);
1401
1402		/* clean tx buffers*/
1403		hns_nic_tx_clr_all_bufs(priv->ring_data + i);
1404	}
1405}
1406
1407void hns_nic_net_reset(struct net_device *ndev)
1408{
1409	struct hns_nic_priv *priv = netdev_priv(ndev);
1410	struct hnae_handle *handle = priv->ae_handle;
1411
1412	while (test_and_set_bit(NIC_STATE_RESETTING, &priv->state))
1413		usleep_range(1000, 2000);
1414
1415	(void)hnae_reinit_handle(handle);
1416
1417	clear_bit(NIC_STATE_RESETTING, &priv->state);
1418}
1419
1420void hns_nic_net_reinit(struct net_device *netdev)
1421{
1422	struct hns_nic_priv *priv = netdev_priv(netdev);
1423	enum hnae_port_type type = priv->ae_handle->port_type;
1424
1425	netif_trans_update(priv->netdev);
1426	while (test_and_set_bit(NIC_STATE_REINITING, &priv->state))
1427		usleep_range(1000, 2000);
1428
1429	hns_nic_net_down(netdev);
1430
1431	/* Only do hns_nic_net_reset in debug mode
1432	 * because of hardware limitation.
1433	 */
1434	if (type == HNAE_PORT_DEBUG)
1435		hns_nic_net_reset(netdev);
1436
1437	(void)hns_nic_net_up(netdev);
1438	clear_bit(NIC_STATE_REINITING, &priv->state);
1439}
1440
1441static int hns_nic_net_open(struct net_device *ndev)
1442{
1443	struct hns_nic_priv *priv = netdev_priv(ndev);
1444	struct hnae_handle *h = priv->ae_handle;
1445	int ret;
1446
1447	if (test_bit(NIC_STATE_TESTING, &priv->state))
1448		return -EBUSY;
1449
1450	priv->link = 0;
1451	netif_carrier_off(ndev);
1452
1453	ret = netif_set_real_num_tx_queues(ndev, h->q_num);
1454	if (ret < 0) {
1455		netdev_err(ndev, "netif_set_real_num_tx_queues fail, ret=%d!\n",
1456			   ret);
1457		return ret;
1458	}
1459
1460	ret = netif_set_real_num_rx_queues(ndev, h->q_num);
1461	if (ret < 0) {
1462		netdev_err(ndev,
1463			   "netif_set_real_num_rx_queues fail, ret=%d!\n", ret);
1464		return ret;
1465	}
1466
1467	ret = hns_nic_net_up(ndev);
1468	if (ret) {
1469		netdev_err(ndev,
1470			   "hns net up fail, ret=%d!\n", ret);
1471		return ret;
1472	}
1473
1474	return 0;
1475}
1476
1477static int hns_nic_net_stop(struct net_device *ndev)
1478{
1479	hns_nic_net_down(ndev);
1480
1481	return 0;
1482}
1483
1484static void hns_tx_timeout_reset(struct hns_nic_priv *priv);
1485#define HNS_TX_TIMEO_LIMIT (40 * HZ)
1486static void hns_nic_net_timeout(struct net_device *ndev, unsigned int txqueue)
1487{
1488	struct hns_nic_priv *priv = netdev_priv(ndev);
1489
1490	if (ndev->watchdog_timeo < HNS_TX_TIMEO_LIMIT) {
1491		ndev->watchdog_timeo *= 2;
1492		netdev_info(ndev, "watchdog_timo changed to %d.\n",
1493			    ndev->watchdog_timeo);
1494	} else {
1495		ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
1496		hns_tx_timeout_reset(priv);
1497	}
1498}
1499
1500static netdev_tx_t hns_nic_net_xmit(struct sk_buff *skb,
1501				    struct net_device *ndev)
1502{
1503	struct hns_nic_priv *priv = netdev_priv(ndev);
1504
1505	assert(skb->queue_mapping < ndev->ae_handle->q_num);
1506
1507	return hns_nic_net_xmit_hw(ndev, skb,
1508				   &tx_ring_data(priv, skb->queue_mapping));
1509}
1510
1511static void hns_nic_drop_rx_fetch(struct hns_nic_ring_data *ring_data,
1512				  struct sk_buff *skb)
1513{
1514	dev_kfree_skb_any(skb);
1515}
1516
1517#define HNS_LB_TX_RING	0
1518static struct sk_buff *hns_assemble_skb(struct net_device *ndev)
1519{
1520	struct sk_buff *skb;
1521	struct ethhdr *ethhdr;
1522	int frame_len;
1523
1524	/* allocate test skb */
1525	skb = alloc_skb(64, GFP_KERNEL);
1526	if (!skb)
1527		return NULL;
1528
1529	skb_put(skb, 64);
1530	skb->dev = ndev;
1531	memset(skb->data, 0xFF, skb->len);
1532
1533	/* must be tcp/ip package */
1534	ethhdr = (struct ethhdr *)skb->data;
1535	ethhdr->h_proto = htons(ETH_P_IP);
1536
1537	frame_len = skb->len & (~1ul);
1538	memset(&skb->data[frame_len / 2], 0xAA,
1539	       frame_len / 2 - 1);
1540
1541	skb->queue_mapping = HNS_LB_TX_RING;
1542
1543	return skb;
1544}
1545
1546static int hns_enable_serdes_lb(struct net_device *ndev)
1547{
1548	struct hns_nic_priv *priv = netdev_priv(ndev);
1549	struct hnae_handle *h = priv->ae_handle;
1550	struct hnae_ae_ops *ops = h->dev->ops;
1551	int speed, duplex;
1552	int ret;
1553
1554	ret = ops->set_loopback(h, MAC_INTERNALLOOP_SERDES, 1);
1555	if (ret)
1556		return ret;
1557
1558	ret = ops->start ? ops->start(h) : 0;
1559	if (ret)
1560		return ret;
1561
1562	/* link adjust duplex*/
1563	if (h->phy_if != PHY_INTERFACE_MODE_XGMII)
1564		speed = 1000;
1565	else
1566		speed = 10000;
1567	duplex = 1;
1568
1569	ops->adjust_link(h, speed, duplex);
1570
1571	/* wait h/w ready */
1572	mdelay(300);
1573
1574	return 0;
1575}
1576
1577static void hns_disable_serdes_lb(struct net_device *ndev)
1578{
1579	struct hns_nic_priv *priv = netdev_priv(ndev);
1580	struct hnae_handle *h = priv->ae_handle;
1581	struct hnae_ae_ops *ops = h->dev->ops;
1582
1583	ops->stop(h);
1584	ops->set_loopback(h, MAC_INTERNALLOOP_SERDES, 0);
1585}
1586
1587/**
1588 *hns_nic_clear_all_rx_fetch - clear the chip fetched descriptions. The
1589 *function as follows:
1590 *    1. if one rx ring has found the page_offset is not equal 0 between head
1591 *       and tail, it means that the chip fetched the wrong descs for the ring
1592 *       which buffer size is 4096.
1593 *    2. we set the chip serdes loopback and set rss indirection to the ring.
1594 *    3. construct 64-bytes ip broadcast packages, wait the associated rx ring
1595 *       recieving all packages and it will fetch new descriptions.
1596 *    4. recover to the original state.
1597 *
1598 *@ndev: net device
1599 */
1600static int hns_nic_clear_all_rx_fetch(struct net_device *ndev)
1601{
1602	struct hns_nic_priv *priv = netdev_priv(ndev);
1603	struct hnae_handle *h = priv->ae_handle;
1604	struct hnae_ae_ops *ops = h->dev->ops;
1605	struct hns_nic_ring_data *rd;
1606	struct hnae_ring *ring;
1607	struct sk_buff *skb;
1608	u32 *org_indir;
1609	u32 *cur_indir;
1610	int indir_size;
1611	int head, tail;
1612	int fetch_num;
1613	int i, j;
1614	bool found;
1615	int retry_times;
1616	int ret = 0;
1617
1618	/* alloc indir memory */
1619	indir_size = ops->get_rss_indir_size(h) * sizeof(*org_indir);
1620	org_indir = kzalloc(indir_size, GFP_KERNEL);
1621	if (!org_indir)
1622		return -ENOMEM;
1623
1624	/* store the orginal indirection */
1625	ops->get_rss(h, org_indir, NULL, NULL);
1626
1627	cur_indir = kzalloc(indir_size, GFP_KERNEL);
1628	if (!cur_indir) {
1629		ret = -ENOMEM;
1630		goto cur_indir_alloc_err;
1631	}
1632
1633	/* set loopback */
1634	if (hns_enable_serdes_lb(ndev)) {
1635		ret = -EINVAL;
1636		goto enable_serdes_lb_err;
1637	}
1638
1639	/* foreach every rx ring to clear fetch desc */
1640	for (i = 0; i < h->q_num; i++) {
1641		ring = &h->qs[i]->rx_ring;
1642		head = readl_relaxed(ring->io_base + RCB_REG_HEAD);
1643		tail = readl_relaxed(ring->io_base + RCB_REG_TAIL);
1644		found = false;
1645		fetch_num = ring_dist(ring, head, tail);
1646
1647		while (head != tail) {
1648			if (ring->desc_cb[head].page_offset != 0) {
1649				found = true;
1650				break;
1651			}
1652
1653			head++;
1654			if (head == ring->desc_num)
1655				head = 0;
1656		}
1657
1658		if (found) {
1659			for (j = 0; j < indir_size / sizeof(*org_indir); j++)
1660				cur_indir[j] = i;
1661			ops->set_rss(h, cur_indir, NULL, 0);
1662
1663			for (j = 0; j < fetch_num; j++) {
1664				/* alloc one skb and init */
1665				skb = hns_assemble_skb(ndev);
1666				if (!skb) {
1667					ret = -ENOMEM;
1668					goto out;
1669				}
1670				rd = &tx_ring_data(priv, skb->queue_mapping);
1671				hns_nic_net_xmit_hw(ndev, skb, rd);
1672
1673				retry_times = 0;
1674				while (retry_times++ < 10) {
1675					mdelay(10);
1676					/* clean rx */
1677					rd = &rx_ring_data(priv, i);
1678					if (rd->poll_one(rd, fetch_num,
1679							 hns_nic_drop_rx_fetch))
1680						break;
1681				}
1682
1683				retry_times = 0;
1684				while (retry_times++ < 10) {
1685					mdelay(10);
1686					/* clean tx ring 0 send package */
1687					rd = &tx_ring_data(priv,
1688							   HNS_LB_TX_RING);
1689					if (rd->poll_one(rd, fetch_num, NULL))
1690						break;
1691				}
1692			}
1693		}
1694	}
1695
1696out:
1697	/* restore everything */
1698	ops->set_rss(h, org_indir, NULL, 0);
1699	hns_disable_serdes_lb(ndev);
1700enable_serdes_lb_err:
1701	kfree(cur_indir);
1702cur_indir_alloc_err:
1703	kfree(org_indir);
1704
1705	return ret;
1706}
1707
1708static int hns_nic_change_mtu(struct net_device *ndev, int new_mtu)
1709{
1710	struct hns_nic_priv *priv = netdev_priv(ndev);
1711	struct hnae_handle *h = priv->ae_handle;
1712	bool if_running = netif_running(ndev);
1713	int ret;
1714
1715	/* MTU < 68 is an error and causes problems on some kernels */
1716	if (new_mtu < 68)
1717		return -EINVAL;
1718
1719	/* MTU no change */
1720	if (new_mtu == ndev->mtu)
1721		return 0;
1722
1723	if (!h->dev->ops->set_mtu)
1724		return -ENOTSUPP;
1725
1726	if (if_running) {
1727		(void)hns_nic_net_stop(ndev);
1728		msleep(100);
1729	}
1730
1731	if (priv->enet_ver != AE_VERSION_1 &&
1732	    ndev->mtu <= BD_SIZE_2048_MAX_MTU &&
1733	    new_mtu > BD_SIZE_2048_MAX_MTU) {
1734		/* update desc */
1735		hnae_reinit_all_ring_desc(h);
1736
1737		/* clear the package which the chip has fetched */
1738		ret = hns_nic_clear_all_rx_fetch(ndev);
1739
1740		/* the page offset must be consist with desc */
1741		hnae_reinit_all_ring_page_off(h);
1742
1743		if (ret) {
1744			netdev_err(ndev, "clear the fetched desc fail\n");
1745			goto out;
1746		}
1747	}
1748
1749	ret = h->dev->ops->set_mtu(h, new_mtu);
1750	if (ret) {
1751		netdev_err(ndev, "set mtu fail, return value %d\n",
1752			   ret);
1753		goto out;
1754	}
1755
1756	/* finally, set new mtu to netdevice */
1757	ndev->mtu = new_mtu;
1758
1759out:
1760	if (if_running) {
1761		if (hns_nic_net_open(ndev)) {
1762			netdev_err(ndev, "hns net open fail\n");
1763			ret = -EINVAL;
1764		}
1765	}
1766
1767	return ret;
1768}
1769
1770static int hns_nic_set_features(struct net_device *netdev,
1771				netdev_features_t features)
1772{
1773	struct hns_nic_priv *priv = netdev_priv(netdev);
1774
1775	switch (priv->enet_ver) {
1776	case AE_VERSION_1:
1777		if (features & (NETIF_F_TSO | NETIF_F_TSO6))
1778			netdev_info(netdev, "enet v1 do not support tso!\n");
1779		break;
1780	default:
1781		if (features & (NETIF_F_TSO | NETIF_F_TSO6)) {
1782			priv->ops.fill_desc = fill_tso_desc;
1783			priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso;
1784			/* The chip only support 7*4096 */
1785			netif_set_gso_max_size(netdev, 7 * 4096);
1786		} else {
1787			priv->ops.fill_desc = fill_v2_desc;
1788			priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx;
1789		}
1790		break;
1791	}
1792	netdev->features = features;
1793	return 0;
1794}
1795
1796static netdev_features_t hns_nic_fix_features(
1797		struct net_device *netdev, netdev_features_t features)
1798{
1799	struct hns_nic_priv *priv = netdev_priv(netdev);
1800
1801	switch (priv->enet_ver) {
1802	case AE_VERSION_1:
1803		features &= ~(NETIF_F_TSO | NETIF_F_TSO6 |
1804				NETIF_F_HW_VLAN_CTAG_FILTER);
1805		break;
1806	default:
1807		break;
1808	}
1809	return features;
1810}
1811
1812static int hns_nic_uc_sync(struct net_device *netdev, const unsigned char *addr)
1813{
1814	struct hns_nic_priv *priv = netdev_priv(netdev);
1815	struct hnae_handle *h = priv->ae_handle;
1816
1817	if (h->dev->ops->add_uc_addr)
1818		return h->dev->ops->add_uc_addr(h, addr);
1819
1820	return 0;
1821}
1822
1823static int hns_nic_uc_unsync(struct net_device *netdev,
1824			     const unsigned char *addr)
1825{
1826	struct hns_nic_priv *priv = netdev_priv(netdev);
1827	struct hnae_handle *h = priv->ae_handle;
1828
1829	if (h->dev->ops->rm_uc_addr)
1830		return h->dev->ops->rm_uc_addr(h, addr);
1831
1832	return 0;
1833}
1834
1835/**
1836 * hns_set_multicast_list - set mutl mac address
1837 * @ndev: net device
1838 *
1839 * return void
1840 */
1841static void hns_set_multicast_list(struct net_device *ndev)
1842{
1843	struct hns_nic_priv *priv = netdev_priv(ndev);
1844	struct hnae_handle *h = priv->ae_handle;
1845	struct netdev_hw_addr *ha = NULL;
1846
1847	if (!h)	{
1848		netdev_err(ndev, "hnae handle is null\n");
1849		return;
1850	}
1851
1852	if (h->dev->ops->clr_mc_addr)
1853		if (h->dev->ops->clr_mc_addr(h))
1854			netdev_err(ndev, "clear multicast address fail\n");
1855
1856	if (h->dev->ops->set_mc_addr) {
1857		netdev_for_each_mc_addr(ha, ndev)
1858			if (h->dev->ops->set_mc_addr(h, ha->addr))
1859				netdev_err(ndev, "set multicast fail\n");
1860	}
1861}
1862
1863static void hns_nic_set_rx_mode(struct net_device *ndev)
1864{
1865	struct hns_nic_priv *priv = netdev_priv(ndev);
1866	struct hnae_handle *h = priv->ae_handle;
1867
1868	if (h->dev->ops->set_promisc_mode) {
1869		if (ndev->flags & IFF_PROMISC)
1870			h->dev->ops->set_promisc_mode(h, 1);
1871		else
1872			h->dev->ops->set_promisc_mode(h, 0);
1873	}
1874
1875	hns_set_multicast_list(ndev);
1876
1877	if (__dev_uc_sync(ndev, hns_nic_uc_sync, hns_nic_uc_unsync))
1878		netdev_err(ndev, "sync uc address fail\n");
1879}
1880
1881static void hns_nic_get_stats64(struct net_device *ndev,
1882				struct rtnl_link_stats64 *stats)
1883{
1884	int idx = 0;
1885	u64 tx_bytes = 0;
1886	u64 rx_bytes = 0;
1887	u64 tx_pkts = 0;
1888	u64 rx_pkts = 0;
1889	struct hns_nic_priv *priv = netdev_priv(ndev);
1890	struct hnae_handle *h = priv->ae_handle;
1891
1892	for (idx = 0; idx < h->q_num; idx++) {
1893		tx_bytes += h->qs[idx]->tx_ring.stats.tx_bytes;
1894		tx_pkts += h->qs[idx]->tx_ring.stats.tx_pkts;
1895		rx_bytes += h->qs[idx]->rx_ring.stats.rx_bytes;
1896		rx_pkts += h->qs[idx]->rx_ring.stats.rx_pkts;
1897	}
1898
1899	stats->tx_bytes = tx_bytes;
1900	stats->tx_packets = tx_pkts;
1901	stats->rx_bytes = rx_bytes;
1902	stats->rx_packets = rx_pkts;
1903
1904	stats->rx_errors = ndev->stats.rx_errors;
1905	stats->multicast = ndev->stats.multicast;
1906	stats->rx_length_errors = ndev->stats.rx_length_errors;
1907	stats->rx_crc_errors = ndev->stats.rx_crc_errors;
1908	stats->rx_missed_errors = ndev->stats.rx_missed_errors;
1909
1910	stats->tx_errors = ndev->stats.tx_errors;
1911	stats->rx_dropped = ndev->stats.rx_dropped;
1912	stats->tx_dropped = ndev->stats.tx_dropped;
1913	stats->collisions = ndev->stats.collisions;
1914	stats->rx_over_errors = ndev->stats.rx_over_errors;
1915	stats->rx_frame_errors = ndev->stats.rx_frame_errors;
1916	stats->rx_fifo_errors = ndev->stats.rx_fifo_errors;
1917	stats->tx_aborted_errors = ndev->stats.tx_aborted_errors;
1918	stats->tx_carrier_errors = ndev->stats.tx_carrier_errors;
1919	stats->tx_fifo_errors = ndev->stats.tx_fifo_errors;
1920	stats->tx_heartbeat_errors = ndev->stats.tx_heartbeat_errors;
1921	stats->tx_window_errors = ndev->stats.tx_window_errors;
1922	stats->rx_compressed = ndev->stats.rx_compressed;
1923	stats->tx_compressed = ndev->stats.tx_compressed;
1924}
1925
1926static u16
1927hns_nic_select_queue(struct net_device *ndev, struct sk_buff *skb,
1928		     struct net_device *sb_dev)
1929{
1930	struct ethhdr *eth_hdr = (struct ethhdr *)skb->data;
1931	struct hns_nic_priv *priv = netdev_priv(ndev);
1932
1933	/* fix hardware broadcast/multicast packets queue loopback */
1934	if (!AE_IS_VER1(priv->enet_ver) &&
1935	    is_multicast_ether_addr(eth_hdr->h_dest))
1936		return 0;
1937	else
1938		return netdev_pick_tx(ndev, skb, NULL);
1939}
1940
1941static const struct net_device_ops hns_nic_netdev_ops = {
1942	.ndo_open = hns_nic_net_open,
1943	.ndo_stop = hns_nic_net_stop,
1944	.ndo_start_xmit = hns_nic_net_xmit,
1945	.ndo_tx_timeout = hns_nic_net_timeout,
1946	.ndo_set_mac_address = hns_nic_net_set_mac_address,
1947	.ndo_change_mtu = hns_nic_change_mtu,
1948	.ndo_do_ioctl = phy_do_ioctl_running,
1949	.ndo_set_features = hns_nic_set_features,
1950	.ndo_fix_features = hns_nic_fix_features,
1951	.ndo_get_stats64 = hns_nic_get_stats64,
1952	.ndo_set_rx_mode = hns_nic_set_rx_mode,
1953	.ndo_select_queue = hns_nic_select_queue,
1954};
1955
1956static void hns_nic_update_link_status(struct net_device *netdev)
1957{
1958	struct hns_nic_priv *priv = netdev_priv(netdev);
1959
1960	struct hnae_handle *h = priv->ae_handle;
1961
1962	if (h->phy_dev) {
1963		if (h->phy_if != PHY_INTERFACE_MODE_XGMII)
1964			return;
1965
1966		(void)genphy_read_status(h->phy_dev);
1967	}
1968	hns_nic_adjust_link(netdev);
1969}
1970
1971/* for dumping key regs*/
1972static void hns_nic_dump(struct hns_nic_priv *priv)
1973{
1974	struct hnae_handle *h = priv->ae_handle;
1975	struct hnae_ae_ops *ops = h->dev->ops;
1976	u32 *data, reg_num, i;
1977
1978	if (ops->get_regs_len && ops->get_regs) {
1979		reg_num = ops->get_regs_len(priv->ae_handle);
1980		reg_num = (reg_num + 3ul) & ~3ul;
1981		data = kcalloc(reg_num, sizeof(u32), GFP_KERNEL);
1982		if (data) {
1983			ops->get_regs(priv->ae_handle, data);
1984			for (i = 0; i < reg_num; i += 4)
1985				pr_info("0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
1986					i, data[i], data[i + 1],
1987					data[i + 2], data[i + 3]);
1988			kfree(data);
1989		}
1990	}
1991
1992	for (i = 0; i < h->q_num; i++) {
1993		pr_info("tx_queue%d_next_to_clean:%d\n",
1994			i, h->qs[i]->tx_ring.next_to_clean);
1995		pr_info("tx_queue%d_next_to_use:%d\n",
1996			i, h->qs[i]->tx_ring.next_to_use);
1997		pr_info("rx_queue%d_next_to_clean:%d\n",
1998			i, h->qs[i]->rx_ring.next_to_clean);
1999		pr_info("rx_queue%d_next_to_use:%d\n",
2000			i, h->qs[i]->rx_ring.next_to_use);
2001	}
2002}
2003
2004/* for resetting subtask */
2005static void hns_nic_reset_subtask(struct hns_nic_priv *priv)
2006{
2007	enum hnae_port_type type = priv->ae_handle->port_type;
2008
2009	if (!test_bit(NIC_STATE2_RESET_REQUESTED, &priv->state))
2010		return;
2011	clear_bit(NIC_STATE2_RESET_REQUESTED, &priv->state);
2012
2013	/* If we're already down, removing or resetting, just bail */
2014	if (test_bit(NIC_STATE_DOWN, &priv->state) ||
2015	    test_bit(NIC_STATE_REMOVING, &priv->state) ||
2016	    test_bit(NIC_STATE_RESETTING, &priv->state))
2017		return;
2018
2019	hns_nic_dump(priv);
2020	netdev_info(priv->netdev, "try to reset %s port!\n",
2021		    (type == HNAE_PORT_DEBUG ? "debug" : "service"));
2022
2023	rtnl_lock();
2024	/* put off any impending NetWatchDogTimeout */
2025	netif_trans_update(priv->netdev);
2026	hns_nic_net_reinit(priv->netdev);
2027
2028	rtnl_unlock();
2029}
2030
2031/* for doing service complete*/
2032static void hns_nic_service_event_complete(struct hns_nic_priv *priv)
2033{
2034	WARN_ON(!test_bit(NIC_STATE_SERVICE_SCHED, &priv->state));
2035	/* make sure to commit the things */
2036	smp_mb__before_atomic();
2037	clear_bit(NIC_STATE_SERVICE_SCHED, &priv->state);
2038}
2039
2040static void hns_nic_service_task(struct work_struct *work)
2041{
2042	struct hns_nic_priv *priv
2043		= container_of(work, struct hns_nic_priv, service_task);
2044	struct hnae_handle *h = priv->ae_handle;
2045
2046	hns_nic_reset_subtask(priv);
2047	hns_nic_update_link_status(priv->netdev);
2048	h->dev->ops->update_led_status(h);
2049	hns_nic_update_stats(priv->netdev);
2050
2051	hns_nic_service_event_complete(priv);
2052}
2053
2054static void hns_nic_task_schedule(struct hns_nic_priv *priv)
2055{
2056	if (!test_bit(NIC_STATE_DOWN, &priv->state) &&
2057	    !test_bit(NIC_STATE_REMOVING, &priv->state) &&
2058	    !test_and_set_bit(NIC_STATE_SERVICE_SCHED, &priv->state))
2059		(void)schedule_work(&priv->service_task);
2060}
2061
2062static void hns_nic_service_timer(struct timer_list *t)
2063{
2064	struct hns_nic_priv *priv = from_timer(priv, t, service_timer);
2065
2066	(void)mod_timer(&priv->service_timer, jiffies + SERVICE_TIMER_HZ);
2067
2068	hns_nic_task_schedule(priv);
2069}
2070
2071/**
2072 * hns_tx_timeout_reset - initiate reset due to Tx timeout
2073 * @priv: driver private struct
2074 **/
2075static void hns_tx_timeout_reset(struct hns_nic_priv *priv)
2076{
2077	/* Do the reset outside of interrupt context */
2078	if (!test_bit(NIC_STATE_DOWN, &priv->state)) {
2079		set_bit(NIC_STATE2_RESET_REQUESTED, &priv->state);
2080		netdev_warn(priv->netdev,
2081			    "initiating reset due to tx timeout(%llu,0x%lx)\n",
2082			    priv->tx_timeout_count, priv->state);
2083		priv->tx_timeout_count++;
2084		hns_nic_task_schedule(priv);
2085	}
2086}
2087
2088static int hns_nic_init_ring_data(struct hns_nic_priv *priv)
2089{
2090	struct hnae_handle *h = priv->ae_handle;
2091	struct hns_nic_ring_data *rd;
2092	bool is_ver1 = AE_IS_VER1(priv->enet_ver);
2093	int i;
2094
2095	if (h->q_num > NIC_MAX_Q_PER_VF) {
2096		netdev_err(priv->netdev, "too much queue (%d)\n", h->q_num);
2097		return -EINVAL;
2098	}
2099
2100	priv->ring_data = kzalloc(array3_size(h->q_num,
2101					      sizeof(*priv->ring_data), 2),
2102				  GFP_KERNEL);
2103	if (!priv->ring_data)
2104		return -ENOMEM;
2105
2106	for (i = 0; i < h->q_num; i++) {
2107		rd = &priv->ring_data[i];
2108		rd->queue_index = i;
2109		rd->ring = &h->qs[i]->tx_ring;
2110		rd->poll_one = hns_nic_tx_poll_one;
2111		rd->fini_process = is_ver1 ? hns_nic_tx_fini_pro :
2112			hns_nic_tx_fini_pro_v2;
2113
2114		netif_napi_add(priv->netdev, &rd->napi,
2115			       hns_nic_common_poll, NAPI_POLL_WEIGHT);
2116		rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
2117	}
2118	for (i = h->q_num; i < h->q_num * 2; i++) {
2119		rd = &priv->ring_data[i];
2120		rd->queue_index = i - h->q_num;
2121		rd->ring = &h->qs[i - h->q_num]->rx_ring;
2122		rd->poll_one = hns_nic_rx_poll_one;
2123		rd->ex_process = hns_nic_rx_up_pro;
2124		rd->fini_process = is_ver1 ? hns_nic_rx_fini_pro :
2125			hns_nic_rx_fini_pro_v2;
2126
2127		netif_napi_add(priv->netdev, &rd->napi,
2128			       hns_nic_common_poll, NAPI_POLL_WEIGHT);
2129		rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
2130	}
2131
2132	return 0;
2133}
2134
2135static void hns_nic_uninit_ring_data(struct hns_nic_priv *priv)
2136{
2137	struct hnae_handle *h = priv->ae_handle;
2138	int i;
2139
2140	for (i = 0; i < h->q_num * 2; i++) {
2141		netif_napi_del(&priv->ring_data[i].napi);
2142		if (priv->ring_data[i].ring->irq_init_flag == RCB_IRQ_INITED) {
2143			(void)irq_set_affinity_hint(
2144				priv->ring_data[i].ring->irq,
2145				NULL);
2146			free_irq(priv->ring_data[i].ring->irq,
2147				 &priv->ring_data[i]);
2148		}
2149
2150		priv->ring_data[i].ring->irq_init_flag = RCB_IRQ_NOT_INITED;
2151	}
2152	kfree(priv->ring_data);
2153}
2154
2155static void hns_nic_set_priv_ops(struct net_device *netdev)
2156{
2157	struct hns_nic_priv *priv = netdev_priv(netdev);
2158	struct hnae_handle *h = priv->ae_handle;
2159
2160	if (AE_IS_VER1(priv->enet_ver)) {
2161		priv->ops.fill_desc = fill_desc;
2162		priv->ops.get_rxd_bnum = get_rx_desc_bnum;
2163		priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx;
2164	} else {
2165		priv->ops.get_rxd_bnum = get_v2rx_desc_bnum;
2166		if ((netdev->features & NETIF_F_TSO) ||
2167		    (netdev->features & NETIF_F_TSO6)) {
2168			priv->ops.fill_desc = fill_tso_desc;
2169			priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso;
2170			/* This chip only support 7*4096 */
2171			netif_set_gso_max_size(netdev, 7 * 4096);
2172		} else {
2173			priv->ops.fill_desc = fill_v2_desc;
2174			priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx;
2175		}
2176		/* enable tso when init
2177		 * control tso on/off through TSE bit in bd
2178		 */
2179		h->dev->ops->set_tso_stats(h, 1);
2180	}
2181}
2182
2183static int hns_nic_try_get_ae(struct net_device *ndev)
2184{
2185	struct hns_nic_priv *priv = netdev_priv(ndev);
2186	struct hnae_handle *h;
2187	int ret;
2188
2189	h = hnae_get_handle(&priv->netdev->dev,
2190			    priv->fwnode, priv->port_id, NULL);
2191	if (IS_ERR_OR_NULL(h)) {
2192		ret = -ENODEV;
2193		dev_dbg(priv->dev, "has not handle, register notifier!\n");
2194		goto out;
2195	}
2196	priv->ae_handle = h;
2197
2198	ret = hns_nic_init_phy(ndev, h);
2199	if (ret) {
2200		dev_err(priv->dev, "probe phy device fail!\n");
2201		goto out_init_phy;
2202	}
2203
2204	ret = hns_nic_init_ring_data(priv);
2205	if (ret) {
2206		ret = -ENOMEM;
2207		goto out_init_ring_data;
2208	}
2209
2210	hns_nic_set_priv_ops(ndev);
2211
2212	ret = register_netdev(ndev);
2213	if (ret) {
2214		dev_err(priv->dev, "probe register netdev fail!\n");
2215		goto out_reg_ndev_fail;
2216	}
2217	return 0;
2218
2219out_reg_ndev_fail:
2220	hns_nic_uninit_ring_data(priv);
2221	priv->ring_data = NULL;
2222out_init_phy:
2223out_init_ring_data:
2224	hnae_put_handle(priv->ae_handle);
2225	priv->ae_handle = NULL;
2226out:
2227	return ret;
2228}
2229
2230static int hns_nic_notifier_action(struct notifier_block *nb,
2231				   unsigned long action, void *data)
2232{
2233	struct hns_nic_priv *priv =
2234		container_of(nb, struct hns_nic_priv, notifier_block);
2235
2236	assert(action == HNAE_AE_REGISTER);
2237
2238	if (!hns_nic_try_get_ae(priv->netdev)) {
2239		hnae_unregister_notifier(&priv->notifier_block);
2240		priv->notifier_block.notifier_call = NULL;
2241	}
2242	return 0;
2243}
2244
2245static int hns_nic_dev_probe(struct platform_device *pdev)
2246{
2247	struct device *dev = &pdev->dev;
2248	struct net_device *ndev;
2249	struct hns_nic_priv *priv;
2250	u32 port_id;
2251	int ret;
2252
2253	ndev = alloc_etherdev_mq(sizeof(struct hns_nic_priv), NIC_MAX_Q_PER_VF);
2254	if (!ndev)
2255		return -ENOMEM;
2256
2257	platform_set_drvdata(pdev, ndev);
2258
2259	priv = netdev_priv(ndev);
2260	priv->dev = dev;
2261	priv->netdev = ndev;
2262
2263	if (dev_of_node(dev)) {
2264		struct device_node *ae_node;
2265
2266		if (of_device_is_compatible(dev->of_node,
2267					    "hisilicon,hns-nic-v1"))
2268			priv->enet_ver = AE_VERSION_1;
2269		else
2270			priv->enet_ver = AE_VERSION_2;
2271
2272		ae_node = of_parse_phandle(dev->of_node, "ae-handle", 0);
2273		if (!ae_node) {
2274			ret = -ENODEV;
2275			dev_err(dev, "not find ae-handle\n");
2276			goto out_read_prop_fail;
2277		}
2278		priv->fwnode = &ae_node->fwnode;
2279	} else if (is_acpi_node(dev->fwnode)) {
2280		struct fwnode_reference_args args;
2281
2282		if (acpi_dev_found(hns_enet_acpi_match[0].id))
2283			priv->enet_ver = AE_VERSION_1;
2284		else if (acpi_dev_found(hns_enet_acpi_match[1].id))
2285			priv->enet_ver = AE_VERSION_2;
2286		else {
2287			ret = -ENXIO;
2288			goto out_read_prop_fail;
2289		}
2290
2291		/* try to find port-idx-in-ae first */
2292		ret = acpi_node_get_property_reference(dev->fwnode,
2293						       "ae-handle", 0, &args);
2294		if (ret) {
2295			dev_err(dev, "not find ae-handle\n");
2296			goto out_read_prop_fail;
2297		}
2298		if (!is_acpi_device_node(args.fwnode)) {
2299			ret = -EINVAL;
2300			goto out_read_prop_fail;
2301		}
2302		priv->fwnode = args.fwnode;
2303	} else {
2304		dev_err(dev, "cannot read cfg data from OF or acpi\n");
2305		ret = -ENXIO;
2306		goto out_read_prop_fail;
2307	}
2308
2309	ret = device_property_read_u32(dev, "port-idx-in-ae", &port_id);
2310	if (ret) {
2311		/* only for old code compatible */
2312		ret = device_property_read_u32(dev, "port-id", &port_id);
2313		if (ret)
2314			goto out_read_prop_fail;
2315		/* for old dts, we need to caculate the port offset */
2316		port_id = port_id < HNS_SRV_OFFSET ? port_id + HNS_DEBUG_OFFSET
2317			: port_id - HNS_SRV_OFFSET;
2318	}
2319	priv->port_id = port_id;
2320
2321	hns_init_mac_addr(ndev);
2322
2323	ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
2324	ndev->priv_flags |= IFF_UNICAST_FLT;
2325	ndev->netdev_ops = &hns_nic_netdev_ops;
2326	hns_ethtool_set_ops(ndev);
2327
2328	ndev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
2329		NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
2330		NETIF_F_GRO;
2331	ndev->vlan_features |=
2332		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM;
2333	ndev->vlan_features |= NETIF_F_SG | NETIF_F_GSO | NETIF_F_GRO;
2334
2335	/* MTU range: 68 - 9578 (v1) or 9706 (v2) */
2336	ndev->min_mtu = MAC_MIN_MTU;
2337	switch (priv->enet_ver) {
2338	case AE_VERSION_2:
2339		ndev->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_NTUPLE;
2340		ndev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
2341			NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
2342			NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6;
2343		ndev->vlan_features |= NETIF_F_TSO | NETIF_F_TSO6;
2344		ndev->max_mtu = MAC_MAX_MTU_V2 -
2345				(ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
2346		break;
2347	default:
2348		ndev->max_mtu = MAC_MAX_MTU -
2349				(ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
2350		break;
2351	}
2352
2353	SET_NETDEV_DEV(ndev, dev);
2354
2355	if (!dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64)))
2356		dev_dbg(dev, "set mask to 64bit\n");
2357	else
2358		dev_err(dev, "set mask to 64bit fail!\n");
2359
2360	/* carrier off reporting is important to ethtool even BEFORE open */
2361	netif_carrier_off(ndev);
2362
2363	timer_setup(&priv->service_timer, hns_nic_service_timer, 0);
2364	INIT_WORK(&priv->service_task, hns_nic_service_task);
2365
2366	set_bit(NIC_STATE_SERVICE_INITED, &priv->state);
2367	clear_bit(NIC_STATE_SERVICE_SCHED, &priv->state);
2368	set_bit(NIC_STATE_DOWN, &priv->state);
2369
2370	if (hns_nic_try_get_ae(priv->netdev)) {
2371		priv->notifier_block.notifier_call = hns_nic_notifier_action;
2372		ret = hnae_register_notifier(&priv->notifier_block);
2373		if (ret) {
2374			dev_err(dev, "register notifier fail!\n");
2375			goto out_notify_fail;
2376		}
2377		dev_dbg(dev, "has not handle, register notifier!\n");
2378	}
2379
2380	return 0;
2381
2382out_notify_fail:
2383	(void)cancel_work_sync(&priv->service_task);
2384out_read_prop_fail:
2385	/* safe for ACPI FW */
2386	of_node_put(to_of_node(priv->fwnode));
2387	free_netdev(ndev);
2388	return ret;
2389}
2390
2391static int hns_nic_dev_remove(struct platform_device *pdev)
2392{
2393	struct net_device *ndev = platform_get_drvdata(pdev);
2394	struct hns_nic_priv *priv = netdev_priv(ndev);
2395
2396	if (ndev->reg_state != NETREG_UNINITIALIZED)
2397		unregister_netdev(ndev);
2398
2399	if (priv->ring_data)
2400		hns_nic_uninit_ring_data(priv);
2401	priv->ring_data = NULL;
2402
2403	if (ndev->phydev)
2404		phy_disconnect(ndev->phydev);
2405
2406	if (!IS_ERR_OR_NULL(priv->ae_handle))
2407		hnae_put_handle(priv->ae_handle);
2408	priv->ae_handle = NULL;
2409	if (priv->notifier_block.notifier_call)
2410		hnae_unregister_notifier(&priv->notifier_block);
2411	priv->notifier_block.notifier_call = NULL;
2412
2413	set_bit(NIC_STATE_REMOVING, &priv->state);
2414	(void)cancel_work_sync(&priv->service_task);
2415
2416	/* safe for ACPI FW */
2417	of_node_put(to_of_node(priv->fwnode));
2418
2419	free_netdev(ndev);
2420	return 0;
2421}
2422
2423static const struct of_device_id hns_enet_of_match[] = {
2424	{.compatible = "hisilicon,hns-nic-v1",},
2425	{.compatible = "hisilicon,hns-nic-v2",},
2426	{},
2427};
2428
2429MODULE_DEVICE_TABLE(of, hns_enet_of_match);
2430
2431static struct platform_driver hns_nic_dev_driver = {
2432	.driver = {
2433		.name = "hns-nic",
2434		.of_match_table = hns_enet_of_match,
2435		.acpi_match_table = ACPI_PTR(hns_enet_acpi_match),
2436	},
2437	.probe = hns_nic_dev_probe,
2438	.remove = hns_nic_dev_remove,
2439};
2440
2441module_platform_driver(hns_nic_dev_driver);
2442
2443MODULE_DESCRIPTION("HISILICON HNS Ethernet driver");
2444MODULE_AUTHOR("Hisilicon, Inc.");
2445MODULE_LICENSE("GPL");
2446MODULE_ALIAS("platform:hns-nic");
2447