[Sound-open-firmware] [PATCH] ipc: no need to set up host page table for hostless pipelines

Ranjani Sridharan ranjani.sridharan at linux.intel.com
Tue May 29 21:11:03 CEST 2018


Hostless pipelines such as the tone pipeline do not need
host page table set up.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
---
 src/ipc/handler.c | 61 +++++++++++++++++++++++++----------------------
 1 file changed, 33 insertions(+), 28 deletions(-)

diff --git a/src/ipc/handler.c b/src/ipc/handler.c
index 581ce9e..0584feb 100644
--- a/src/ipc/handler.c
+++ b/src/ipc/handler.c
@@ -126,40 +126,45 @@ static int ipc_stream_pcm_params(uint32_t stream)
 	cd->params = pcm_params->params;
 
 #ifdef CONFIG_HOST_PTABLE
+	/* no need to set up host page table for hostless pipelines */
+	if (cd->comp.type == SOF_COMP_HOST) {
+		list_init(&elem_list);
+
+		/*
+		 * use DMA to read in compressed page table ringbuffer
+		 * from host
+		 */
+		err = ipc_get_page_descriptors(iipc->dmac, iipc->page_table,
+					       &pcm_params->params.buffer);
+		if (err < 0) {
+			trace_ipc_error("eAp");
+			goto error;
+		}
 
-	list_init(&elem_list);
-
-	/* use DMA to read in compressed page table ringbuffer from host */
-	err = ipc_get_page_descriptors(iipc->dmac, iipc->page_table,
-				       &pcm_params->params.buffer);
-	if (err < 0) {
-		trace_ipc_error("eAp");
-		goto error;
-	}
-
-	/* Parse host tables */
-	host = (struct sof_ipc_comp_host *)&cd->comp;
-	ring_size = pcm_params->params.buffer.size;
-
-	err = ipc_parse_page_descriptors(iipc->page_table,
-					 &pcm_params->params.buffer,
-					 &elem_list, host->direction);
-	if (err < 0) {
-		trace_ipc_error("eAP");
-		goto error;
-	}
-
-	list_for_item(plist, &elem_list) {
-		elem = container_of(plist, struct dma_sg_elem, list);
+		/* Parse host tables */
+		host = (struct sof_ipc_comp_host *)&cd->comp;
+		ring_size = pcm_params->params.buffer.size;
 
-		err = comp_host_buffer(cd, elem, ring_size);
+		err = ipc_parse_page_descriptors(iipc->page_table,
+						 &pcm_params->params.buffer,
+						 &elem_list, host->direction);
 		if (err < 0) {
-			trace_ipc_error("ePb");
+			trace_ipc_error("eAP");
 			goto error;
 		}
 
-		list_item_del(&elem->list);
-		rfree(elem);
+		list_for_item(plist, &elem_list) {
+			elem = container_of(plist, struct dma_sg_elem, list);
+
+			err = comp_host_buffer(cd, elem, ring_size);
+			if (err < 0) {
+				trace_ipc_error("ePb");
+				goto error;
+			}
+
+			list_item_del(&elem->list);
+			rfree(elem);
+		}
 	}
 #endif
 
-- 
2.17.0



More information about the Sound-open-firmware mailing list