mailman.alsa-project.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

Sound-open-firmware

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
sound-open-firmware@alsa-project.org

  • 1572 discussions
[Sound-open-firmware] [PATCH 1/3] dw-dma: add src_msize and dest_msize to dma_sg_element setting
by Keyon Jie 18 Dec '17

18 Dec '17
We need configure different msize for different dma copy, so here introduce it to dma_sg_element struct. Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- src/include/reef/dma.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/include/reef/dma.h b/src/include/reef/dma.h index 697e2c6..fea1cfa 100644 --- a/src/include/reef/dma.h +++ b/src/include/reef/dma.h @@ -70,6 +70,8 @@ struct dma_sg_elem { struct dma_sg_config { uint32_t src_width; uint32_t dest_width; + uint32_t src_msize; + uint32_t dest_msize; uint32_t direction; uint32_t src_dev; uint32_t dest_dev; -- 2.11.0
2 4
0 0
[Sound-open-firmware] [PATCH] dai: set dai dma msize according to slot number
by Keyon Jie 16 Dec '17

16 Dec '17
We should set src_msize and dest_msize for dma peripheral dev copy, for dai/ssp, they should be set to valid slot number, otherwise, the dma may copy in wrong burst size and data will run with wrong speed. Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- src/audio/dai.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/audio/dai.c b/src/audio/dai.c index c50a274..e04943b 100644 --- a/src/audio/dai.c +++ b/src/audio/dai.c @@ -599,8 +599,21 @@ static int dai_position(struct comp_dev *dev, struct sof_ipc_stream_posn *posn) return 0; } +static uint32_t msize[] = {1, 2, 4, 8}; static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) { + struct dai_data *dd = comp_get_drvdata(dev); + int i; + + /* set dma msize according to slot number */ + for (i = 0; i < ARRAY_SIZE(msize); i++) { + if (msize[i] == config->num_slots) { + dd->config.src_msize = i; + dd->config.dest_msize = i; + break; + } + } + /* calc frame bytes */ switch (config->sample_valid_bits) { case 16: -- 2.11.0
3 2
0 0
[Sound-open-firmware] [PATCH] dw-dma: set msize according to different transfer type
by Keyon Jie 15 Dec '17

15 Dec '17
For memory to memory copy, we don't require user to set msize, and set them to default 3, that is 2^3=8 items for each burst transaction. For copy have peripheral device source/destination, we use the user configured src_msize and dest_msize, which usually be constrained by device hardware/fifos. Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- src/drivers/dw-dma.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/drivers/dw-dma.c b/src/drivers/dw-dma.c index a28281a..958a659 100644 --- a/src/drivers/dw-dma.c +++ b/src/drivers/dw-dma.c @@ -518,8 +518,6 @@ static int dw_dma_set_config(struct dma *dma, int channel, goto out; } - lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(3); /* config the src msize length 2^2 */ - lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(3); /* config the dest msize length 2^2 */ lli_desc->ctrl_lo |= DW_CTLL_INT_EN; /* enable interrupt */ /* config the SINC and DINC field of CTL_LOn, SRC/DST_PER filed of CFGn */ @@ -530,6 +528,8 @@ static int dw_dma_set_config(struct dma *dma, int channel, lli_desc->sar = (uint32_t)sg_elem->src | PLATFORM_HOST_DMA_MASK; lli_desc->dar = (uint32_t)sg_elem->dest; + lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(3); /* 2^3 items */ + lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(3); /* 2^3 items */ break; case DMA_DIR_HMEM_TO_LMEM: lli_desc->ctrl_lo |= DW_CTLL_FC_M2M; @@ -537,12 +537,16 @@ static int dw_dma_set_config(struct dma *dma, int channel, lli_desc->dar = (uint32_t)sg_elem->dest | PLATFORM_HOST_DMA_MASK; lli_desc->sar = (uint32_t)sg_elem->src; + lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(3); /* 2^3 items */ + lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(3); /* 2^3 items */ break; case DMA_DIR_MEM_TO_MEM: lli_desc->ctrl_lo |= DW_CTLL_FC_M2M; lli_desc->ctrl_lo |= DW_CTLL_SRC_INC | DW_CTLL_DST_INC; lli_desc->sar = (uint32_t)sg_elem->src | PLATFORM_HOST_DMA_MASK; lli_desc->dar = (uint32_t)sg_elem->dest | PLATFORM_HOST_DMA_MASK; + lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(3); /* 2^3 items */ + lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(3); /* 2^3 items */ break; case DMA_DIR_MEM_TO_DEV: lli_desc->ctrl_lo |= DW_CTLL_FC_M2P; @@ -551,6 +555,8 @@ static int dw_dma_set_config(struct dma *dma, int channel, DW_CFGH_DST_PER(config->dest_dev); lli_desc->sar = (uint32_t)sg_elem->src | PLATFORM_HOST_DMA_MASK; lli_desc->dar = (uint32_t)sg_elem->dest; + lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(config->src_msize); + lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(config->dest_msize); break; case DMA_DIR_DEV_TO_MEM: lli_desc->ctrl_lo |= DW_CTLL_FC_P2M; @@ -559,6 +565,8 @@ static int dw_dma_set_config(struct dma *dma, int channel, DW_CFGH_SRC_PER(config->src_dev); lli_desc->sar = (uint32_t)sg_elem->src; lli_desc->dar = (uint32_t)sg_elem->dest | PLATFORM_HOST_DMA_MASK; + lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(config->src_msize); + lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(config->dest_msize); break; case DMA_DIR_DEV_TO_DEV: lli_desc->ctrl_lo |= DW_CTLL_FC_P2P; @@ -568,6 +576,8 @@ static int dw_dma_set_config(struct dma *dma, int channel, DW_CFGH_DST_PER(config->dest_dev); lli_desc->sar = (uint32_t)sg_elem->src; lli_desc->dar = (uint32_t)sg_elem->dest; + lli_desc->ctrl_lo |= DW_CTLL_SRC_MSIZE(config->src_msize); + lli_desc->ctrl_lo |= DW_CTLL_DST_MSIZE(config->dest_msize); break; default: trace_dma_error("eD4"); -- 2.11.0
1 0
0 0
[Sound-open-firmware] [PATCH] dw-dma: add src_msize and dest_msize to dma_sg_element setting
by Keyon Jie 15 Dec '17

15 Dec '17
We need configure different msize for different dma copy, so here introduce it to dma_sg_element struct. Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- src/include/reef/dma.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/include/reef/dma.h b/src/include/reef/dma.h index 697e2c6..fea1cfa 100644 --- a/src/include/reef/dma.h +++ b/src/include/reef/dma.h @@ -70,6 +70,8 @@ struct dma_sg_elem { struct dma_sg_config { uint32_t src_width; uint32_t dest_width; + uint32_t src_msize; + uint32_t dest_msize; uint32_t direction; uint32_t src_dev; uint32_t dest_dev; -- 2.11.0
1 0
0 0
[Sound-open-firmware] [PATCH] topology: AIF directions are codec centric wrt PCMs
by Liam Girdwood 15 Dec '17

15 Dec '17
Commit 0a1a9bbc492e4eb22173ed57c7f5499c8f106289 discovered a bug in the direction of AIF widgets in relation to PCMs. AIF widgets are codec centric in ASoC so topology must align. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- topology/m4/local.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/topology/m4/local.m4 b/topology/m4/local.m4 index 08425ed..c0ffef2 100644 --- a/topology/m4/local.m4 +++ b/topology/m4/local.m4 @@ -96,7 +96,7 @@ define(`W_PCM_PLAYBACK', `}' `SectionWidget."'N_PCMP`" {' ` index "'PIPELINE_ID`"' -` type "aif_out"' +` type "aif_in"' ` no_pm "true"' ` stream_name "'$1`"' ` data [' @@ -131,7 +131,7 @@ define(`W_PCM_CAPTURE', `}' `SectionWidget."'N_PCMC`" {' ` index "'PIPELINE_ID`"' -` type "aif_in"' +` type "aif_out"' ` no_pm "true"' ` stream_name "'$1`"' ` data [' -- 2.14.1
2 3
0 0
[Sound-open-firmware] [PATCH] locks: Add try_lock API to attempt lock access without spinning
by Liam Girdwood 13 Dec '17

13 Dec '17
Add a try version to acquire a spin lock. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- src/arch/xtensa/include/arch/spinlock.h | 18 ++++++++++++++++++ src/include/reef/lock.h | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/src/arch/xtensa/include/arch/spinlock.h b/src/arch/xtensa/include/arch/spinlock.h index acb1b8e..13bf4c1 100644 --- a/src/arch/xtensa/include/arch/spinlock.h +++ b/src/arch/xtensa/include/arch/spinlock.h @@ -62,6 +62,24 @@ static inline void arch_spin_lock(spinlock_t *lock) : "memory"); } +static inline int arch_try_lock(spinlock_t *lock) +{ + uint32_t result; + + __asm__ __volatile__( + " movi %0, 0\n" + " wsr %0, scompare1\n" + " movi %0, 1\n" + " s32c1i %0, %1, 0\n" + : "=&a" (result) + : "a" (&lock->lock) + : "memory"); + + if (result) + return 0; /* lock failed */ + return 1; /* lock acquired */ +} + static inline void arch_spin_unlock(spinlock_t *lock) { uint32_t result; diff --git a/src/include/reef/lock.h b/src/include/reef/lock.h index eef2a3a..deb0fb7 100644 --- a/src/include/reef/lock.h +++ b/src/include/reef/lock.h @@ -149,6 +149,10 @@ extern uint32_t lock_dbg_user[DBG_LOCK_USERS]; spin_lock_dbg(); \ arch_spin_lock(lock); +#define spin_try_lock(lock) \ + spin_lock_dbg(); \ + arch_try_lock(lock); + #define spin_unlock(lock) \ arch_spin_unlock(lock); \ spin_unlock_dbg(); -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH] host: verify number of period > 0
by Liam Girdwood 13 Dec '17

13 Dec '17
Check number of periods is > 0 other wise return an error and emit some trace. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- src/audio/host.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/audio/host.c b/src/audio/host.c index b731dd6..8f09952 100644 --- a/src/audio/host.c +++ b/src/audio/host.c @@ -412,6 +412,12 @@ static int host_params(struct comp_dev *dev) hd->period_count = cconfig->periods_source; } + /* validate period count */ + if (hd->period_count == 0) { + trace_host_error("eS0"); + return -EINVAL; + } + /* calculate period size based on config */ hd->period_bytes = dev->frames * comp_frame_bytes(dev); if (hd->period_bytes == 0) { -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH v2] Increase timeout of DMA trace work re-scheduling if local buffer is half full.
by yan.wang@linux.intel.com 13 Dec '17

13 Dec '17
From: Yan Wang <yan.wang(a)linux.intel.com> The timeout of work_reschedule_default() cannot be too short to finish work queue rescheduling. Otherwise, the work will be rescheduled wrong into the next timer loop. Also change macro name of DMA trace time interval for reading easily. Signed-off-by: Yan Wang <yan.wang(a)linux.intel.com> --- src/lib/dma-trace.c | 9 +++++---- src/platform/baytrail/include/platform/platform.h | 8 +++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c index 2a5b1a6..a147219 100644 --- a/src/lib/dma-trace.c +++ b/src/lib/dma-trace.c @@ -54,7 +54,7 @@ static uint64_t trace_work(void *data, uint64_t delay) /* any data to copy ? */ if (avail == 0) - return DMA_TRACE_US; + return DMA_TRACE_PERIOD; /* DMA trace copying is working */ d->copy_in_progress = 1; @@ -112,7 +112,7 @@ out: spin_unlock_irq(&d->lock, flags); /* reschedule the trace copying work */ - return DMA_TRACE_US; + return DMA_TRACE_PERIOD; } int dma_trace_init(struct dma_trace_data *d) @@ -182,7 +182,7 @@ int dma_trace_enable(struct dma_trace_data *d) } d->enabled = 1; - work_schedule_default(&d->dmat_work, DMA_TRACE_US); + work_schedule_default(&d->dmat_work, DMA_TRACE_PERIOD); return 0; } @@ -247,7 +247,8 @@ void dtrace_event(const char *e, uint32_t length) /* schedule copy now if buffer > 50% full */ if (trace_data->enabled && buffer->avail >= (DMA_TRACE_LOCAL_SIZE / 2)) - work_reschedule_default(&trace_data->dmat_work, 100); + work_reschedule_default(&trace_data->dmat_work, + DMA_TRACE_RESCHEDULE_TIME); } void dtrace_event_atomic(const char *e, uint32_t length) diff --git a/src/platform/baytrail/include/platform/platform.h b/src/platform/baytrail/include/platform/platform.h index 4d63f7b..72174f3 100644 --- a/src/platform/baytrail/include/platform/platform.h +++ b/src/platform/baytrail/include/platform/platform.h @@ -80,7 +80,13 @@ struct reef; #define DMA_TRACE_LOCAL_SIZE HOST_PAGE_SIZE /* the interval of DMA trace copying */ -#define DMA_TRACE_US 500000 +#define DMA_TRACE_PERIOD 500000 + +/* + * the interval of reschedule DMA trace copying in special case like half + * fullness of local DMA trace buffer + */ +#define DMA_TRACE_RESCHEDULE_TIME 5000 /* DMAC used for trace DMA */ #define PLATFORM_TRACE_DMAC DMA_ID_DMAC0 -- 2.7.4
2 1
0 0
[Sound-open-firmware] [PATCH] topology: test: Add simple component test generator.
by Liam Girdwood 13 Dec '17

