[dpdk-dev,v4,40/41] net/dpaa: support for firmware version get API

Message ID 20170909112132.13936-41-shreyansh.jain@nxp.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply patch file failure

Commit Message

Shreyansh Jain Sept. 9, 2017, 11:21 a.m. UTC
  From: Hemant Agrawal <hemant.agrawal@nxp.com>

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 doc/guides/nics/features/dpaa.ini |  1 +
 drivers/net/dpaa/dpaa_ethdev.c    | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)
  

Comments

Ferruh Yigit Sept. 18, 2017, 2:57 p.m. UTC | #1
On 9/9/2017 12:21 PM, Shreyansh Jain wrote:
> From: Hemant Agrawal <hemant.agrawal@nxp.com>
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>

<...>

> +static int
> +dpaa_fw_version_get(struct rte_eth_dev *dev __rte_unused,
> +		     char *fw_version,
> +		     size_t fw_size)
> +{
> +	int ret;
> +	FILE *svr_file = NULL;
> +	unsigned int svr_ver = 0;
> +
> +	PMD_INIT_FUNC_TRACE();
> +
> +	svr_file = fopen("/sys/devices/soc0/soc_id", "r");

Is this sysfs file fixed, can it be enumerated as soc1 etc.. in some
systems?

> +	if (!svr_file) {
> +		DPAA_PMD_ERR("Unable to open SoC device");
> +		return -ENOTSUP; /* Not supported on this infra */
> +	}
> +
> +	ret = fscanf(svr_file, "svr:%x", &svr_ver);
> +	if (ret <= 0) {
> +		DPAA_PMD_ERR("Unable to read SoC device");
> +		return -ENOTSUP; /* Not supported on this infra */
> +	}
> +
> +	ret = snprintf(fw_version, fw_size,
> +		       "svr:%x-fman-v%x",
> +		       svr_ver,
> +		       fman_ip_rev);
> +
> +	ret += 1; /* add the size of '\0' */
> +	if (fw_size < (uint32_t)ret)
> +		return ret;
> +	else
> +		return 0;
> +}

<...>
  
Shreyansh Jain Sept. 21, 2017, 1:18 p.m. UTC | #2
On Monday 18 September 2017 08:27 PM, Ferruh Yigit wrote:
> On 9/9/2017 12:21 PM, Shreyansh Jain wrote:
>> From: Hemant Agrawal <hemant.agrawal@nxp.com>
>>
>> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> 
> <...>
> 
>> +static int
>> +dpaa_fw_version_get(struct rte_eth_dev *dev __rte_unused,
>> +		     char *fw_version,
>> +		     size_t fw_size)
>> +{
>> +	int ret;
>> +	FILE *svr_file = NULL;
>> +	unsigned int svr_ver = 0;
>> +
>> +	PMD_INIT_FUNC_TRACE();
>> +
>> +	svr_file = fopen("/sys/devices/soc0/soc_id", "r");
> 
> Is this sysfs file fixed, can it be enumerated as soc1 etc.. in some
> systems?

The first base SoC slot is assumed to be the one for DPDK DPAA driver. 
That is the reason this path is assumed to be fixed. I can move this 
into a macro though, for readability.

> 
>> +	if (!svr_file) {
>> +		DPAA_PMD_ERR("Unable to open SoC device");
>> +		return -ENOTSUP; /* Not supported on this infra */
>> +	}
>> +
>> +	ret = fscanf(svr_file, "svr:%x", &svr_ver);
>> +	if (ret <= 0) {
>> +		DPAA_PMD_ERR("Unable to read SoC device");
>> +		return -ENOTSUP; /* Not supported on this infra */
>> +	}
>> +
>> +	ret = snprintf(fw_version, fw_size,
>> +		       "svr:%x-fman-v%x",
>> +		       svr_ver,
>> +		       fman_ip_rev);
>> +
>> +	ret += 1; /* add the size of '\0' */
>> +	if (fw_size < (uint32_t)ret)
>> +		return ret;
>> +	else
>> +		return 0;
>> +}
> 
> <...>
> 
>
  

Patch

diff --git a/doc/guides/nics/features/dpaa.ini b/doc/guides/nics/features/dpaa.ini
index 0e7956c..09b9bd9 100644
--- a/doc/guides/nics/features/dpaa.ini
+++ b/doc/guides/nics/features/dpaa.ini
@@ -18,5 +18,6 @@  L3 checksum offload  = Y
 L4 checksum offload  = Y
 Packet type parsing  = Y
 Basic stats          = Y
+FW version           = Y
 ARMv8                = Y
 Usage doc            = Y
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 3e3e091..22f56a4 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -164,6 +164,41 @@  static void dpaa_eth_dev_close(struct rte_eth_dev *dev)
 	dpaa_eth_dev_stop(dev);
 }
 
+static int
+dpaa_fw_version_get(struct rte_eth_dev *dev __rte_unused,
+		     char *fw_version,
+		     size_t fw_size)
+{
+	int ret;
+	FILE *svr_file = NULL;
+	unsigned int svr_ver = 0;
+
+	PMD_INIT_FUNC_TRACE();
+
+	svr_file = fopen("/sys/devices/soc0/soc_id", "r");
+	if (!svr_file) {
+		DPAA_PMD_ERR("Unable to open SoC device");
+		return -ENOTSUP; /* Not supported on this infra */
+	}
+
+	ret = fscanf(svr_file, "svr:%x", &svr_ver);
+	if (ret <= 0) {
+		DPAA_PMD_ERR("Unable to read SoC device");
+		return -ENOTSUP; /* Not supported on this infra */
+	}
+
+	ret = snprintf(fw_version, fw_size,
+		       "svr:%x-fman-v%x",
+		       svr_ver,
+		       fman_ip_rev);
+
+	ret += 1; /* add the size of '\0' */
+	if (fw_size < (uint32_t)ret)
+		return ret;
+	else
+		return 0;
+}
+
 static void dpaa_eth_dev_info(struct rte_eth_dev *dev,
 			      struct rte_eth_dev_info *dev_info)
 {
@@ -512,6 +547,7 @@  static struct eth_dev_ops dpaa_devops = {
 	.mac_addr_remove	  = dpaa_dev_remove_mac_addr,
 	.mac_addr_set		  = dpaa_dev_set_mac_addr,
 
+	.fw_version_get		  = dpaa_fw_version_get,
 };
 
 static int dpaa_fc_set_default(struct dpaa_if *dpaa_intf)