linux/drivers/net/ethernet/hisilicon/hns/hns_enet.c
<<
>>
Prefs
   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_adpt_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;
 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        /* Different irq balance 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 < priv->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 *       receiving 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 original 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;
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