[dpdk-dev,v4,40/41] net/dpaa: support for firmware version get API
Checks
Commit Message
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
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;
> +}
<...>
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;
>> +}
>
> <...>
>
>
@@ -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
@@ -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)