[Sound-open-firmware] [PATCH] topology: pcm: Fix PCM ID for topologies > 1 PCM

Liam Girdwood liam.r.girdwood at linux.intel.com
Sat Mar 17 21:33:32 CET 2018


PCM number was not being preserved and was always zero. This would
overwrite previous PCMs and cause the FW to return invalid PCM error
messages.

Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
 topology/m4/pcm.m4                        | 36 +++++++++++++++----------------
 topology/sof/pipe-low-latency-capture.m4  |  6 +++---
 topology/sof/pipe-low-latency-playback.m4 |  6 +++---
 topology/sof/pipe-passthrough-capture.m4  |  6 +++---
 topology/sof/pipe-passthrough-playback.m4 |  6 +++---
 topology/sof/pipe-pcm-media.m4            |  6 +++---
 topology/sof/pipe-src-capture.m4          |  6 +++---
 topology/sof/pipe-src-playback.m4         |  6 +++---
 topology/sof/pipe-volume-capture.m4       |  6 +++---
 topology/sof/pipe-volume-playback.m4      |  6 +++---
 10 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/topology/m4/pcm.m4 b/topology/m4/pcm.m4
index 596f2fe..f77cb01 100644
--- a/topology/m4/pcm.m4
+++ b/topology/m4/pcm.m4
@@ -3,18 +3,18 @@ divert(-1)
 dnl Define the macro for PCM playback/capture/capabilities
 
 dnl PCM name)
-define(`N_PCMP', `PCM'PCM_ID`P')
-define(`N_PCMC', `PCM'PCM_ID`C')
+define(`N_PCMP', `PCM'$1`P')
+define(`N_PCMC', `PCM'$1`C')
 
