diff --git a/drivers/scsi/ufs/ufshcd-crypto-qti.c b/drivers/scsi/ufs/ufshcd-crypto-qti.c index 62d1ec595840..42b296a182b4 100644 --- a/drivers/scsi/ufs/ufshcd-crypto-qti.c +++ b/drivers/scsi/ufs/ufshcd-crypto-qti.c @@ -55,7 +55,6 @@ void ufshcd_crypto_qti_enable(struct ufs_hba *hba) } ufshcd_crypto_enable_spec(hba); - } void ufshcd_crypto_qti_disable(struct ufs_hba *hba) @@ -88,26 +87,25 @@ static int ufshcd_crypto_qti_keyslot_program(struct keyslot_manager *ksm, hba->crypto_cap_array[crypto_alg_id].sdus_mask)) return -EINVAL; - pm_runtime_get_sync(hba->dev); + if (!hba->pm_op_in_progress) + pm_runtime_get_sync(hba->dev); err = ufshcd_hold(hba, false); if (err) { pr_err("%s: failed to enable clocks, err %d\n", __func__, err); - return err; + goto out; } err = crypto_qti_keyslot_program(hba->crypto_vops->priv, key, slot, data_unit_mask, crypto_alg_id); - if (err) { + if (err) pr_err("%s: failed with error %d\n", __func__, err); - ufshcd_release(hba); - pm_runtime_put_sync(hba->dev); - return err; - } ufshcd_release(hba); - pm_runtime_put_sync(hba->dev); +out: + if (!hba->pm_op_in_progress) + pm_runtime_put_sync(hba->dev); - return 0; + return err; } static int ufshcd_crypto_qti_keyslot_evict(struct keyslot_manager *ksm,