dpaa2-mac: add the MC API for retrieving the version
authorIoana Ciornei <ioana.ciornei@nxp.com>
Fri, 11 Mar 2022 21:22:23 +0000 (23:22 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Mar 2022 10:41:50 +0000 (10:41 +0000)
The dpmac_get_api_version command will be used in the next patches to
determine if the current firmware is capable or not to change the
Ethernet protocol running on the MAC.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpmac-cmd.h
drivers/net/ethernet/freescale/dpaa2/dpmac.c
drivers/net/ethernet/freescale/dpaa2/dpmac.h

index a24b20f769388ed03a4581cf8abea980343012f4..e1e06b21110d87f697f21d7f27ebb4e2568c114e 100644 (file)
@@ -19,6 +19,8 @@
 #define DPMAC_CMDID_CLOSE              DPMAC_CMD(0x800)
 #define DPMAC_CMDID_OPEN               DPMAC_CMD(0x80c)
 
+#define DPMAC_CMDID_GET_API_VERSION    DPMAC_CMD(0xa0c)
+
 #define DPMAC_CMDID_GET_ATTR           DPMAC_CMD(0x004)
 #define DPMAC_CMDID_SET_LINK_STATE     DPMAC_CMD_V2(0x0c3)
 
@@ -70,4 +72,9 @@ struct dpmac_rsp_get_counter {
        __le64 counter;
 };
 
+struct dpmac_rsp_get_api_version {
+       __le16 major;
+       __le16 minor;
+};
+
 #endif /* _FSL_DPMAC_CMD_H */
index d5997b65456245910e8cd493e056239f26d3107c..d348a7567d877a200a2084b081f85a8227fb8d54 100644 (file)
@@ -181,3 +181,34 @@ int dpmac_get_counter(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
 
        return 0;
 }
+
+/**
+ * dpmac_get_api_version() - Get Data Path MAC version
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @major_ver: Major version of data path mac API
+ * @minor_ver: Minor version of data path mac API
+ *
+ * Return:  '0' on Success; Error code otherwise.
+ */
+int dpmac_get_api_version(struct fsl_mc_io *mc_io, u32 cmd_flags,
+                         u16 *major_ver, u16 *minor_ver)
+{
+       struct dpmac_rsp_get_api_version *rsp_params;
+       struct fsl_mc_command cmd = { 0 };
+       int err;
+
+       cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_API_VERSION,
+                                         cmd_flags,
+                                         0);
+
+       err = mc_send_command(mc_io, &cmd);
+       if (err)
+               return err;
+
+       rsp_params = (struct dpmac_rsp_get_api_version *)cmd.params;
+       *major_ver = le16_to_cpu(rsp_params->major);
+       *minor_ver = le16_to_cpu(rsp_params->minor);
+
+       return 0;
+}
index 8f7ceb731282e70d42a737313dd4f69bee45b603..b580fb4164b534561159e795bc75f69a707324c2 100644 (file)
@@ -205,4 +205,6 @@ enum dpmac_counter_id {
 int dpmac_get_counter(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
                      enum dpmac_counter_id id, u64 *value);
 
+int dpmac_get_api_version(struct fsl_mc_io *mc_io, u32 cmd_flags,
+                         u16 *major_ver, u16 *minor_ver);
 #endif /* __FSL_DPMAC_H */