summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@linaro.org>2021-07-27 16:19:30 -0500
committerDavid S. Miller <davem@davemloft.net>2021-07-28 00:06:27 +0100
commitcf8dfe6ab8e7854905b13e7f46d39a2aba687825 (patch)
tree6b6e9cb4c9003227534060164e5fb55b851e17b1
parent923a6b698447f4f7872daee47accbab78135ff51 (diff)
net: ipa: get another clock for ipa_setup()
Two places call ipa_setup(). The first, ipa_probe(), holds an IPA clock reference when calling ipa_setup() (if the AP is responsible for IPA firmware loading). But if the modem is loading IPA firmware, ipa_smp2p_modem_setup_ready_isr() calls ipa_setup() after the modem has signaled the hardware is ready. This can happen at any time, and there is no guarantee the hardware is active. Have ipa_smp2p_modem_setup() take an IPA clock reference before it calls ipa_setup(), and release it once setup is complete. Signed-off-by: Alex Elder <elder@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ipa/ipa_smp2p.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/ipa/ipa_smp2p.c b/drivers/net/ipa/ipa_smp2p.c
index 93270e50b6b3..0d15438a79e2 100644
--- a/drivers/net/ipa/ipa_smp2p.c
+++ b/drivers/net/ipa/ipa_smp2p.c
@@ -156,11 +156,16 @@ static irqreturn_t ipa_smp2p_modem_setup_ready_isr(int irq, void *dev_id)
if (!smp2p->disabled) {
int ret;
+ /* The clock needs to be active for setup */
+ ipa_clock_get(smp2p->ipa);
+
ret = ipa_setup(smp2p->ipa);
if (ret)
dev_err(&smp2p->ipa->pdev->dev,
"error %d from ipa_setup()\n", ret);
smp2p->disabled = true;
+
+ ipa_clock_put(smp2p->ipa);
}
mutex_unlock(&smp2p->mutex);