From 29379006b10ab641c10d61daafb50484d4e492a2 Mon Sep 17 00:00:00 2001 From: Lina Iyer Date: Wed, 29 Jul 2020 17:36:56 -0700 Subject: [PATCH] Revert "soc: qcom: rpmh: Invalidate SLEEP and WAKE TCSes before flushing new data" This reverts commit 9e56b18ca5a3311e7cddfe3ff6efdc0aae3547d2. This is a preparation change for merging android-5.4.54 into msm-5.4 branch. Revert this change to continue using existing driver that is already supporting same functionality being added in this change. Change-Id: I32ecd526576d56f3b1be206298dd7eb414c23f58 Signed-off-by: Blagovest Kolenichev --- drivers/soc/qcom/rpmh.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/drivers/soc/qcom/rpmh.c b/drivers/soc/qcom/rpmh.c index ae2d1590a611..4bf26a296523 100644 --- a/drivers/soc/qcom/rpmh.c +++ b/drivers/soc/qcom/rpmh.c @@ -317,6 +317,19 @@ static int flush_batch(struct rpmh_ctrlr *ctrlr) return ret; } +static void invalidate_batch(struct rpmh_ctrlr *ctrlr) +{ + struct batch_cache_req *req, *tmp; + unsigned long flags; + + spin_lock_irqsave(&ctrlr->cache_lock, flags); + list_for_each_entry_safe(req, tmp, &ctrlr->batch_cache, list) + kfree(req); + INIT_LIST_HEAD(&ctrlr->batch_cache); + ctrlr->dirty = true; + spin_unlock_irqrestore(&ctrlr->cache_lock, flags); +} + /** * rpmh_write_batch: Write multiple sets of RPMH commands and wait for the * batch to finish. @@ -456,13 +469,6 @@ int rpmh_flush(const struct device *dev) return 0; } - /* Invalidate the TCSes first to avoid stale data */ - do { - ret = rpmh_rsc_invalidate(ctrlr_to_drv(ctrlr)); - } while (ret == -EAGAIN); - if (ret) - return ret; - /* First flush the cached batch requests */ ret = flush_batch(ctrlr); if (ret) @@ -494,25 +500,24 @@ int rpmh_flush(const struct device *dev) EXPORT_SYMBOL(rpmh_flush); /** - * rpmh_invalidate: Invalidate sleep and wake sets in batch_cache + * rpmh_invalidate: Invalidate all sleep and active sets + * sets. * * @dev: The device making the request * - * Invalidate the sleep and wake values in batch_cache. + * Invalidate the sleep and active values in the TCS blocks. */ int rpmh_invalidate(const struct device *dev) { struct rpmh_ctrlr *ctrlr = get_rpmh_ctrlr(dev); - struct batch_cache_req *req, *tmp; - unsigned long flags; + int ret; - spin_lock_irqsave(&ctrlr->cache_lock, flags); - list_for_each_entry_safe(req, tmp, &ctrlr->batch_cache, list) - kfree(req); - INIT_LIST_HEAD(&ctrlr->batch_cache); - ctrlr->dirty = true; - spin_unlock_irqrestore(&ctrlr->cache_lock, flags); + invalidate_batch(ctrlr); - return 0; + do { + ret = rpmh_rsc_invalidate(ctrlr_to_drv(ctrlr)); + } while (ret == -EAGAIN); + + return ret; } EXPORT_SYMBOL(rpmh_invalidate);