[Sound-open-firmware] [PATCH] topology: test: Add simple component test generator.

Liam Girdwood liam.r.girdwood at linux.intel.com
Wed Dec 13 16:50:41 CET 2017


Move testing pipelines into a test directory and reuse test scaffolding
so that they can be used to test multiple components on multiple target
with multiples configs.

Test topology scafolding are now pre-processed using a script to generate
the ALSA conf format with the various changes for each test case.

Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
 .gitignore                                         |  1 +
 configure.ac                                       |  1 +
 topology/Makefile.am                               | 11 +--
 topology/sof/pipe-src-capture.m4                   | 96 ++++++++++++++++++++++
 ...hrough-src-playback.m4 => pipe-src-playback.m4} | 23 ++----
 ...rough-vol-capture.m4 => pipe-volume-capture.m4} |  0
 ...ugh-vol-playback.m4 => pipe-volume-playback.m4} |  0
 .../test-passthrough-16bit-48k-ssp2-SSP2-Codec.m4  | 51 ------------
 .../test-passthrough-16bit-48k-ssp2-nocodec.m4     | 84 -------------------
 topology/test-passthrough-16bit-48k-ssp2.m4        | 51 ------------
 topology/test-passthrough-24bit-48k-src-ssp2.m4    | 51 ------------
 .../test-passthrough-24bit-48k-ssp2-SSP2-Codec.m4  | 51 ------------
 .../test-passthrough-24bit-48k-ssp2-nocodec.m4     | 51 ------------
 topology/test-passthrough-24bit-48k-ssp2.m4        | 51 ------------
 topology/test-passthrough-24bit-48k-vol-ssp2.m4    | 83 -------------------
 topology/test/Makefile.am                          | 20 +++++
 topology/test/test-src-ssp.m4                      | 90 ++++++++++++++++++++
 topology/test/test-ssp.m4                          | 90 ++++++++++++++++++++
 topology/test/tplg-build.sh                        | 67 +++++++++++++++
 19 files changed, 373 insertions(+), 499 deletions(-)
 create mode 100644 topology/sof/pipe-src-capture.m4
 rename topology/sof/{pipe-passthrough-src-playback.m4 => pipe-src-playback.m4} (85%)
 rename topology/sof/{pipe-passthrough-vol-capture.m4 => pipe-volume-capture.m4} (100%)
 rename topology/sof/{pipe-passthrough-vol-playback.m4 => pipe-volume-playback.m4} (100%)
 delete mode 100644 topology/test-passthrough-16bit-48k-ssp2-SSP2-Codec.m4
 delete mode 100644 topology/test-passthrough-16bit-48k-ssp2-nocodec.m4
 delete mode 100644 topology/test-passthrough-16bit-48k-ssp2.m4
 delete mode 100644 topology/test-passthrough-24bit-48k-src-ssp2.m4
 delete mode 100644 topology/test-passthrough-24bit-48k-ssp2-SSP2-Codec.m4
 delete mode 100644 topology/test-passthrough-24bit-48k-ssp2-nocodec.m4
 delete mode 100644 topology/test-passthrough-24bit-48k-ssp2.m4
 delete mode 100644 topology/test-passthrough-24bit-48k-vol-ssp2.m4
 create mode 100644 topology/test/Makefile.am
 create mode 100644 topology/test/test-src-ssp.m4
 create mode 100644 topology/test/test-ssp.m4
 create mode 100755 topology/test/tplg-build.sh

