From patchwork Mon Dec 11 13:23:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavan Nikhilesh Bhagavatula X-Patchwork-Id: 135022 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 37E95436C8; Mon, 11 Dec 2023 14:23:43 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1BF9442831; Mon, 11 Dec 2023 14:23:37 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id D9DC3427E4 for ; Mon, 11 Dec 2023 14:23:35 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 3BB9IHhF009912 for ; Mon, 11 Dec 2023 05:23:35 -0800 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=urtNF9RunH7jpPLYZPrbd+Im8pGgqKsd8AUQDXX+8qA=; b=fmi fDqdRfBRVxGsm9HHKwKjfABQ+L+6nx5+x79UWKZAx0WBYtuLyILHtGUDesPK78xC zZ3DuMmEHuRWG2R/lLWwHwpF7/l4vhsXWbF9V34oXsk5+AwzkXmZvZPVwoT2NUhs 2IILGIeSrGzzsnO43mM6ukvIc5ldEkqg3EgKd5bvyK8JqofXdtE8kkJLgKFWtt9w LX04aquuowElSsvf2dgg9cne7Hrl8Uis1KAjW85hypgoP0XwnG7rYGsiKZiG8dnv vSn1qxcIWlighH+L2yEqBa3wXGo/C95gP86WyfWsaRJQh/OM+7tHLNhqrKvuhqDQ SxSYH9Ki1gmsYeqWiIQ== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3uwyp4gqpw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Mon, 11 Dec 2023 05:23:34 -0800 (PST) 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; Mon, 11 Dec 2023 05:23:33 -0800 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; Mon, 11 Dec 2023 05:23:33 -0800 Received: from MININT-80QBFE8.corp.innovium.com (MININT-80QBFE8.marvell.com [10.28.164.106]) by maili.marvell.com (Postfix) with ESMTP id 34F213F7068; Mon, 11 Dec 2023 05:23:29 -0800 (PST) From: To: , Nithin Dabilpuram , "Kiran Kumar K" , Sunil Kumar Kori , Satha Rao , Pavan Nikhilesh , Shijith Thotton CC: Subject: [PATCH v2 3/3] event/cnxk: add option to update links via mbox Date: Mon, 11 Dec 2023 18:53:20 +0530 Message-ID: <20231211132320.1254-3-pbhagavatula@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231211132320.1254-1-pbhagavatula@marvell.com> References: <20231207065630.4009-1-pbhagavatula@marvell.com> <20231211132320.1254-1-pbhagavatula@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: 9PnXHZhRYwLhxRpfoktkQrY0yAES68uc X-Proofpoint-GUID: 9PnXHZhRYwLhxRpfoktkQrY0yAES68uc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-12-09_02,2023-12-07_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: Pavan Nikhilesh Add option to update event queue to event port links via mailbox. Signed-off-by: Pavan Nikhilesh --- drivers/common/cnxk/roc_sso.c | 87 +++++++++++++++++++++++++---- drivers/common/cnxk/roc_sso.h | 4 +- drivers/event/cnxk/cn10k_eventdev.c | 6 +- drivers/event/cnxk/cn9k_eventdev.c | 18 +++--- 4 files changed, 90 insertions(+), 25 deletions(-) diff --git a/drivers/common/cnxk/roc_sso.c b/drivers/common/cnxk/roc_sso.c index e5c16b2a05..293b0c81a1 100644 --- a/drivers/common/cnxk/roc_sso.c +++ b/drivers/common/cnxk/roc_sso.c @@ -235,6 +235,47 @@ sso_hws_link_modify(uint8_t hws, uintptr_t base, struct plt_bitmap *bmp, uint16_ } } +static int +sso_hws_link_modify_af(struct dev *dev, uint8_t hws, struct plt_bitmap *bmp, uint16_t hwgrp[], + uint16_t n, uint8_t set, uint16_t enable) +{ + struct mbox *mbox = mbox_get(dev->mbox); + struct ssow_chng_mship *req; + int rc, i; + + req = mbox_alloc_msg_ssow_chng_mship(mbox); + if (req == NULL) { + rc = mbox_process(mbox); + if (rc) { + mbox_put(mbox); + return -EIO; + } + req = mbox_alloc_msg_ssow_chng_mship(mbox); + if (req == NULL) { + mbox_put(mbox); + return -ENOSPC; + } + } + req->enable = enable; + req->set = set; + req->hws = hws; + req->nb_hwgrps = n; + for (i = 0; i < n; i++) + req->hwgrps[i] = hwgrp[i]; + rc = mbox_process(mbox); + mbox_put(mbox); + if (rc == MBOX_MSG_INVALID) + return rc; + if (rc) + return -EIO; + + for (i = 0; i < n; i++) + enable ? plt_bitmap_set(bmp, hwgrp[i]) : + plt_bitmap_clear(bmp, hwgrp[i]); + + return 0; +} + static int sso_msix_fill(struct roc_sso *roc_sso, uint16_t nb_hws, uint16_t nb_hwgrp) { @@ -300,31 +341,55 @@ roc_sso_ns_to_gw(uint64_t base, uint64_t ns) int roc_sso_hws_link(struct roc_sso *roc_sso, uint8_t hws, uint16_t hwgrp[], uint16_t nb_hwgrp, - uint8_t set) + uint8_t set, bool use_mbox) { - struct dev *dev = &roc_sso_to_sso_priv(roc_sso)->dev; - struct sso *sso; + struct sso *sso = roc_sso_to_sso_priv(roc_sso); + struct dev *dev = &sso->dev; uintptr_t base; + int rc; - sso = roc_sso_to_sso_priv(roc_sso); + if (!nb_hwgrp) + return 0; + + if (use_mbox && roc_model_is_cn10k()) { + rc = sso_hws_link_modify_af(dev, hws, sso->link_map[hws], hwgrp, nb_hwgrp, set, 1); + if (rc == MBOX_MSG_INVALID) + goto lf_access; + if (rc < 0) + return 0; + goto done; + } +lf_access: base = dev->bar2 + (RVU_BLOCK_ADDR_SSOW << 20 | hws << 12); sso_hws_link_modify(hws, base, sso->link_map[hws], hwgrp, nb_hwgrp, set, 1); - +done: return nb_hwgrp; } int -roc_sso_hws_unlink(struct roc_sso *roc_sso, uint8_t hws, uint16_t hwgrp[], uint16_t nb_hwgrp, - uint8_t set) +roc_sso_hws_unlink(struct roc_sso *roc_sso, uint8_t hws, uint16_t hwgrp[], + uint16_t nb_hwgrp, uint8_t set, bool use_mbox) { - struct dev *dev = &roc_sso_to_sso_priv(roc_sso)->dev; - struct sso *sso; + struct sso *sso = roc_sso_to_sso_priv(roc_sso); + struct dev *dev = &sso->dev; uintptr_t base; + int rc; - sso = roc_sso_to_sso_priv(roc_sso); + if (!nb_hwgrp) + return 0; + + if (use_mbox && roc_model_is_cn10k()) { + rc = sso_hws_link_modify_af(dev, hws, sso->link_map[hws], hwgrp, nb_hwgrp, set, 0); + if (rc == MBOX_MSG_INVALID) + goto lf_access; + if (rc < 0) + return 0; + goto done; + } +lf_access: base = dev->bar2 + (RVU_BLOCK_ADDR_SSOW << 20 | hws << 12); sso_hws_link_modify(hws, base, sso->link_map[hws], hwgrp, nb_hwgrp, set, 0); - +done: return nb_hwgrp; } diff --git a/drivers/common/cnxk/roc_sso.h b/drivers/common/cnxk/roc_sso.h index 26061f25f8..4ac901762e 100644 --- a/drivers/common/cnxk/roc_sso.h +++ b/drivers/common/cnxk/roc_sso.h @@ -85,9 +85,9 @@ int __roc_api roc_sso_hwgrp_set_priority(struct roc_sso *roc_sso, uint8_t affinity, uint8_t priority); uint64_t __roc_api roc_sso_ns_to_gw(uint64_t base, uint64_t ns); int __roc_api roc_sso_hws_link(struct roc_sso *roc_sso, uint8_t hws, uint16_t hwgrp[], - uint16_t nb_hwgrp, uint8_t set); + uint16_t nb_hwgrp, uint8_t set, bool use_mbox); int __roc_api roc_sso_hws_unlink(struct roc_sso *roc_sso, uint8_t hws, uint16_t hwgrp[], - uint16_t nb_hwgrp, uint8_t set); + uint16_t nb_hwgrp, uint8_t set, bool use_mbox); int __roc_api roc_sso_hwgrp_hws_link_status(struct roc_sso *roc_sso, uint8_t hws, uint16_t hwgrp); uintptr_t __roc_api roc_sso_hws_base_get(struct roc_sso *roc_sso, uint8_t hws); diff --git a/drivers/event/cnxk/cn10k_eventdev.c b/drivers/event/cnxk/cn10k_eventdev.c index bb0c910553..221f419055 100644 --- a/drivers/event/cnxk/cn10k_eventdev.c +++ b/drivers/event/cnxk/cn10k_eventdev.c @@ -71,7 +71,7 @@ cn10k_sso_hws_link(void *arg, void *port, uint16_t *map, uint16_t nb_link, uint8 struct cnxk_sso_evdev *dev = arg; struct cn10k_sso_hws *ws = port; - return roc_sso_hws_link(&dev->sso, ws->hws_id, map, nb_link, profile); + return roc_sso_hws_link(&dev->sso, ws->hws_id, map, nb_link, profile, 0); } static int @@ -80,7 +80,7 @@ cn10k_sso_hws_unlink(void *arg, void *port, uint16_t *map, uint16_t nb_link, uin struct cnxk_sso_evdev *dev = arg; struct cn10k_sso_hws *ws = port; - return roc_sso_hws_unlink(&dev->sso, ws->hws_id, map, nb_link, profile); + return roc_sso_hws_unlink(&dev->sso, ws->hws_id, map, nb_link, profile, 0); } static void @@ -111,7 +111,7 @@ cn10k_sso_hws_release(void *arg, void *hws) for (i = 0; i < CNXK_SSO_MAX_PROFILES; i++) for (j = 0; j < dev->nb_event_queues; j++) - roc_sso_hws_unlink(&dev->sso, ws->hws_id, &j, 1, i); + roc_sso_hws_unlink(&dev->sso, ws->hws_id, &j, 1, i, 0); memset(ws, 0, sizeof(*ws)); } diff --git a/drivers/event/cnxk/cn9k_eventdev.c b/drivers/event/cnxk/cn9k_eventdev.c index 9fb9ca0d63..5e6305947b 100644 --- a/drivers/event/cnxk/cn9k_eventdev.c +++ b/drivers/event/cnxk/cn9k_eventdev.c @@ -25,12 +25,12 @@ cn9k_sso_hws_link(void *arg, void *port, uint16_t *map, uint16_t nb_link, uint8_ if (dev->dual_ws) { dws = port; rc = roc_sso_hws_link(&dev->sso, CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 0), map, nb_link, - profile); + profile, 0); rc |= roc_sso_hws_link(&dev->sso, CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 1), map, - nb_link, profile); + nb_link, profile, 0); } else { ws = port; - rc = roc_sso_hws_link(&dev->sso, ws->hws_id, map, nb_link, profile); + rc = roc_sso_hws_link(&dev->sso, ws->hws_id, map, nb_link, profile, 0); } return rc; @@ -47,12 +47,12 @@ cn9k_sso_hws_unlink(void *arg, void *port, uint16_t *map, uint16_t nb_link, uint if (dev->dual_ws) { dws = port; rc = roc_sso_hws_unlink(&dev->sso, CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 0), map, - nb_link, profile); + nb_link, profile, 0); rc |= roc_sso_hws_unlink(&dev->sso, CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 1), map, - nb_link, profile); + nb_link, profile, 0); } else { ws = port; - rc = roc_sso_hws_unlink(&dev->sso, ws->hws_id, map, nb_link, profile); + rc = roc_sso_hws_unlink(&dev->sso, ws->hws_id, map, nb_link, profile, 0); } return rc; @@ -100,9 +100,9 @@ cn9k_sso_hws_release(void *arg, void *hws) for (i = 0; i < dev->nb_event_queues; i++) { for (k = 0; k < CNXK_SSO_MAX_PROFILES; k++) { roc_sso_hws_unlink(&dev->sso, CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 0), - &i, 1, k); + &i, 1, k, 0); roc_sso_hws_unlink(&dev->sso, CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 1), - &i, 1, k); + &i, 1, k, 0); } } memset(dws, 0, sizeof(*dws)); @@ -110,7 +110,7 @@ cn9k_sso_hws_release(void *arg, void *hws) ws = hws; for (i = 0; i < dev->nb_event_queues; i++) for (k = 0; k < CNXK_SSO_MAX_PROFILES; k++) - roc_sso_hws_unlink(&dev->sso, ws->hws_id, &i, 1, k); + roc_sso_hws_unlink(&dev->sso, ws->hws_id, &i, 1, k, 0); memset(ws, 0, sizeof(*ws)); } }