-dnl W_PCM_PLAYBACK(stream, dmac, dmac_chan, periods_sink, periods_source, preload)
+dnl W_PCM_PLAYBACK(pcm, stream, dmac, dmac_chan, periods_sink, periods_source, preload)
 dnl  PCM platform configuration
 define(`W_PCM_PLAYBACK',
 `SectionVendorTuples."'N_PCMP($1)`_tuples_w_comp" {'
 `	tokens "sof_comp_tokens"'
 `	tuples."word" {'
-`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($4)
-`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($5)
-`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($6)
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($5)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($6)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($7)
 `	}'
 `}'
 `SectionData."'N_PCMP($1)`_data_w_comp" {'
@@ -23,18 +23,18 @@ define(`W_PCM_PLAYBACK',
 `SectionVendorTuples."'N_PCMP($1)`_tuples" {'
 `	tokens "sof_pcm_tokens"'
 `	tuples."word" {'
-`		SOF_TKN_PCM_DMAC'	STR($2)
-`		SOF_TKN_PCM_DMAC_CHAN'	STR($3)
+`		SOF_TKN_PCM_DMAC'	STR($3)
+`		SOF_TKN_PCM_DMAC_CHAN'	STR($4)
 `	}'
 `}'
 `SectionData."'N_PCMP($1)`_data" {'
 `	tuples "'N_PCMP($1)`_tuples"'
 `}'
-`SectionWidget."'N_PCMP`" {'
+`SectionWidget."'N_PCMP($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "aif_in"'
 `	no_pm "true"'
-`	stream_name "'$1`"'
+`	stream_name "'$2`"'
 `	data ['
 `		"'N_PCMP($1)`_data"'
 `		"'N_PCMP($1)`_data_w_comp"'
@@ -42,14 +42,14 @@ define(`W_PCM_PLAYBACK',
 `}')
 
 
-dnl W_PCM_CAPTURE(stream, dmac, dmac_chan, periods_sink, periods_source, preload)
+dnl W_PCM_CAPTURE(pcm, stream, dmac, dmac_chan, periods_sink, periods_source, preload)
 define(`W_PCM_CAPTURE',
 `SectionVendorTuples."'N_PCMC($1)`_tuples_w_comp" {'
 `	tokens "sof_comp_tokens"'
 `	tuples."word" {'
-`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($4)
-`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($5)
-`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($6)
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($5)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($6)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($7)
 `	}'
 `}'
 `SectionData."'N_PCMC($1)`_data_w_comp" {'
@@ -58,18 +58,18 @@ define(`W_PCM_CAPTURE',
 `SectionVendorTuples."'N_PCMC($1)`_tuples" {'
 `	tokens "sof_pcm_tokens"'
 `	tuples."word" {'
-`		SOF_TKN_PCM_DMAC'	STR($2)
-`		SOF_TKN_PCM_DMAC_CHAN'	STR($3)
+`		SOF_TKN_PCM_DMAC'	STR($3)
+`		SOF_TKN_PCM_DMAC_CHAN'	STR($4)
 `	}'
 `}'
 `SectionData."'N_PCMC($1)`_data" {'
 `	tuples "'N_PCMC($1)`_tuples"'
 `}'
-`SectionWidget."'N_PCMC`" {'
+`SectionWidget."'N_PCMC($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "aif_out"'
 `	no_pm "true"'
-`	stream_name "'$1`"'
+`	stream_name "'$2`"'
 `	data ['
 `		"'N_PCMC($1)`_data"'
 `		"'N_PCMC($1)`_data_w_comp"'
diff --git a/topology/sof/pipe-low-latency-capture.m4 b/topology/sof/pipe-low-latency-capture.m4
index 5619999..96fa3cc 100644
--- a/topology/sof/pipe-low-latency-capture.m4
+++ b/topology/sof/pipe-low-latency-capture.m4
@@ -29,7 +29,7 @@ C_CONTROLMIXER(PCM PCM_ID Capture Volume, PIPELINE_ID,
 
 # Host "Low Latency Capture" PCM uses pipeline DMAC and channel
 # with 0 sink and 2 source periods
-W_PCM_CAPTURE(Low Latency Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 0, 2, 0)
+W_PCM_CAPTURE(PCM_ID, Low Latency Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 0, 2, 0)
 
 # "Capture Volume" has 2 sink and source periods for host and DAI ping-pong
 W_PGA(0, PIPELINE_FORMAT, 2, 2, 0, LIST(`		', "PCM PCM_ID Capture Volume"))
@@ -49,8 +49,8 @@ W_BUFFER(1, COMP_BUFFER_SIZE(2,
 
 P_GRAPH(pipe-ll-capture-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(Low Latency Capture PCM_ID, N_PCMC)',
-	`dapm(N_PCMC, N_BUFFER(1))',
+	`dapm(Low Latency Capture PCM_ID, N_PCMC(PCM_ID))',
+	`dapm(N_PCMC(PCM_ID), N_BUFFER(1))',
 	`dapm(N_BUFFER(1), N_PGA(0))',
 	`dapm(N_PGA(0), N_BUFFER(0))'))
 
diff --git a/topology/sof/pipe-low-latency-playback.m4 b/topology/sof/pipe-low-latency-playback.m4
index 4a4fca9..b7f2d11 100644
--- a/topology/sof/pipe-low-latency-playback.m4
+++ b/topology/sof/pipe-low-latency-playback.m4
@@ -54,7 +54,7 @@ C_CONTROLMIXER(Master Playback Volume, PIPELINE_ID,
 
 # Host "Low latency Playback" PCM uses pipeline DMAC and channel
 # with 2 sink and 0 source periods
-W_PCM_PLAYBACK(Low Latency Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
+W_PCM_PLAYBACK(PCM_ID, Low Latency Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
 
 # "Playback Volume" has 1 sink period and 2 source periods for host ping-pong
 W_PGA(0, PIPELINE_FORMAT, 1, 2, 1, LIST(`		', "PCM PCM_ID Playback Volume"))
@@ -93,8 +93,8 @@ W_BUFFER(3, COMP_BUFFER_SIZE(2,
 
 P_GRAPH(pipe-ll-playback-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(N_PCMP, Low Latency Playback PCM_ID)',
-	`dapm(N_BUFFER(0), N_PCMP)',
+	`dapm(N_PCMP(PCM_ID), Low Latency Playback PCM_ID)',
+	`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
 	`dapm(N_PGA(0), N_BUFFER(0))',
 	`dapm(N_BUFFER(1), N_PGA(0))',
 	`dapm(N_MIXER(0), N_BUFFER(1))',
diff --git a/topology/sof/pipe-passthrough-capture.m4 b/topology/sof/pipe-passthrough-capture.m4
index 07961b3..ff7c842 100644
--- a/topology/sof/pipe-passthrough-capture.m4
+++ b/topology/sof/pipe-passthrough-capture.m4
@@ -17,7 +17,7 @@ include(`pipeline.m4')
 
 # Host "Passthrough Capture" PCM uses pipeline DMAC and channel
 # with 0 sink and 2 source periods
-W_PCM_CAPTURE(Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 0, 2, 2)
+W_PCM_CAPTURE(PCM_ID, Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 0, 2, 2)
 
 # Capture Buffers
 W_BUFFER(0, COMP_BUFFER_SIZE(2,
@@ -41,8 +41,8 @@ W_PIPELINE(N_DAI_IN, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES, SCHE
 
 P_GRAPH(pipe-pass-capture-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(Passthrough Capture PCM_ID, N_PCMC)',
-	`dapm(N_PCMC, N_BUFFER(0))'))
+	`dapm(Passthrough Capture PCM_ID, N_PCMC(PCM_ID))',
+	`dapm(N_PCMC(PCM_ID), N_BUFFER(0))'))
 
 #
 # Pipeline Source and Sinks
diff --git a/topology/sof/pipe-passthrough-playback.m4 b/topology/sof/pipe-passthrough-playback.m4
index 715fcee..84aa126 100644
--- a/topology/sof/pipe-passthrough-playback.m4
+++ b/topology/sof/pipe-passthrough-playback.m4
@@ -17,7 +17,7 @@ include(`pipeline.m4')
 
 # Host "Passthrough Playback" PCM uses pipeline DMAC and channel
 # with 2 sink and 0 source periods
-W_PCM_PLAYBACK(Passthrough Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
+W_PCM_PLAYBACK(PCM_ID, Passthrough Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
 
 # Playback Buffers
 W_BUFFER(0, COMP_BUFFER_SIZE(2,
@@ -41,8 +41,8 @@ W_PIPELINE(N_DAI_OUT, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES, SCH
 
 P_GRAPH(pipe-pass-playback-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(N_PCMP, Passthrough Playback PCM_ID)',
-	`dapm(N_BUFFER(0), N_PCMP)'))
+	`dapm(N_PCMP(PCM_ID), Passthrough Playback PCM_ID)',
+	`dapm(N_BUFFER(0), N_PCMP(PCM_ID))'))
 
 #
 # Pipeline Source and Sinks
diff --git a/topology/sof/pipe-pcm-media.m4 b/topology/sof/pipe-pcm-media.m4
index f2053b7..1ca829f 100644
--- a/topology/sof/pipe-pcm-media.m4
+++ b/topology/sof/pipe-pcm-media.m4
@@ -41,7 +41,7 @@ W_DATA(media_src_conf, media_src_tokens)
 
 # Host "Low latency Playback" PCM uses pipeline DMAC and channel
 # with 2 sink and 0 source periods
-W_PCM_PLAYBACK(Media Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
+W_PCM_PLAYBACK(PCM_ID, Media Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
 
 # "Playback Volume" has 2 sink period and 2 source periods for host ping-pong
 W_PGA(0, PIPELINE_FORMAT, 2, 2, 2, LIST(`		', "PCM PCM_ID Playback Volume"))
@@ -70,8 +70,8 @@ W_BUFFER(2, COMP_BUFFER_SIZE(3,
 
 P_GRAPH(pipe-media-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(N_PCMP, Media Playback PCM_ID)',
-	`dapm(N_BUFFER(0), N_PCMP)',
+	`dapm(N_PCMP(PCM_ID), Media Playback PCM_ID)',
+	`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
 	`dapm(N_PGA(0), N_BUFFER(0))',
 	`dapm(N_BUFFER(1), N_PGA(0))',
 	`dapm(N_SRC(0), N_BUFFER(1))'
diff --git a/topology/sof/pipe-src-capture.m4 b/topology/sof/pipe-src-capture.m4
index 1b1a58d..54eeea3 100644
--- a/topology/sof/pipe-src-capture.m4
+++ b/topology/sof/pipe-src-capture.m4
@@ -18,7 +18,7 @@ include(`pipeline.m4')
 
 # Host "Passthrough Capture" PCM uses pipeline DMAC and channel
 # with 4 sink and 0 source periods
-W_PCM_CAPTURE(Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 4, 0, 2)
+W_PCM_CAPTURE(PCM_ID, Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 4, 0, 2)
 
 #
 # SRC Configuration
@@ -58,8 +58,8 @@ W_PIPELINE(N_DAI_IN, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES,
 
 P_GRAPH(pipe-pass-src-capture-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(Passthrough Capture PCM_ID, N_PCMC)',
-	`dapm(N_PCMC, N_BUFFER(0))',
+	`dapm(Passthrough Capture PCM_ID, N_PCMC(PCM_ID))',
+	`dapm(N_PCMC(PCM_ID), N_BUFFER(0))',
 	`dapm(N_BUFFER(0), N_SRC(0))',
 	`dapm(N_SRC(0), N_BUFFER(1))'))
 
diff --git a/topology/sof/pipe-src-playback.m4 b/topology/sof/pipe-src-playback.m4
index 9dfdcd8..51237ac 100644
--- a/topology/sof/pipe-src-playback.m4
+++ b/topology/sof/pipe-src-playback.m4
@@ -18,7 +18,7 @@ include(`pipeline.m4')
 
 # Host "Passthrough Playback" PCM uses pipeline DMAC and channel
 # with 4 sink and 0 source periods
-W_PCM_PLAYBACK(Passthrough Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 4, 0, 2)
+W_PCM_PLAYBACK(PCM_ID, Passthrough Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 4, 0, 2)
 
 #
 # SRC Configuration
@@ -58,8 +58,8 @@ W_PIPELINE(N_DAI_OUT, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES,
 
 P_GRAPH(pipe-pass-src-playback-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(N_PCMP, Passthrough Playback PCM_ID)',
-	`dapm(N_BUFFER(0), N_PCMP)',
+	`dapm(N_PCMP(PCM_ID), Passthrough Playback PCM_ID)',
+	`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
 	`dapm(N_SRC(0), N_BUFFER(0))',
 	`dapm(N_BUFFER(1), N_SRC(0))'))
 
diff --git a/topology/sof/pipe-volume-capture.m4 b/topology/sof/pipe-volume-capture.m4
index 61b70a9..c3917ca 100644
--- a/topology/sof/pipe-volume-capture.m4
+++ b/topology/sof/pipe-volume-capture.m4
@@ -31,7 +31,7 @@ C_CONTROLMIXER(Master Capture Volume, PIPELINE_ID,
 
 # Host "Passthrough Capture" PCM uses pipeline DMAC and channel
 # with 0 sink and 2 source periods
-W_PCM_CAPTURE(Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 0, 2, 2)
+W_PCM_CAPTURE(PCM_ID, Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 0, 2, 2)
 
 # "Volume" has 2 source and 2 sink periods
 W_PGA(0, PIPELINE_FORMAT, 2, 2, 2, LIST(`		', "Master Capture Volume"))
@@ -63,8 +63,8 @@ W_PIPELINE(N_DAI_IN, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES,
 
 P_GRAPH(pipe-pass-vol-capture-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(Passthrough Capture PCM_ID, N_PCMC)',
-	`dapm(N_PCMC, N_BUFFER(0))',
+	`dapm(Passthrough Capture PCM_ID, N_PCMC(PCM_ID))',
+	`dapm(N_PCMC(PCM_ID), N_BUFFER(0))',
 	`dapm(N_BUFFER(0), N_PGA(0))',
 	`dapm(N_PGA(0), N_BUFFER(1))'))
 
diff --git a/topology/sof/pipe-volume-playback.m4 b/topology/sof/pipe-volume-playback.m4
index 5fea0c7..194aad9 100644
--- a/topology/sof/pipe-volume-playback.m4
+++ b/topology/sof/pipe-volume-playback.m4
@@ -31,7 +31,7 @@ C_CONTROLMIXER(Master Playback Volume, PIPELINE_ID,
 
 # Host "Passthrough Playback" PCM uses pipeline DMAC and channel
 # with 2 sink and 0 source periods
-W_PCM_PLAYBACK(Passthrough Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
+W_PCM_PLAYBACK(PCM_ID, Passthrough Playback, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 2, 0, 2)
 
 # "Volume" has 2 source and 2 sink periods
 W_PGA(0, PIPELINE_FORMAT, 2, 2, 2, LIST(`		', "Master Playback Volume"))
@@ -63,8 +63,8 @@ W_PIPELINE(N_DAI_OUT, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES,
 
 P_GRAPH(pipe-pass-vol-playback-PIPELINE_ID, PIPELINE_ID,
 	LIST(`		',
-	`dapm(N_PCMP, Passthrough Playback PCM_ID)',
-	`dapm(N_BUFFER(0), N_PCMP)',
+	`dapm(N_PCMP(PCM_ID), Passthrough Playback PCM_ID)',
+	`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
 	`dapm(N_PGA(0), N_BUFFER(0))',
 	`dapm(N_BUFFER(1), N_PGA(0))'))
 
-- 
2.14.1



More information about the Sound-open-firmware mailing list