diff --git a/.gitignore b/.gitignore
index bc827b4..023e264 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@ rmbox/rmbox
 rwav/rwav
 *.tplg
 topology/*.conf
+topology/test/*.conf
diff --git a/configure.ac b/configure.ac
index 87c7519..1b4f59b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,7 @@ AC_OUTPUT([
 	rimage/Makefile
 	rmbox/Makefile
 	topology/Makefile
+	topology/test/Makefile
 ])
 
 echo "
diff --git a/topology/Makefile.am b/topology/Makefile.am
index 77c146f..3cbc5e6 100644
--- a/topology/Makefile.am
+++ b/topology/Makefile.am
@@ -3,6 +3,8 @@
 # Dependencies
 #
 
+SUBDIRS = test
+
 DEPS = \
 	dsps/*.m4 \
 	common/*.m4 \
@@ -25,14 +27,7 @@ MACHINES = \
 	reef-byt-rt5645.tplg \
 	reef-byt-rt5651.tplg \
 	reef-byt-da7212.tplg \
-	reef-hsw-rt5640.tplg \
-	test-passthrough-16bit-48k-ssp2-nocodec.tplg \
-	test-passthrough-24bit-48k-ssp2-nocodec.tplg \
-	test-passthrough-24bit-48k-ssp2.tplg \
-	test-passthrough-24bit-48k-ssp2-SSP2-Codec.tplg \
-	test-passthrough-16bit-48k-ssp2-SSP2-Codec.tplg \
-	test-passthrough-24bit-48k-vol-ssp2.tplg \
-	test-passthrough-24bit-48k-src-ssp2.tplg
+	reef-hsw-rt5640.tplg
 
 # Uncomment the following line if you want to debug conf files
 .PRECIOUS: %.conf
diff --git a/topology/sof/pipe-src-capture.m4 b/topology/sof/pipe-src-capture.m4
new file mode 100644
index 0000000..ca2980a
--- /dev/null
+++ b/topology/sof/pipe-src-capture.m4
@@ -0,0 +1,96 @@
+# Low Latency Passthrough with volume Pipeline and PCM
+#
+# Pipeline Endpoints for connection are :-
+#
+#  host PCM_P --> SRC --> sink DAI0
+
+# Include topology builder
+include(`local.m4')
+
+
+#
+# Components and Buffers
+#
+
+# Host "Passthrough Playback" PCM uses pipeline DMAC and channel
+# with 4 sink and 0 source periods
+W_PCM_PLAYBACK(Passthrough Capture, PIPELINE_DMAC, PIPELINE_DMAC_CHAN, 4, 0, 2)
+
+#
+# SRC Configuration
+#
+
+SectionVendorTuples."media_src_tokens" {
+	tokens "sof_src_tokens"
+
+	tuples."word" {
+		SOF_TKN_SRC_RATE_OUT	"48000"
+	}
+}
+
+SectionData."media_src_conf" {
+	tuples "media_src_tokens"
+}
+
+# "SRC" has 4 source and 4 sink periods
+W_SRC(0, PIPELINE_FORMAT, 4, 4, media_src_conf, 2)
+
+# Playback Buffers
+W_BUFFER(0, COMP_BUFFER_SIZE(4,
+	COMP_SAMPLE_SIZE(PIPELINE_FORMAT), PIPELINE_CHANNELS, SCHEDULE_FRAMES))
+W_BUFFER(1, COMP_BUFFER_SIZE(4,
+	COMP_SAMPLE_SIZE(PIPELINE_FORMAT), PIPELINE_CHANNELS, SCHEDULE_FRAMES))
+
+#
+# DAI definitions
+#
+W_DAI_IN(DAI_TYPE, DAI_INDEX, DAI_FORMAT, 0, DAI_PERIODS,
+	DAI_PERIODS, dai0c_plat_conf)
+
+#
+# DAI pipeline
+#
+W_PIPELINE(N_DAI_IN, SCHEDULE_DEADLINE, SCHEDULE_PRIORITY, SCHEDULE_FRAMES,
+	SCHEDULE_CORE, 0, pipe_dai_schedule_plat)
+
+#
+# Pipeline Graph
+#
+#  host PCM_P --> B0 --> SRC 0 --> B1 --> sink DAI0
+
+SectionGraph."pipe-pass-src-capture-PIPELINE_ID" {
+	index STR(PIPELINE_ID)
+
+	lines [
+		dapm(Passthrough Capture PCM_ID, N_PCMC)
+		dapm(N_PCMC, N_BUFFER(0))
+		dapm(N_BUFFER(0), N_SRC(0))
+		dapm(N_SRC(0), N_BUFFER(1))
+	]
+}
+
+#
+# Pipeline Source and Sinks
+#
+indir(`define', concat(`PIPELINE_SINK_', PIPELINE_ID), N_BUFFER(1))
+indir(`define', concat(`PIPELINE_PCM_', PIPELINE_ID), Passthrough Capture PCM_ID)
+
+#
+# PCM Configuration
+#
+
+SectionPCMCapabilities.STR(Passthrough Capture PCM_ID) {
+
+	formats "S32_LE,S24_LE,S16_LE"
+	rate_min "8000"
+	rate_max "96000"
+	channels_min "2"
+	channels_max "4"
+	periods_min "2"
+	periods_max "16"
+	period_size_min	"192"
+	period_size_max	"16384"
+	buffer_size_min	"65536"
+	buffer_size_max	"65536"
+}
+
diff --git a/topology/sof/pipe-passthrough-src-playback.m4 b/topology/sof/pipe-src-playback.m4
similarity index 85%
rename from topology/sof/pipe-passthrough-src-playback.m4
rename to topology/sof/pipe-src-playback.m4
index b8fae58..d037543 100644
--- a/topology/sof/pipe-passthrough-src-playback.m4
+++ b/topology/sof/pipe-src-playback.m4
@@ -66,10 +66,14 @@ SectionGraph."pipe-pass-src-playback-PIPELINE_ID" {
 		dapm(N_BUFFER(0), N_PCMP)
 		dapm(N_SRC(0), N_BUFFER(0))
 		dapm(N_BUFFER(1), N_SRC(0))
-		dapm(N_DAI_OUT, N_BUFFER(1))
 	]
 }
 
+#
+# Pipeline Source and Sinks
+#
+indir(`define', concat(`PIPELINE_SOURCE_', PIPELINE_ID), N_BUFFER(1))
+indir(`define', concat(`PIPELINE_PCM_', PIPELINE_ID), Passthrough Playback PCM_ID)
 
 #
 # PCM Configuration
@@ -90,20 +94,3 @@ SectionPCMCapabilities.STR(Passthrough Playback PCM_ID) {
 	buffer_size_max	"65536"
 }
 
-# PCM Passthrough Playback
-SectionPCM.STR(PCM PCM_ID) {
-
-	index STR(PIPELINE_ID)
-
-	# used for binding to the PCM
-	id STR(PCM_ID)
-
-	dai.STR(Passthrough Playback PCM_ID) {
-		id STR(PCM_ID)
-	}
-
-	pcm."playback" {
-
-		capabilities STR(Passthrough Playback PCM_ID)
-	}
-}
diff --git a/topology/sof/pipe-passthrough-vol-capture.m4 b/topology/sof/pipe-volume-capture.m4
similarity index 100%
rename from topology/sof/pipe-passthrough-vol-capture.m4
rename to topology/sof/pipe-volume-capture.m4
diff --git a/topology/sof/pipe-passthrough-vol-playback.m4 b/topology/sof/pipe-volume-playback.m4
similarity index 100%
rename from topology/sof/pipe-passthrough-vol-playback.m4
rename to topology/sof/pipe-volume-playback.m4
diff --git a/topology/test-passthrough-16bit-48k-ssp2-SSP2-Codec.m4 b/topology/test-passthrough-16bit-48k-ssp2-SSP2-Codec.m4
deleted file mode 100644
index e930416..0000000
--- a/topology/test-passthrough-16bit-48k-ssp2-SSP2-Codec.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `SSP2-Codec')
-
-#
-# Define the pipeline
-#
-# PCM0 ----> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-playback.m4, 
-	1, 0, 2, s16le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s16le, 2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 24bit I2S using 25bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 16,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 1920000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 20, 3, 3))
diff --git a/topology/test-passthrough-16bit-48k-ssp2-nocodec.m4 b/topology/test-passthrough-16bit-48k-ssp2-nocodec.m4
deleted file mode 100644
index 76bd75b..0000000
--- a/topology/test-passthrough-16bit-48k-ssp2-nocodec.m4
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `NoCodec')
-
-#
-# Define the pipeline
-#
-# PCM0 <---> SSP2
-#
-
-# Passthrough playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-playback.m4,
-	1, 0, 2, s16le,
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s16le, 2)
-
-
-# Passthrough playback pipeline 2 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-capture.m4,
-	2, 0, 2, s16le,
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s16le, 2)
-
-#
-# DAI configuration
-#
-# SSP port 2 is our only pipeline DAI
-#
-
-# playback DAI is SSP2 using 2 periods
-# Buffers use s16le format, with 48 frame per 1000us on core 0 with priority 0
-DAI_ADD(sof/pipe-dai-playback.m4,
-	1, SSP, 2,
-	PIPELINE_SOURCE_1, 2, s16le,
-	48, 1000, 0, 0)
-
-# capture DAI is SSP2 using 2 periods
-# Buffers use s16le format, with 48 frame per 1000us on core 0 with priority 0
-DAI_ADD(sof/pipe-dai-capture.m4,
-	2, SSP, 2,
-	PIPELINE_SINK_2, 2, s16le,
-	48, 1000, 0, 0)
-
-# PCM Passthrough
-PCM_DUPLEX_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 16bit I2S using 20bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 16,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 1920000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 20, 3, 3))
diff --git a/topology/test-passthrough-16bit-48k-ssp2.m4 b/topology/test-passthrough-16bit-48k-ssp2.m4
deleted file mode 100644
index 7bf4aaf..0000000
--- a/topology/test-passthrough-16bit-48k-ssp2.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `Baytrail Audio')
-
-#
-# Define the pipeline
-#
-# PCM0 ----> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s16le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-playback.m4, 
-	1, 0, 2, s16le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s16le, 2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 16bit I2S using 20bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 16,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 1920000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 20, 3, 3))
diff --git a/topology/test-passthrough-24bit-48k-src-ssp2.m4 b/topology/test-passthrough-24bit-48k-src-ssp2.m4
deleted file mode 100644
index 61c06e1..0000000
--- a/topology/test-passthrough-24bit-48k-src-ssp2.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `Baytrail Audio')
-
-#
-# Define the pipeline
-#
-# PCM0 ---> volume ---> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-src-playback.m4,
-	1, 0, 2, s24le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s24le, 2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 24bit I2S using 25bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 24,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 2400000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 25, 3, 3))
diff --git a/topology/test-passthrough-24bit-48k-ssp2-SSP2-Codec.m4 b/topology/test-passthrough-24bit-48k-ssp2-SSP2-Codec.m4
deleted file mode 100644
index 7e481d3..0000000
--- a/topology/test-passthrough-24bit-48k-ssp2-SSP2-Codec.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `SSP2-Codec')
-
-#
-# Define the pipeline
-#
-# PCM0 ----> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-playback.m4, 
-	1, 0, 2, s24le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s24le, 2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 24bit I2S using 25bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 24,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 2400000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 25, 3, 3))
diff --git a/topology/test-passthrough-24bit-48k-ssp2-nocodec.m4 b/topology/test-passthrough-24bit-48k-ssp2-nocodec.m4
deleted file mode 100644
index e0a3d4f..0000000
--- a/topology/test-passthrough-24bit-48k-ssp2-nocodec.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `NoCodec')
-
-#
-# Define the pipeline
-#
-# PCM0 ----> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-playback.m4, 
-	1, 0, 2, s24le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s24le, 2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 24bit I2S using 25bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 24,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 2400000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 25, 3, 3))
diff --git a/topology/test-passthrough-24bit-48k-ssp2.m4 b/topology/test-passthrough-24bit-48k-ssp2.m4
deleted file mode 100644
index ca3261d..0000000
--- a/topology/test-passthrough-24bit-48k-ssp2.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `Baytrail Audio')
-
-#
-# Define the pipeline
-#
-# PCM0 ----> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-playback.m4, 
-	1, 0, 2, s24le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s24le, 2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 24bit I2S using 25bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 24,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 2400000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 25, 3, 3))
diff --git a/topology/test-passthrough-24bit-48k-vol-ssp2.m4 b/topology/test-passthrough-24bit-48k-vol-ssp2.m4
deleted file mode 100644
index 89775a7..0000000
--- a/topology/test-passthrough-24bit-48k-vol-ssp2.m4
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# Topology for pass through pipeline
-#
-
-# Include topology builder
-include(`local.m4')
-include(`build.m4')
-
-# Include TLV library
-include(`common/tlv.m4')
-
-# Include Token library
-include(`sof/tokens.m4')
-
-# Include Baytrail DSP configuration
-include(`dsps/byt.m4')
-
-#
-# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
-#
-
-# DAI Link Name
-define(`TEST_DAI_LINK_NAME', `Baytrail Audio')
-
-#
-# Define the pipeline
-#
-# PCM0 <---> volume <---> SSP2
-#
-
-# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-vol-playback.m4,
-	1, 0, 2, s24le, 
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s24le, 2)
-
-# Low Latency capture pipeline 2 on PCM 0 using max 2 channels of s24le.
-# Schedule 48 frames per 1000us deadline on core 0 with priority 0
-# Use DMAC 0 channel 1 for PCM audio playback data
-
-PIPELINE_PCM_DAI_ADD(sof/pipe-passthrough-vol-capture.m4,
-	2, 0, 2, s24le,
-	48, 1000, 0, 0, 0, 1,
-	SSP, 2, s24le, 2)
-
-#
-# DAI configuration
-#
-# SSP port 2 is our only pipeline DAI
-#
-
-# playback DAI is SSP2 using 2 periods
-# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
-DAI_ADD(sof/pipe-dai-playback.m4,
-	1, SSP, 2,
-	PIPELINE_SOURCE_1, 2, s24le,
-	48, 1000, 0, 0)
-
-# capture DAI is SSP2 using 2 periods
-# Buffers use s16le format, with 48 frame per 1000us on core 0 with priority 0
-DAI_ADD(sof/pipe-dai-capture.m4,
-	2, SSP, 2,
-	PIPELINE_SINK_2, 2, s24le,
-	48, 1000, 0, 0)
-
-# PCM Passthrough
-PCM_DUPLEX_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2)
-
-#
-# BE configurations - overrides config in ACPI if present
-#
-# Clocks masters wrt codec
-#
-# 24bit I2S using 25bit sample conatiner on SSP2
-#
-DAI_CONFIG(SSP, 2, TEST_DAI_LINK_NAME, I2S, 24,
-	DAI_CLOCK(mclk, 19200000, slave),
-	DAI_CLOCK(bclk, 2400000, slave),
-	DAI_CLOCK(fsync, 48000, slave),
-	DAI_TDM(2, 25, 3, 3))
diff --git a/topology/test/Makefile.am b/topology/test/Makefile.am
new file mode 100644
index 0000000..7da075d
--- /dev/null
+++ b/topology/test/Makefile.am
@@ -0,0 +1,20 @@
+
+#
+# Dependencies
+#
+
+DEPS = \
+	../dsps/*.m4 \
+	../common/*.m4 \
+	../m4/*.m4 \
+	../sof/*.m4
+
+# Uncomment the following line if you want to debug conf files
+.PRECIOUS: %.conf
+
+all : *.m4 ${DEPS}
+	./tplg-build.sh
+
+clean:
+	rm -f *.conf
+	rm -f *.tplg
diff --git a/topology/test/test-src-ssp.m4 b/topology/test/test-src-ssp.m4
new file mode 100644
index 0000000..318bd74
--- /dev/null
+++ b/topology/test/test-src-ssp.m4
@@ -0,0 +1,90 @@
+#
+# Topology for pass through pipeline
+#
+
+# Include topology builder
+include(`local.m4')
+include(`build.m4')
+
+# Include TLV library
+include(`common/tlv.m4')
+
+# Include Token library
+include(`sof/tokens.m4')
+
+# Include Baytrail DSP configuration
+include(`dsps/byt.m4')
+
+#
+# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
+#
+# TEST_PIPE_NAME - Pipe name
+# TEST_DAI_LINK_NAME - BE DAI link name e.g. "NoCodec"
+# TEST_SSP_PORT	- SSP port number e.g. 2 
+# TEST_SSP_FORMAT - SSP data format e.g s16le
+# TEST_PIPE_FORMAT - Pipeline format e.g. s16le
+# TEST_SSP_BCLK - SSP BCLK in Hz
+# TEST_SSP_PHY_BITS - SSP physical slot size
+# TEST_SSP_DATA_BITS - SSP data slot size
+#
+
+#
+# Define the pipeline
+#
+# PCM0 <--> SRC <--> SSP TEST_SSP_PORT
+#
+
+# Passthrough playback pipeline 1 on PCM 0 using max 2 channels of s24le.
+# Schedule 48 frames per 1000us deadline on core 0 with priority 0
+# Use DMAC 0 channel 1 for PCM audio playback data
+
+PIPELINE_PCM_DAI_ADD(sof/pipe-TEST_PIPE_NAME-playback.m4,
+	1, 0, 2, TEST_PIPE_FORMAT,
+	48, 1000, 0, 0, 0, 1,
+	SSP, TEST_SSP_PORT, TEST_SSP_FORMAT, 2)
+
+
+# Passthrough playback pipeline 2 on PCM 0 using max 2 channels of s24le.
+# Schedule 48 frames per 1000us deadline on core 0 with priority 0
+# Use DMAC 0 channel 1 for PCM audio playback data
+
+PIPELINE_PCM_DAI_ADD(sof/pipe-TEST_PIPE_NAME-capture.m4,
+	2, 0, 2, TEST_PIPE_FORMAT,
+	48, 1000, 0, 0, 0, 1,
+	SSP, TEST_SSP_PORT, TEST_SSP_FORMAT, 2)
+
+#
+# DAI configuration
+#
+# SSP port TEST_SSP_PORT is our only pipeline DAI
+#
+
+# playback DAI is SSP TEST_SSP_PORT using 2 periods
+# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
+DAI_ADD(sof/pipe-dai-playback.m4,
+	1, SSP, TEST_SSP_PORT,
+	PIPELINE_SOURCE_1, 2, TEST_SSP_FORMAT,
+	48, 1000, 0, 0)
+
+# capture DAI is SSP TEST_SSP_PORT using 2 periods
+# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
+DAI_ADD(sof/pipe-dai-capture.m4,
+	2, SSP, TEST_SSP_PORT,
+	PIPELINE_SINK_2, 2, TEST_SSP_FORMAT,
+	48, 1000, 0, 0)
+
+# PCM Passthrough
+PCM_DUPLEX_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2)
+
+#
+# BE configurations - overrides config in ACPI if present
+#
+# Clocks masters wrt codec
+#
+# TEST_SSP_DATA_BITS bit I2S using TEST_SSP_PHY_BITS bit sample conatiner on SSP TEST_SSP_PORT
+#
+DAI_CONFIG(SSP, TEST_SSP_PORT, TEST_DAI_LINK_NAME, I2S, TEST_SSP_DATA_BITS,
+	DAI_CLOCK(mclk, 19200000, slave),
+	DAI_CLOCK(bclk, TEST_SSP_BCLK, slave),
+	DAI_CLOCK(fsync, 48000, slave),
+	DAI_TDM(2, TEST_SSP_PHY_BITS, 3, 3))
diff --git a/topology/test/test-ssp.m4 b/topology/test/test-ssp.m4
new file mode 100644
index 0000000..42f3876
--- /dev/null
+++ b/topology/test/test-ssp.m4
@@ -0,0 +1,90 @@
+#
+# Topology for pass through pipeline
+#
+
+# Include topology builder
+include(`local.m4')
+include(`build.m4')
+
+# Include TLV library
+include(`common/tlv.m4')
+
+# Include Token library
+include(`sof/tokens.m4')
+
+# Include Baytrail DSP configuration
+include(`dsps/byt.m4')
+
+#
+# Machine Specific Config - !! MUST BE SET TO MATCH TEST MACHINE DRIVER !!
+#
+# TEST_PIPE_NAME - Pipe name
+# TEST_DAI_LINK_NAME - BE DAI link name e.g. "NoCodec"
+# TEST_SSP_PORT	- SSP port number e.g. 2 
+# TEST_SSP_FORMAT - SSP data format e.g s16le
+# TEST_PIPE_FORMAT - Pipeline format e.g. s16le
+# TEST_SSP_BCLK - SSP BCLK in Hz
+# TEST_SSP_PHY_BITS - SSP physical slot size
+# TEST_SSP_DATA_BITS - SSP data slot size
+#
+
+#
+# Define the pipeline
+#
+# PCM0 <---> SSP TEST_SSP_PORT
+#
+
+# Passthrough playback pipeline 1 on PCM 0 using max 2 channels of s24le.
+# Schedule 48 frames per 1000us deadline on core 0 with priority 0
+# Use DMAC 0 channel 1 for PCM audio playback data
+
+PIPELINE_PCM_DAI_ADD(sof/pipe-TEST_PIPE_NAME-playback.m4,
+	1, 0, 2, TEST_PIPE_FORMAT,
+	48, 1000, 0, 0, 0, 1,
+	SSP, TEST_SSP_PORT, TEST_SSP_FORMAT, 2)
+
+
+# Passthrough playback pipeline 2 on PCM 0 using max 2 channels of s24le.
+# Schedule 48 frames per 1000us deadline on core 0 with priority 0
+# Use DMAC 0 channel 1 for PCM audio playback data
+
+PIPELINE_PCM_DAI_ADD(sof/pipe-TEST_PIPE_NAME-capture.m4,
+	2, 0, 2, TEST_PIPE_FORMAT,
+	48, 1000, 0, 0, 0, 1,
+	SSP, TEST_SSP_PORT, TEST_SSP_FORMAT, 2)
+
+#
+# DAI configuration
+#
+# SSP port TEST_SSP_PORT is our only pipeline DAI
+#
+
+# playback DAI is SSP TEST_SSP_PORT using 2 periods
+# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
+DAI_ADD(sof/pipe-dai-playback.m4,
+	1, SSP, TEST_SSP_PORT,
+	PIPELINE_SOURCE_1, 2, TEST_SSP_FORMAT,
+	48, 1000, 0, 0)
+
+# capture DAI is SSP TEST_SSP_PORT using 2 periods
+# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
+DAI_ADD(sof/pipe-dai-capture.m4,
+	2, SSP, TEST_SSP_PORT,
+	PIPELINE_SINK_2, 2, TEST_SSP_FORMAT,
+	48, 1000, 0, 0)
+
+# PCM Passthrough
+PCM_DUPLEX_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2)
+
+#
+# BE configurations - overrides config in ACPI if present
+#
+# Clocks masters wrt codec
+#
+# TEST_SSP_DATA_BITS bit I2S using TEST_SSP_PHY_BITS bit sample conatiner on SSP TEST_SSP_PORT
+#
+DAI_CONFIG(SSP, TEST_SSP_PORT, TEST_DAI_LINK_NAME, I2S, TEST_SSP_DATA_BITS,
+	DAI_CLOCK(mclk, 19200000, slave),
+	DAI_CLOCK(bclk, TEST_SSP_BCLK, slave),
+	DAI_CLOCK(fsync, 48000, slave),
+	DAI_TDM(2, TEST_SSP_PHY_BITS, 3, 3))
diff --git a/topology/test/tplg-build.sh b/topology/test/tplg-build.sh
new file mode 100755
index 0000000..2aa751f
--- /dev/null
+++ b/topology/test/tplg-build.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# Utility script to pre-process and compile topology sources into topology test
+# binaries. Currently supports simple PCM <-> component <-> SSP style tests
+# using simple_test()
+
+# fail immediately on any errors
+set -e
+
+# M4 preprocessor flags
+M4_FLAGS="-I ../ -I ../m4"
+
+# Simple component test cases
+# can be used on components with 1 sink and 1 source.
+SIMPLE_TESTS=(test-ssp test-src-ssp)
+
+# process m4 simple tests - 
+# simple_test(name, pipe_name, be_name, format, dai_id, dai_format, dai_phy_bits, dai_data_bits dai_bclk)
+# 1) name - test filename suffix
+# 2) pipe_name - test component pipeline filename in sof/
+# 3) be_name - BE DAI link name in machine driver, used for matching
+# 4) format - PCM sample format
+# 5) dai_id - SSP port number
+# 6) dai_format - SSP sample format
+# 7) dai_phy_bits - SSP physical number of BLKCs per slot/channel
+# 8) dai_data_bits - SSP number of valid daat bits per slot/channel
+# 9) dai_bclk - SSP BCLK in HZ
+#
+function simple_test {
+	for i in ${SIMPLE_TESTS[@]}
+	do
+		TFILE="$i$5-$4-48k-$1"
+		echo "M4 pre-processing test $i -> ${TFILE}"
+		m4 ${M4_FLAGS} \
+			-DTEST_PIPE_NAME="$2" \
+			-DTEST_DAI_LINK_NAME="$3" \
+			-DTEST_SSP_PORT=$5 \
+			-DTEST_SSP_FORMAT=$6 \
+			-DTEST_PIPE_FORMAT=$4 \
+			-DTEST_SSP_BCLK=$9 \
+			-DTEST_SSP_PHY_BITS=$7 \
+			-DTEST_SSP_DATA_BITS=$8 \
+			$i.m4 > ${TFILE}.conf
+		echo "Compiling test $i -> ${TFILE}.tplg"
+		alsatplg -v 1 -c ${TFILE}.conf -o ${TFILE}.tplg
+	done
+}
+
+# Pre-process the simple tests
+simple_test nocodec passthrough "NoCodec" s16le 2 s16le 20 16 1920000
+simple_test nocodec passthrough "NoCodec" s24le 2 s24le 25 24 2400000
+simple_test nocodec volume "NoCodec" s16le 2 s16le 20 16 1920000
+simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000
+simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000
+
+simple_test codec passthrough "SSP2-Codec" s16le 2 s16le 20 16 1920000
+simple_test codec passthrough "SSP2-Codec" s24le 2 s24le 25 24 2400000
+simple_test codec volume "SSP2-Codec" s16le 2 s16le 20 16 1920000
+simple_test codec volume "SSP2-Codec" s24le 2 s24le 25 24 2400000
+simple_test codec volume "SSP2-Codec" s16le 2 s24le 25 24 2400000
+
+simple_test baytrail passthrough "Baytrail Audio" s16le 2 s16le 20 16 1920000
+simple_test baytrail passthrough "Baytrail Audio" s24le 2 s24le 25 24 2400000
+simple_test baytrail volume "Baytrail Audio" s16le 2 s16le 20 16 1920000
+simple_test baytrail volume "Baytrail Audio" s24le 2 s24le 25 24 2400000
+simple_test baytrail volume "Baytrail Audio" s16le 2 s24le 25 24 2400000
+
-- 
2.14.1



More information about the Sound-open-firmware mailing list