From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D476EA04E0; Wed, 27 Nov 2019 11:23:41 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7C2E01BE89; Wed, 27 Nov 2019 11:23:31 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id C5C8B1B943 for ; Wed, 27 Nov 2019 11:23:28 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xARAMWQU013251 for ; Wed, 27 Nov 2019 02:23:27 -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-type; s=pfpt0818; bh=zdeAgB63aoJB8WTcwU5qmcokz2V3ZWRgaurDiMCKVcU=; b=Kou76oP27IPLjZ5ODMIXm4+8FdMNn3ZzAt+65FWnJ/OE7223LUayHKcBTWaKu7+ABMDf DA3rbZSxbRuknUMtzpfNlGKcZ6MUowwhK+kN1O634ami9A8bJS9xUa3GzsHAlEM22Ji4 at5+xJDcoW5/qs4BNg7Ra0u+DBZZZLcD/ZzT+KzLo/HXdIL1ce1+LY0fODgyH1nM+7xC 3T8tk2+ZLlE/7DIi2S2lZzpK6OphRJadXH1UvWdvgB61hpv6yHbFlC8QZV6N252931U6 FhIXkKrE11bWnG+3C68JOWn8ynEnWgD4u3XULcBBf55WadRtf4B1fJRC6Cb3IMNdlfZn Mw== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 2whmdy8pvw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 27 Nov 2019 02:23:27 -0800 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 27 Nov 2019 02:23:26 -0800 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 27 Nov 2019 02:23:26 -0800 Received: from localhost.localdomain (unknown [10.28.34.200]) by maili.marvell.com (Postfix) with ESMTP id 9A9DE3F703F; Wed, 27 Nov 2019 02:23:24 -0800 (PST) From: Sunil Kumar Kori To: Jerin Jacob , Nithin Dabilpuram , Vamsi Attunuru CC: , Sunil Kumar Kori Date: Wed, 27 Nov 2019 15:52:21 +0530 Message-ID: <20191127102222.31940-3-skori@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191127102222.31940-1-skori@marvell.com> References: <20191126061525.28507-1-skori@marvell.com> <20191127102222.31940-1-skori@marvell.com> MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-11-27_02:2019-11-27,2019-11-27 signatures=0 Subject: [dpdk-dev] [PATCH v2 3/4] common/octeontx2: add polling based response mbox message X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently otx2_mbox_get_rsp get response once AF driver interrupts after completion. But this funciton will get into deadlock if called in another interrupt context. To avoid it, implemented another version of this function which polls on dedicated memory for a given timeout. Also after clearing interrupt, there could UP messages available for processing. So irq handler must check mbox messages. Signed-off-by: Sunil Kumar Kori --- v2: - Included Makefile and meson build changes. - Rebased patch on 19.11-rc4 drivers/common/octeontx2/Makefile | 2 + drivers/common/octeontx2/meson.build | 2 + drivers/common/octeontx2/otx2_mbox.c | 58 +++++++++++++++++++ drivers/common/octeontx2/otx2_mbox.h | 7 +++ .../rte_common_octeontx2_version.map | 7 +++ 5 files changed, 76 insertions(+) diff --git a/drivers/common/octeontx2/Makefile b/drivers/common/octeontx2/Makefile index eaff29433..b1c1792fb 100644 --- a/drivers/common/octeontx2/Makefile +++ b/drivers/common/octeontx2/Makefile @@ -22,6 +22,8 @@ CFLAGS += -diag-disable 2259 endif endif +CFLAGS += -DALLOW_EXPERIMENTAL_API + EXPORT_MAP := rte_common_octeontx2_version.map # diff --git a/drivers/common/octeontx2/meson.build b/drivers/common/octeontx2/meson.build index b79145788..a03c6a39b 100644 --- a/drivers/common/octeontx2/meson.build +++ b/drivers/common/octeontx2/meson.build @@ -8,6 +8,8 @@ sources= files('otx2_dev.c', 'otx2_common.c', ) +allow_experimental_apis = true + extra_flags = [] # This integrated controller runs only on a arm64 machine, remove 32bit warnings if not dpdk_conf.get('RTE_ARCH_64') diff --git a/drivers/common/octeontx2/otx2_mbox.c b/drivers/common/octeontx2/otx2_mbox.c index ad8e0c3aa..af34fd19d 100644 --- a/drivers/common/octeontx2/otx2_mbox.c +++ b/drivers/common/octeontx2/otx2_mbox.c @@ -11,6 +11,7 @@ #include #include "otx2_mbox.h" +#include "otx2_dev.h" #define RVU_AF_AFPF_MBOX0 (0x02000) #define RVU_AF_AFPF_MBOX1 (0x02008) @@ -245,6 +246,63 @@ otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg) return msghdr->rc; } +/** + * @internal + * Polling for given wait time to get mailbox response + */ +int +otx2_mbox_get_rsp_poll_tmo(struct otx2_mbox *mbox, int devid, void **msg, + uint32_t wait) +{ + struct otx2_mbox_dev *mdev = &mbox->dev[devid]; + uint32_t timeout = 0, sleep = 1; + struct mbox_msghdr *msghdr; + uint64_t rsp_reg = 0; + uintptr_t reg_addr; + uint64_t offset; + + rte_rmb(); + + offset = mbox->rx_start + + RTE_ALIGN(sizeof(struct mbox_hdr), MBOX_MSG_ALIGN); + msghdr = (struct mbox_msghdr *)((uintptr_t)mdev->mbase + offset); + + reg_addr = mbox->reg_base + mbox->intr_offset; + while (!rsp_reg) { + rte_rmb(); + rsp_reg = otx2_read64(reg_addr); + + if (timeout >= wait) + return -ETIMEDOUT; + + rte_delay_ms(sleep); + timeout += sleep; + } + + if (msg != NULL) + *msg = msghdr; + + /* Clear interrupt */ + otx2_write64(rsp_reg, reg_addr); + + /* Reset mbox */ + otx2_mbox_reset(mbox, 0); + + return msghdr->rc; +} + +/** + * @internal + * Polling for 5 seconds to get mailbox response + */ +int +otx2_mbox_get_rsp_poll(struct otx2_mbox *mbox, int devid, void **msg) +{ + uint32_t wait = 5 * MS_PER_S; /* 5 Seconds */ + + return otx2_mbox_get_rsp_poll_tmo(mbox, devid, msg, wait); +} + /** * @internal * Wait and get mailbox response with timeout diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h index 162d12468..237d4cf45 100644 --- a/drivers/common/octeontx2/otx2_mbox.h +++ b/drivers/common/octeontx2/otx2_mbox.h @@ -1570,6 +1570,13 @@ void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid); int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid); int otx2_mbox_wait_for_rsp_tmo(struct otx2_mbox *mbox, int devid, uint32_t tmo); int otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg); + +__rte_experimental +int otx2_mbox_get_rsp_poll(struct otx2_mbox *mbox, int devid, void **msg); +__rte_experimental +int otx2_mbox_get_rsp_poll_tmo(struct otx2_mbox *mbox, int devid, void **msg, + uint32_t tmo); + int otx2_mbox_get_rsp_tmo(struct otx2_mbox *mbox, int devid, void **msg, uint32_t tmo); int otx2_mbox_get_availmem(struct otx2_mbox *mbox, int devid); diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map index adad21a2d..dcbca2444 100644 --- a/drivers/common/octeontx2/rte_common_octeontx2_version.map +++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map @@ -33,3 +33,10 @@ DPDK_20.0 { local: *; }; + +EXPERIMENTAL { + global: + + otx2_mbox_get_rsp_poll; + otx2_mbox_get_rsp_poll_tmo; +}; -- 2.17.1