Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp86999imw; Thu, 7 Jul 2022 22:00:47 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sQUmdk53tRFc++HDuEMYo00X0vApjTc5xAyOWYDSpagjPEY1HLJ5mEjZQoV3trZuu1AoG9 X-Received: by 2002:a05:6402:2549:b0:437:788d:b363 with SMTP id l9-20020a056402254900b00437788db363mr2144008edb.406.1657256447531; Thu, 07 Jul 2022 22:00:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657256447; cv=none; d=google.com; s=arc-20160816; b=HbhD9ykgzNKpslfa52pOIPAjIDEAOil+F8ID5lXPmo+YF2CyzaV+Z1AfaPMxxv6EJS dY7AIaUbNv3HWpyTIqXF7U9/OCAsW1ApEJqbvqO6TpLT4LAcbNmhSmCdgWk6eraxLHVc XfY3RdBKwqKJ3CM1qcTZikSZQUkTBbNorKywUFfDoxZ4ivTsnv01a8+L9eqWgLuq1qTn f3w3LIRQ5BzdCn1e0X6RD3Hwx+4qBAxC+LeUWTEWAbSAzKLyKGwVwj66XnUqAsW8tG8i XlpjL2xEj7eLEu7hUhbwnfN0pBYz+kwQBENGtM8UA6bm7E7067NcGb1q6kl4n2TG8xlu eYeA== 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=a51kSL5pP0Arjd3xQWuFH6EnupWV13FhDA9OUm5CtYc=; b=n1U2obkHX/gus0dQhikgRxORXsrX9sNJK5uVKvyvj6ksLygiIduepZ2+fl18c//JN0 HK9jSi8Vd9gS2zgbfaXoCu8LPU5qOOg17Iv5b9xyeNIhC/xcaDP9E86bLXd1R1Uyki3I dbUQNePVSJ0HtonKanGIwT+FuGZhCMfoUvFeTmZ3jt9AUdOPCSsOlcEQZrtQyw5Bk0K7 uebaH22w9u6e8MTdG7oYouVUNl+MtVKwvh0RMSeNbGZ/Kj/26YbiAWTNHyM7m2m/pkK+ 2VFxZoNE9E9OOIrKiot7ulYUP0EIfLLw2Vm2lzkT/MKxsctBaURW0iJfBhVa3CzocBLt t7hg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=FoqQSHIz; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hp2-20020a1709073e0200b00711f646bb8csi3833959ejc.916.2022.07.07.22.00.21; Thu, 07 Jul 2022 22:00:47 -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=FoqQSHIz; 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 S237207AbiGHEmV (ORCPT + 99 others); Fri, 8 Jul 2022 00:42:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237192AbiGHEmS (ORCPT ); Fri, 8 Jul 2022 00:42:18 -0400 Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39D0961D76; Thu, 7 Jul 2022 21:42:16 -0700 (PDT) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 2681tO1t031308; Thu, 7 Jul 2022 21:42:11 -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=a51kSL5pP0Arjd3xQWuFH6EnupWV13FhDA9OUm5CtYc=; b=FoqQSHIz5K4sOHfOMv64aZPCcNxtlpTxhWpW2iJlrWZM8Gqe6ZcknjR0m4EoTNqiVuSK Wo4v49cqiopVICP5qWDXslS97eGp9hxay0xsNtZ9AZRifuHGCu8YLW5MLHzQH49YFo0i XmojkRHswxbyHYr2rfU2ZfWsacI0eG1E8xhCUj2nWljAH449szwr0NcD4xSd0cPL9rVy /l4MswI0hqffQJ0fEtuE71wewtuBYR2MGqIpe+vJicxUbR6GT9dNKufadXceTVYWT+U1 3BYhtSgL6BUI5/bjRfDgSmLTUTEcQxbmlMatCg8QrpFGztUJ1hJXEknZDhtJL7JV0/eq Xg== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3h6bay8ej5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 07 Jul 2022 21:42:10 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 7 Jul 2022 21:42:09 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 7 Jul 2022 21:42:09 -0700 Received: from IPBU-BLR-SERVER1.marvell.com (IPBU-BLR-SERVER1.marvell.com [10.28.8.41]) by maili.marvell.com (Postfix) with ESMTP id 5CF553F7078; Thu, 7 Jul 2022 21:42:06 -0700 (PDT) From: Ratheesh Kannoth To: , CC: , , , , , Ratheesh Kannoth Subject: [net-next PATCH v5 03/12] octeontx2-af: Exact match scan from kex profile Date: Fri, 8 Jul 2022 10:11:42 +0530 Message-ID: <20220708044151.2972645-4-rkannoth@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220708044151.2972645-1-rkannoth@marvell.com> References: <20220708044151.2972645-1-rkannoth@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: 90NvbU1enDN1TFiBZAmUXaxEtzUhyQ4q X-Proofpoint-ORIG-GUID: 90NvbU1enDN1TFiBZAmUXaxEtzUhyQ4q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-08_04,2022-06-28_01,2022-06-22_01 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_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 CN10KB silicon supports exact match table. Scanning KEX profile should check for exact match feature is enabled and then set profile masks properly. These kex profile masks are required to configure NPC MCAM drop rules. If there is a miss in exact match table, these drop rules will drop those packets. Signed-off-by: Ratheesh Kannoth --- .../net/ethernet/marvell/octeontx2/af/npc.h | 1 + .../marvell/octeontx2/af/rvu_npc_fs.c | 37 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/npc.h b/drivers/net/ethernet/marvell/octeontx2/af/npc.h index 69f9517c61f4..f187293e3e08 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/npc.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/npc.h @@ -208,6 +208,7 @@ enum key_fields { NPC_ERRLEV, NPC_ERRCODE, NPC_LXMB, + NPC_EXACT_RESULT, NPC_LA, NPC_LB, NPC_LC, diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c index 08a0fa44857e..4a8618731fc6 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c @@ -229,6 +229,25 @@ static bool npc_check_field(struct rvu *rvu, int blkaddr, enum key_fields type, return true; } +static void npc_scan_exact_result(struct npc_mcam *mcam, u8 bit_number, + u8 key_nibble, u8 intf) +{ + u8 offset = (key_nibble * 4) % 64; /* offset within key word */ + u8 kwi = (key_nibble * 4) / 64; /* which word in key */ + u8 nr_bits = 4; /* bits in a nibble */ + u8 type; + + switch (bit_number) { + case 40 ... 43: + type = NPC_EXACT_RESULT; + break; + + default: + return; + } + npc_set_kw_masks(mcam, type, nr_bits, kwi, offset, intf); +} + static void npc_scan_parse_result(struct npc_mcam *mcam, u8 bit_number, u8 key_nibble, u8 intf) { @@ -511,8 +530,8 @@ static int npc_scan_kex(struct rvu *rvu, int blkaddr, u8 intf) { struct npc_mcam *mcam = &rvu->hw->mcam; u8 lid, lt, ld, bitnr; + u64 cfg, masked_cfg; u8 key_nibble = 0; - u64 cfg; /* Scan and note how parse result is going to be in key. * A bit set in PARSE_NIBBLE_ENA corresponds to a nibble from @@ -520,12 +539,24 @@ static int npc_scan_kex(struct rvu *rvu, int blkaddr, u8 intf) * will be concatenated in key. */ cfg = rvu_read64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(intf)); - cfg &= NPC_PARSE_NIBBLE; - for_each_set_bit(bitnr, (unsigned long *)&cfg, 31) { + masked_cfg = cfg & NPC_PARSE_NIBBLE; + for_each_set_bit(bitnr, (unsigned long *)&masked_cfg, 31) { npc_scan_parse_result(mcam, bitnr, key_nibble, intf); key_nibble++; } + /* Ignore exact match bits for mcam entries except the first rule + * which is drop on hit. This first rule is configured explitcitly by + * exact match code. + */ + masked_cfg = cfg & NPC_EXACT_NIBBLE; + bitnr = NPC_EXACT_NIBBLE_START; + for_each_set_bit_from(bitnr, (unsigned long *)&masked_cfg, + NPC_EXACT_NIBBLE_START) { + npc_scan_exact_result(mcam, bitnr, key_nibble, intf); + key_nibble++; + } + /* Scan and note how layer data is going to be in key */ for (lid = 0; lid < NPC_MAX_LID; lid++) { for (lt = 0; lt < NPC_MAX_LT; lt++) { -- 2.25.1