[Sound-open-firmware] [PATCH 6/7] ASoC: SOF: Add position offset update in PCM

Xiuli Pan xiuli.pan at linux.intel.com
Wed Mar 7 07:02:55 CET 2018


From: Pan Xiuli <xiuli.pan at linux.intel.com>

Add posn_offset update from ipc reply in function
sof_pcm_hw_params. We get the DSP reply, then check and
update the PCM related posn_offset value.

Signed-off-by: Pan Xiuli <xiuli.pan at linux.intel.com>

---
Test with:
Mininow max rt5651 and GP-MRB nocodec
SOF master: 77ed88aa4a26c3ff6f479bf0894a13c87119ffdc
SOF-Tool master: 3105de2481b5b5511b2fa844fe859f023f434b4c
https://github.com/plbossart/sound/tree/topic/sof-v4.14:
d919ea06b7f79c95ab4eb68baf05e9faf3a894c1
---
 sound/soc/sof/pcm.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/sound/soc/sof/pcm.c b/sound/soc/sof/pcm.c
index 771625f..34b4935 100644
--- a/sound/soc/sof/pcm.c
+++ b/sound/soc/sof/pcm.c
@@ -53,6 +53,7 @@ static int sof_pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_sof_pcm *spcm = rtd->sof;
 	struct sof_ipc_pcm_params pcm;
 	struct sof_ipc_pcm_params_reply ipc_params_reply;
+	int posn_offset;
 	int ret;
 
 	/* nothing todo for BE */
@@ -132,9 +133,6 @@ static int sof_pcm_hw_params(struct snd_pcm_substream *substream,
 		return -EINVAL;
 	}
 
-	/* copy offset */
-	//spcm->posn_offset[substream->stream] = ipc_params_reply.posn_offset;
-
 	/* firmware already configured host stream */
 	if (ops && ops->host_stream_prepare) {
 		pcm.params.stream_tag =
@@ -147,6 +145,18 @@ static int sof_pcm_hw_params(struct snd_pcm_substream *substream,
 				 pcm.hdr.cmd, &pcm, sizeof(pcm),
 				 &ipc_params_reply, sizeof(ipc_params_reply));
 
+	/* validate offset */
+	posn_offset = ipc_params_reply.posn_offset;
+	/* check if offset is overflow or it is not aligned */
+	if (posn_offset > sdev->stream_box.size ||
+	    posn_offset % sizeof(struct sof_ipc_stream_posn) != 0) {
+		dev_err(sdev->dev, "error: got wrong posn offset 0x%x for PCM %d\n",
+			posn_offset, ret);
+		return ret;
+	}
+	spcm->posn_offset[substream->stream] =
+		sdev->stream_box.offset + posn_offset;
+
 	return ret;
 }
 
-- 
2.7.4



More information about the Sound-open-firmware mailing list