13 Dec '17
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(a)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
1 0
0 0
[Sound-open-firmware] [PATCH] topology: fix 2 typos for capture pipeline
by Keyon Jie 13 Dec '17

13 Dec '17
1. Widget N_PCMC type should be "aif_in", not "aif_out". 2. Widget W_DAI_IN data should be "N_DAI_IN", not "N_DAI_OUT". Signed-off-by: Xiuli Pan <xiuli.pan(a)intel.com> Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- topology/m4/local.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/topology/m4/local.m4 b/topology/m4/local.m4 index da20e1c..08425ed 100644 --- a/topology/m4/local.m4 +++ b/topology/m4/local.m4 @@ -131,7 +131,7 @@ define(`W_PCM_CAPTURE', `}' `SectionWidget."'N_PCMC`" {' ` index "'PIPELINE_ID`"' -` type "aif_out"' +` type "aif_in"' ` no_pm "true"' ` stream_name "'$1`"' ` data [' @@ -358,7 +358,7 @@ define(`W_DAI_IN', ` "'N_DAI_IN($2)`_data_w"' ` "'N_DAI_IN($2)`_data_w_comp"' ` "'N_DAI_IN($2)`_data_str"' -` "'N_DAI_OUT($2)`_data_comp_str"' +` "'N_DAI_IN($2)`_data_comp_str"' ` "'$7`"' ` ]' `}') -- 2.11.0
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • ...
  • 158
  • Older →

HyperKitty Powered by HyperKitty version 1.3.8.