Commit cf8dfe6a authored by Alex Elder's avatar Alex Elder Committed by David S. Miller

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: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 923a6b69
...@@ -156,11 +156,16 @@ static irqreturn_t ipa_smp2p_modem_setup_ready_isr(int irq, void *dev_id) ...@@ -156,11 +156,16 @@ static irqreturn_t ipa_smp2p_modem_setup_ready_isr(int irq, void *dev_id)
if (!smp2p->disabled) { if (!smp2p->disabled) {
int ret; int ret;
/* The clock needs to be active for setup */
ipa_clock_get(smp2p->ipa);
ret = ipa_setup(smp2p->ipa); ret = ipa_setup(smp2p->ipa);
if (ret) if (ret)
dev_err(&smp2p->ipa->pdev->dev, dev_err(&smp2p->ipa->pdev->dev,
"error %d from ipa_setup()\n", ret); "error %d from ipa_setup()\n", ret);
smp2p->disabled = true; smp2p->disabled = true;
ipa_clock_put(smp2p->ipa);
} }
mutex_unlock(&smp2p->mutex); mutex_unlock(&smp2p->mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment