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 -----
  • 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

  • 4 participants
  • 1568 discussions
[Sound-open-firmware] [PATCH] topology: byt-rt5651: Fix BE DAI link name.
by Liam Girdwood 06 Mar '18

06 Mar '18
Should be SSP2-Codec. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- topology/reef-byt-rt5651.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/topology/reef-byt-rt5651.m4 b/topology/reef-byt-rt5651.m4 index 96147d3..ec114d7 100644 --- a/topology/reef-byt-rt5651.m4 +++ b/topology/reef-byt-rt5651.m4 @@ -93,7 +93,7 @@ PCM_DUPLEX_ADD(Low Latency, 3, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2) # # BE configurations - overrides config in ACPI if present # -DAI_CONFIG(SSP, 2, Baytrail Audio, I2S, 24, +DAI_CONFIG(SSP, 2, SSP2-Codec, I2S, 24, DAI_CLOCK(mclk, 19200000, slave), DAI_CLOCK(bclk, 2400000, slave), DAI_CLOCK(fsync, 48000, slave), -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH V4 1/2] ASoc: SOF: Add memory window for all platform
by Xiuli Pan 06 Mar '18

06 Mar '18
From: Pan Xiuli <xiuli.pan(a)linux.intel.com> Add memory window handler for BYT, HSW and BDW. Signed-off-by: Pan Xiuli <xiuli.pan(a)linux.intel.com> --- v1: rebase and some typo fix v2: rebase and fix window setting v3: rebase v4: rebase and add err handler for get_window function Test with: Mininow max rt5651 SOF master: e92ef97834489f52c0f20445d401a8c6e0aaed62 SOF-Tool master: 5b8dfd13019cfd29999503b56c902f56209000ed https://github.com/plbossart/sound/tree/topic/sof-v4.14: d919ea06b7f79c95ab4eb68baf05e9faf3a894c1 --- sound/soc/sof/hw-apl.c | 23 +++++++++--- sound/soc/sof/hw-bdw.c | 97 +++++++++++++++++++++++++++++++++++++++++++++---- sound/soc/sof/hw-byt.c | 98 +++++++++++++++++++++++++++++++++++++++++++++----- sound/soc/sof/hw-hsw.c | 97 +++++++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 289 insertions(+), 26 deletions(-) diff --git a/sound/soc/sof/hw-apl.c b/sound/soc/sof/hw-apl.c index bfbdd915..1823153 100644 --- a/sound/soc/sof/hw-apl.c +++ b/sound/soc/sof/hw-apl.c @@ -1089,12 +1089,18 @@ static int apl_prepare(struct snd_sof_dev *sdev, unsigned int format, static void apl_get_windows(struct snd_sof_dev *sdev) { struct sof_ipc_window_elem *elem; + u32 outbox_offset = 0; + u32 stream_offset = 0; + u32 inbox_offset = 0; + u32 outbox_size = 0; + u32 stream_size = 0; + u32 inbox_size = 0; int i; - u32 inbox_offset = 0, outbox_offset = 0; - u32 inbox_size = 0, outbox_size = 0; - if (!sdev->info_window) + if (!sdev->info_window) { + dev_err(sdev->dev, "error: have no window info\n"); return; + } for (i = 0; i < sdev->info_window->num_windows; i++) { elem = &sdev->info_window->window[i]; @@ -1135,6 +1141,9 @@ static void apl_get_windows(struct snd_sof_dev *sdev) elem->size, "debug"); break; case SOF_IPC_REGION_STREAM: + stream_offset = + elem->offset + SRAM_WINDOW_OFFSET(elem->id); + stream_size = elem->size; snd_sof_debugfs_create_item(sdev, sdev->bar[APL_DSP_BAR] + elem->offset + @@ -1151,10 +1160,16 @@ static void apl_get_windows(struct snd_sof_dev *sdev) elem->size, "regs"); break; default: - break; + dev_err(sdev->dev, "error: get illegal window info\n"); + return; } } + if (outbox_size == 0 || inbox_size == 0) { + dev_err(sdev->dev, "error: get illegal mailbox window\n"); + return; + } + snd_sof_dsp_mailbox_init(sdev, inbox_offset, inbox_size, outbox_offset, outbox_size); diff --git a/sound/soc/sof/hw-bdw.c b/sound/soc/sof/hw-bdw.c index b1c9508..1fe2807 100644 --- a/sound/soc/sof/hw-bdw.c +++ b/sound/soc/sof/hw-bdw.c @@ -66,7 +66,6 @@ static const struct snd_sof_debugfs_map bdw_debugfs[] = { {"iram", BDW_DSP_BAR, IRAM_OFFSET, BDW_IRAM_SIZE}, {"dram", BDW_DSP_BAR, DRAM_OFFSET, BDW_DRAM_SIZE}, {"shim", BDW_DSP_BAR, SHIM_OFFSET, SHIM_SIZE}, - {"mbox", BDW_DSP_BAR, MBOX_OFFSET, MBOX_SIZE}, }; /* @@ -389,6 +388,88 @@ static irqreturn_t bdw_irq_thread(int irq, void *context) /* * IPC Firmware ready. */ +static void bdw_get_windows(struct snd_sof_dev *sdev) +{ + struct sof_ipc_window_elem *elem; + u32 outbox_offset = 0; + u32 stream_offset = 0; + u32 inbox_offset = 0; + u32 outbox_size = 0; + u32 stream_size = 0; + u32 inbox_size = 0; + int i; + + if (!sdev->info_window) { + dev_err(sdev->dev, "error: have no window info\n"); + return; + } + + for (i = 0; i < sdev->info_window->num_windows; i++) { + elem = &sdev->info_window->window[i]; + + switch (elem->type) { + case SOF_IPC_REGION_UPBOX: + inbox_offset = elem->offset + MBOX_OFFSET; + inbox_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[BDW_DSP_BAR] + + inbox_offset, + elem->size, "inbox"); + break; + case SOF_IPC_REGION_DOWNBOX: + outbox_offset = elem->offset + MBOX_OFFSET; + outbox_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[BDW_DSP_BAR] + + outbox_offset, + elem->size, "outbox"); + break; + case SOF_IPC_REGION_TRACE: + snd_sof_debugfs_create_item(sdev, + sdev->bar[BDW_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "etrace"); + break; + case SOF_IPC_REGION_DEBUG: + snd_sof_debugfs_create_item(sdev, + sdev->bar[BDW_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "debug"); + break; + case SOF_IPC_REGION_STREAM: + stream_offset = elem->offset + MBOX_OFFSET; + stream_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[BDW_DSP_BAR] + + stream_offset, + elem->size, "stream"); + break; + case SOF_IPC_REGION_REGS: + snd_sof_debugfs_create_item(sdev, + sdev->bar[BDW_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "regs"); + break; + default: + dev_err(sdev->dev, "error: get illegal window info\n"); + return; + } + } + + if (outbox_size == 0 || inbox_size == 0) { + dev_err(sdev->dev, "error: get illegal mailbox window\n"); + return; + } + + snd_sof_dsp_mailbox_init(sdev, inbox_offset, inbox_size, + outbox_offset, outbox_size); + + dev_dbg(sdev->dev, " mailbox upstream 0x%x - size 0x%x\n", + inbox_offset, inbox_size); + dev_dbg(sdev->dev, " mailbox downstream 0x%x - size 0x%x\n", + outbox_offset, outbox_size); +} + static int bdw_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) { struct sof_ipc_fw_ready *fw_ready = &sdev->fw_ready; @@ -409,14 +490,16 @@ static int bdw_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) fw_ready->hostbox_offset, fw_ready->hostbox_size); - dev_dbg(sdev->dev, " mailbox DSP initiated 0x%x - size 0x%x\n", - fw_ready->dspbox_offset, fw_ready->dspbox_size); - dev_dbg(sdev->dev, " mailbox Host initiated 0x%x - size 0x%x\n", - fw_ready->hostbox_offset, fw_ready->hostbox_size); - - dev_info(sdev->dev, " Firmware info: version %d:%d-%s build %d on %s:%s\n", + dev_info(sdev->dev, + " Firmware info: version %d:%d-%s build %d on %s:%s\n", v->major, v->minor, v->tag, v->build, v->date, v->time); + /* now check for extended data */ + snd_sof_fw_parse_ext_data(sdev, MBOX_OFFSET + + sizeof(struct sof_ipc_fw_ready)); + + bdw_get_windows(sdev); + return 0; } diff --git a/sound/soc/sof/hw-byt.c b/sound/soc/sof/hw-byt.c index 367fab9..8d27e18 100644 --- a/sound/soc/sof/hw-byt.c +++ b/sound/soc/sof/hw-byt.c @@ -76,7 +76,6 @@ static const struct snd_sof_debugfs_map byt_debugfs[] = { {"iram", BYT_DSP_BAR, IRAM_OFFSET, IRAM_SIZE}, {"dram", BYT_DSP_BAR, DRAM_OFFSET, DRAM_SIZE}, {"shim", BYT_DSP_BAR, SHIM_OFFSET, SHIM_SIZE}, - {"mbox", BYT_DSP_BAR, MBOX_OFFSET, MBOX_SIZE}, }; static const struct snd_sof_debugfs_map cht_debugfs[] = { @@ -92,7 +91,6 @@ static const struct snd_sof_debugfs_map cht_debugfs[] = { {"iram", BYT_DSP_BAR, IRAM_OFFSET, IRAM_SIZE}, {"dram", BYT_DSP_BAR, DRAM_OFFSET, DRAM_SIZE}, {"shim", BYT_DSP_BAR, SHIM_OFFSET, SHIM_SIZE}, - {"mbox", BYT_DSP_BAR, MBOX_OFFSET, MBOX_SIZE}, }; /* @@ -160,6 +158,88 @@ static void byt_block_read(struct snd_sof_dev *sdev, u32 offset, void *dest, /* * IPC Firmware ready. */ +static void byt_get_windows(struct snd_sof_dev *sdev) +{ + struct sof_ipc_window_elem *elem; + u32 outbox_offset = 0; + u32 stream_offset = 0; + u32 inbox_offset = 0; + u32 outbox_size = 0; + u32 stream_size = 0; + u32 inbox_size = 0; + int i; + + if (!sdev->info_window) { + dev_err(sdev->dev, "error: have no window info\n"); + return; + } + + for (i = 0; i < sdev->info_window->num_windows; i++) { + elem = &sdev->info_window->window[i]; + + switch (elem->type) { + case SOF_IPC_REGION_UPBOX: + inbox_offset = elem->offset + MBOX_OFFSET; + inbox_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[BYT_DSP_BAR] + + inbox_offset, + elem->size, "inbox"); + break; + case SOF_IPC_REGION_DOWNBOX: + outbox_offset = elem->offset + MBOX_OFFSET; + outbox_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[BYT_DSP_BAR] + + outbox_offset, + elem->size, "outbox"); + break; + case SOF_IPC_REGION_TRACE: + snd_sof_debugfs_create_item(sdev, + sdev->bar[BYT_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "etrace"); + break; + case SOF_IPC_REGION_DEBUG: + snd_sof_debugfs_create_item(sdev, + sdev->bar[BYT_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "debug"); + break; + case SOF_IPC_REGION_STREAM: + stream_offset = elem->offset + MBOX_OFFSET; + stream_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[BYT_DSP_BAR] + + stream_offset, + elem->size, "stream"); + break; + case SOF_IPC_REGION_REGS: + snd_sof_debugfs_create_item(sdev, + sdev->bar[BYT_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "regs"); + break; + default: + dev_err(sdev->dev, "error: get illegal window info\n"); + return; + } + } + + if (outbox_size == 0 || inbox_size == 0) { + dev_err(sdev->dev, "error: get illegal mailbox window\n"); + return; + } + + snd_sof_dsp_mailbox_init(sdev, inbox_offset, inbox_size, + outbox_offset, outbox_size); + + dev_dbg(sdev->dev, " mailbox upstream 0x%x - size 0x%x\n", + inbox_offset, inbox_size); + dev_dbg(sdev->dev, " mailbox downstream 0x%x - size 0x%x\n", + outbox_offset, outbox_size); +} + static int byt_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) { struct sof_ipc_fw_ready *fw_ready = &sdev->fw_ready; @@ -180,14 +260,16 @@ static int byt_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) fw_ready->hostbox_offset, fw_ready->hostbox_size); - dev_dbg(sdev->dev, " mailbox DSP initiated 0x%x - size 0x%x\n", - fw_ready->dspbox_offset, fw_ready->dspbox_size); - dev_dbg(sdev->dev, " mailbox Host initiated 0x%x - size 0x%x\n", - fw_ready->hostbox_offset, fw_ready->hostbox_size); - - dev_info(sdev->dev, " Firmware info: version %d:%d-%s build %d on %s:%s\n", + dev_info(sdev->dev, + " Firmware info: version %d:%d-%s build %d on %s:%s\n", v->major, v->minor, v->tag, v->build, v->date, v->time); + /* now check for extended data */ + snd_sof_fw_parse_ext_data(sdev, MBOX_OFFSET + + sizeof(struct sof_ipc_fw_ready)); + + byt_get_windows(sdev); + return 0; } diff --git a/sound/soc/sof/hw-hsw.c b/sound/soc/sof/hw-hsw.c index 495009a..f636ce4 100644 --- a/sound/soc/sof/hw-hsw.c +++ b/sound/soc/sof/hw-hsw.c @@ -66,7 +66,6 @@ static const struct snd_sof_debugfs_map hsw_debugfs[] = { {"iram", HSW_DSP_BAR, IRAM_OFFSET, HSW_IRAM_SIZE}, {"dram", HSW_DSP_BAR, DRAM_OFFSET, HSW_DRAM_SIZE}, {"shim", HSW_DSP_BAR, SHIM_OFFSET, SHIM_SIZE}, - {"mbox", HSW_DSP_BAR, MBOX_OFFSET, MBOX_SIZE}, }; /* @@ -389,6 +388,88 @@ static irqreturn_t hsw_irq_thread(int irq, void *context) /* * IPC Firmware ready. */ +static void hsw_get_windows(struct snd_sof_dev *sdev) +{ + struct sof_ipc_window_elem *elem; + u32 outbox_offset = 0; + u32 stream_offset = 0; + u32 inbox_offset = 0; + u32 outbox_size = 0; + u32 stream_size = 0; + u32 inbox_size = 0; + int i; + + if (!sdev->info_window) { + dev_err(sdev->dev, "error: have no window info\n"); + return; + } + + for (i = 0; i < sdev->info_window->num_windows; i++) { + elem = &sdev->info_window->window[i]; + + switch (elem->type) { + case SOF_IPC_REGION_UPBOX: + inbox_offset = elem->offset + MBOX_OFFSET; + inbox_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[HSW_DSP_BAR] + + inbox_offset, + elem->size, "inbox"); + break; + case SOF_IPC_REGION_DOWNBOX: + outbox_offset = elem->offset + MBOX_OFFSET; + outbox_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[HSW_DSP_BAR] + + outbox_offset, + elem->size, "outbox"); + break; + case SOF_IPC_REGION_TRACE: + snd_sof_debugfs_create_item(sdev, + sdev->bar[HSW_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "etrace"); + break; + case SOF_IPC_REGION_DEBUG: + snd_sof_debugfs_create_item(sdev, + sdev->bar[HSW_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "debug"); + break; + case SOF_IPC_REGION_STREAM: + stream_offset = elem->offset + MBOX_OFFSET; + stream_size = elem->size; + snd_sof_debugfs_create_item(sdev, + sdev->bar[HSW_DSP_BAR] + + stream_offset, + elem->size, "stream"); + break; + case SOF_IPC_REGION_REGS: + snd_sof_debugfs_create_item(sdev, + sdev->bar[HSW_DSP_BAR] + + elem->offset + MBOX_OFFSET, + elem->size, "regs"); + break; + default: + dev_err(sdev->dev, "error: get illegal window info\n"); + return; + } + } + + if (outbox_size == 0 || inbox_size == 0) { + dev_err(sdev->dev, "error: get illegal mailbox window\n"); + return; + } + + snd_sof_dsp_mailbox_init(sdev, inbox_offset, inbox_size, + outbox_offset, outbox_size); + + dev_dbg(sdev->dev, " mailbox upstream 0x%x - size 0x%x\n", + inbox_offset, inbox_size); + dev_dbg(sdev->dev, " mailbox downstream 0x%x - size 0x%x\n", + outbox_offset, outbox_size); +} + static int hsw_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) { struct sof_ipc_fw_ready *fw_ready = &sdev->fw_ready; @@ -409,14 +490,16 @@ static int hsw_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) fw_ready->hostbox_offset, fw_ready->hostbox_size); - dev_dbg(sdev->dev, " mailbox DSP initiated 0x%x - size 0x%x\n", - fw_ready->dspbox_offset, fw_ready->dspbox_size); - dev_dbg(sdev->dev, " mailbox Host initiated 0x%x - size 0x%x\n", - fw_ready->hostbox_offset, fw_ready->hostbox_size); - - dev_info(sdev->dev, " Firmware info: version %d:%d-%s build %d on %s:%s\n", + dev_info(sdev->dev, + " Firmware info: version %d:%d-%s build %d on %s:%s\n", v->major, v->minor, v->tag, v->build, v->date, v->time); + /* now check for extended data */ + snd_sof_fw_parse_ext_data(sdev, MBOX_OFFSET + + sizeof(struct sof_ipc_fw_ready)); + + hsw_get_windows(sdev); + return 0; } -- 2.7.4
2 2
0 0
[Sound-open-firmware] [PATCH] dma-trace: fix DMA trace buffer must be DMA-able memory
by Liam Girdwood 06 Mar '18

