diff --git a/drivers/crypto/hisilicon/hpre/hpre.h b/drivers/crypto/hisilicon/hpre/hpre.h index b424719c59b7724f0aca03e79c54d4bdea2341f9..b61e0be80bdb825a09cfd888849bbf633c67bdc4 100644 --- a/drivers/crypto/hisilicon/hpre/hpre.h +++ b/drivers/crypto/hisilicon/hpre/hpre.h @@ -13,6 +13,7 @@ #define HPRE_PF_DEF_Q_NUM 64 #define HPRE_PF_DEF_Q_BASE 0 #define HPRE_RESET 0 +#define HPRE_WAIT_DELAY 1000 struct hpre_ctrl; diff --git a/drivers/crypto/hisilicon/hpre/hpre_main.c b/drivers/crypto/hisilicon/hpre/hpre_main.c index 5e0b1b6c9224df928543546f99bd71a2f0576f46..95b8140f449caec812d566cfa27bd6ba7d689c9b 100644 --- a/drivers/crypto/hisilicon/hpre/hpre_main.c +++ b/drivers/crypto/hisilicon/hpre/hpre_main.c @@ -1054,12 +1054,21 @@ static int hpre_sriov_configure(struct pci_dev *pdev, int num_vfs) } #endif +static void hpre_remove_wait_delay(struct hpre *hpre) +{ + while (hisi_qm_frozen(&hpre->qm)) + ; + udelay(HPRE_WAIT_DELAY); +} + static void hpre_remove(struct pci_dev *pdev) { struct hpre *hpre = pci_get_drvdata(pdev); struct hisi_qm *qm = &hpre->qm; int ret; + if (uacce_mode != UACCE_MODE_NOUACCE) + hpre_remove_wait_delay(hpre); hpre_algs_unregister(); hpre_remove_from_list(hpre);