if (!b_rc)
                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 */
        qed_qm_init_pf(p_hwfn, p_ptt, false);
 
 
        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)
 {
        p_hwfn->rt_data.init_val[rt_offset] = val;
 {
        u32 *p_init_val = &p_hwfn->rt_data.init_val[rt_offset];
        bool *p_valid = &p_hwfn->rt_data.b_valid[rt_offset];
-       u16 i, segment;
+       u16 i, j, segment;
        int rc = 0;
 
        /* Since not all RT entries are initialized, go over the RT and
                 */
                if (!b_must_dmae) {
                        qed_wr(p_hwfn, p_ptt, addr + (i << 2), p_init_val[i]);
+                       p_valid[i] = false;
                        continue;
                }
 
                if (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 */
                i += segment;
        }
 
  */
 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.
  *