net/qede/base: add DPC sync after PF stop

Add DPC sync after stopping the physical funciton to allow clean up of
asyncronous events. Post this the driver don't expect the FW to send
async events.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
This commit is contained in:
Rasesh Mody 2018-09-29 08:14:28 +00:00 committed by Ferruh Yigit
parent f32557f955
commit cbc2359676
2 changed files with 16 additions and 2 deletions

View File

@ -2804,6 +2804,12 @@ enum _ecore_status_t ecore_hw_stop(struct ecore_dev *p_dev)
rc2 = ECORE_UNKNOWN_ERROR;
}
OSAL_DPC_SYNC(p_hwfn);
/* After this point we don't expect the FW to send us async
* events
*/
/* perform debug action after PF stop was sent */
OSAL_AFTER_PF_STOP((void *)p_dev, p_hwfn->my_id);

View File

@ -283,8 +283,10 @@ ecore_async_event_completion(struct ecore_hwfn *p_hwfn,
{
ecore_spq_async_comp_cb cb;
if (!p_hwfn->p_spq || (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE))
if (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE) {
DP_ERR(p_hwfn, "Wrong protocol: %d\n", p_eqe->protocol_id);
return ECORE_INVAL;
}
cb = p_hwfn->p_spq->async_comp_cb[p_eqe->protocol_id];
if (cb) {
@ -339,10 +341,16 @@ enum _ecore_status_t ecore_eq_completion(struct ecore_hwfn *p_hwfn,
{
struct ecore_eq *p_eq = cookie;
struct ecore_chain *p_chain = &p_eq->chain;
u16 fw_cons_idx = 0;
enum _ecore_status_t rc = 0;
if (!p_hwfn->p_spq) {
DP_ERR(p_hwfn, "Unexpected NULL p_spq\n");
return ECORE_INVAL;
}
/* take a snapshot of the FW consumer */
u16 fw_cons_idx = OSAL_LE16_TO_CPU(*p_eq->p_fw_cons);
fw_cons_idx = OSAL_LE16_TO_CPU(*p_eq->p_fw_cons);
DP_VERBOSE(p_hwfn, ECORE_MSG_SPQ, "fw_cons_idx %x\n", fw_cons_idx);