Sfoglia il codice sorgente

dsp/ipc: check q6 state before calling gpr_snd_pkt

check q6 state before calling gpr_snd_pkt,in audio_prm
and audio-pkt.

Change-Id: I7590c60ff88e3fce0028d8df08af3a847474ea38
Signed-off-by: Ganapathiraju Sarath Varma <[email protected]>
Ganapathiraju Sarath Varma 1 anno fa
parent
commit
a45c3be654
2 ha cambiato i file con 15 aggiunte e 7 eliminazioni
  1. 5 1
      ipc/audio-pkt.c
  2. 10 6
      ipc/gpr-lite.c

+ 5 - 1
ipc/audio-pkt.c

@@ -403,7 +403,11 @@ ssize_t audio_pkt_write(struct file *file, const char __user *buf,
 		mutex_unlock(&audpkt_dev->lock);
 		goto free_kbuf;
 	}
-	ret = gpr_send_pkt(ap_priv->adev,(struct gpr_pkt *) kbuf);
+	if (gpr_get_q6_state() != GPR_SUBSYS_DOWN)
+		ret = gpr_send_pkt(ap_priv->adev, (struct gpr_pkt *) kbuf);
+	else
+		AUDIO_PKT_ERR("q6 is down\n");
+
 	if (ret < 0) {
 		AUDIO_PKT_ERR("APR Send Packet Failed ret -%d\n", ret);
 		if (ret == -ECONNRESET)

+ 10 - 6
ipc/gpr-lite.c

@@ -95,6 +95,12 @@ int gpr_send_pkt(struct gpr_device *adev, struct gpr_pkt *pkt)
 	uint32_t pkt_size;
 	int ret;
 
+	if (gpr_get_q6_state() == GPR_SUBSYS_DOWN)
+	{
+		pr_err_ratelimited("%s: q6 state is down adev[%pK]\n", __func__, adev);
+		return -EINVAL;
+	}
+
 	if(!adev)
 	{
 		pr_err_ratelimited("%s: enter pointer adev[%pK] \n", __func__, adev);
@@ -118,13 +124,12 @@ int gpr_send_pkt(struct gpr_device *adev, struct gpr_pkt *pkt)
 
 	if ((adev->domain_id == GPR_DOMAIN_ADSP) &&
 	    (gpr_get_q6_state() != GPR_SUBSYS_LOADED)) {
-		dev_err_ratelimited(gpr->dev, "%s: domain_id[%d], Still Dsp is not Up\n",
-			__func__, adev->domain_id);
+		dev_err_ratelimited(gpr->dev, "%s:  Still Dsp is not Up\n", __func__);
 		return -ENETRESET;
-		} else if ((adev->domain_id == GPR_DOMAIN_MODEM) &&
+	} else if ((adev->domain_id == GPR_DOMAIN_MODEM) &&
 		   (gpr_get_modem_state() == GPR_SUBSYS_DOWN)) {
-		dev_err_ratelimited(gpr->dev, "%s: domain_id[%d], Still Modem is not Up\n",
-			__func__, adev->domain_id );
+		dev_err_ratelimited(gpr->dev, "%s:  Still Modem is not Up\n",
+			__func__);
 		return -ENETRESET;
 	}
 
@@ -138,7 +143,6 @@ int gpr_send_pkt(struct gpr_device *adev, struct gpr_pkt *pkt)
 		adev->svc_id, __func__, pkt_size);
 	ret = rpmsg_trysend(gpr->ch, pkt, pkt_size);
 	spin_unlock_irqrestore(&adev->lock, flags);
-
 	return ret ? ret : pkt_size;
 }
 EXPORT_SYMBOL_GPL(gpr_send_pkt);