|
@@ -1523,6 +1523,36 @@ int qed_mcp_get_mfw_ver(struct qed_hwfn *p_hwfn,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int qed_mcp_get_mbi_ver(struct qed_hwfn *p_hwfn,
|
|
|
|
+ struct qed_ptt *p_ptt, u32 *p_mbi_ver)
|
|
|
|
+{
|
|
|
|
+ u32 nvm_cfg_addr, nvm_cfg1_offset, mbi_ver_addr;
|
|
|
|
+
|
|
|
|
+ if (IS_VF(p_hwfn->cdev))
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
+ /* Read the address of the nvm_cfg */
|
|
|
|
+ nvm_cfg_addr = qed_rd(p_hwfn, p_ptt, MISC_REG_GEN_PURP_CR0);
|
|
|
|
+ if (!nvm_cfg_addr) {
|
|
|
|
+ DP_NOTICE(p_hwfn, "Shared memory not initialized\n");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* Read the offset of nvm_cfg1 */
|
|
|
|
+ nvm_cfg1_offset = qed_rd(p_hwfn, p_ptt, nvm_cfg_addr + 4);
|
|
|
|
+
|
|
|
|
+ mbi_ver_addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
|
|
|
|
+ offsetof(struct nvm_cfg1, glob) +
|
|
|
|
+ offsetof(struct nvm_cfg1_glob, mbi_version);
|
|
|
|
+ *p_mbi_ver = qed_rd(p_hwfn, p_ptt,
|
|
|
|
+ mbi_ver_addr) &
|
|
|
|
+ (NVM_CFG1_GLOB_MBI_VERSION_0_MASK |
|
|
|
|
+ NVM_CFG1_GLOB_MBI_VERSION_1_MASK |
|
|
|
|
+ NVM_CFG1_GLOB_MBI_VERSION_2_MASK);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
int qed_mcp_get_media_type(struct qed_dev *cdev, u32 *p_media_type)
|
|
int qed_mcp_get_media_type(struct qed_dev *cdev, u32 *p_media_type)
|
|
{
|
|
{
|
|
struct qed_hwfn *p_hwfn = &cdev->hwfns[0];
|
|
struct qed_hwfn *p_hwfn = &cdev->hwfns[0];
|