Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp3797479imm; Fri, 25 May 2018 11:49:28 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrEBY5W/KX9Ooz1K/SbcUID94KBtPf9WGphQRRZQw+CYZXDKr8Ku3ZFzYeqSBpPLpB+vNK9 X-Received: by 2002:a17:902:1007:: with SMTP id b7-v6mr3690308pla.88.1527274168062; Fri, 25 May 2018 11:49:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527274168; cv=none; d=google.com; s=arc-20160816; b=weLJz1GKOc01DUSNc+WsvH5QSKh5kUfk3Kw2Z78VNJGTdijjd8yeWaY1ytxCrHdz47 CTbgdsAKC4Odk+nHEhmqKrom276rdbIhEqHWkzmUg/WephOCfCQPQGO2qA+O6R3a9UBs lk1i8HV5fhcIt78wQTjMzwdwajS+zTGrOvcsSuMbDHJNcyJnJoZStwwIc1xl1WzDEkfK ncPlg4Oe5pfpykT3FUQEWALAATINOrlWLzdt0s1v4TNROG1lBBNHdvtMCM/Uef1XNUJr nPIIh5FVUahjbVp/rGLisFdScU+J2KS5T2HI9hb5eFGfEMZcP7gVanGL8Q2WBhj9vRyN /MuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=DE0idHVZO3bUMMZvhBUdALsDyijXCxwb5UAy2aWdzag=; b=a8YrSFKXZx/Yg0cu7op7xksysqC1cEO3s+8mDOP5ts5Zo+EahiyfgJ1zioad3DIsGr maRnjUJr2Bf+FhZ5MJqWMkdyPcsc4OJoQeXVhSON4nHACeWhh+k3zWGxX6w9bsnYdFeW yJGK7XvdUgDzSI1Q75j67uhXlTltsxwqFkDwzrIakB8wewhRu92ztqZXzBc7e5J6MHXr awPuFKQ0gefCDN6foyCyJc/4raowtqhHahmhr0ic1+LULTUTWCLFPXdpQPNrZ5ILJtFo BF/qo+Bs8fUeTTCfe+FakAqJ4l2SRxxS6O8hZbeEkg0ZyOjldqfuGMYNlyYuk/AH7WR8 7sXA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z2-v6si8337872pgb.225.2018.05.25.11.49.13; Fri, 25 May 2018 11:49:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967811AbeEYSom (ORCPT + 99 others); Fri, 25 May 2018 14:44:42 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:34814 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S967598AbeEYSok (ORCPT ); Fri, 25 May 2018 14:44:40 -0400 Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id C0CAB65589842; Sat, 26 May 2018 02:44:36 +0800 (CST) Received: from S00293818-DELL1.china.huawei.com (10.202.227.234) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.382.0; Sat, 26 May 2018 02:44:30 +0800 From: Salil Mehta To: CC: , , , , , , Subject: [PATCH net-next 03/12] net: hns3: Add STRP_TAGP field support for hardware revision 0x21 Date: Fri, 25 May 2018 19:42:58 +0100 Message-ID: <20180525184307.36288-4-salil.mehta@huawei.com> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20180525184307.36288-1-salil.mehta@huawei.com> References: <20180525184307.36288-1-salil.mehta@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.202.227.234] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Peng Li Hardware Revision(0x21) Buffer Descriptor adds a field STRP_TAGP for vlan stripped processed indication. STRP_TAGP field has 2 bits, bit 0 is stripped indication of the vlan tag in outer vlan tag field, bit 1 is stripped indication of the vlan tag in inner vlan tag field. For each bit, 0 indicates the tag is not stripped and 1 indicates the tag is stripped. This patch adds STRP_TAGP support for revision(0x21), and does not change the revision(0x20) action. Signed-off-by: Peng Li Signed-off-by: Salil Mehta --- drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 42 ++++++++++++++++++++++--- drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 3 ++ 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index ae8d749..1bcb676 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -2066,6 +2066,39 @@ static void hns3_rx_skb(struct hns3_enet_ring *ring, struct sk_buff *skb) napi_gro_receive(&ring->tqp_vector->napi, skb); } +static u16 hns3_parse_vlan_tag(struct hns3_enet_ring *ring, + struct hns3_desc *desc, u32 l234info) +{ + struct pci_dev *pdev = ring->tqp->handle->pdev; + u16 vlan_tag; + + if (pdev->revision == 0x20) { + vlan_tag = le16_to_cpu(desc->rx.ot_vlan_tag); + if (!(vlan_tag & VLAN_VID_MASK)) + vlan_tag = le16_to_cpu(desc->rx.vlan_tag); + + return vlan_tag; + } + +#define HNS3_STRP_OUTER_VLAN 0x1 +#define HNS3_STRP_INNER_VLAN 0x2 + + switch (hnae_get_field(l234info, HNS3_RXD_STRP_TAGP_M, + HNS3_RXD_STRP_TAGP_S)) { + case HNS3_STRP_OUTER_VLAN: + vlan_tag = le16_to_cpu(desc->rx.ot_vlan_tag); + break; + case HNS3_STRP_INNER_VLAN: + vlan_tag = le16_to_cpu(desc->rx.vlan_tag); + break; + default: + vlan_tag = 0; + break; + } + + return vlan_tag; +} + static int hns3_handle_rx_bd(struct hns3_enet_ring *ring, struct sk_buff **out_skb, int *out_bnum) { @@ -2155,6 +2188,9 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring, } *out_bnum = bnum; + + l234info = le32_to_cpu(desc->rx.l234_info); + /* Based on hw strategy, the tag offloaded will be stored at * ot_vlan_tag in two layer tag case, and stored at vlan_tag * in one layer tag case. @@ -2162,17 +2198,13 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring, if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) { u16 vlan_tag; - vlan_tag = le16_to_cpu(desc->rx.ot_vlan_tag); - if (!(vlan_tag & VLAN_VID_MASK)) - vlan_tag = le16_to_cpu(desc->rx.vlan_tag); + vlan_tag = hns3_parse_vlan_tag(ring, desc, l234info); if (vlan_tag & VLAN_VID_MASK) __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag); } - l234info = le32_to_cpu(desc->rx.l234_info); - if (unlikely(!hnae_get_bit(bd_base_info, HNS3_RXD_VLD_B))) { netdev_err(netdev, "no valid bd,%016llx,%016llx\n", ((u64 *)desc)[0], ((u64 *)desc)[1]); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h index 5b40f5a..38e91ca 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h @@ -104,6 +104,9 @@ enum hns3_nic_state { #define HNS3_RXD_L4ID_S 8 #define HNS3_RXD_L4ID_M (0xf << HNS3_RXD_L4ID_S) #define HNS3_RXD_FRAG_B 12 +#define HNS3_RXD_STRP_TAGP_S 13 +#define HNS3_RXD_STRP_TAGP_M (0x3 << HNS3_RXD_STRP_TAGP_S) + #define HNS3_RXD_L2E_B 16 #define HNS3_RXD_L3E_B 17 #define HNS3_RXD_L4E_B 18 -- 2.7.4