From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0DD1BA034F for ; Mon, 22 Feb 2021 08:36:00 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 80B0922A28C; Mon, 22 Feb 2021 08:35:56 +0100 (CET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 4DC0E22A289; Mon, 22 Feb 2021 08:35:53 +0100 (CET) IronPort-SDR: GYhXlqEsi3DJBkR0L7Ilw1AqptPwxyKallZkpLOhyBKBG05nHcpXL0zpDTeJ08JEw+lx7WV9eM BIYjlz6ahSww== X-IronPort-AV: E=McAfee;i="6000,8403,9902"; a="183640848" X-IronPort-AV: E=Sophos;i="5.81,196,1610438400"; d="scan'208";a="183640848" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Feb 2021 23:35:52 -0800 IronPort-SDR: N90ARHgEAfQmdZ7cidO3t1NJxGVnV1wEdARdt5W/fY08IHthLNbpFyy8bGvy2lMYQxD15NbxXy g39FDUYxfPXA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,196,1610438400"; d="scan'208";a="498391232" Received: from unknown (HELO sh_lab5_1.sh.intel.com) ([10.238.175.190]) by fmsmga001.fm.intel.com with ESMTP; 21 Feb 2021 23:35:50 -0800 From: Wei Huang To: dev@dpdk.org, rosen.xu@intel.com, qi.z.zhang@intel.com Cc: stable@dpdk.org, tianfei.zhang@intel.com, ferruh.yigit@intel.com, Wei Huang Date: Mon, 22 Feb 2021 02:35:51 -0500 Message-Id: <1613979352-4864-4-git-send-email-wei.huang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1613979352-4864-1-git-send-email-wei.huang@intel.com> References: <1613963747-30047-1-git-send-email-wei.huang@intel.com> <1613979352-4864-1-git-send-email-wei.huang@intel.com> Subject: [dpdk-stable] [PATCH v15 3/4] raw/ifpga: add miscellaneous APIs X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Below miscellaneous APIs are used to implement OPAE application. 1. rte_pmd_ifpga_get_pci_bus() get PCI bus ifpga driver registered. 2. rte_pmd_ifpga_partial_reconfigure() do partial reconfiguration. 3. rte_pmd_ifpga_cleanup() free software resources allocated by driver. 4. rte_pmd_ifpga_set_rsu_status() set status of rsu process. Signed-off-by: Wei Huang Acked-by: Tianfei Zhang Acked-by: Rosen Xu --- v2: implement APIs in rte_pmd_ifpga.c --- drivers/raw/ifpga/ifpga_rawdev.c | 30 ++++++++++++++ drivers/raw/ifpga/ifpga_rawdev.h | 7 +++- drivers/raw/ifpga/rte_pmd_ifpga.c | 45 +++++++++++++++++++++ drivers/raw/ifpga/rte_pmd_ifpga.h | 66 +++++++++++++++++++++++++++++++ drivers/raw/ifpga/version.map | 4 ++ 5 files changed, 151 insertions(+), 1 deletion(-) diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index 27129b133e..05d79bfcc2 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -1737,3 +1737,33 @@ RTE_PMD_REGISTER_PARAM_STRING(ifpga_rawdev_cfg, "ifpga= " "port= " "afu_bts="); + +struct rte_pci_bus *ifpga_get_pci_bus(void) +{ + return rte_ifpga_rawdev_pmd.bus; +} + +int ifpga_rawdev_partial_reconfigure(struct rte_rawdev *dev, int port, + const char *file) +{ + if (!dev) { + IFPGA_RAWDEV_PMD_ERR("Input parameter is invalid"); + return -EINVAL; + } + + return rte_fpga_do_pr(dev, port, file); +} + +void ifpga_rawdev_cleanup(void) +{ + struct ifpga_rawdev *dev; + unsigned int i; + + for (i = 0; i < IFPGA_RAWDEV_NUM; i++) { + dev = &ifpga_rawdevices[i]; + if (dev->rawdev) { + rte_rawdev_pmd_release(dev->rawdev); + dev->rawdev = NULL; + } + } +} diff --git a/drivers/raw/ifpga/ifpga_rawdev.h b/drivers/raw/ifpga/ifpga_rawdev.h index 7754beb02b..9bbe9a4278 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.h +++ b/drivers/raw/ifpga/ifpga_rawdev.h @@ -43,7 +43,7 @@ enum ifpga_rawdev_device_state { static inline struct opae_adapter * ifpga_rawdev_get_priv(const struct rte_rawdev *rawdev) { - return rawdev->dev_private; + return (struct opae_adapter *)rawdev->dev_private; } #define IFPGA_RAWDEV_MSIX_IRQ_NUM 7 @@ -76,4 +76,9 @@ int ifpga_unregister_msix_irq(enum ifpga_irq_type type, int vec_start, rte_intr_callback_fn handler, void *arg); +struct rte_pci_bus *ifpga_get_pci_bus(void); +int ifpga_rawdev_partial_reconfigure(struct rte_rawdev *dev, int port, + const char *file); +void ifpga_rawdev_cleanup(void); + #endif /* _IFPGA_RAWDEV_H_ */ diff --git a/drivers/raw/ifpga/rte_pmd_ifpga.c b/drivers/raw/ifpga/rte_pmd_ifpga.c index 8e04e22d5f..6e23a2581a 100644 --- a/drivers/raw/ifpga/rte_pmd_ifpga.c +++ b/drivers/raw/ifpga/rte_pmd_ifpga.c @@ -122,6 +122,25 @@ rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t *prog) return 0; } +int +rte_pmd_ifpga_set_rsu_status(uint16_t dev_id, uint32_t stat, uint32_t prog) +{ + struct opae_adapter *adapter = NULL; + opae_share_data *sd = NULL; + + adapter = get_opae_adapter(dev_id); + if (!adapter) + return -ENODEV; + + sd = get_share_data(adapter); + if (!sd) + return -ENOMEM; + + sd->rsu_stat = IFPGA_RSU_STATUS(stat, prog); + + return 0; +} + static int ifpga_is_rebooting(struct opae_adapter *adapter) { @@ -382,3 +401,29 @@ rte_pmd_ifpga_reload(uint16_t dev_id, int type, int page) return opae_mgr_reload(adapter->mgr, type, page); } + +const struct rte_pci_bus * +rte_pmd_ifpga_get_pci_bus(void) +{ + return ifpga_get_pci_bus(); +} + +int +rte_pmd_ifpga_partial_reconfigure(uint16_t dev_id, int port, const char *file) +{ + struct rte_rawdev *dev = NULL; + + dev = get_rte_rawdev(dev_id); + if (!dev) { + IFPGA_RAWDEV_PMD_ERR("Device ID %u is invalid.", dev_id); + return -EINVAL; + } + + return ifpga_rawdev_partial_reconfigure(dev, port, file); +} + +void +rte_pmd_ifpga_cleanup(void) +{ + ifpga_rawdev_cleanup(); +} diff --git a/drivers/raw/ifpga/rte_pmd_ifpga.h b/drivers/raw/ifpga/rte_pmd_ifpga.h index 633f6e9d1b..47d66ba655 100644 --- a/drivers/raw/ifpga/rte_pmd_ifpga.h +++ b/drivers/raw/ifpga/rte_pmd_ifpga.h @@ -107,6 +107,27 @@ __rte_experimental int rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t *prog); +/** + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice + * + * Set current RSU status of the specified Intel FPGA device + * + * @param dev_id + * The raw device ID of specified Intel FPGA device. + * @param stat + * The RSU status value to set. + * @param prog + * The RSU progress value to set. + * @return + * - (0) if successful. + * - (-ENODEV) if dev_id is invalid. + * - (-ENOMEM) if share data is not initialized. + */ +__rte_experimental +int +rte_pmd_ifpga_set_rsu_status(uint16_t dev_id, uint32_t stat, uint32_t prog); + /** * @warning * @b EXPERIMENTAL: this API may change, or be removed, without prior notice @@ -235,6 +256,51 @@ __rte_experimental int rte_pmd_ifpga_reload(uint16_t dev_id, int type, int page); +/** + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice + * + * Get PCI bus the Intel FPGA driver register to + * + * @return + * - (valid pointer) if successful. + * - (NULL) if the Intel FPGA driver is not registered to any PCI bus. + */ +__rte_experimental +const struct rte_pci_bus * +rte_pmd_ifpga_get_pci_bus(void); + +/** + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice + * + * Perform PR (partial reconfiguration) on specified Intel FPGA device + * + * @param dev_id + * The raw device ID of specified Intel FPGA device. + * @param port + * The port index of the partial reconfiguration area. + * @param file + * The GBS (Green BitStream) image file name string. + * @return + * - (0) if successful. + * - (-EINVAL) if bad parameter or operation failed. + * - (-ENOMEM) if failed to allocate memory. + */ +__rte_experimental +int +rte_pmd_ifpga_partial_reconfigure(uint16_t dev_id, int port, const char *file); + +/** + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice + * + * Free software resources allocated by Intel FPGA PMD + */ +__rte_experimental +void +rte_pmd_ifpga_cleanup(void); + #ifdef __cplusplus } #endif diff --git a/drivers/raw/ifpga/version.map b/drivers/raw/ifpga/version.map index ca6f7f5810..995c419a9b 100644 --- a/drivers/raw/ifpga/version.map +++ b/drivers/raw/ifpga/version.map @@ -8,10 +8,14 @@ EXPERIMENTAL { # added in 21.05 rte_pmd_ifpga_get_dev_id; rte_pmd_ifpga_get_rsu_status; + rte_pmd_ifpga_set_rsu_status; rte_pmd_ifpga_get_property; rte_pmd_ifpga_get_phy_info; rte_pmd_ifpga_update_flash; rte_pmd_ifpga_stop_update; rte_pmd_ifpga_reboot_try; rte_pmd_ifpga_reload; + rte_pmd_ifpga_get_pci_bus; + rte_pmd_ifpga_partial_reconfigure; + rte_pmd_ifpga_cleanup; }; -- 2.29.2