qed: Populate nvm-file attributes while reading nvm config partition.
[ Upstream commit 13cf8aab7425a253070433b5a55b4209ceac8b19 ] NVM config file address will be modified when the MBI image is upgraded. Driver would return stale config values if user reads the nvm-config (via ethtool -d) in this state. The fix is to re-populate nvm attribute info while reading the nvm config values/partition. Changes from previous version: ------------------------------- v3: Corrected the formatting in 'Fixes' tag. v2: Added 'Fixes' tag. Fixes: 1ac4329a1cff ("qed: Add configuration information to register dump and debug data") Signed-off-by: Sudarsana Reddy Kalluru <skalluru@marvell.com> Signed-off-by: Igor Russkikh <irusskikh@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e89b828ae3
commit
f277e0be69
@ -8197,6 +8197,10 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
|
||||
DP_ERR(cdev, "qed_dbg_mcp_trace failed. rc = %d\n", rc);
|
||||
}
|
||||
|
||||
/* Re-populate nvm attribute info */
|
||||
qed_mcp_nvm_info_free(p_hwfn);
|
||||
qed_mcp_nvm_info_populate(p_hwfn);
|
||||
|
||||
/* nvm cfg1 */
|
||||
rc = qed_dbg_nvm_image(cdev,
|
||||
(u8 *)buffer + offset + REGDUMP_HEADER_SIZE,
|
||||
|
@ -4423,12 +4423,6 @@ static int qed_get_dev_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qed_nvm_info_free(struct qed_hwfn *p_hwfn)
|
||||
{
|
||||
kfree(p_hwfn->nvm_info.image_att);
|
||||
p_hwfn->nvm_info.image_att = NULL;
|
||||
}
|
||||
|
||||
static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
|
||||
void __iomem *p_regview,
|
||||
void __iomem *p_doorbells,
|
||||
@ -4513,7 +4507,7 @@ static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
|
||||
return rc;
|
||||
err3:
|
||||
if (IS_LEAD_HWFN(p_hwfn))
|
||||
qed_nvm_info_free(p_hwfn);
|
||||
qed_mcp_nvm_info_free(p_hwfn);
|
||||
err2:
|
||||
if (IS_LEAD_HWFN(p_hwfn))
|
||||
qed_iov_free_hw_info(p_hwfn->cdev);
|
||||
@ -4574,7 +4568,7 @@ int qed_hw_prepare(struct qed_dev *cdev,
|
||||
if (rc) {
|
||||
if (IS_PF(cdev)) {
|
||||
qed_init_free(p_hwfn);
|
||||
qed_nvm_info_free(p_hwfn);
|
||||
qed_mcp_nvm_info_free(p_hwfn);
|
||||
qed_mcp_free(p_hwfn);
|
||||
qed_hw_hwfn_free(p_hwfn);
|
||||
}
|
||||
@ -4608,7 +4602,7 @@ void qed_hw_remove(struct qed_dev *cdev)
|
||||
|
||||
qed_iov_free_hw_info(cdev);
|
||||
|
||||
qed_nvm_info_free(p_hwfn);
|
||||
qed_mcp_nvm_info_free(p_hwfn);
|
||||
}
|
||||
|
||||
static void qed_chain_free_next_ptr(struct qed_dev *cdev,
|
||||
|
@ -3149,6 +3149,13 @@ err0:
|
||||
return rc;
|
||||
}
|
||||
|
||||
void qed_mcp_nvm_info_free(struct qed_hwfn *p_hwfn)
|
||||
{
|
||||
kfree(p_hwfn->nvm_info.image_att);
|
||||
p_hwfn->nvm_info.image_att = NULL;
|
||||
p_hwfn->nvm_info.valid = false;
|
||||
}
|
||||
|
||||
int
|
||||
qed_mcp_get_nvm_image_att(struct qed_hwfn *p_hwfn,
|
||||
enum qed_nvm_images image_id,
|
||||
|
@ -1192,6 +1192,13 @@ void qed_mcp_read_ufp_config(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
|
||||
*/
|
||||
int qed_mcp_nvm_info_populate(struct qed_hwfn *p_hwfn);
|
||||
|
||||
/**
|
||||
* @brief Delete nvm info shadow in the given hardware function
|
||||
*
|
||||
* @param p_hwfn
|
||||
*/
|
||||
void qed_mcp_nvm_info_free(struct qed_hwfn *p_hwfn);
|
||||
|
||||
/**
|
||||
* @brief Get the engine affinity configuration.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user