06 Mar '18
Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- src/lib/dma-trace.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c index 211f34f..b08e7fb 100644 --- a/src/lib/dma-trace.c +++ b/src/lib/dma-trace.c @@ -132,8 +132,9 @@ int dma_trace_init_early(struct reef *reef) buffer = &trace_data->dmatb; /* allocate new buffer */ - buffer->addr = rballoc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, - DMA_TRACE_LOCAL_SIZE); + buffer->addr = rballoc(RZONE_RUNTIME, + SOF_MEM_CAPS_RAM | SOF_MEM_CAPS_DMA, + DMA_TRACE_LOCAL_SIZE); if (buffer->addr == NULL) { trace_buffer_error("ebm"); return -ENOMEM; -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH] apl: probe all SSP ports in platform init
by Liam Girdwood 06 Mar '18

06 Mar '18
Fix. We must probe all our SSP ports in platform init. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- src/platform/apollolake/dai.c | 3 ++- src/platform/apollolake/include/platform/platform.h | 3 +++ src/platform/apollolake/platform.c | 14 +++++++++----- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/platform/apollolake/dai.c b/src/platform/apollolake/dai.c index 6149d26..7c2aaa9 100644 --- a/src/platform/apollolake/dai.c +++ b/src/platform/apollolake/dai.c @@ -34,6 +34,7 @@ #include <reef/ssp.h> #include <reef/stream.h> #include <reef/audio/component.h> +#include <platform/platform.h> #include <platform/memory.h> #include <platform/interrupt.h> #include <platform/dma.h> @@ -41,7 +42,7 @@ #include <string.h> #include <config.h> -static struct dai ssp[6] = { +static struct dai ssp[PLATFORM_NUM_SSP] = { { .type = SOF_DAI_INTEL_SSP, .index = 0, diff --git a/src/platform/apollolake/include/platform/platform.h b/src/platform/apollolake/include/platform/platform.h index 995efca..8a84308 100644 --- a/src/platform/apollolake/include/platform/platform.h +++ b/src/platform/apollolake/include/platform/platform.h @@ -109,6 +109,9 @@ struct reef; /* platform has low power memory type */ #define PLATFORM_MEM_HAS_LP_RAM +/* number of SSP ports in platform */ +#define PLATFORM_NUM_SSP 6 + /* Platform defined panic code */ #define platform_panic(__x) \ sw_reg_write(SRAM_REG_FW_STATUS, (0xdead000 | __x) & 0x3fffffff) diff --git a/src/platform/apollolake/platform.c b/src/platform/apollolake/platform.c index ae8a854..9574970 100644 --- a/src/platform/apollolake/platform.c +++ b/src/platform/apollolake/platform.c @@ -178,7 +178,8 @@ static void platform_memory_windows_init(void) int platform_init(struct reef *reef) { struct dma *dmac; - struct dai *ssp2; + struct dai *ssp; + int i; platform_interrupt_init(); @@ -254,9 +255,12 @@ int platform_init(struct reef *reef) /* init SSP ports */ trace_point(TRACE_BOOT_PLATFORM_SSP); - ssp2 = dai_get(SOF_DAI_INTEL_SSP, 4); - if (ssp2 == NULL) - return -ENODEV; - dai_probe(ssp2); + for (i = 0; i < PLATFORM_NUM_SSP; i++) { + ssp = dai_get(SOF_DAI_INTEL_SSP, i); + if (ssp == NULL) + return -ENODEV; + dai_probe(ssp); + } + return 0; } -- 2.14.1
2 1
0 0
[Sound-open-firmware] [PATCH] host: host-gw: only check first_copy for playback
by Keyon Jie 06 Mar '18

