Commit 6bc82d9b authored by Michal Kalderon's avatar Michal Kalderon Committed by David S. Miller

qed: rt init valid initialization changed

The QM phase init tool can be invoked multiple times during
the driver lifetime. Part of the init comes from the runtime array.
The logic for setting the values did not init all values, basically
assuming the runtime array was all zeroes. But if it was invoked
multiple times, nobody was zeroing it after the first time.

In this change we zero the runtime array right after using it.
Signed-off-by: default avatarAriel Elior <ariel.elior@marvell.com>
Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8a52bbab
...@@ -2106,9 +2106,6 @@ int qed_qm_reconf(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) ...@@ -2106,9 +2106,6 @@ int qed_qm_reconf(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
if (!b_rc) if (!b_rc)
return -EINVAL; return -EINVAL;
/* clear the QM_PF runtime phase leftovers from previous init */
qed_init_clear_rt_data(p_hwfn);
/* prepare QM portion of runtime array */ /* prepare QM portion of runtime array */
qed_qm_init_pf(p_hwfn, p_ptt, false); qed_qm_init_pf(p_hwfn, p_ptt, false);
......
...@@ -74,15 +74,6 @@ void qed_init_iro_array(struct qed_dev *cdev) ...@@ -74,15 +74,6 @@ void qed_init_iro_array(struct qed_dev *cdev)
cdev->iro_arr = iro_arr; cdev->iro_arr = iro_arr;
} }
/* Runtime configuration helpers */
void qed_init_clear_rt_data(struct qed_hwfn *p_hwfn)
{
int i;
for (i = 0; i < RUNTIME_ARRAY_SIZE; i++)
p_hwfn->rt_data.b_valid[i] = false;
}
void qed_init_store_rt_reg(struct qed_hwfn *p_hwfn, u32 rt_offset, u32 val) void qed_init_store_rt_reg(struct qed_hwfn *p_hwfn, u32 rt_offset, u32 val)
{ {
p_hwfn->rt_data.init_val[rt_offset] = val; p_hwfn->rt_data.init_val[rt_offset] = val;
...@@ -106,7 +97,7 @@ static int qed_init_rt(struct qed_hwfn *p_hwfn, ...@@ -106,7 +97,7 @@ static int qed_init_rt(struct qed_hwfn *p_hwfn,
{ {
u32 *p_init_val = &p_hwfn->rt_data.init_val[rt_offset]; u32 *p_init_val = &p_hwfn->rt_data.init_val[rt_offset];
bool *p_valid = &p_hwfn->rt_data.b_valid[rt_offset]; bool *p_valid = &p_hwfn->rt_data.b_valid[rt_offset];
u16 i, segment; u16 i, j, segment;
int rc = 0; int rc = 0;
/* Since not all RT entries are initialized, go over the RT and /* Since not all RT entries are initialized, go over the RT and
...@@ -121,6 +112,7 @@ static int qed_init_rt(struct qed_hwfn *p_hwfn, ...@@ -121,6 +112,7 @@ static int qed_init_rt(struct qed_hwfn *p_hwfn,
*/ */
if (!b_must_dmae) { if (!b_must_dmae) {
qed_wr(p_hwfn, p_ptt, addr + (i << 2), p_init_val[i]); qed_wr(p_hwfn, p_ptt, addr + (i << 2), p_init_val[i]);
p_valid[i] = false;
continue; continue;
} }
...@@ -135,6 +127,10 @@ static int qed_init_rt(struct qed_hwfn *p_hwfn, ...@@ -135,6 +127,10 @@ static int qed_init_rt(struct qed_hwfn *p_hwfn,
if (rc) if (rc)
return rc; return rc;
/* invalidate after writing */
for (j = i; j < i + segment; j++)
p_valid[j] = false;
/* Jump over the entire segment, including invalid entry */ /* Jump over the entire segment, including invalid entry */
i += segment; i += segment;
} }
......
...@@ -80,14 +80,6 @@ int qed_init_alloc(struct qed_hwfn *p_hwfn); ...@@ -80,14 +80,6 @@ int qed_init_alloc(struct qed_hwfn *p_hwfn);
*/ */
void qed_init_free(struct qed_hwfn *p_hwfn); void qed_init_free(struct qed_hwfn *p_hwfn);
/**
* @brief qed_init_clear_rt_data - Clears the runtime init array.
*
*
* @param p_hwfn
*/
void qed_init_clear_rt_data(struct qed_hwfn *p_hwfn);
/** /**
* @brief qed_init_store_rt_reg - Store a configuration value in the RT array. * @brief qed_init_store_rt_reg - Store a configuration value in the RT array.
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment