net/dpaa: support firmware version get API
authorHemant Agrawal <hemant.agrawal@nxp.com>
Thu, 28 Sep 2017 12:29:59 +0000 (17:59 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:50 +0000 (02:49 +0200)
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
doc/guides/nics/features/dpaa.ini
drivers/net/dpaa/dpaa_ethdev.c
drivers/net/dpaa/dpaa_ethdev.h

index 0e7956c..09b9bd9 100644 (file)
@@ -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
index 3d6ddae..8e51fe6 100644 (file)
@@ -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(DPAA_SOC_ID_FILE, "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)
index e1e062e..a980262 100644 (file)
 #include <of.h>
 #include <netcfg.h>
 
+/* DPAA SoC identifier; If this is not available, it can be concluded
+ * that board is non-DPAA. Single slot is currently supported.
+ */
+#define DPAA_SOC_ID_FILE               "sys/devices/soc0/soc_id"
+
 #define DPAA_MBUF_HW_ANNOTATION                64
 #define DPAA_FD_PTA_SIZE               64