06 Mar '18
For capture, we don't need produce empty bytes, here add check to fix capture can't start issue. Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- src/audio/host.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/audio/host.c b/src/audio/host.c index a76e340..7a7c153 100644 --- a/src/audio/host.c +++ b/src/audio/host.c @@ -851,7 +851,8 @@ static int host_copy(struct comp_dev *dev) return 0; #if defined CONFIG_DMA_GW - if (hd->first_copy) { + if (dev->params.direction == SOF_IPC_STREAM_PLAYBACK && + hd->first_copy) { /* * host dma will not start copy at this point yet, just produce * empty period bytes for it. -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH] alloc: rmalloc must check other zones/pools for capabilities
by Liam Girdwood 06 Mar '18

06 Mar '18
rmalloc should also check the buffer heap if no capable memory can be found in the runtime heap. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- src/lib/alloc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/alloc.c b/src/lib/alloc.c index 6221d26..27916e3 100644 --- a/src/lib/alloc.c +++ b/src/lib/alloc.c @@ -351,10 +351,17 @@ static void *rmalloc_runtime(uint32_t caps, size_t bytes) struct mm_heap *heap; int i; + /* check runtime heap for capabilities */ heap = get_runtime_heap_from_caps(caps); + if (heap) + goto find; + + /* next check buffer heap for capabilities */ + heap = get_buffer_heap_from_caps(caps); if (heap == NULL) goto error; +find: for (i = 0; i < heap->blocks; i++) { /* is block big enough */ -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH] rmbox: remove legacy code and use sof debugFS by default.
by Liam Girdwood 06 Mar '18

06 Mar '18
Dump error log by default with no args. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- rmbox/rmbox.c | 99 +++++++++++------------------------------------------------ 1 file changed, 18 insertions(+), 81 deletions(-) diff --git a/rmbox/rmbox.c b/rmbox/rmbox.c index 9403cc7..115be83 100644 --- a/rmbox/rmbox.c +++ b/rmbox/rmbox.c @@ -47,42 +47,6 @@ #define TRACE_CLASS_EQ_FIR (19 << 24) #define TRACE_CLASS_EQ_IIR (20 << 24) -#define MAILBOX_HOST_OFFSET 0x144000 - -#define MAILBOX_OUTBOX_OFFSET 0x0 -#define MAILBOX_OUTBOX_SIZE 0x400 -#define MAILBOX_OUTBOX_BASE \ - (MAILBOX_BASE + MAILBOX_OUTBOX_OFFSET) - -#define MAILBOX_INBOX_OFFSET MAILBOX_OUTBOX_SIZE -#define MAILBOX_INBOX_SIZE 0x400 -#define MAILBOX_INBOX_BASE \ - (MAILBOX_BASE + MAILBOX_INBOX_OFFSET) - -#define MAILBOX_EXCEPTION_OFFSET \ - (MAILBOX_INBOX_SIZE + MAILBOX_OUTBOX_SIZE) -#define MAILBOX_EXCEPTION_SIZE 0x100 -#define MAILBOX_EXCEPTION_BASE \ - (MAILBOX_BASE + MAILBOX_EXCEPTION_OFFSET) - -#define MAILBOX_DEBUG_OFFSET \ - (MAILBOX_EXCEPTION_SIZE + MAILBOX_EXCEPTION_OFFSET) -#define MAILBOX_DEBUG_SIZE 0x100 -#define MAILBOX_DEBUG_BASE \ - (MAILBOX_BASE + MAILBOX_DEBUG_OFFSET) - -#define MAILBOX_STREAM_OFFSET \ - (MAILBOX_DEBUG_SIZE + MAILBOX_DEBUG_OFFSET) -#define MAILBOX_STREAM_SIZE 0x200 -#define MAILBOX_STREAM_BASE \ - (MAILBOX_BASE + MAILBOX_STREAM_OFFSET) - -#define MAILBOX_TRACE_OFFSET \ - (MAILBOX_STREAM_SIZE + MAILBOX_STREAM_OFFSET) -#define MAILBOX_TRACE_SIZE 0x380 -#define MAILBOX_TRACE_BASE \ - (MAILBOX_BASE + MAILBOX_TRACE_OFFSET) - #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) @@ -218,8 +182,7 @@ static void show_trace(uint64_t val, uint64_t addr, uint64_t *timestamp, double } } -static int trace_read(const char *in_file, const char *out_file, double clk, - int offset) +static int trace_read(const char *in_file, const char *out_file, double clk) { int count, i; FILE *in_fd = NULL, *out_fd = NULL; @@ -250,11 +213,6 @@ trace: if (count != TRACE_BLOCK_SIZE) break; - if (addr < offset) { - addr += TRACE_BLOCK_SIZE; - continue; - } - val = *((uint64_t*)tmp); for (i = 0; i < TRACE_BLOCK_SIZE / 2; i++) { @@ -277,21 +235,10 @@ trace: return 0; } -static void show_debug(uint32_t val, uint32_t addr) +static void show_data(uint32_t val, uint32_t addr) { - printf("debug: 0x%x (%2.2d) = \t0x%8.8x \t(%8.8d) \t|%c%c%c%c|\n", - (unsigned int)addr - MAILBOX_DEBUG_OFFSET, - ((unsigned int)addr - MAILBOX_DEBUG_OFFSET) / 4, - val, val, - get_char(val, 3), get_char(val, 2), - get_char(val, 1), get_char(val, 0)); -} - -static void show_exception(uint32_t val, uint32_t addr) -{ - printf("exp: 0x%x (%2.2d) = \t0x%8.8x \t(%8.8d) \t|%c%c%c%c|\n", - (unsigned int)addr - MAILBOX_EXCEPTION_OFFSET, - ((unsigned int)addr - MAILBOX_EXCEPTION_OFFSET) / 4, + printf("data: 0x%x = \t0x%8.8x \t(%8.8d) \t|%c%c%c%c|\n", + (unsigned int)addr, val, val, get_char(val, 3), get_char(val, 2), get_char(val, 1), get_char(val, 0)); @@ -299,7 +246,9 @@ static void show_exception(uint32_t val, uint32_t addr) static const char *debugfs[] = { - "dmac0","dmac1", "ssp0", "ssp1", "ssp2", "iram", "dram", "shim", "mbox" + "dmac0", "dmac1", "ssp0", "ssp1", + "ssp2", "iram", "dram", "shim", + "mbox", "etrace", }; static int snapshot(const char *name) @@ -362,12 +311,11 @@ static int snapshot(const char *name) int main(int argc, char *argv[]) { int opt, count, trace = 0; - const char * out_file = NULL, *in_file = "/sys/kernel/debug/sof/mbox"; + const char * out_file = NULL, *in_file = NULL; FILE *in_fd = NULL, *out_fd = NULL; char c, tmp[8] = {0}; uint64_t addr = 0, val, timestamp = 0, align = 4, i; double clk = 19.2; - int title_dbg_done = 0, title_exp_done = 0; while ((opt = getopt(argc, argv, "ho:i:s:m:c:t")) != -1) { switch (opt) { @@ -393,7 +341,15 @@ int main(int argc, char *argv[]) /* trace requested ? */ if (trace) - return trace_read("/sys/kernel/debug/sof/trace", out_file, clk, 0); + return trace_read("/sys/kernel/debug/sof/trace", + out_file, clk); + + /* default option with no infile is to dump errors/debug data */ + if (in_file == NULL) { + fprintf(stdout, "\nError log:\n"); + return trace_read("/sys/kernel/debug/sof/etrace", + out_file, clk); + } /* open infile for reading */ in_fd = fopen(in_file, "r"); @@ -432,21 +388,7 @@ convert: tmp[align - i - 1] = c; } - if (addr >= MAILBOX_DEBUG_OFFSET && - addr < MAILBOX_DEBUG_OFFSET + MAILBOX_DEBUG_SIZE) { - - if (!title_dbg_done++) - fprintf(stdout, "\nDebug log:\n"); - - show_debug(val, addr); - } else if (addr >= MAILBOX_EXCEPTION_OFFSET && - addr < MAILBOX_EXCEPTION_OFFSET + MAILBOX_EXCEPTION_SIZE) { - - if (!title_exp_done++) - fprintf(stdout, "\nException log:\n"); - - show_exception(val, addr); - } + show_data(val, addr); if (out_fd) { count = fwrite(&tmp[0], 1, align, out_fd); @@ -457,11 +399,6 @@ convert: addr += align; } - /* read debug */ - fprintf(stdout, "\nError log:\n"); - trace_read("/sys/kernel/debug/sof/mbox", out_file, clk, - MAILBOX_TRACE_OFFSET); - /* close files */ fclose(in_fd); if (out_fd) -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH 1/2] cnl: dma: refine dma probe
by Rander Wang 06 Mar '18

06 Mar '18
Probe each dma individually Signed-off-by: Rander Wang <rander.wang(a)linux.intel.com> --- src/drivers/dw-dma.c | 37 ++++++++++--------------------------- src/platform/cannonlake/platform.c | 5 +++++ 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/drivers/dw-dma.c b/src/drivers/dw-dma.c index 15d608c..f736679 100644 --- a/src/drivers/dw-dma.c +++ b/src/drivers/dw-dma.c @@ -1029,7 +1029,6 @@ static int dw_dma_probe(struct dma *dma) } #else - /* this will probably be called at the end of every period copied */ static void dw_dma_irq_handler(void *data) { @@ -1047,14 +1046,7 @@ static void dw_dma_irq_handler(void *data) status_intr = dw_read(dma, DW_INTR_STATUS); if (!status_intr) { -#ifdef CONFIG_CANNONLAKE - dma++; - status_intr = dw_read(dma, DW_INTR_STATUS); - if (!status_intr) - trace_dma_error("eI0"); -#else trace_dma_error("eI0"); -#endif } tracev_dma("DIr"); @@ -1147,30 +1139,21 @@ static void dw_dma_irq_handler(void *data) static int dw_dma_probe(struct dma *dma) { struct dma_pdata *dw_pdata; - struct dma *dmac = dma; int i; -#ifdef CONFIG_CANNONLAKE - int j; - - for (j = 0; j < MAX_GPDMA_COUNT; j++) -#endif - { - /* allocate private data */ - dw_pdata = rzalloc(RZONE_SYS, RFLAGS_NONE, sizeof(*dw_pdata)); - dma_set_drvdata(dmac, dw_pdata); - spinlock_init(&dmac->lock); + /* allocate private data */ + dw_pdata = rzalloc(RZONE_SYS, RFLAGS_NONE, sizeof(*dw_pdata)); + dma_set_drvdata(dma, dw_pdata); - dw_dma_setup(dmac); + spinlock_init(&dma->lock); - /* init work */ - for (i = 0; i < DW_MAX_CHAN; i++) { - dw_pdata->chan[i].dma = dmac; - dw_pdata->chan[i].channel = i; - dw_pdata->chan[i].status = COMP_STATE_INIT; - } + dw_dma_setup(dma); - dmac++; + /* init work */ + for (i = 0; i < DW_MAX_CHAN; i++) { + dw_pdata->chan[i].dma = dma; + dw_pdata->chan[i].channel = i; + dw_pdata->chan[i].status = COMP_STATE_INIT; } /* register our IRQ handler */ diff --git a/src/platform/cannonlake/platform.c b/src/platform/cannonlake/platform.c index beb6582..1a9b88a 100644 --- a/src/platform/cannonlake/platform.c +++ b/src/platform/cannonlake/platform.c @@ -253,6 +253,11 @@ int platform_init(struct reef *reef) return -ENODEV; dma_probe(dmac); + dmac = dma_get(DMA_GP_LP_DMAC1); + if (!dmac) + return -ENODEV; + dma_probe(dmac); + dmac = dma_get(DMA_HOST_OUT_DMAC); if (!dmac) return -ENODEV; -- 2.14.1
2 1
0 0
[Sound-open-firmware] [PATCH] topology: break up topology builder m4 files into per component macros
by Ranjani Sridharan 06 Mar '18

06 Mar '18
This patch break up the local.m4 and build.m4 topology builder includes into per component m4 files Signed-off-by: Ranjani Sridharan <ranjani.sridharan(a)linux.intel.com> --- topology/m4/buffer.m4 | 29 ++ topology/m4/dai.m4 | 214 ++++++++++ topology/m4/local.m4 | 654 ------------------------------ topology/m4/mixer.m4 | 43 ++ topology/m4/mixercontrol.m4 | 49 +++ topology/m4/pcm.m4 | 161 ++++++++ topology/m4/pga.m4 | 44 ++ topology/m4/{build.m4 => pipeline.m4} | 60 +-- topology/m4/src.m4 | 41 ++ topology/m4/tone.m4 | 43 ++ topology/m4/utils.m4 | 65 +++ topology/reef-apl-nocodec.m4 | 5 +- topology/reef-bdw-rt286.m4 | 5 +- topology/reef-bdw-rt5640.m4 | 5 +- topology/reef-bxt-nocodec.m4 | 5 +- topology/reef-byt-da7212.m4 | 5 +- topology/reef-byt-nocodec.m4 | 5 +- topology/reef-byt-rt5640.m4 | 5 +- topology/reef-byt-rt5645.m4 | 5 +- topology/reef-byt-rt5651.m4 | 5 +- topology/reef-cht-max98090.m4 | 5 +- topology/reef-cht-nocodec.m4 | 5 +- topology/reef-cnl-rt274.m4 | 5 +- topology/reef-hsw-rt5640.m4 | 5 +- topology/sof/pipe-dai-capture.m4 | 4 +- topology/sof/pipe-dai-playback.m4 | 4 +- topology/sof/pipe-low-latency-capture.m4 | 6 +- topology/sof/pipe-low-latency-playback.m4 | 7 +- topology/sof/pipe-passthrough-capture.m4 | 7 +- topology/sof/pipe-passthrough-playback.m4 | 7 +- topology/sof/pipe-pcm-media.m4 | 7 +- topology/sof/pipe-src-capture.m4 | 8 +- topology/sof/pipe-src-playback.m4 | 8 +- topology/sof/pipe-tone.m4 | 7 +- topology/sof/pipe-volume-capture.m4 | 8 +- topology/sof/pipe-volume-playback.m4 | 8 +- topology/test/test-capture-ssp.m4 | 5 +- topology/test/test-playback-ssp.m4 | 5 +- topology/test/test-ssp.m4 | 5 +- topology/test/test-tone-playback-ssp.m4 | 5 +- 40 files changed, 836 insertions(+), 733 deletions(-) create mode 100644 topology/m4/buffer.m4 create mode 100644 topology/m4/dai.m4 delete mode 100644 topology/m4/local.m4 create mode 100644 topology/m4/mixer.m4 create mode 100644 topology/m4/mixercontrol.m4 create mode 100644 topology/m4/pcm.m4 create mode 100644 topology/m4/pga.m4 rename topology/m4/{build.m4 => pipeline.m4} (76%) create mode 100644 topology/m4/src.m4 create mode 100644 topology/m4/tone.m4 create mode 100644 topology/m4/utils.m4 diff --git a/topology/m4/buffer.m4 b/topology/m4/buffer.m4 new file mode 100644 index 0000000..fc06ba0 --- /dev/null +++ b/topology/m4/buffer.m4 @@ -0,0 +1,29 @@ +divert(-1) + +dnl Define the macro for buffer widget + +dnl Buffer name) +define(`N_BUFFER', `BUF'PIPELINE_ID`.'$1) + +dnl W_BUFFER(name, size, capabilities) +define(`W_BUFFER', +`SectionVendorTuples."'N_BUFFER($1)`_tuples" {' +` tokens "sof_buffer_tokens"' +` tuples."word" {' +` SOF_TKN_BUF_SIZE' STR($2) +` SOF_TKN_BUF_CAPS' STR($3) +` }' +`}' +`SectionData."'N_BUFFER($1)`_data" {' +` tuples "'N_BUFFER($1)`_tuples"' +`}' +`SectionWidget."'N_BUFFER($1)`" {' +` index "'PIPELINE_ID`"' +` type "buffer"' +` no_pm "true"' +` data [' +` "'N_BUFFER($1)`_data"' +` ]' +`}') + +divert(0)dnl diff --git a/topology/m4/dai.m4 b/topology/m4/dai.m4 new file mode 100644 index 0000000..163dfab --- /dev/null +++ b/topology/m4/dai.m4 @@ -0,0 +1,214 @@ +divert(-1) + +dnl Define macros for DAI IN/OUT widgets and DAI config + +dnl DAI name) +define(`N_DAI', DAI_NAME) +define(`N_DAI_OUT', DAI_NAME`.OUT') +define(`N_DAI_IN', DAI_NAME`.IN') + +dnl W_DAI_OUT(type, index, format, periods_sink, periods_source, preload, data) +define(`W_DAI_OUT', +`SectionVendorTuples."'N_DAI_OUT($2)`_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) +` }' +`}' +`SectionData."'N_DAI_OUT($2)`_data_w_comp" {' +` tuples "'N_DAI_OUT($2)`_tuples_w_comp"' +`}' +`SectionVendorTuples."'N_DAI_OUT($2)`_tuples_w" {' +` tokens "sof_dai_tokens"' +` tuples."word" {' +` SOF_TKN_DAI_INDEX' $2 +` }' +`}' +`SectionData."'N_DAI_OUT($2)`_data_w" {' +` tuples "'N_DAI_OUT($2)`_tuples_w"' +`}' +`SectionVendorTuples."'N_DAI_OUT($2)`_tuples_str" {' +` tokens "sof_dai_tokens"' +` tuples."string" {' +` SOF_TKN_DAI_TYPE' $1 +` }' +`}' +`SectionData."'N_DAI_OUT($2)`_data_str" {' +` tuples "'N_DAI_OUT($2)`_tuples_str"' +`}' +`SectionVendorTuples."'N_DAI_OUT($2)`_tuples_comp_str" {' +` tokens "sof_comp_tokens"' +` tuples."string" {' +` SOF_TKN_COMP_FORMAT' STR($3) +` }' +`}' +`SectionData."'N_DAI_OUT($2)`_data_comp_str" {' +` tuples "'N_DAI_OUT($2)`_tuples_comp_str"' +`}' +`SectionWidget."'N_DAI_OUT`" {' +` index "'PIPELINE_ID`"' +` type "dai_in"' +` no_pm "true"' +` data [' +` "'N_DAI_OUT($2)`_data_w"' +` "'N_DAI_OUT($2)`_data_w_comp"' +` "'N_DAI_OUT($2)`_data_str"' +` "'N_DAI_OUT($2)`_data_comp_str"' +` "'$7`"' +` ]' +`}') + +dnl W_DAI_IN(type, index, format, periods_sink, periods_source, preload, data) +define(`W_DAI_IN', +`SectionVendorTuples."'N_DAI_IN($2)`_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) +` }' +`}' +`SectionData."'N_DAI_IN($2)`_data_w_comp" {' +` tuples "'N_DAI_IN($2)`_tuples_w_comp"' +`}' +`SectionVendorTuples."'N_DAI_IN($2)`_tuples_w" {' +` tokens "sof_dai_tokens"' +` tuples."word" {' +` SOF_TKN_DAI_INDEX' $2 +` }' +`}' +`SectionData."'N_DAI_IN($2)`_data_w" {' +` tuples "'N_DAI_IN($2)`_tuples_w"' +`}' +`SectionVendorTuples."'N_DAI_IN($2)`_tuples_str" {' +` tokens "sof_dai_tokens"' +` tuples."string" {' +` SOF_TKN_DAI_TYPE' $1 +` }' +`}' +`SectionData."'N_DAI_IN($2)`_data_str" {' +` tuples "'N_DAI_IN($2)`_tuples_str"' +`}' +`SectionVendorTuples."'N_DAI_IN($2)`_tuples_comp_str" {' +` tokens "sof_comp_tokens"' +` tuples."string" {' +` SOF_TKN_COMP_FORMAT' STR($3) +` }' +`}' +`SectionData."'N_DAI_IN($2)`_data_comp_str" {' +` tuples "'N_DAI_IN($2)`_tuples_comp_str"' +`}' +`SectionWidget."'N_DAI_IN`" {' +` index "'PIPELINE_ID`"' +` type "dai_out"' +` no_pm "true"' +` data [' +` "'N_DAI_IN($2)`_data_w"' +` "'N_DAI_IN($2)`_data_w_comp"' +` "'N_DAI_IN($2)`_data_str"' +` "'N_DAI_IN($2)`_data_comp_str"' +` "'$7`"' +` ]' +`}') + +dnl D_DAI(id, playback, capture, data)) +define(`D_DAI', `SectionDAI."'N_DAI`" {' +` index "'PIPELINE_ID`"' +` id "'$1`"' +` playback "'$2`"' +` capture "'$3`"' +`}') + +dnl DAI_CLOCK(clock, freq, codec_master) +define(`DAI_CLOCK', + $1 STR($3) + $1_freq STR($2)) + + +dnl DAI_TDM(slots, width, tx_mask, rx_mask) +define(`DAI_TDM', +` tdm_slots 'STR($1) +` tdm_slot_width 'STR($2) +` tx_slots 'STR($3) +` rx_slots 'STR($4) +) + +dnl DAI Config) +define(`N_DAI_CONFIG', `DAICONFIG.'$1) + +dnl DAI_CONFIG(type, idx, name, format, valid bits, mclk, bclk, fsync, tdm) +define(`DAI_CONFIG', +`SectionHWConfig."'$1$2`" {' +`' +` id "'$2`"' +` format "'$4`"' +`' +` '$6 +` '$7 +` '$8 +` '$9 +`}' +`SectionVendorTuples."'N_DAI_CONFIG($1$2)`_tuples_str" {' +` tokens "sof_dai_tokens"' +` tuples."string" {' +` SOF_TKN_DAI_TYPE' STR($1) +` }' +`}' +`SectionData."'N_DAI_CONFIG($1$2)`_data_str" {' +` tuples "'N_DAI_CONFIG($1$2)`_tuples_str"' +`}' +`SectionVendorTuples."'N_DAI_CONFIG($1$2)`_tuples" {' +` tokens "sof_dai_tokens"' +` tuples."word" {' +` SOF_TKN_DAI_SAMPLE_BITS' STR($5) +` }' +`}' +`SectionData."'N_DAI_CONFIG($1$2)`_data" {' +` tuples "'N_DAI_CONFIG($1$2)`_tuples"' +`}' +`' +`SectionBE."'$3`" {' +` index "0"' +` default_hw_conf_id "'$2`"' +`' +` hw_configs [' +` "'$1$2`"' +` ]' +` data [' +` "'N_DAI_CONFIG($1$2)`_data"' +` "'N_DAI_CONFIG($1$2)`_data_str"' +` ]' +`}') + +dnl DAI_ADD(pipeline, +dnl pipe id, dai type, dai_index, +dnl buffer, periods, format, +dnl frames, deadline, priority, core) +define(`DAI_ADD', +`undefine(`PIPELINE_ID')' +`undefine(`DAI_TYPE')' +`undefine(`DAI_INDEX')' +`undefine(`DAI_BUF')' +`undefine(`DAI_PERIODS')' +`undefine(`DAI_FORMAT')' +`undefine(`SCHEDULE_FRAMES')' +`undefine(`SCHEDULE_DEADLINE')' +`undefine(`SCHEDULE_PRIORITY')' +`undefine(`SCHEDULE_CORE')' +`define(`PIPELINE_ID', $2)' +`define(`DAI_TYPE', STR($3))' +`define(`DAI_INDEX', STR($4))' +`define(`DAI_BUF', $5)' +`define(`DAI_NAME', $3$4)' +`define(`DAI_PERIODS', $6)' +`define(`DAI_FORMAT', $7)' +`define(`SCHEDULE_FRAMES', $8)' +`define(`SCHEDULE_DEADLINE', $9)' +`define(`SCHEDULE_PRIORITY', $10)' +`define(`SCHEDULE_CORE', $11)' +`include($1)' +) + +divert(0)dnl diff --git a/topology/m4/local.m4 b/topology/m4/local.m4 deleted file mode 100644 index df6ea14..0000000 diff --git a/topology/m4/mixer.m4 b/topology/m4/mixer.m4 new file mode 100644 index 0000000..1f2376e --- /dev/null +++ b/topology/m4/mixer.m4 @@ -0,0 +1,43 @@ +divert(-1) + +dnl Define macro for Mixer widget + +dnl Mixer Name) +define(`N_MIXER', `MIXER'PIPELINE_ID`.'$1) + +dnl Pipe Buffer name in pipeline (pipeline, buffer) +define(`NPIPELINE_MIXER', `MIXER'$1`.'$2) + +dnl W_MIXER(name, format, periods_sink, periods_source, preload) +define(`W_MIXER', +`SectionVendorTuples."'N_MIXER($1)`_tuples_w" {' +` tokens "sof_comp_tokens"' +` tuples."word" {' +` SOF_TKN_COMP_PERIOD_SINK_COUNT' STR($3) +` SOF_TKN_COMP_PERIOD_SOURCE_COUNT' STR($4) +` SOF_TKN_COMP_PRELOAD_COUNT' STR($5) +` }' +`}' +`SectionData."'N_MIXER($1)`_data_w" {' +` tuples "'N_MIXER($1)`_tuples_w"' +`}' +`SectionVendorTuples."'N_MIXER($1)`_tuples_str" {' +` tokens "sof_comp_tokens"' +` tuples."string" {' +` SOF_TKN_COMP_FORMAT' STR($2) +` }' +`}' +`SectionData."'N_MIXER($1)`_data_str" {' +` tuples "'N_MIXER($1)`_tuples_str"' +`}' +`SectionWidget."'N_MIXER($1)`" {' +` index "'PIPELINE_ID`"' +` type "mixer"' +` no_pm "true"' +` data [' +` "'N_MIXER($1)`_data_w"' +` "'N_MIXER($1)`_data_str"' +` ]' +`}') + +divert(0)dnl diff --git a/topology/m4/mixercontrol.m4 b/topology/m4/mixercontrol.m4 new file mode 100644 index 0000000..77a3784 --- /dev/null +++ b/topology/m4/mixercontrol.m4 @@ -0,0 +1,49 @@ +divert(-1) + +dnl Define macro for mixer control + +dnl KCONTROL_CHANNEL(name, reg, shift) +define(`KCONTROL_CHANNEL', +`channel.STR($1) {' +` reg STR($2)' +` shift STR($3)' +` }') + +dnl CONTROLMIXER_MAX(comment, value) +define(`CONTROLMIXER_MAX', +`#$1' +` max STR($2)') + +dnl CONTROLMIXER_TLV(comment, value) +define(`CONTROLMIXER_TLV', +`#$1' +` tlv STR($2)') + +dnl CONTROLMIXER_OPS(info, comment, get, put) +define(`CONTROLMIXER_OPS', +`ops."ctl" {' +` info STR($1)' +` #$2' +` get STR($3)' +` put STR($4)' +` }') + +dnl C_CONTROLMIXER(name, index, ops, max, invert, tlv, KCONTROL_CHANNELS) +define(`C_CONTROLMIXER', +`SectionControlMixer.STR($1) {' +`' +` # control belongs to this index group' +` index STR($2)' +`' +` #$7' +` $8' +` # control uses bespoke driver get/put/info ID' +` $3' +`' +` $4' +` invert STR($5)' +` $6' + +`}') + +divert(0)dnl diff --git a/topology/m4/pcm.m4 b/topology/m4/pcm.m4 new file mode 100644 index 0000000..d767350 --- /dev/null +++ b/topology/m4/pcm.m4 @@ -0,0 +1,161 @@ +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') + +dnl W_PCM_PLAYBACK(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) +` }' +`}' +`SectionData."'N_PCMP($1)`_data_w_comp" {' +` tuples "'N_PCMP($1)`_tuples_w_comp"' +`}' +`SectionVendorTuples."'N_PCMP($1)`_tuples" {' +` tokens "sof_pcm_tokens"' +` tuples."word" {' +` SOF_TKN_PCM_DMAC' STR($2) +` SOF_TKN_PCM_DMAC_CHAN' STR($3) +` }' +`}' +`SectionData."'N_PCMP($1)`_data" {' +` tuples "'N_PCMP($1)`_tuples"' +`}' +`SectionWidget."'N_PCMP`" {' +` index "'PIPELINE_ID`"' +` type "aif_in"' +` no_pm "true"' +` stream_name "'$1`"' +` data [' +` "'N_PCMP($1)`_data"' +` "'N_PCMP($1)`_data_w_comp"' +` ]' +`}') + + +dnl W_PCM_CAPTURE(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) +` }' +`}' +`SectionData."'N_PCMC($1)`_data_w_comp" {' +` tuples "'N_PCMC($1)`_tuples_w_comp"' +`}' +`SectionVendorTuples."'N_PCMC($1)`_tuples" {' +` tokens "sof_pcm_tokens"' +` tuples."word" {' +` SOF_TKN_PCM_DMAC' STR($2) +` SOF_TKN_PCM_DMAC_CHAN' STR($3) +` }' +`}' +`SectionData."'N_PCMC($1)`_data" {' +` tuples "'N_PCMC($1)`_tuples"' +`}' +`SectionWidget."'N_PCMC`" {' +` index "'PIPELINE_ID`"' +` type "aif_out"' +` no_pm "true"' +` stream_name "'$1`"' +` data [' +` "'N_PCMC($1)`_data"' +` "'N_PCMC($1)`_data_w_comp"' +` ]' +`}') + +dnl PCM_CAPABILITIES(name, formats, rate_min, rate_max, channels_min, channels_max, periods_min, periods_max, period_size_min, period_size_max, buffer_size_min, buffer_size_max) +define(`PCM_CAPABILITIES', +`SectionPCMCapabilities.STR($1) {' +`' +` formats "$2"' +` rate_min STR($3)' +` rate_max STR($4)' +` channels_min STR($5)' +` channels_max STR($6)' +` periods_min STR($7)' +` periods_max STR($8)' +` period_size_min STR($9)' +` period_size_max STR($10)' +` buffer_size_min STR($11)' +` buffer_size_max STR($12)' +`}') + +dnl COMP_BUFFER_SIZE( num_periods, sample_size, channels, fmames) +define(`COMP_BUFFER_SIZE', `eval(`$1 * $2 * $3 * $4')') + +dnl PCM_PLAYBACK_ADD(name, pipeline, pcm_id, dai_id, playback) +define(`PCM_PLAYBACK_ADD', +`SectionPCM.STR($1) {' +`' +` index STR($2)' +`' +` # used for binding to the PCM' +` id STR($3)' +`' +` dai.STR($1 $3) {' +` id STR($4)' +` }' +`' +` pcm."playback" {' +`' +` capabilities STR($5)' +` }' +`}') + +dnl PCM_CAPTURE_ADD(name, pipeline, pcm_id, dai_id, capture) +define(`PCM_CAPTURE_ADD', +`SectionPCM.STR($1) {' +`' +` index STR($2)' +`' +` # used for binding to the PCM' +` id STR($3)' +`' +` dai.STR($1 $3) {' +` id STR($4)' +` }' +`' +` pcm."capture" {' +`' +` capabilities STR($5)' +` }' +`}') + +dnl PCM_DUPLEX_ADD(name, pipeline, pcm_id, dai_id, playback, capture) +define(`PCM_DUPLEX_ADD', +`SectionPCM.STR($1) {' +`' +` index STR($2)' +`' +` # used for binding to the PCM' +` id STR($3)' +`' +` dai.STR($1 $3) {' +` id STR($4)' +` }' +`' +` pcm."capture" {' +`' +` capabilities STR($6)' +` }' +`' +` pcm."playback" {' +`' +` capabilities STR($5)' +` }' +`}') + +divert(0)dnl diff --git a/topology/m4/pga.m4 b/topology/m4/pga.m4 new file mode 100644 index 0000000..f38f820 --- /dev/null +++ b/topology/m4/pga.m4 @@ -0,0 +1,44 @@ +divert(-1) + +dnl Define macro for PGA widget + +dnl PGA name) +define(`N_PGA', `PGA'PIPELINE_ID`.'$1) + +dnl W_PGA(name, format, periods_sink, periods_source, preload, kcontrol0. kcontrol1...etc) +define(`W_PGA', +`SectionVendorTuples."'N_PGA($1)`_tuples_w" {' +` tokens "sof_comp_tokens"' +` tuples."word" {' +` SOF_TKN_COMP_PERIOD_SINK_COUNT' STR($3) +` SOF_TKN_COMP_PERIOD_SOURCE_COUNT' STR($4) +` SOF_TKN_COMP_PRELOAD_COUNT' STR($5) +` }' +`}' +`SectionData."'N_PGA($1)`_data_w" {' +` tuples "'N_PGA($1)`_tuples_w"' +`}' +`SectionVendorTuples."'N_PGA($1)`_tuples_str" {' +` tokens "sof_comp_tokens"' +` tuples."string" {' +` SOF_TKN_COMP_FORMAT' STR($2) +` }' +`}' +`SectionData."'N_PGA($1)`_data_str" {' +` tuples "'N_PGA($1)`_tuples_str"' +`}' +`SectionWidget."'N_PGA($1)`" {' +` index "'PIPELINE_ID`"' +` type "pga"' +` no_pm "true"' +` data [' +` "'N_PGA($1)`_data_w"' +` "'N_PGA($1)`_data_str"' +` ]' +` mixer [' + $6 +` ]' + +`}') + +divert(0)dnl diff --git a/topology/m4/build.m4 b/topology/m4/pipeline.m4 similarity index 76% rename from topology/m4/build.m4 rename to topology/m4/pipeline.m4 index 9361219..7a91439 100644 --- a/topology/m4/build.m4 +++ b/topology/m4/pipeline.m4 @@ -1,5 +1,36 @@ divert(-1) +dnl Define macro for pipeline widget + +dnl Pipeline name) +define(`N_PIPELINE', `PIPELINE.'PIPELINE_ID`.'$1) + +dnl W_PIPELINE(stream, deadline, priority, frames, core, timer, platform) +define(`W_PIPELINE', +`SectionVendorTuples."'N_PIPELINE($1)`_tuples" {' +` tokens "sof_sched_tokens"' +` tuples."word" {' +` SOF_TKN_SCHED_DEADLINE' STR($2) +` SOF_TKN_SCHED_PRIORITY' STR($3) +` SOF_TKN_SCHED_CORE' STR($5) +` SOF_TKN_SCHED_FRAMES' STR($4) +` SOF_TKN_SCHED_TIMER' STR($6) +` }' +`}' +`SectionData."'N_PIPELINE($1)`_data" {' +` tuples "'N_PIPELINE($1)`_tuples"' +`}' +`SectionWidget."'N_PIPELINE($1)`" {' +` index "'PIPELINE_ID`"' +` type "scheduler"' +` no_pm "true"' +` stream_name "'$1`"' +` data [' +` "'N_PIPELINE($1)`_data"' +` "'$7`"' +` ]' +`}') + dnl PIPELINE_PCM_ADD(pipeline, dnl pipe id, pcm, max channels, format, dnl frames, deadline, priority, core, dmac, dmac_chan) @@ -85,33 +116,4 @@ define(`PIPELINE_ADD', `include($1)' ) -dnl DAI_ADD(pipeline, -dnl pipe id, dai type, dai_index, -dnl buffer, periods, format, -dnl frames, deadline, priority, core) -define(`DAI_ADD', -`undefine(`PIPELINE_ID')' -`undefine(`DAI_TYPE')' -`undefine(`DAI_INDEX')' -`undefine(`DAI_BUF')' -`undefine(`DAI_PERIODS')' -`undefine(`DAI_FORMAT')' -`undefine(`SCHEDULE_FRAMES')' -`undefine(`SCHEDULE_DEADLINE')' -`undefine(`SCHEDULE_PRIORITY')' -`undefine(`SCHEDULE_CORE')' -`define(`PIPELINE_ID', $2)' -`define(`DAI_TYPE', STR($3))' -`define(`DAI_INDEX', STR($4))' -`define(`DAI_BUF', $5)' -`define(`DAI_NAME', $3$4)' -`define(`DAI_PERIODS', $6)' -`define(`DAI_FORMAT', $7)' -`define(`SCHEDULE_FRAMES', $8)' -`define(`SCHEDULE_DEADLINE', $9)' -`define(`SCHEDULE_PRIORITY', $10)' -`define(`SCHEDULE_CORE', $11)' -`include($1)' -) - divert(0)dnl diff --git a/topology/m4/src.m4 b/topology/m4/src.m4 new file mode 100644 index 0000000..aca18e3 --- /dev/null +++ b/topology/m4/src.m4 @@ -0,0 +1,41 @@ +divert(-1) + +dnl Defines the macro for SRC widget + +dnl SRC name) +define(`N_SRC', `SRC'PIPELINE_ID`.'$1) + +dnl W_SRC(name, format, periods_sink, periods_source, data, preload) +define(`W_SRC', +`SectionVendorTuples."'N_SRC($1)`_tuples_w" {' +` tokens "sof_comp_tokens"' +` tuples."word" {' +` SOF_TKN_COMP_PERIOD_SINK_COUNT' STR($3) +` SOF_TKN_COMP_PERIOD_SOURCE_COUNT' STR($4) +` SOF_TKN_COMP_PRELOAD_COUNT' STR($6) +` }' +`}' +`SectionData."'N_SRC($1)`_data_w" {' +` tuples "'N_SRC($1)`_tuples_w"' +`}' +`SectionVendorTuples."'N_SRC($1)`_tuples_str" {' +` tokens "sof_comp_tokens"' +` tuples."string" {' +` SOF_TKN_COMP_FORMAT' STR($2) +` }' +`}' +`SectionData."'N_SRC($1)`_data_str" {' +` tuples "'N_SRC($1)`_tuples_str"' +`}' +`SectionWidget."'N_SRC($1)`" {' +` index "'PIPELINE_ID`"' +` type "src"' +` no_pm "true"' +` data [' +` "'N_SRC($1)`_data_w"' +` "'N_SRC($1)`_data_str"' +` "'$5`"' +` ]' +`}') + +divert(0)dnl diff --git a/topology/m4/tone.m4 b/topology/m4/tone.m4 new file mode 100644 index 0000000..6a88b37 --- /dev/null +++ b/topology/m4/tone.m4 @@ -0,0 +1,43 @@ +divert(-1) + +dnl Define macro for siggen widget + +dnl Tone name) +define(`N_TONE', `TONE'PIPELINE_ID`.'$1) + +dnl W_TONE(name, format, periods_sink, periods_source, preload, kcontrols_list) +define(`W_TONE', +`SectionVendorTuples."'N_TONE($1)`_tuples_w" {' +` tokens "sof_comp_tokens"' +` tuples."word" {' +` SOF_TKN_COMP_PERIOD_SINK_COUNT' STR($3) +` SOF_TKN_COMP_PERIOD_SOURCE_COUNT' STR($4) +` SOF_TKN_COMP_PRELOAD_COUNT' STR($5) +` }' +`}' +`SectionData."'N_TONE($1)`_data_w" {' +` tuples "'N_TONE($1)`_tuples_w"' +`}' +`SectionVendorTuples."'N_TONE($1)`_tuples_str" {' +` tokens "sof_comp_tokens"' +` tuples."string" {' +` SOF_TKN_COMP_FORMAT' STR($2) +` }' +`}' +`SectionData."'N_TONE($1)`_data_str" {' +` tuples "'N_TONE($1)`_tuples_str"' +`}' +`SectionWidget."'N_TONE($1)`" {' +` index "'PIPELINE_ID`"' +` type "siggen"' +` no_pm "true"' +` data [' +` "'N_TONE($1)`_data_w"' +` "'N_TONE($1)`_data_str"' +` ]' +` mixer [' + $6 +` ]' +`}') + +divert(0)dnl diff --git a/topology/m4/utils.m4 b/topology/m4/utils.m4 new file mode 100644 index 0000000..e929244 --- /dev/null +++ b/topology/m4/utils.m4 @@ -0,0 +1,65 @@ +divert(-1) + +define(`concat',`$1$2') + +define(`STR', `"'$1`"') + +dnl Argument iterator. +define(`argn', `ifelse(`$1', 1, ``$2'', + `argn(decr(`$1'), shift(shift($@)))')') + +dnl Defines a list of items from a variable number of params. +dnl Use as last argument in a macro. +dnl The first argument specifies the number of tabs to be added for formatting +define(`LIST_LOOP', `argn(j,$@) +$1ifelse(i,`2', `', `define(`i', decr(i))define(`j', incr(j))$0($@)')') + +define(`LIST', `pushdef(`i', $#)pushdef(`j', `2')LIST_LOOP($@)popdef(i)popdef(j)') + +dnl Sums a list of variable arguments. Use as last argument in macro. +define(`SUM_LOOP', `eval(argn(j,$@) + ifelse(i,`1', `', `define(`i', decr(i)) define(`j', incr(j)) + $0($@)'))') + +dnl Memory capabilities +define(`MEMCAPS', `pushdef(`i', $#) pushdef(`j', `1') SUM_LOOP($@)') + +dnl create direct DAPM/pipeline link between 2 widgets) +define(`dapm', `"$1, , $2"') + +dnl COMP_SAMPLE_SIZE(FMT) +define(`COMP_SAMPLE_SIZE', +`ifelse( + $1, `s16le', `2', + $1, `s24_4le', `4', + $1, `s32le', `4', + $1, `float', `4', + `4')') + +dnl P_GRAPH(name, CONNECTIONS) +define(`P_GRAPH', +`SectionGraph.STR($1) {' +` index STR($2)' +`' +` lines [' +` $3' +` ]' +`}') + +dnl W_VENDORTUPLES(name, tokens, RATE_OUT) +define(`W_VENDORTUPLES', +`SectionVendorTuples.STR($1) {' +` tokens STR($2)' +`' +` tuples."word" {' +` $3' +` }' +`}') + +dnl W_DATA(name, tuples) +define(`W_DATA', +`SectionData.STR($1) {' +` tuples STR($2)' +`}') + +divert(0) dnl + diff --git a/topology/reef-apl-nocodec.m4 b/topology/reef-apl-nocodec.m4 index d4ac613..cf0a20e 100644 --- a/topology/reef-apl-nocodec.m4 +++ b/topology/reef-apl-nocodec.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`pipeline.m4') +include(`utils.m4') +include(`dai.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-bdw-rt286.m4 b/topology/reef-bdw-rt286.m4 index eaba2d9..fa894f6 100644 --- a/topology/reef-bdw-rt286.m4 +++ b/topology/reef-bdw-rt286.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`pipeline.m4') +include(`utils.m4') +include(`dai.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-bdw-rt5640.m4 b/topology/reef-bdw-rt5640.m4 index 5d4485b..ec920a5 100644 --- a/topology/reef-bdw-rt5640.m4 +++ b/topology/reef-bdw-rt5640.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-bxt-nocodec.m4 b/topology/reef-bxt-nocodec.m4 index dbac98a..b7717d0 100644 --- a/topology/reef-bxt-nocodec.m4 +++ b/topology/reef-bxt-nocodec.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-byt-da7212.m4 b/topology/reef-byt-da7212.m4 index 840ea69..7515c63 100644 --- a/topology/reef-byt-da7212.m4 +++ b/topology/reef-byt-da7212.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-byt-nocodec.m4 b/topology/reef-byt-nocodec.m4 index 56aee22..b3ca196 100644 --- a/topology/reef-byt-nocodec.m4 +++ b/topology/reef-byt-nocodec.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`pipeline.m4') +include(`utils.m4') +include(`dai.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-byt-rt5640.m4 b/topology/reef-byt-rt5640.m4 index f8d0e40..9fa15a2 100644 --- a/topology/reef-byt-rt5640.m4 +++ b/topology/reef-byt-rt5640.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-byt-rt5645.m4 b/topology/reef-byt-rt5645.m4 index 023d92d..c81a4db 100644 --- a/topology/reef-byt-rt5645.m4 +++ b/topology/reef-byt-rt5645.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-byt-rt5651.m4 b/topology/reef-byt-rt5651.m4 index ccac260..96147d3 100644 --- a/topology/reef-byt-rt5651.m4 +++ b/topology/reef-byt-rt5651.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-cht-max98090.m4 b/topology/reef-cht-max98090.m4 index 3218402..5690df4 100644 --- a/topology/reef-cht-max98090.m4 +++ b/topology/reef-cht-max98090.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-cht-nocodec.m4 b/topology/reef-cht-nocodec.m4 index 24560ee..32acb62 100644 --- a/topology/reef-cht-nocodec.m4 +++ b/topology/reef-cht-nocodec.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`pipeline.m4') +include(`utils.m4') +include(`dai.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-cnl-rt274.m4 b/topology/reef-cnl-rt274.m4 index f91a74f..e95363b 100644 --- a/topology/reef-cnl-rt274.m4 +++ b/topology/reef-cnl-rt274.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/reef-hsw-rt5640.m4 b/topology/reef-hsw-rt5640.m4 index 663686b..1f63820 100644 --- a/topology/reef-hsw-rt5640.m4 +++ b/topology/reef-hsw-rt5640.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/sof/pipe-dai-capture.m4 b/topology/sof/pipe-dai-capture.m4 index 3699138..a5a72d0 100644 --- a/topology/sof/pipe-dai-capture.m4 +++ b/topology/sof/pipe-dai-capture.m4 @@ -1,7 +1,9 @@ # DAI Capture connector # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # # DAI definitions diff --git a/topology/sof/pipe-dai-playback.m4 b/topology/sof/pipe-dai-playback.m4 index d35d3b1..e70998b 100644 --- a/topology/sof/pipe-dai-playback.m4 +++ b/topology/sof/pipe-dai-playback.m4 @@ -1,7 +1,9 @@ # DAI Playback connector # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`dai.m4') +include(`pipeline.m4') # # DAI definitions diff --git a/topology/sof/pipe-low-latency-capture.m4 b/topology/sof/pipe-low-latency-capture.m4 index 7adfd14..5619999 100644 --- a/topology/sof/pipe-low-latency-capture.m4 +++ b/topology/sof/pipe-low-latency-capture.m4 @@ -5,7 +5,11 @@ # host PCM_C <--B5-- volume(0C) <--B4-- source DAI0 # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`pga.m4') +include(`mixercontrol.m4') # # Controls diff --git a/topology/sof/pipe-low-latency-playback.m4 b/topology/sof/pipe-low-latency-playback.m4 index 11cf07d..4a4fca9 100644 --- a/topology/sof/pipe-low-latency-playback.m4 +++ b/topology/sof/pipe-low-latency-playback.m4 @@ -20,7 +20,12 @@ # # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`pga.m4') +include(`mixer.m4') +include(`mixercontrol.m4') # # Controls diff --git a/topology/sof/pipe-passthrough-capture.m4 b/topology/sof/pipe-passthrough-capture.m4 index cfa357a..a13887a 100644 --- a/topology/sof/pipe-passthrough-capture.m4 +++ b/topology/sof/pipe-passthrough-capture.m4 @@ -5,8 +5,11 @@ # host PCM_C <-- B0 <-- sink DAI0 # Include topology builder -include(`local.m4') - +include(`utils.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`dai.m4') +include(`pipeline.m4') # # Components and Buffers diff --git a/topology/sof/pipe-passthrough-playback.m4 b/topology/sof/pipe-passthrough-playback.m4 index 3218431..8a9e8ff 100644 --- a/topology/sof/pipe-passthrough-playback.m4 +++ b/topology/sof/pipe-passthrough-playback.m4 @@ -5,8 +5,11 @@ # host PCM_P --> B0 --> sink DAI0 # Include topology builder -include(`local.m4') - +include(`utils.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`dai.m4') +include(`pipeline.m4') # # Components and Buffers diff --git a/topology/sof/pipe-pcm-media.m4 b/topology/sof/pipe-pcm-media.m4 index 0196f98..f2053b7 100644 --- a/topology/sof/pipe-pcm-media.m4 +++ b/topology/sof/pipe-pcm-media.m4 @@ -8,7 +8,12 @@ # # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`src.m4') +include(`buffer.m4') +include(`pga.m4') +include(`mixercontrol.m4') +include(`pipeline.m4') # # Controls diff --git a/topology/sof/pipe-src-capture.m4 b/topology/sof/pipe-src-capture.m4 index 824dcdb..a58eb68 100644 --- a/topology/sof/pipe-src-capture.m4 +++ b/topology/sof/pipe-src-capture.m4 @@ -5,8 +5,12 @@ # host PCM_P --> SRC --> sink DAI0 # Include topology builder -include(`local.m4') - +include(`utils.m4') +include(`src.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`dai.m4') +include(`pipeline.m4') # # Components and Buffers diff --git a/topology/sof/pipe-src-playback.m4 b/topology/sof/pipe-src-playback.m4 index 3009ff7..7bf8f47 100644 --- a/topology/sof/pipe-src-playback.m4 +++ b/topology/sof/pipe-src-playback.m4 @@ -5,8 +5,12 @@ # host PCM_P --> SRC --> sink DAI0 # Include topology builder -include(`local.m4') - +include(`utils.m4') +include(`src.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`dai.m4') +include(`pipeline.m4') # # Components and Buffers diff --git a/topology/sof/pipe-tone.m4 b/topology/sof/pipe-tone.m4 index 899c426..09ed32c 100644 --- a/topology/sof/pipe-tone.m4 +++ b/topology/sof/pipe-tone.m4 @@ -8,7 +8,12 @@ # # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`buffer.m4') +include(`pga.m4') +include(`tone.m4') +include(`mixercontrol.m4') +include(`pipeline.m4') # # Controls diff --git a/topology/sof/pipe-volume-capture.m4 b/topology/sof/pipe-volume-capture.m4 index 299a0f8..5aa0d12 100644 --- a/topology/sof/pipe-volume-capture.m4 +++ b/topology/sof/pipe-volume-capture.m4 @@ -5,7 +5,13 @@ # host PCM_C <-- B0 <-- Volume 0 <-- B1 <-- source DAI0 # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`pga.m4') +include(`dai.m4') +include(`mixercontrol.m4') +include(`pipeline.m4') # # Controls diff --git a/topology/sof/pipe-volume-playback.m4 b/topology/sof/pipe-volume-playback.m4 index 3e3f98e..90fe303 100644 --- a/topology/sof/pipe-volume-playback.m4 +++ b/topology/sof/pipe-volume-playback.m4 @@ -5,7 +5,13 @@ # host PCM_P --> B0 --> Volume 0 --> B1 --> sink DAI0 # Include topology builder -include(`local.m4') +include(`utils.m4') +include(`buffer.m4') +include(`pcm.m4') +include(`pga.m4') +include(`dai.m4') +include(`mixercontrol.m4') +include(`pipeline.m4') # # Controls diff --git a/topology/test/test-capture-ssp.m4 b/topology/test/test-capture-ssp.m4 index 2c808ba..8950222 100644 --- a/topology/test/test-capture-ssp.m4 +++ b/topology/test/test-capture-ssp.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`dai.m4') +include(`utils.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/test/test-playback-ssp.m4 b/topology/test/test-playback-ssp.m4 index 093ad17..db6cb6c 100644 --- a/topology/test/test-playback-ssp.m4 +++ b/topology/test/test-playback-ssp.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`pipeline.m4') +include(`dai.m4') +include(`utils.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/test/test-ssp.m4 b/topology/test/test-ssp.m4 index 304aab9..01e3a02 100644 --- a/topology/test/test-ssp.m4 +++ b/topology/test/test-ssp.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`dai.m4') +include(`utils.m4') +include(`pipeline.m4') # Include TLV library include(`common/tlv.m4') diff --git a/topology/test/test-tone-playback-ssp.m4 b/topology/test/test-tone-playback-ssp.m4 index 2fe6693..9231316 100644 --- a/topology/test/test-tone-playback-ssp.m4 +++ b/topology/test/test-tone-playback-ssp.m4 @@ -3,8 +3,9 @@ # # Include topology builder -include(`local.m4') -include(`build.m4') +include(`pipeline.m4') +include(`dai.m4') +include(`utils.m4') # Include TLV library include(`common/tlv.m4') -- 2.14.1
2 1
0 0
[Sound-open-firmware] [PATCH] dma: dw-dma: fix wrong memory capabilities flags
by Xiuli Pan 06 Mar '18

06 Mar '18
From: Pan Xiuli <xiuli.pan(a)linux.intel.com> Runtime heap does not support DMA, fix this bug. Signed-off-by: Pan Xiuli <xiuli.pan(a)linux.intel.com> --- Test with: Mininow max rt5651 and GP-MRB with Nocodec SOF master: e92ef97834489f52c0f20445d401a8c6e0aaed62 SOF-Tool master: 5b8dfd13019cfd29999503b56c902f56209000ed https://github.com/plbossart/sound/tree/topic/sof-v4.14: d919ea06b7f79c95ab4eb68baf05e9faf3a894c1 --- src/drivers/dw-dma.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/drivers/dw-dma.c b/src/drivers/dw-dma.c index c2d6917..18e4583 100644 --- a/src/drivers/dw-dma.c +++ b/src/drivers/dw-dma.c @@ -552,9 +552,9 @@ static int dw_dma_set_config(struct dma *dma, int channel, /* allocate descriptors for channel */ if (p->chan[channel].lli) rfree(p->chan[channel].lli); - p->chan[channel].lli = rzalloc(RZONE_RUNTIME, - SOF_MEM_CAPS_RAM | SOF_MEM_CAPS_DMA, - sizeof(struct dw_lli2) * p->chan[channel].desc_count); + p->chan[channel].lli = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, + sizeof(struct dw_lli2) * + p->chan[channel].desc_count); if (p->chan[channel].lli == NULL) { trace_dma_error("eD1"); ret = -ENOMEM; -- 2.7.4
2 1
0 0
  • ← Newer
  • 1
  • ...
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • ...
  • 157
  • Older →

HyperKitty Powered by HyperKitty version 1.3.8.