qcacmn: Flush reg write work before bus suspend

Delayed register write work needs to be flushed before bus suspend to
make sure there are on pending writes after driver's bus suspend routine
exits. In case delayed work context is not able to finish before the bus
(PCI) is suspended (DRV), it may lead to a NOC error.

Change-Id: I40cbcec5d23ddd75ec87aed69ac45d95510fa880
CRs-Fixed: 2813733
This commit is contained in:
Mohit Khanna
2020-11-08 21:50:05 -08:00
committed by snandini
parent dc6fecf304
commit 98181d9ccc
3 changed files with 20 additions and 8 deletions

View File

@@ -593,19 +593,17 @@ static void hal_reg_write_work(void *arg)
hif_allow_link_low_power_states(hal->hif_handle);
}
/**
* hal_flush_reg_write_work() - flush all writes from regiter write queue
* @arg: hal_soc pointer
*
* Return: None
*/
static inline void hal_flush_reg_write_work(struct hal_soc *hal)
static void __hal_flush_reg_write_work(struct hal_soc *hal)
{
qdf_cancel_work(&hal->reg_write_work);
qdf_flush_work(&hal->reg_write_work);
qdf_flush_workqueue(0, hal->reg_write_wq);
}
void hal_flush_reg_write_work(hal_soc_handle_t hal_handle)
{ __hal_flush_reg_write_work((struct hal_soc *)hal_handle);
}
/**
* hal_reg_write_enqueue() - enqueue register writes into kworker
* @hal_soc: hal_soc pointer
@@ -739,7 +737,7 @@ static QDF_STATUS hal_delayed_reg_write_init(struct hal_soc *hal)
*/
static void hal_delayed_reg_write_deinit(struct hal_soc *hal)
{
hal_flush_reg_write_work(hal);
__hal_flush_reg_write_work(hal);
qdf_destroy_workqueue(0, hal->reg_write_wq);
qdf_mem_free(hal->reg_write_queue);
}