summaryrefslogtreecommitdiff
path: root/drivers/mmc/host
diff options
context:
space:
mode:
authorVeerabhadrarao Badiganti <vbadigan@codeaurora.org>2017-10-09 19:51:46 +0530
committerVeerabhadrarao Badiganti <vbadigan@codeaurora.org>2017-11-24 19:03:47 +0530
commit17f54d16a19afd13ca577aae04cbeeb40025143c (patch)
treed6e82651a2d1215f1a0f24a746326a27a964793e /drivers/mmc/host
parentaf5f70355c26dced06be3b8b34f0f10b81a44f40 (diff)
mmc: cmdq_hci: Remove runtime PM vote if request issuing fails
Remove the runtime PM vote if command-queue request processing fails. Otherwise, in case command-queue request preparation fails, the runtime PM votes go out of sync and sdhc platform device suspend might get blocked. Change-Id: Ibe95e1653f7558a7994b606922a1625b429d57f6 Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
Diffstat (limited to 'drivers/mmc/host')
-rw-r--r--drivers/mmc/host/cmdq_hci.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/mmc/host/cmdq_hci.c b/drivers/mmc/host/cmdq_hci.c
index 3f741f83a436..83d24fcaf2ab 100644
--- a/drivers/mmc/host/cmdq_hci.c
+++ b/drivers/mmc/host/cmdq_hci.c
@@ -805,7 +805,7 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
if (err) {
pr_err("%s: failed to configure crypto: err %d tag %d\n",
mmc_hostname(mmc), err, tag);
- goto out;
+ goto ice_err;
}
}
@@ -823,7 +823,7 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
if (err) {
pr_err("%s: %s: failed to setup tx desc: %d\n",
mmc_hostname(mmc), __func__, err);
- goto out;
+ goto desc_err;
}
cq_host->mrq_slot[tag] = mrq;
@@ -843,6 +843,22 @@ ring_doorbell:
/* Commit the doorbell write immediately */
wmb();
+ return err;
+
+desc_err:
+ if (cq_host->ops->crypto_cfg_end) {
+ err = cq_host->ops->crypto_cfg_end(mmc, mrq);
+ if (err) {
+ pr_err("%s: failed to end ice config: err %d tag %d\n",
+ mmc_hostname(mmc), err, tag);
+ }
+ }
+ if (!(cq_host->caps & CMDQ_CAP_CRYPTO_SUPPORT) &&
+ cq_host->ops->crypto_cfg_reset)
+ cq_host->ops->crypto_cfg_reset(mmc, tag);
+ice_err:
+ if (err)
+ cmdq_runtime_pm_put(cq_host);
out:
return err;
}