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 35964A04B3; Mon, 9 Dec 2019 22:51:38 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AEE201BFD5; Mon, 9 Dec 2019 22:49:05 +0100 (CET) Received: from mail.ntop.org (mail-digitalocean.ntop.org [167.99.215.164]) by dpdk.org (Postfix) with ESMTP id 72A151BEC4 for ; Mon, 9 Dec 2019 22:48:36 +0100 (CET) Received: from devele.ntop.org (net-93-145-196-230.cust.vodafonedsl.it [93.145.196.230]) by mail.ntop.org (Postfix) with ESMTPSA id 1FE1241C32; Mon, 9 Dec 2019 22:48:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ntop.org; s=mail; t=1575928116; bh=ZUqwCe+RbP49i8YnGZr/3+PLf/e4SorqQLZ20UuSMUI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cn/F06m9+dNNkc5ubU9Gfs8azH5oDVwVHkLiNem/SDzCmttmwE5BeG84S4MqkEOsQ pgjL4M4TAll2f+9gepTsCEiWrjlmeJZoN9PUr5rYVKh2DSO7CsrFJw91ZQu1bxd311 sBwjiBhTNYhMDvm8/U0Kmrtt7h1xrXqDGbh/dn2I= From: Alfredo Cardigliano To: Alfredo Cardigliano , John McNamara , Marko Kovacevic Cc: dev@dpdk.org Date: Mon, 9 Dec 2019 22:46:56 +0100 Message-Id: <20191209214656.27347-18-cardigliano@ntop.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191209214656.27347-1-cardigliano@ntop.org> References: <20191209214656.27347-1-cardigliano@ntop.org> Subject: [dpdk-dev] [PATCH v3 17/17] net/ionic: read fw version 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" Add support for reading the firmware version. Signed-off-by: Alfredo Cardigliano Reviewed-by: Shannon Nelson --- doc/guides/nics/features/ionic.ini | 1 + drivers/net/ionic/ionic.h | 1 + drivers/net/ionic/ionic_dev.c | 8 ++++++++ drivers/net/ionic/ionic_ethdev.c | 20 ++++++++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/doc/guides/nics/features/ionic.ini b/doc/guides/nics/features/ionic.ini index f4ec04c73..32e9bce55 100644 --- a/doc/guides/nics/features/ionic.ini +++ b/doc/guides/nics/features/ionic.ini @@ -30,6 +30,7 @@ Packet type parsing = Y Basic stats = Y Extended stats = Y Stats per queue = Y +FW version = Y Linux UIO = Y Linux VFIO = Y x86-64 = Y diff --git a/drivers/net/ionic/ionic.h b/drivers/net/ionic/ionic.h index ae4f6acc7..45a7879c9 100644 --- a/drivers/net/ionic/ionic.h +++ b/drivers/net/ionic/ionic.h @@ -60,6 +60,7 @@ struct ionic_adapter { bool intrs[IONIC_INTR_CTRL_REGS_MAX]; bool is_mgmt_nic; bool link_up; + char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN]; struct rte_pci_device *pci_dev; LIST_ENTRY(ionic_adapter) pci_adapters; }; diff --git a/drivers/net/ionic/ionic_dev.c b/drivers/net/ionic/ionic_dev.c index 1c5a4425b..0b63c234d 100644 --- a/drivers/net/ionic/ionic_dev.c +++ b/drivers/net/ionic/ionic_dev.c @@ -16,6 +16,7 @@ ionic_dev_setup(struct ionic_adapter *adapter) struct ionic_dev *idev = &adapter->idev; uint32_t sig; u_char *bar0_base; + unsigned int i; /* BAR0: dev_cmd and interrupts */ if (num_bars < 1) { @@ -47,6 +48,13 @@ ionic_dev_setup(struct ionic_adapter *adapter) return -EFAULT; } + for (i = 0; i < IONIC_DEVINFO_FWVERS_BUFLEN; i++) + adapter->fw_version[i] = + ioread8(&idev->dev_info->fw_version[i]); + adapter->fw_version[IONIC_DEVINFO_FWVERS_BUFLEN - 1] = '\0'; + + IONIC_PRINT(DEBUG, "Firmware version: %s", adapter->fw_version); + /* BAR1: doorbells */ bar++; if (num_bars < 2) { diff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c index 7c8e70872..34b01f526 100644 --- a/drivers/net/ionic/ionic_ethdev.c +++ b/drivers/net/ionic/ionic_ethdev.c @@ -56,6 +56,8 @@ static int ionic_dev_xstats_get_names(struct rte_eth_dev *dev, static int ionic_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, struct rte_eth_xstat_name *xstats_names, const uint64_t *ids, unsigned int limit); +static int ionic_dev_fw_version_get(struct rte_eth_dev *eth_dev, + char *fw_version, size_t fw_size); int ionic_logtype_driver; @@ -122,6 +124,7 @@ static const struct eth_dev_ops ionic_eth_dev_ops = { .xstats_reset = ionic_dev_xstats_reset, .xstats_get_names = ionic_dev_xstats_get_names, .xstats_get_names_by_id = ionic_dev_xstats_get_names_by_id, + .fw_version_get = ionic_dev_fw_version_get, }; /* @@ -219,6 +222,23 @@ static const struct rte_ionic_xstats_name_off rte_ionic_xstats_strings[] = { #define IONIC_NB_HW_STATS (sizeof(rte_ionic_xstats_strings) / \ sizeof(rte_ionic_xstats_strings[0])) +static int +ionic_dev_fw_version_get(struct rte_eth_dev *eth_dev, + char *fw_version, size_t fw_size) +{ + struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); + struct ionic_adapter *adapter = lif->adapter; + + if (fw_version == NULL || fw_size <= 0) + return -EINVAL; + + snprintf(fw_version, fw_size, "%s", + adapter->fw_version); + fw_version[fw_size - 1] = '\0'; + + return 0; +} + /* * Set device link up, enable tx. */ -- 2.17.1