From patchwork Fri Aug 11 08:57:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 130122 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2AD5E43032; Fri, 11 Aug 2023 10:58:58 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2234C43269; Fri, 11 Aug 2023 10:58:36 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 8602343275 for ; Fri, 11 Aug 2023 10:58:34 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 37AMjx5Q001610 for ; Fri, 11 Aug 2023 01:58:33 -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=2HkxTBem3DVl6hATeJbITshVI9QigA/OT+5OgID5AOQ=; b=e6+ExVaScheQsnRsMKDe7gk5ve8NzowjLJC1zut3ppnPI9Kw6knv6VNzXKLYmOMblhPw 6+bRQQXSYBlfwQkZXoLTljCobIVRHFEvSKV9PjCd/HZurqroP1aa2Ik/krpxrSrLTNl6 59EOVfyenXiJ9XzCraz12BWJp065aCuGeBOX+JaBrOa157X1FCzEjvmrDn1LYoIQ7QZQ xl9+PYLUp0GJNpnPG+qp6mDCBY7n53vHXwhJGS3BmhsToJ5EyXFXn0BMqTwjEju8dPBj cf8PAIZEO4PRF/tuuMJt5YcO6jFUYKIZQenh3uRJYQ9u0Ez8DC+9KPcOTEKXr0PBU4PC 5Q== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3sd8yp9r6t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Fri, 11 Aug 2023 01:58:33 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Fri, 11 Aug 2023 01:58:32 -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; Fri, 11 Aug 2023 01:58:32 -0700 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id D97E73F706B; Fri, 11 Aug 2023 01:58:29 -0700 (PDT) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Subject: [PATCH 08/31] common/cnxk: disable BP on SDP link while closing SQ Date: Fri, 11 Aug 2023 14:27:42 +0530 Message-ID: <20230811085805.441256-8-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230811085805.441256-1-ndabilpuram@marvell.com> References: <20230811085805.441256-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: feWx17d2rl7LmgtZQsR0UvrlgJJncTX4 X-Proofpoint-GUID: feWx17d2rl7LmgtZQsR0UvrlgJJncTX4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-08-10_20,2023-08-10_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Satha Rao Host SDP port closes the SDP link on NIX causes crash when BP enabled on SDP link. This patch disables BP on SDP link when SQ flush fails due to link disabled at host. Signed-off-by: Satha Rao --- drivers/common/cnxk/roc_nix_tm.c | 73 ++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/drivers/common/cnxk/roc_nix_tm.c b/drivers/common/cnxk/roc_nix_tm.c index c104611355..ce1e44ac4f 100644 --- a/drivers/common/cnxk/roc_nix_tm.c +++ b/drivers/common/cnxk/roc_nix_tm.c @@ -610,8 +610,6 @@ roc_nix_tm_sq_flush_spin(struct roc_nix_sq *sq) return 0; exit: - roc_nix_tm_dump(sq->roc_nix, NULL); - roc_nix_queues_ctx_dump(sq->roc_nix, NULL); return -EFAULT; } @@ -748,6 +746,70 @@ roc_nix_tm_sq_free_pending_sqe(struct nix *nix, int q) return 0; } +static inline int +nix_tm_sdp_sq_drop_pkts(struct roc_nix *roc_nix, struct roc_nix_sq *sq) +{ + struct nix *nix = roc_nix_to_nix_priv(roc_nix); + struct mbox *mbox = mbox_get((&nix->dev)->mbox); + struct nix_txschq_config *req = NULL, *rsp; + enum roc_nix_tm_tree tree = nix->tm_tree; + int rc = 0, qid = sq->qid; + struct nix_tm_node *node; + uint64_t regval; + + /* Find the node for this SQ */ + node = nix_tm_node_search(nix, qid, tree); + while (node) { + if (node->hw_lvl != NIX_TXSCH_LVL_TL4) { + node = node->parent; + continue; + } + break; + } + if (!node) { + plt_err("Invalid node/state for sq %u", qid); + return -EFAULT; + } + + /* Get present link config */ + req = mbox_alloc_msg_nix_txschq_cfg(mbox); + req->read = 1; + req->lvl = NIX_TXSCH_LVL_TL4; + req->reg[0] = NIX_AF_TL4X_SDP_LINK_CFG(node->hw_id); + req->num_regs = 1; + rc = mbox_process_msg(mbox, (void **)&rsp); + if (rc || rsp->num_regs != 1) + goto err; + regval = rsp->regval[0]; + /* Disable BP_ENA in SDP link config */ + req = mbox_alloc_msg_nix_txschq_cfg(mbox); + req->lvl = NIX_TXSCH_LVL_TL4; + req->reg[0] = NIX_AF_TL4X_SDP_LINK_CFG(node->hw_id); + req->regval[0] = 0x0ull; + req->regval_mask[0] = ~(BIT_ULL(13)); + req->num_regs = 1; + rc = mbox_process(mbox); + if (rc) + goto err; + mbox_put(mbox); + /* Flush SQ to drop all packets */ + rc = roc_nix_tm_sq_flush_spin(sq); + if (rc) + plt_nix_dbg("SQ flush failed with link reset config rc %d", rc); + mbox = mbox_get((&nix->dev)->mbox); + /* Restore link config */ + req = mbox_alloc_msg_nix_txschq_cfg(mbox); + req->reg[0] = NIX_AF_TL4X_SDP_LINK_CFG(node->hw_id); + req->lvl = NIX_TXSCH_LVL_TL4; + req->regval[0] = regval; + req->regval_mask[0] = ~(BIT_ULL(13) | BIT_ULL(12) | GENMASK_ULL(7, 0)); + req->num_regs = 1; + rc = mbox_process(mbox); +err: + mbox_put(mbox); + return rc; +} + /* Flush and disable tx queue and its parent SMQ */ int nix_tm_sq_flush_pre(struct roc_nix_sq *sq) @@ -834,8 +896,13 @@ nix_tm_sq_flush_pre(struct roc_nix_sq *sq) /* Wait for sq entries to be flushed */ rc = roc_nix_tm_sq_flush_spin(sq); if (rc) { - rc = roc_nix_tm_sq_free_pending_sqe(nix, sq->qid); + if (nix->sdp_link) + rc = nix_tm_sdp_sq_drop_pkts(roc_nix, sq); + else + rc = roc_nix_tm_sq_free_pending_sqe(nix, sq->qid); if (rc) { + roc_nix_tm_dump(sq->roc_nix, NULL); + roc_nix_queues_ctx_dump(sq->roc_nix, NULL); plt_err("Failed to drain sq %u, rc=%d\n", sq->qid, rc); return rc; }