Message ID | 20170909112132.13936-41-shreyansh.jain@nxp.com |
---|---|
State | New |
Headers | show |
Series | None | expand |
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; >> +} > > <...> > >
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)