Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp1103829imw; Tue, 5 Jul 2022 03:58:12 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vIFxEuJwDx8Awq4kWD2qV04aIZSlds+w2gb7ZLxGiYtoN2rTP23MocIFxl+Us9BLrN6LqE X-Received: by 2002:a63:1c4c:0:b0:412:6eef:f91a with SMTP id c12-20020a631c4c000000b004126eeff91amr2944438pgm.361.1657018692163; Tue, 05 Jul 2022 03:58:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657018692; cv=none; d=google.com; s=arc-20160816; b=M3+aq9IPJOJ15yx0XT7xqzBnz3H2SEpW25zYMbPlyjra+3tvL7Lz8YaYtaDJe1iP0b uTsUFZ0RyPw2XcafighVtHMUP/0oRXke7iVnHm0Adn7gUhGlICcqvChIX6MXN48zKoQU 10ZMI9lSfeaTRZC/3z3jxvX2T88TXthEs30lYz9sqXkt4cjIeNmfPVmdns96iwXX98cM FclSPJeP4siz0OqME9jW5POC3PGbvaytcaodlj6/6j0XisCP/d2ZjmC3KlbK62cNVkAY g3DehNUDl6TVKrHlySfuJexatejmz9hqdG/+EUjHPa6Ck5R4al+wkz19rhZYdeetKpYB qxhw== 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=aIby4nVSWLBwI0U6WhFqSOE/GmxbdwXYVJX9EKDPvos=; b=gZD4tvVju4j6dsexWmLoB3ahvP/qn6tkcW6o3z4gLYcScFhrJzgUcFChlM1zM12M1E aVqET2VgTObZ07HBO89tkZ5QtUx1rQpaO7kGCCmpn+GYHoN/4HeVMpxCwUc1pgOvJi2M PLq7Cq2ttAF+U3Sz/ErjbNEbNbeBHvZ0+4b8hGEXmtSo/3wtrUToz024RKy6lPaSeeTB rxYieq84UtJX5WPvV6Vv0D6F6umrTodhH0rJTFET01dQePeN5tic+SYtdx7w3Iakp5qN mTRH7zSPxh7ecHJl1/tZEF6b63QBgOu1JykH/eO4k/PpGC+Fer19Ac7TLTgDjoI9omJP WgMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=cyWEg39A; 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 mu12-20020a17090b388c00b001eccde9cdefsi15944940pjb.83.2022.07.05.03.57.59; Tue, 05 Jul 2022 03:58:12 -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=cyWEg39A; 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 S232494AbiGEKuA (ORCPT + 99 others); Tue, 5 Jul 2022 06:50:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231165AbiGEKtx (ORCPT ); Tue, 5 Jul 2022 06:49:53 -0400 Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 072779FFF; Tue, 5 Jul 2022 03:49:52 -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 265AEVia017811; Tue, 5 Jul 2022 03:49:47 -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=aIby4nVSWLBwI0U6WhFqSOE/GmxbdwXYVJX9EKDPvos=; b=cyWEg39A9xNjOGu9WZIR4Ihyo7ULNUbVMkWCHIbliQfRAXRg7fo/+ZVGMfIpG/8Aca9B gKc8wFQwX5Zp/GZmecyk1oxc8QpqapJnChFCep7AqX8gAHmCjOyWzunxcKUEcoC6mWlW lqeo5+qJtd7JFhr6ncg23wg52lDF+K0V0OlWQSxIxZqw4WUTzV1TnZuuCFUMkjslaKzA PPWdfjetzG6I5a2JeerHWpSiQ0+Sh+6d/ID0ufGBNb0ypdCEcFKuOUa8I/mkiH225zrD i9lDZVQAMxZyO4SpVLtTho3VLWfE2R7f2yYHScKl6z+LHhF2sg62112yH7BA4Bn98yzo Tg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3h2kcrh7ut-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 05 Jul 2022 03:49:46 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Tue, 5 Jul 2022 03:49:45 -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; Tue, 5 Jul 2022 03:49:45 -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 5373B3F707E; Tue, 5 Jul 2022 03:49:43 -0700 (PDT) From: Ratheesh Kannoth To: , CC: , , , , , Ratheesh Kannoth Subject: [PATCH 03/12] octeontx2-af: Exact match scan from kex profile Date: Tue, 5 Jul 2022 16:19:14 +0530 Message-ID: <20220705104923.2113935-4-rkannoth@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220705104923.2113935-1-rkannoth@marvell.com> References: <20220705104923.2113935-1-rkannoth@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: d3zlyjZRnxcrtI63s4IrfongrIuR_x6I X-Proofpoint-ORIG-GUID: d3zlyjZRnxcrtI63s4IrfongrIuR_x6I 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-05_08,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. Change-Id: Ifef556a865897ea387be7c47770bbaebd91a7377 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