From patchwork Tue Aug 1 15:36:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suman Ghosh X-Patchwork-Id: 129393 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp2826788vqg; Tue, 1 Aug 2023 10:35:47 -0700 (PDT) X-Google-Smtp-Source: APBJJlFoqGXq/o+c+vAVHeHMo7EIH64Y4+wog0CbiYd4G8KZ3EOYpaSI3KZqpnImSSZpuq0cO5xI X-Received: by 2002:a17:906:24f:b0:96f:1f79:c0a6 with SMTP id 15-20020a170906024f00b0096f1f79c0a6mr3230119ejl.70.1690911346747; Tue, 01 Aug 2023 10:35:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690911346; cv=none; d=google.com; s=arc-20160816; b=y6Z5qPS5Vq45tYn1st/YhQsI8r36LTRQ5dWHErTcZCXkZnvU0fQQXVkmtmh2J41dNB y0mr4TKzLGDLP7CCLC2XdrhEdcHOSmublajuXgcNEGdDd6Qj4dAwelLt4Dcs3Ntn4FVK 1c8hwE4Tey2ycO2BhUQdpXUi/pOxQtO4TmqtLdXXsCyE4RGOR1uQddBtf+sLQe70RIvw hnt/oWBfNxtPL31psU5PpzCCIM/A8OuSIJPDsNF93Ilzxf4w7wLHZaslG1u9geZ/PWh0 i1Ps6lX5fC5wh3jlb7/W8vQDmvbt3wyjzW5065ce3Z5+CRLQofYmP0WlilR5ZLD3md+1 YWHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=du7b5S9IIyZvFIWAksClwQP0EvJXahPY9CWOWnTyruo=; fh=TiesVFmX8RtI/eeLLy97gR6HDcgPL+hg8dGC3ed48J0=; b=qInu8BNWUbGQ+ig0qFHu5gAjTyqZrwh46A2dQe8+GoEoHZ4Sy37+AMMi1acFjtcu+y QXsJEZ939sHb5ZH7BbOWwyOU/mHJc4/2+B20SgsD+3bESS91Wr3dCIHDIHzCnGdtWjdd 58qx4g6PN9Ue+cKc8nQ8ulv1tJgKfXRPI1KCMfEtEJE0wchgchPFoJZQX6FA215yPiy2 J4ZQovHZy4h6oH9PylhgLG7sMkBUlpPrA2jo+sqGNy4vuNvLvfbKfgq6+gv53XF3pbgh dwo+4t4H7Sxa0JehipnwZKPBFhG+plS0e2DV1xTg35Smf8nv159g89F4l1nydEm+e1+b U6Kw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=SdoePG5L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a4-20020a1709065f8400b0098843bd4387si9814504eju.320.2023.08.01.10.35.20; Tue, 01 Aug 2023 10:35:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=SdoePG5L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234244AbjHAPhd (ORCPT + 99 others); Tue, 1 Aug 2023 11:37:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234182AbjHAPh1 (ORCPT ); Tue, 1 Aug 2023 11:37:27 -0400 Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E5BDBF; Tue, 1 Aug 2023 08:37:25 -0700 (PDT) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 371Aac1e014813; Tue, 1 Aug 2023 08:37:14 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=du7b5S9IIyZvFIWAksClwQP0EvJXahPY9CWOWnTyruo=; b=SdoePG5LKE2VlA0O7dr7BsH1EPhX6qQ0+FacZ0K627MI31vMgCErBAEg2wzLq/UNXF5k +1EnDG7rWys9Ctukn3uyXUA7sADWBagkaMoFOKwOmhvaZ/6rO5uxpYkwkdH+IwtH9zus pyX9iGgGY9slIFCUEze6tjz0FP6ndbuV43Y8pJ3/o43a7epe9dLtdSGrQ6JJYvrHJCf0 F2O8hD58db20iSX0YON5EiSkQD5blnyFOoK2jWbJkxFIZRgzP1IBYN8Z7vcEEnwo5hhF WNxl7jEqFmBz+rMEpuEyQ2iN+xjNw3SY79lC5pcVI2abj4PfVD1ofSAji0LM/e3pNVG3 AA== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3s529k97qd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 01 Aug 2023 08:37:14 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Tue, 1 Aug 2023 08:37:12 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Tue, 1 Aug 2023 08:37:11 -0700 Received: from localhost.localdomain (unknown [10.28.36.166]) by maili.marvell.com (Postfix) with ESMTP id 889283F70CC; Tue, 1 Aug 2023 08:37:07 -0700 (PDT) From: Suman Ghosh To: , , , , , , , , , , , , , CC: Suman Ghosh Subject: [net-next PATCH V4 1/2] octeontx2-af: Code restructure to handle TC outer VLAN offload Date: Tue, 1 Aug 2023 21:06:56 +0530 Message-ID: <20230801153657.2875497-2-sumang@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230801153657.2875497-1-sumang@marvell.com> References: <20230801153657.2875497-1-sumang@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: sZ0F1qKixbHq9UUbrbbvb-Cc9zLub5Mj X-Proofpoint-ORIG-GUID: sZ0F1qKixbHq9UUbrbbvb-Cc9zLub5Mj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-08-01_12,2023-08-01_01,2023-05-22_02 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773049056475901473 X-GMAIL-MSGID: 1773049056475901473 Moved the TC outer VLAN offload support to a separate function. This change is done to handle all VLAN related changes cleanly from a dedicated function. Signed-off-by: Suman Ghosh --- .../ethernet/marvell/octeontx2/nic/otx2_tc.c | 93 +++++++++++-------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c index 5a44e9b96fc0..f1ebbb7608e0 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c @@ -439,6 +439,55 @@ static int otx2_tc_parse_actions(struct otx2_nic *nic, return 0; } +static int otx2_tc_process_vlan(struct otx2_nic *nic, struct flow_msg *flow_spec, + struct flow_msg *flow_mask, struct flow_rule *rule, + struct npc_install_flow_req *req, bool is_inner) +{ + struct flow_match_vlan match; + u16 vlan_tci, vlan_tci_mask; + + if (is_inner) + return -EOPNOTSUPP; + + flow_rule_match_vlan(rule, &match); + if (ntohs(match.key->vlan_tpid) != ETH_P_8021Q) { + netdev_err(nic->netdev, "vlan tpid 0x%x not supported\n", + ntohs(match.key->vlan_tpid)); + return -EOPNOTSUPP; + } + + if (!match.mask->vlan_id) { + struct flow_action_entry *act; + int i; + + flow_action_for_each(i, act, &rule->action) { + if (act->id == FLOW_ACTION_DROP) { + netdev_err(nic->netdev, + "vlan tpid 0x%x with vlan_id %d is not supported for DROP rule.\n", + ntohs(match.key->vlan_tpid), match.key->vlan_id); + return -EOPNOTSUPP; + } + } + } + + if (match.mask->vlan_id || + match.mask->vlan_dei || + match.mask->vlan_priority) { + vlan_tci = match.key->vlan_id | + match.key->vlan_dei << 12 | + match.key->vlan_priority << 13; + + vlan_tci_mask = match.mask->vlan_id | + match.mask->vlan_dei << 12 | + match.mask->vlan_priority << 13; + flow_spec->vlan_tci = htons(vlan_tci); + flow_mask->vlan_tci = htons(vlan_tci_mask); + req->features |= BIT_ULL(NPC_OUTER_VID); + } + + return 0; +} + static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, struct flow_cls_offload *f, struct npc_install_flow_req *req) @@ -564,47 +613,11 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, } if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_VLAN)) { - struct flow_match_vlan match; - u16 vlan_tci, vlan_tci_mask; - - flow_rule_match_vlan(rule, &match); - - if (ntohs(match.key->vlan_tpid) != ETH_P_8021Q) { - netdev_err(nic->netdev, "vlan tpid 0x%x not supported\n", - ntohs(match.key->vlan_tpid)); - return -EOPNOTSUPP; - } - - if (!match.mask->vlan_id) { - struct flow_action_entry *act; - int i; - - flow_action_for_each(i, act, &rule->action) { - if (act->id == FLOW_ACTION_DROP) { - netdev_err(nic->netdev, - "vlan tpid 0x%x with vlan_id %d is not supported for DROP rule.\n", - ntohs(match.key->vlan_tpid), - match.key->vlan_id); - return -EOPNOTSUPP; - } - } - } + int ret; - if (match.mask->vlan_id || - match.mask->vlan_dei || - match.mask->vlan_priority) { - vlan_tci = match.key->vlan_id | - match.key->vlan_dei << 12 | - match.key->vlan_priority << 13; - - vlan_tci_mask = match.mask->vlan_id | - match.mask->vlan_dei << 12 | - match.mask->vlan_priority << 13; - - flow_spec->vlan_tci = htons(vlan_tci); - flow_mask->vlan_tci = htons(vlan_tci_mask); - req->features |= BIT_ULL(NPC_OUTER_VID); - } + ret = otx2_tc_process_vlan(nic, flow_spec, flow_mask, rule, req, false); + if (ret) + return ret; } if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IPV4_ADDRS)) {