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 v2] cnl: core: Add support for xcc
by Liam Girdwood 30 Mar '18

30 Mar '18
xcc has more strict rules than gcc: - Add missing sections to linker scripts - Fix compile warnings - Extend memory enabling timeout to infinite (too small delay for xcc) Signed-off-by: Tomasz Lauda <tomasz.lauda(a)linux.intel.com> # Conflicts: # src/platform/apollolake/platform.c # src/platform/cannonlake/platform.c --- rimage/manifest.c | 9 +- rimage/manifest.h | 3 + src/arch/xtensa/boot_loader.c | 11 +-- .../apollolake/include/platform/platform.h | 2 +- src/platform/apollolake/platform.c | 98 +++++++++++----------- src/platform/baytrail/platform.c | 84 ++++++++++--------- src/platform/cannonlake/boot_ldr.x.in | 7 +- src/platform/cannonlake/cannonlake.x.in | 49 +++++------ .../cannonlake/include/platform/platform.h | 2 +- src/platform/cannonlake/platform.c | 98 +++++++++++----------- src/platform/haswell/platform.c | 84 ++++++++++--------- 11 files changed, 230 insertions(+), 217 deletions(-) diff --git a/rimage/manifest.c b/rimage/manifest.c index 243c194f..f3f85600 100644 --- a/rimage/manifest.c +++ b/rimage/manifest.c @@ -211,11 +211,18 @@ static int man_get_module_manifest(struct image *image, struct module *module, section = &module->section[man_section_idx]; /* load in manifest data */ - ret = fseek(module->fd, section->sh_offset, SEEK_SET); + /* module built using xcc has preceding bytes */ + if (section->sh_size > sizeof(sof_mod)) + ret = fseek(module->fd, + section->sh_offset + XCC_MOD_OFFSET, SEEK_SET); + else + ret = fseek(module->fd, section->sh_offset, SEEK_SET); + if (ret < 0) { fprintf(stderr, "error: can't seek to section %d\n", ret); return ret; } + count = fread(&sof_mod, 1, sizeof(sof_mod), module->fd); if (count != sizeof(sof_mod)) { fprintf(stderr, "error: can't read section %d\n", -errno); diff --git a/rimage/manifest.h b/rimage/manifest.h index ca951321..8d1d3d2c 100644 --- a/rimage/manifest.h +++ b/rimage/manifest.h @@ -22,6 +22,9 @@ #define MAN_PAGE_SIZE 4096 +/* start offset for modules built using xcc */ +#define XCC_MOD_OFFSET 0x8 + /* start offset for base FW module */ #define FILE_TEXT_OFFSET 0x8000 diff --git a/src/arch/xtensa/boot_loader.c b/src/arch/xtensa/boot_loader.c index 862db458..05d6bf90 100644 --- a/src/arch/xtensa/boot_loader.c +++ b/src/arch/xtensa/boot_loader.c @@ -121,7 +121,7 @@ static void parse_manifest(void) /* power on HPSRAM */ static int32_t hp_sram_init(void) { - int delay_count = 256, timeout = 256; + int delay_count = 256; uint32_t status; shim_write(SHIM_LDOCTL, SHIM_HPMEM_POWER_ON); @@ -141,24 +141,15 @@ static int32_t hp_sram_init(void) status = io_reg_read(HSPGISTS0); while (status) { idelay(delay_count); - status = io_reg_read(HSPGISTS0); - if (timeout-- < 0) { - return -EIO; - } } /* query the power status of second part of HP memory */ /* and do as above code */ - timeout = 256; status = io_reg_read(HSPGISTS1); while (status) { idelay(delay_count); - status = io_reg_read(HSPGISTS1); - if (timeout-- < 0) { - return -EIO; - } } /* add some delay before touch power register */ diff --git a/src/platform/apollolake/include/platform/platform.h b/src/platform/apollolake/include/platform/platform.h index 86172bfa..3a2d40bc 100644 --- a/src/platform/apollolake/include/platform/platform.h +++ b/src/platform/apollolake/include/platform/platform.h @@ -125,7 +125,7 @@ struct reef; #define platform_trace_point(__x) \ sw_reg_write(SRAM_REG_FW_TRACEP, __x) -struct timer *platform_timer; +extern struct timer *platform_timer; /* * APIs declared here are defined for every platform and IPC mechanism. diff --git a/src/platform/apollolake/platform.c b/src/platform/apollolake/platform.c index 2b41028b..ce408da6 100644 --- a/src/platform/apollolake/platform.c +++ b/src/platform/apollolake/platform.c @@ -78,54 +78,56 @@ static const struct sof_ipc_window sram_window = { .type = SOF_IPC_EXT_WINDOW, }, .num_windows = NUM_APL_WINDOWS, - .window[0] = { - .type = SOF_IPC_REGION_REGS, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_SW_REG_SIZE, - .offset = 0, - }, - .window[1] = { - .type = SOF_IPC_REGION_UPBOX, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DSPBOX_SIZE, - .offset = MAILBOX_SW_REG_SIZE, - }, - .window[2] = { - .type = SOF_IPC_REGION_DOWNBOX, - .id = 1, /* map to host window 1 */ - .flags = 0, // TODO: set later - .size = MAILBOX_HOSTBOX_SIZE, - .offset = 0, - }, - .window[3] = { - .type = SOF_IPC_REGION_DEBUG, - .id = 2, /* map to host window 2 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DEBUG_SIZE, - .offset = 0, - }, - .window[4] = { - .type = SOF_IPC_REGION_EXCEPTION, - .id = 2, /* map to host window 2 */ - .flags = 0, // TODO: set later - .size = MAILBOX_EXCEPTION_SIZE, - .offset = MAILBOX_EXCEPTION_OFFSET, - }, - .window[5] = { - .type = SOF_IPC_REGION_STREAM, - .id = 2, /* map to host window 2 */ - .flags = 0, // TODO: set later - .size = MAILBOX_STREAM_SIZE, - .offset = MAILBOX_STREAM_OFFSET, - }, - .window[6] = { - .type = SOF_IPC_REGION_TRACE, - .id = 3, /* map to host window 3 */ - .flags = 0, // TODO: set later - .size = MAILBOX_TRACE_SIZE, - .offset = 0, + .window = { + { + .type = SOF_IPC_REGION_REGS, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_SW_REG_SIZE, + .offset = 0, + }, + { + .type = SOF_IPC_REGION_UPBOX, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_DSPBOX_SIZE, + .offset = MAILBOX_SW_REG_SIZE, + }, + { + .type = SOF_IPC_REGION_DOWNBOX, + .id = 1, /* map to host window 1 */ + .flags = 0, // TODO: set later + .size = MAILBOX_HOSTBOX_SIZE, + .offset = 0, + }, + { + .type = SOF_IPC_REGION_DEBUG, + .id = 2, /* map to host window 2 */ + .flags = 0, // TODO: set later + .size = MAILBOX_EXCEPTION_SIZE + MAILBOX_DEBUG_SIZE, + .offset = 0, + }, + { + .type = SOF_IPC_REGION_EXCEPTION, + .id = 2, /* map to host window 2 */ + .flags = 0, // TODO: set later + .size = MAILBOX_EXCEPTION_SIZE, + .offset = MAILBOX_EXCEPTION_OFFSET, + }, + { + .type = SOF_IPC_REGION_STREAM, + .id = 2, /* map to host window 2 */ + .flags = 0, // TODO: set later + .size = MAILBOX_STREAM_SIZE, + .offset = MAILBOX_STREAM_OFFSET, + }, + { + .type = SOF_IPC_REGION_TRACE, + .id = 3, /* map to host window 3 */ + .flags = 0, // TODO: set later + .size = MAILBOX_TRACE_SIZE, + .offset = 0, + }, }, }; diff --git a/src/platform/baytrail/platform.c b/src/platform/baytrail/platform.c index 8fa03a75..1917054e 100644 --- a/src/platform/baytrail/platform.c +++ b/src/platform/baytrail/platform.c @@ -79,47 +79,49 @@ static const struct sof_ipc_window sram_window = { .type = SOF_IPC_EXT_WINDOW, }, .num_windows = NUM_BYT_WINDOWS, - .window[0] = { - .type = SOF_IPC_REGION_UPBOX, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DSPBOX_SIZE, - .offset = MAILBOX_DSPBOX_OFFSET, - }, - .window[1] = { - .type = SOF_IPC_REGION_DOWNBOX, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_HOSTBOX_SIZE, - .offset = MAILBOX_HOSTBOX_OFFSET, - }, - .window[2] = { - .type = SOF_IPC_REGION_DEBUG, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DEBUG_SIZE, - .offset = MAILBOX_DEBUG_OFFSET, - }, - .window[3] = { - .type = SOF_IPC_REGION_TRACE, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_TRACE_SIZE, - .offset = MAILBOX_TRACE_OFFSET, - }, - .window[4] = { - .type = SOF_IPC_REGION_STREAM, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_STREAM_SIZE, - .offset = MAILBOX_STREAM_OFFSET, - }, - .window[5] = { - .type = SOF_IPC_REGION_EXCEPTION, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_EXCEPTION_SIZE, - .offset = MAILBOX_EXCEPTION_OFFSET, + .window = { + { + .type = SOF_IPC_REGION_UPBOX, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_DSPBOX_SIZE, + .offset = MAILBOX_DSPBOX_OFFSET, + }, + { + .type = SOF_IPC_REGION_DOWNBOX, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_HOSTBOX_SIZE, + .offset = MAILBOX_HOSTBOX_OFFSET, + }, + { + .type = SOF_IPC_REGION_DEBUG, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_DEBUG_SIZE, + .offset = MAILBOX_DEBUG_OFFSET, + }, + { + .type = SOF_IPC_REGION_TRACE, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_TRACE_SIZE, + .offset = MAILBOX_TRACE_OFFSET, + }, + { + .type = SOF_IPC_REGION_STREAM, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_STREAM_SIZE, + .offset = MAILBOX_STREAM_OFFSET, + }, + { + .type = SOF_IPC_REGION_EXCEPTION, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_EXCEPTION_SIZE, + .offset = MAILBOX_EXCEPTION_OFFSET, + }, }, }; diff --git a/src/platform/cannonlake/boot_ldr.x.in b/src/platform/cannonlake/boot_ldr.x.in index a42fd897..b85bfab2 100644 --- a/src/platform/cannonlake/boot_ldr.x.in +++ b/src/platform/cannonlake/boot_ldr.x.in @@ -21,7 +21,7 @@ MEMORY org = IMR_BOOT_LDR_LIT_BASE, len = IMR_BOOT_LDR_LIT_SIZE reef_text : - org = IMR_BOOT_LDR_TEXT_BASE, + org = IMR_BOOT_LDR_TEXT_BASE, len = IMR_BOOT_LDR_TEXT_SIZE, vector_base_text : org = XCHAL_VECBASE_RESET_PADDR, @@ -81,7 +81,7 @@ MEMORY org = XCHAL_DOUBLEEXC_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE reef_data : - org = IMR_BOOT_LDR_DATA_BASE, + org = IMR_BOOT_LDR_DATA_BASE, len = IMR_BOOT_LDR_DATA_SIZE reef_bss_data : org = IMR_BOOT_LDR_BSS_BASE, @@ -148,6 +148,9 @@ SECTIONS *(.fini.literal) KEEP(*(.fini)) *(.gnu.version) + KEEP (*(.ResetVector.text)) + KEEP (*(.ResetHandler.text)) + KEEP (*(.MemoryExceptionVector.text)) _text_end = ABSOLUTE(.); _etext = .; } >reef_text :reef_text_phdr diff --git a/src/platform/cannonlake/cannonlake.x.in b/src/platform/cannonlake/cannonlake.x.in index 47acd5e0..2a52d674 100644 --- a/src/platform/cannonlake/cannonlake.x.in +++ b/src/platform/cannonlake/cannonlake.x.in @@ -21,79 +21,79 @@ MEMORY org = XCHAL_RESET_VECTOR0_PADDR + REEF_MEM_RESET_TEXT_SIZE, len = REEF_MEM_RESET_LIT_SIZE vector_memory_lit : - org = XCHAL_MEMERROR_VECTOR_PADDR + REEF_MEM_ERROR_LIT_SIZE, + org = XCHAL_MEMERROR_VECTOR_PADDR + REEF_MEM_ERROR_LIT_SIZE, len = REEF_MEM_ERROR_LIT_SIZE vector_memory_text : - org = XCHAL_MEMERROR_VECTOR_PADDR, + org = XCHAL_MEMERROR_VECTOR_PADDR, len = REEF_MEM_ERROR_TEXT_SIZE vector_base_text : - org = XCHAL_VECBASE_RESET_PADDR, + org = XCHAL_VECBASE_RESET_PADDR, len = REEF_MEM_VECBASE_LIT_SIZE vector_int2_lit : - org = XCHAL_INTLEVEL2_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_INTLEVEL2_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_int2_text : org = XCHAL_INTLEVEL2_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_int3_lit : - org = XCHAL_INTLEVEL3_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_INTLEVEL3_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_int3_text : - org = XCHAL_INTLEVEL3_VECTOR_PADDR, + org = XCHAL_INTLEVEL3_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_int4_lit : - org = XCHAL_INTLEVEL4_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_INTLEVEL4_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_int4_text : - org = XCHAL_INTLEVEL4_VECTOR_PADDR, + org = XCHAL_INTLEVEL4_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_int5_lit : - org = XCHAL_INTLEVEL5_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_INTLEVEL5_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_int5_text : - org = XCHAL_INTLEVEL5_VECTOR_PADDR, + org = XCHAL_INTLEVEL5_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_int6_lit : - org = XCHAL_INTLEVEL6_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_INTLEVEL6_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_int6_text : - org = XCHAL_INTLEVEL6_VECTOR_PADDR, + org = XCHAL_INTLEVEL6_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_int7_lit : - org = XCHAL_INTLEVEL7_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_INTLEVEL7_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_int7_text : - org = XCHAL_INTLEVEL7_VECTOR_PADDR, + org = XCHAL_INTLEVEL7_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_kernel_lit : - org = XCHAL_KERNEL_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_KERNEL_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_kernel_text : - org = XCHAL_KERNEL_VECTOR_PADDR, + org = XCHAL_KERNEL_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_user_lit : - org = XCHAL_USER_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_USER_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_user_text : - org = XCHAL_USER_VECTOR_PADDR, + org = XCHAL_USER_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE vector_double_lit : - org = XCHAL_DOUBLEEXC_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, + org = XCHAL_DOUBLEEXC_VECTOR_PADDR - REEF_MEM_VECT_LIT_SIZE, len = REEF_MEM_VECT_LIT_SIZE vector_double_text : - org = XCHAL_DOUBLEEXC_VECTOR_PADDR, + org = XCHAL_DOUBLEEXC_VECTOR_PADDR, len = REEF_MEM_VECT_TEXT_SIZE reef_text_start : - org = REEF_TEXT_START, + org = REEF_TEXT_START, len = REEF_TEXT_START_SIZE, reef_text : - org = REEF_TEXT_BASE, + org = REEF_TEXT_BASE, len = REEF_TEXT_SIZE, reef_data : - org = REEF_TEXT_BASE + REEF_TEXT_SIZE, + org = REEF_TEXT_BASE + REEF_TEXT_SIZE, len = REEF_DATA_SIZE reef_bss_data : - org = REEF_TEXT_BASE + REEF_TEXT_SIZE + REEF_DATA_SIZE, + org = REEF_TEXT_BASE + REEF_TEXT_SIZE + REEF_DATA_SIZE, len = REEF_BSS_DATA_SIZE system_heap : org = HEAP_SYSTEM_BASE, @@ -350,6 +350,7 @@ SECTIONS *(.fini.literal) KEEP(*(.fini)) *(.gnu.version) + KEEP (*(.ResetHandler.text)) _text_end = ABSOLUTE(.); _etext = .; } >reef_text :reef_text_phdr diff --git a/src/platform/cannonlake/include/platform/platform.h b/src/platform/cannonlake/include/platform/platform.h index 764ef76a..44345bc3 100644 --- a/src/platform/cannonlake/include/platform/platform.h +++ b/src/platform/cannonlake/include/platform/platform.h @@ -120,7 +120,7 @@ struct reef; #define platform_trace_point(__x) \ sw_reg_write(SRAM_REG_FW_TRACEP, __x) -struct timer *platform_timer; +extern struct timer *platform_timer; /* * APIs declared here are defined for every platform and IPC mechanism. diff --git a/src/platform/cannonlake/platform.c b/src/platform/cannonlake/platform.c index 1f1fd2fc..a0198e5b 100644 --- a/src/platform/cannonlake/platform.c +++ b/src/platform/cannonlake/platform.c @@ -80,54 +80,56 @@ static const struct sof_ipc_window sram_window = { .type = SOF_IPC_EXT_WINDOW, }, .num_windows = NUM_CNL_WINDOWS, - .window[0] = { - .type = SOF_IPC_REGION_REGS, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_SW_REG_SIZE, - .offset = 0, - }, - .window[1] = { - .type = SOF_IPC_REGION_UPBOX, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DSPBOX_SIZE, - .offset = MAILBOX_SW_REG_SIZE, - }, - .window[2] = { - .type = SOF_IPC_REGION_DOWNBOX, - .id = 1, /* map to host window 1 */ - .flags = 0, // TODO: set later - .size = MAILBOX_HOSTBOX_SIZE, - .offset = 0, - }, - .window[3] = { - .type = SOF_IPC_REGION_DEBUG, - .id = 2, /* map to host window 2 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DEBUG_SIZE, - .offset = 0, - }, - .window[4] = { - .type = SOF_IPC_REGION_EXCEPTION, - .id = 2, /* map to host window 2 */ - .flags = 0, // TODO: set later - .size = MAILBOX_EXCEPTION_SIZE, - .offset = MAILBOX_EXCEPTION_OFFSET, - }, - .window[5] = { - .type = SOF_IPC_REGION_STREAM, - .id = 2, /* map to host window 2 */ - .flags = 0, // TODO: set later - .size = MAILBOX_STREAM_SIZE, - .offset = MAILBOX_STREAM_OFFSET, - }, - .window[6] = { - .type = SOF_IPC_REGION_TRACE, - .id = 3, /* map to host window 3 */ - .flags = 0, // TODO: set later - .size = MAILBOX_TRACE_SIZE, - .offset = 0, + .window = { + { + .type = SOF_IPC_REGION_REGS, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_SW_REG_SIZE, + .offset = 0, + }, + { + .type = SOF_IPC_REGION_UPBOX, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_DSPBOX_SIZE, + .offset = MAILBOX_SW_REG_SIZE, + }, + { + .type = SOF_IPC_REGION_DOWNBOX, + .id = 1, /* map to host window 1 */ + .flags = 0, // TODO: set later + .size = MAILBOX_HOSTBOX_SIZE, + .offset = 0, + }, + { + .type = SOF_IPC_REGION_DEBUG, + .id = 2, /* map to host window 2 */ + .flags = 0, // TODO: set later + .size = MAILBOX_EXCEPTION_SIZE + MAILBOX_DEBUG_SIZE, + .offset = 0, + }, + { + .type = SOF_IPC_REGION_EXCEPTION, + .id = 2, /* map to host window 2 */ + .flags = 0, // TODO: set later + .size = MAILBOX_EXCEPTION_SIZE, + .offset = MAILBOX_EXCEPTION_OFFSET, + }, + { + .type = SOF_IPC_REGION_STREAM, + .id = 2, /* map to host window 2 */ + .flags = 0, // TODO: set later + .size = MAILBOX_STREAM_SIZE, + .offset = MAILBOX_STREAM_OFFSET, + }, + { + .type = SOF_IPC_REGION_TRACE, + .id = 3, /* map to host window 3 */ + .flags = 0, // TODO: set later + .size = MAILBOX_TRACE_SIZE, + .offset = 0, + }, }, }; diff --git a/src/platform/haswell/platform.c b/src/platform/haswell/platform.c index e9270ac1..30e8e5d7 100644 --- a/src/platform/haswell/platform.c +++ b/src/platform/haswell/platform.c @@ -78,47 +78,49 @@ static const struct sof_ipc_window sram_window = { .type = SOF_IPC_EXT_WINDOW, }, .num_windows = NUM_HSW_WINDOWS, - .window[0] = { - .type = SOF_IPC_REGION_UPBOX, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DSPBOX_SIZE, - .offset = MAILBOX_DSPBOX_OFFSET, - }, - .window[1] = { - .type = SOF_IPC_REGION_DOWNBOX, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_HOSTBOX_SIZE, - .offset = MAILBOX_HOSTBOX_OFFSET, - }, - .window[2] = { - .type = SOF_IPC_REGION_DEBUG, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_DEBUG_SIZE, - .offset = MAILBOX_DEBUG_OFFSET, - }, - .window[3] = { - .type = SOF_IPC_REGION_TRACE, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_TRACE_SIZE, - .offset = MAILBOX_TRACE_OFFSET, - }, - .window[4] = { - .type = SOF_IPC_REGION_STREAM, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_STREAM_SIZE, - .offset = MAILBOX_STREAM_OFFSET, - }, - .window[5] = { - .type = SOF_IPC_REGION_EXCEPTION, - .id = 0, /* map to host window 0 */ - .flags = 0, // TODO: set later - .size = MAILBOX_EXCEPTION_SIZE, - .offset = MAILBOX_EXCEPTION_OFFSET, + .window = { + { + .type = SOF_IPC_REGION_UPBOX, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_DSPBOX_SIZE, + .offset = MAILBOX_DSPBOX_OFFSET, + }, + { + .type = SOF_IPC_REGION_DOWNBOX, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_HOSTBOX_SIZE, + .offset = MAILBOX_HOSTBOX_OFFSET, + }, + { + .type = SOF_IPC_REGION_DEBUG, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_DEBUG_SIZE, + .offset = MAILBOX_DEBUG_OFFSET, + }, + { + .type = SOF_IPC_REGION_TRACE, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_TRACE_SIZE, + .offset = MAILBOX_TRACE_OFFSET, + }, + { + .type = SOF_IPC_REGION_STREAM, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_STREAM_SIZE, + .offset = MAILBOX_STREAM_OFFSET, + }, + { + .type = SOF_IPC_REGION_EXCEPTION, + .id = 0, /* map to host window 0 */ + .flags = 0, // TODO: set later + .size = MAILBOX_EXCEPTION_SIZE, + .offset = MAILBOX_EXCEPTION_OFFSET, + }, }, }; -- 2.14.1
2 1
0 0
[Sound-open-firmware] [PATCH] topology: bdw-rt5640: Fix BE DAI name to match legacy driver
by Liam Girdwood 30 Mar '18

30 Mar '18
Now matches legacy driver. Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- topology/reef-bdw-rt5640.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/topology/reef-bdw-rt5640.m4 b/topology/reef-bdw-rt5640.m4 index 53c9610..0a083e4 100644 --- a/topology/reef-bdw-rt5640.m4 +++ b/topology/reef-bdw-rt5640.m4 @@ -76,14 +76,14 @@ SectionGraph."pipe-bdw-rt5640" { # playback DAI is SSP0 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, 0, Audio, + 1, SSP, 0, Codec, PIPELINE_SOURCE_1, 2, s24le, 48, 1000, 0, 0) # capture DAI is SSP0 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, 0, Audio, + 2, SSP, 0, Codec, PIPELINE_SINK_2, 2, s24le, 48, 1000, 0, 0) -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH] Revert "topology: reef-apl-nocodec: use SSP4 for playback and SSP2 for both"
by Liam Girdwood 30 Mar '18

30 Mar '18
This reverts commit 0d63b75d1e74e2fcb9508fc1585db983c7fb3482. Needs multi DAI support scheduled for 1.2 Signed-off-by: Liam Girdwood <liam.r.girdwood(a)linux.intel.com> --- topology/reef-apl-nocodec.m4 | 96 ++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 43 deletions(-) diff --git a/topology/reef-apl-nocodec.m4 b/topology/reef-apl-nocodec.m4 index 72eff0e..78a1a4e 100644 --- a/topology/reef-apl-nocodec.m4 +++ b/topology/reef-apl-nocodec.m4 @@ -19,72 +19,82 @@ include(`dsps/bxt.m4') # # Define the pipelines # -# PCM0 ----> Volume ----> SSP4 -# PCM1 ----> Volume ----> SSP2 -# PCM2 <---- Volume <---- SSP2 +# PCM0 ----> volume ---------------+ +# |--low latency mixer ----> volume ----> SSP2 +# PCM2 ----> SRC -----> volume ----+ +# | +# Tone -----> volume ----+ +# +# PCM1 <---- Volume <---- SSP2 # -# Volume 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-volume-playback.m4, - 1, 0, 2, s16le, - 48, 1000, 0, 0, 0, 1, SSP, 4, s16le, 2) - -# Volume playback pipeline 1 on PCM 0 using max 2 channels of s16le. +# Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s32le. # 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-volume-playback.m4, - 2, 1, 2, s16le, - 48, 1000, 0, 0, 0, 1, SSP, 2, s16le, 2) +PIPELINE_PCM_ADD(sof/pipe-low-latency-playback.m4, + 1, 0, 2, s32le, + 48, 1000, 0, 0, 0, 1) -# Volume playback pipeline 1 on PCM 0 using max 2 channels of s16le. +# Low Latency capture pipeline 2 on PCM 0 using max 2 channels of s32le. # Schedule 48 frames per 1000us deadline on core 0 with priority 0 # Use DMAC 0 channel 2 for PCM audio capture data -PIPELINE_PCM_DAI_ADD(sof/pipe-volume-capture.m4, - 3, 1, 2, s16le, - 48, 1000, 0, 0, 0, 1, SSP, 2, s16le, 2) +PIPELINE_PCM_ADD(sof/pipe-low-latency-capture.m4, + 2, 0, 2, s32le, + 48, 1000, 0, 0, 0, 2) + +# PCM Media Playback pipeline 3 on PCM 1 using max 2 channels of s32le. +# Schedule 96 frames per 2000us deadline on core 0 with priority 1 +# Use DMAC 0 channel 3 for PCM audio playback data +PIPELINE_PCM_ADD(sof/pipe-pcm-media.m4, + 3, 1, 2, s32le, + 96, 2000, 1, 0, 0, 3) + +# Tone Playback pipeline 5 using max 2 channels of s32le. +# Schedule 192 frames per 4000us deadline on core 0 with priority 2 +PIPELINE_ADD(sof/pipe-tone.m4, + 5, 2, s32le, + 192, 4000, 2, 0) + +# Connect pipelines together +SectionGraph."pipe-apl-nocodec" { + index "0" + + lines [ + # media 0 + dapm(PIPELINE_MIXER_1, PIPELINE_SOURCE_3) + #tone + dapm(PIPELINE_MIXER_1, PIPELINE_SOURCE_5) + ] +} # # DAI configuration # - -# playback DAI is SSP4 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, 4, SSP4-NoCodec, - PIPELINE_SOURCE_1, 2, s16le, - 48, 1000, 0, 0) +# 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 +# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0 DAI_ADD(sof/pipe-dai-playback.m4, - 2, SSP, 2, SSP4-NoCodec, - PIPELINE_SOURCE_2, 2, s16le, + 1, SSP, 2, NoCodec, + 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 +# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0 DAI_ADD(sof/pipe-dai-capture.m4, - 3, SSP, 2, SSP2-NoCodec, - PIPELINE_SINK_3, 2, s16le, + 2, SSP, 2, NoCodec, + PIPELINE_SINK_2, 2, s24le, 48, 1000, 0, 0) # PCM Low Latency -PCM_PLAYBACK_ADD(Port4, 1, 0, 0, PIPELINE_PCM_1) -PCM_DUPLEX_ADD(Port2, 4, 1, 1, PIPELINE_PCM_2, PIPELINE_PCM_3) +PCM_DUPLEX_ADD(Low Latency, 6, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2) # # BE configurations - overrides config in ACPI if present # -DAI_CONFIG(SSP, 2, SSP2-NoCodec, I2S, 16, - DAI_CLOCK(mclk, 24576000, slave), - DAI_CLOCK(bclk, 1536000, slave), - DAI_CLOCK(fsync, 48000, slave), - DAI_TDM(2, 16, 3, 3)) - -DAI_CONFIG(SSP, 4, SSP4-NoCodec, I2S, 16, - DAI_CLOCK(mclk, 24576000, slave), - DAI_CLOCK(bclk, 1536000, slave), +DAI_CONFIG(SSP, 2, NoCodec, I2S, 24, + DAI_CLOCK(mclk, 19200000, slave), + DAI_CLOCK(bclk, 2400000, slave), DAI_CLOCK(fsync, 48000, slave), - DAI_TDM(2, 16, 3, 3)) + DAI_TDM(2, 25, 3, 3)) -- 2.14.1
1 0
0 0
[Sound-open-firmware] [PATCH] APL/CNL Fix: Only send position once after copy DMA trace data on APL/CNL.
by yan.wang@linux.intel.com 30 Mar '18

30 Mar '18
From: Yan Wang <yan.wang(a)linux.intel.com> Firmware side should not send position in every trace_work() is called. Signed-off-by: Yan Wang <yan.wang(a)linux.intel.com> --- Test with: Mininow max rt5651 and APL UP^2 nocodec and CNL nocodec SOF 1.1-stable: 98d3a838cb397e91d6c032cf9b39d3748102803e SOF-Tool 1.1-stable: 78ad1ccce5ac689680adc32f8136f5bf551b0f7c https://github.com/plbossart/sound/tree/topic/sof-v4.14: c33cfed51fff5eb156dcf70ba849e6ffb3008377 --- src/include/reef/dma-trace.h | 1 + src/lib/dma-trace.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/include/reef/dma-trace.h b/src/include/reef/dma-trace.h index bf6e3f3..c5982d2 100644 --- a/src/include/reef/dma-trace.h +++ b/src/include/reef/dma-trace.h @@ -56,6 +56,7 @@ struct dma_trace_data { struct dma_sg_config config; struct dma_trace_buf dmatb; struct dma_copy dc; + uint32_t old_host_offset; uint32_t host_offset; uint32_t overflow; uint32_t messages; diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c index d9adb6d..d7ad3d2 100644 --- a/src/lib/dma-trace.c +++ b/src/lib/dma-trace.c @@ -64,7 +64,10 @@ static uint64_t trace_work(void *data, uint64_t delay) * This function will be called once every 500ms at least even * if no new trace is filled. */ - ipc_dma_trace_send_position(); + if (d->old_host_offset != d->host_offset) { + ipc_dma_trace_send_position(); + d->old_host_offset = d->host_offset; + } #endif /* any data to copy ? */ -- 2.14.3
2 1
0 0
[Sound-open-firmware] [PATCH] Fix: Don't update avail trace size when DMA copying fails.
by yan.wang@linux.intel.com 30 Mar '18

30 Mar '18
From: Yan Wang <yan.wang(a)linux.intel.com> When DMA copying fails, its returned copy size is negative error number. So it shouldn't be used to update avail variable. Signed-off-by: Yan Wang <yan.wang(a)linux.intel.com> --- Test with: Mininow max rt5651 and APL UP^2 nocodec and CNL nocodec SOF 1.1-stable: 98d3a838cb397e91d6c032cf9b39d3748102803e SOF-Tool 1.1-stable: 78ad1ccce5ac689680adc32f8136f5bf551b0f7c https://github.com/plbossart/sound/tree/topic/sof-v4.14: c33cfed51fff5eb156dcf70ba849e6ffb3008377 --- src/lib/dma-trace.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c index 21d1a39..d9adb6d 100644 --- a/src/lib/dma-trace.c +++ b/src/lib/dma-trace.c @@ -122,10 +122,11 @@ out: spin_lock_irq(&d->lock, flags); /* disregard any old messages and dont resend them if we overflow */ - if (d->overflow) { - buffer->avail = DMA_TRACE_LOCAL_SIZE - size; - } else { - buffer->avail -= size; + if (size > 0) { + if (d->overflow) + buffer->avail = DMA_TRACE_LOCAL_SIZE - size; + else + buffer->avail -= size; } /* DMA trace copying is done, allow reschedule */ -- 2.14.3
2 1
0 0
[Sound-open-firmware] [PATCH] dw-dma: recover dma status when release
by Xiuli Pan 30 Mar '18

30 Mar '18
From: Pan Xiuli <xiuli.pan(a)linux.intel.com> Resume pause will re-start DMA, which will cause the DMA status diff from buffer COMP. Add a release function to recover the status mainily for LLI now. This patch fixes pause/resume noise issues. Tested-by: Keyon Jie <yang.jie(a)linux.intel.com> Signed-off-by: Pan Xiuli <xiuli.pan(a)linux.intel.com> --- Test with: Mininow max rt5651 SOF 1.1-stable: 98d3a838cb397e91d6c032cf9b39d3748102803e SOF-Tool 1.1-stable: 78ad1ccce5ac689680adc32f8136f5bf551b0f7c https://github.com/plbossart/sound/tree/topic/sof-v4.14: c33cfed51fff5eb156dcf70ba849e6ffb3008377 --- src/audio/dai.c | 21 ++++++++++++++++++--- src/drivers/dw-dma.c | 16 ++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/audio/dai.c b/src/audio/dai.c index 79e877f..9865e02 100644 --- a/src/audio/dai.c +++ b/src/audio/dai.c @@ -558,12 +558,27 @@ static int dai_comp_trigger(struct comp_dev *dev, int cmd) switch (cmd) { case COMP_TRIGGER_START: dai_pointer_init(dev); - /* fall through */ - case COMP_TRIGGER_RELEASE: - /* only start the DAI if we are not XRUN handling */ if (dd->xrun == 0) { + /* start the DAI */ + ret = dma_start(dd->dma, dd->chan); + if (ret < 0) + return ret; + dai_trigger(dd->dai, cmd, dev->params.direction); + } else { + dd->xrun = 0; + } + /* update starting wallclock */ + platform_dai_wallclock(dev, &dd->wallclock); + break; + case COMP_TRIGGER_RELEASE: + /* only start the DAI if we are not XRUN handling */ + if (dd->xrun == 0) { + /* recover the dma status */ + ret = dma_release(dd->dma, dd->chan); + if (ret < 0) + return ret; /* start the DAI */ ret = dma_start(dd->dma, dd->chan); if (ret < 0) diff --git a/src/drivers/dw-dma.c b/src/drivers/dw-dma.c index aac524e..a21ecc5 100644 --- a/src/drivers/dw-dma.c +++ b/src/drivers/dw-dma.c @@ -430,18 +430,22 @@ out: static int dw_dma_release(struct dma *dma, int channel) { struct dma_pdata *p = dma_get_drvdata(dma); + struct dw_lli2 *lli; uint32_t flags; spin_lock_irq(&dma->lock, flags); trace_dma("Dpr"); - if (p->chan[channel].status == COMP_STATE_PAUSED) { - dw_dma_chan_reload_lli(dma, channel); - } - - /* resume and reload DMA */ - p->chan[channel].status = COMP_STATE_ACTIVE; + /* get current lli */ +#if DW_USE_HW_LLI + lli = (struct dw_lli2 *)dw_read(dma, DW_LLP(channel)); +#else + lli = p->chan[channel].lli_current; +#endif + /* get next lli and recover the lli to head for restart */ + lli = (struct dw_lli2 *)lli->llp; + p->chan[channel].lli = lli; spin_unlock_irq(&dma->lock, flags); return 0; -- 2.7.4
3 2
0 0
[Sound-open-firmware] [PATCH] topology: test: remove 2 unsupported passthrough tplg
by Keqiao.Zhang 30 Mar '18

30 Mar '18
Signed-off-by: Keqiao.Zhang <keqiao.zhang(a)linux.intel.com> --- topology/test/tplg-build.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/topology/test/tplg-build.sh b/topology/test/tplg-build.sh index 5926ee7..ff2d144 100755 --- a/topology/test/tplg-build.sh +++ b/topology/test/tplg-build.sh @@ -93,8 +93,6 @@ simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 19200000 I2S simple_test nocodec src "NoCodec" s24le 2 s24le 25 24 2400000 19200000 I2S simple_test codec passthrough "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 I2S -simple_test codec passthrough "SSP2-Codec" s24le 2 s16le 20 16 1920000 19200000 I2S -simple_test codec passthrough "SSP2-Codec" s16le 2 s24le 25 24 2400000 19200000 I2S simple_test codec passthrough "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 I2S simple_test codec volume "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 I2S simple_test codec volume "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 I2S -- 2.11.0
3 2
0 0
[Sound-open-firmware] [PATCH] topology: test: add different ssp modes of topologies for test
by Keqiao.Zhang 30 Mar '18

30 Mar '18
Signed-off-by: Keqiao.Zhang <keqiao.zhang(a)linux.intel.com> --- topology/test/tplg-build.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/topology/test/tplg-build.sh b/topology/test/tplg-build.sh index 96f3f9f..5926ee7 100755 --- a/topology/test/tplg-build.sh +++ b/topology/test/tplg-build.sh @@ -104,14 +104,17 @@ simple_test codec src "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 I2S # for APL simple_test nocodec volume "NoCodec" s16le 4 s16le 16 16 1536000 24576000 I2S +simple_test nocodec volume "NoCodec" s16le 4 s16le 16 16 1536000 24576000 DSP_A simple_test nocodec volume "NoCodec" s24le 4 s16le 16 16 1536000 24576000 I2S simple_test nocodec volume "NoCodec" s32le 4 s16le 16 16 1536000 24576000 I2S simple_test nocodec volume "NoCodec" s16le 4 s24le 32 24 3072000 24576000 I2S simple_test nocodec volume "NoCodec" s24le 4 s24le 32 24 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s24le 4 s24le 32 24 3072000 24576000 DSP_B simple_test nocodec volume "NoCodec" s32le 4 s24le 32 24 3072000 24576000 I2S simple_test nocodec volume "NoCodec" s16le 4 s32le 32 32 3072000 24576000 I2S simple_test nocodec volume "NoCodec" s24le 4 s32le 32 32 3072000 24576000 I2S simple_test nocodec volume "NoCodec" s32le 4 s32le 32 32 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s32le 4 s32le 32 32 3072000 24576000 LEFT_J simple_test codec volume "SSP4-Codec" s16le 4 s16le 16 16 1536000 24576000 I2S simple_test nocodec volume "NoCodec" s16le 5 s16le 16 16 1536000 24576000 I2S simple_test nocodec src "NoCodec" s24le 4 s24le 32 24 3072000 24576000 I2S -- 2.11.0
2 1
0 0
[Sound-open-firmware] [PATCH] topology: ssp: add TEST_SSP_MODE for ssp to support more modes
by Keqiao.Zhang 30 Mar '18

30 Mar '18
Signed-off-by: Keqiao.Zhang <keqiao.zhang(a)linux.intel.com> --- topology/test/test-capture-ssp.m4 | 3 +- topology/test/test-playback-ssp.m4 | 3 +- topology/test/test-ssp.m4 | 3 +- topology/test/tplg-build.sh | 69 ++++++++++++++++++++------------------ 4 files changed, 42 insertions(+), 36 deletions(-) diff --git a/topology/test/test-capture-ssp.m4 b/topology/test/test-capture-ssp.m4 index 3d10d7a..78b6479 100644 --- a/topology/test/test-capture-ssp.m4 +++ b/topology/test/test-capture-ssp.m4 @@ -28,6 +28,7 @@ include(`dsps/byt.m4') # TEST_SSP_BCLK - SSP BCLK in Hz # TEST_SSP_PHY_BITS - SSP physical slot size # TEST_SSP_DATA_BITS - SSP data slot size +# TEST_SSP_MODE - SSP mode e.g. I2S, LEFT_J, DSP_A and DSP_B # # @@ -67,7 +68,7 @@ PCM_CAPTURE_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_2) # # 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_CONFIG(SSP, TEST_SSP_PORT, TEST_DAI_LINK_NAME, TEST_SSP_MODE, TEST_SSP_DATA_BITS, DAI_CLOCK(mclk, TEST_SSP_MCLK, slave), DAI_CLOCK(bclk, TEST_SSP_BCLK, slave), DAI_CLOCK(fsync, 48000, slave), diff --git a/topology/test/test-playback-ssp.m4 b/topology/test/test-playback-ssp.m4 index ab775a4..e4b09ec 100644 --- a/topology/test/test-playback-ssp.m4 +++ b/topology/test/test-playback-ssp.m4 @@ -28,6 +28,7 @@ include(`dsps/byt.m4') # TEST_SSP_BCLK - SSP BCLK in Hz # TEST_SSP_PHY_BITS - SSP physical slot size # TEST_SSP_DATA_BITS - SSP data slot size +# TEST_SSP_MODE - SSP mode e.g. I2S, LEFT_J, DSP_A and DSP_B # # @@ -67,7 +68,7 @@ PCM_PLAYBACK_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_1) # # 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_CONFIG(SSP, TEST_SSP_PORT, TEST_DAI_LINK_NAME, TEST_SSP_MODE, TEST_SSP_DATA_BITS, DAI_CLOCK(mclk, TEST_SSP_MCLK, slave), DAI_CLOCK(bclk, TEST_SSP_BCLK, slave), DAI_CLOCK(fsync, 48000, slave), diff --git a/topology/test/test-ssp.m4 b/topology/test/test-ssp.m4 index fa5fd29..676e19b 100644 --- a/topology/test/test-ssp.m4 +++ b/topology/test/test-ssp.m4 @@ -28,6 +28,7 @@ include(`dsps/byt.m4') # TEST_SSP_BCLK - SSP BCLK in Hz # TEST_SSP_PHY_BITS - SSP physical slot size # TEST_SSP_DATA_BITS - SSP data slot size +# TEST_SSP_MODE - SSP mode e.g. I2S, LEFT_J, DSP_A and DSP_B # # @@ -85,7 +86,7 @@ PCM_DUPLEX_ADD(Passthrough, 3, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2) # # 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_CONFIG(SSP, TEST_SSP_PORT, TEST_DAI_LINK_NAME, TEST_SSP_MODE, TEST_SSP_DATA_BITS, DAI_CLOCK(mclk, TEST_SSP_MCLK, slave), DAI_CLOCK(bclk, TEST_SSP_BCLK, slave), DAI_CLOCK(fsync, 48000, slave), diff --git a/topology/test/tplg-build.sh b/topology/test/tplg-build.sh index 5a6a8f5..96f3f9f 100755 --- a/topology/test/tplg-build.sh +++ b/topology/test/tplg-build.sh @@ -28,11 +28,13 @@ TONE_TEST=test-tone-playback-ssp # 8) dai_data_bits - SSP number of valid data bits per slot/channel # 9) dai_bclk - SSP BCLK in HZ # 10) dai_mclk - SSP MCLK in HZ +# 11) SSP mode - SSP mode e.g. I2S, LEFT_J, DSP_A and DSP_B # + function simple_test { for i in ${SIMPLE_TESTS[@]} do - TFILE="$i$5-$2-$4-$6-48k-$1" + TFILE="$i$5-${11}-$2-$4-$6-48k-$1" echo "M4 pre-processing test $i -> ${TFILE}" m4 ${M4_FLAGS} \ -DTEST_PIPE_NAME="$2" \ @@ -44,6 +46,7 @@ function simple_test { -DTEST_SSP_MCLK=${10} \ -DTEST_SSP_PHY_BITS=$7 \ -DTEST_SSP_DATA_BITS=$8 \ + -DTEST_SSP_MODE=${11} \ $i.m4 > ${TFILE}.conf echo "Compiling test $i -> ${TFILE}.tplg" alsatplg -v 1 -c ${TFILE}.conf -o ${TFILE}.tplg @@ -82,43 +85,43 @@ function tone_test { } # Pre-process the simple tests -simple_test nocodec passthrough "NoCodec" s16le 2 s16le 20 16 1920000 19200000 -simple_test nocodec passthrough "NoCodec" s24le 2 s24le 25 24 2400000 19200000 -simple_test nocodec volume "NoCodec" s16le 2 s16le 20 16 1920000 19200000 -simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000 19200000 -simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 19200000 -simple_test nocodec src "NoCodec" s24le 2 s24le 25 24 2400000 19200000 +simple_test nocodec passthrough "NoCodec" s16le 2 s16le 20 16 1920000 19200000 I2S +simple_test nocodec passthrough "NoCodec" s24le 2 s24le 25 24 2400000 19200000 I2S +simple_test nocodec volume "NoCodec" s16le 2 s16le 20 16 1920000 19200000 I2S +simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000 19200000 I2S +simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 19200000 I2S +simple_test nocodec src "NoCodec" s24le 2 s24le 25 24 2400000 19200000 I2S -simple_test codec passthrough "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 -simple_test codec passthrough "SSP2-Codec" s24le 2 s16le 20 16 1920000 19200000 -simple_test codec passthrough "SSP2-Codec" s16le 2 s24le 25 24 2400000 19200000 -simple_test codec passthrough "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 -simple_test codec volume "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 -simple_test codec volume "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 -simple_test codec volume "SSP2-Codec" s24le 2 s16le 20 16 1920000 19200000 -simple_test codec volume "SSP2-Codec" s16le 2 s24le 25 24 2400000 19200000 -simple_test codec src "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 +simple_test codec passthrough "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 I2S +simple_test codec passthrough "SSP2-Codec" s24le 2 s16le 20 16 1920000 19200000 I2S +simple_test codec passthrough "SSP2-Codec" s16le 2 s24le 25 24 2400000 19200000 I2S +simple_test codec passthrough "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 I2S +simple_test codec volume "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 I2S +simple_test codec volume "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 I2S +simple_test codec volume "SSP2-Codec" s24le 2 s16le 20 16 1920000 19200000 I2S +simple_test codec volume "SSP2-Codec" s16le 2 s24le 25 24 2400000 19200000 I2S +simple_test codec src "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 I2S # for APL -simple_test nocodec volume "NoCodec" s16le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s24le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s32le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s16le 4 s24le 32 24 3072000 24576000 -simple_test nocodec volume "NoCodec" s24le 4 s24le 32 24 3072000 24576000 -simple_test nocodec volume "NoCodec" s32le 4 s24le 32 24 3072000 24576000 -simple_test nocodec volume "NoCodec" s16le 4 s32le 32 32 3072000 24576000 -simple_test nocodec volume "NoCodec" s24le 4 s32le 32 32 3072000 24576000 -simple_test nocodec volume "NoCodec" s32le 4 s32le 32 32 3072000 24576000 -simple_test codec volume "SSP4-Codec" s16le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s16le 5 s16le 16 16 1536000 24576000 -simple_test nocodec src "NoCodec" s24le 4 s24le 32 24 3072000 24576000 +simple_test nocodec volume "NoCodec" s16le 4 s16le 16 16 1536000 24576000 I2S +simple_test nocodec volume "NoCodec" s24le 4 s16le 16 16 1536000 24576000 I2S +simple_test nocodec volume "NoCodec" s32le 4 s16le 16 16 1536000 24576000 I2S +simple_test nocodec volume "NoCodec" s16le 4 s24le 32 24 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s24le 4 s24le 32 24 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s32le 4 s24le 32 24 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s16le 4 s32le 32 32 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s24le 4 s32le 32 32 3072000 24576000 I2S +simple_test nocodec volume "NoCodec" s32le 4 s32le 32 32 3072000 24576000 I2S +simple_test codec volume "SSP4-Codec" s16le 4 s16le 16 16 1536000 24576000 I2S +simple_test nocodec volume "NoCodec" s16le 5 s16le 16 16 1536000 24576000 I2S +simple_test nocodec src "NoCodec" s24le 4 s24le 32 24 3072000 24576000 I2S # for CNL -simple_test nocodec volume "NoCodec" s16le 2 s16le 25 16 2400000 24000000 -simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 24000000 -simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000 24000000 -simple_test nocodec volume "NoCodec" s24le 2 s16le 25 16 2400000 24000000 -simple_test nocodec src "NoCodec" s24le 4 s24le 25 24 2400000 24000000 +simple_test nocodec volume "NoCodec" s16le 2 s16le 25 16 2400000 24000000 I2S +simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 24000000 I2S +simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000 24000000 I2S +simple_test nocodec volume "NoCodec" s24le 2 s16le 25 16 2400000 24000000 I2S +simple_test nocodec src "NoCodec" s24le 4 s24le 25 24 2400000 24000000 I2S # Tone test: Tone component only supports s32le currently tone_test codec tone "SSP2-Codec" s32le 2 s16le 20 16 1920000 19200000 -- 2.11.0
2 1
0 0
[Sound-open-firmware] [PATCH] topology: specify SSP port for NoCodec
by Keyon Jie 29 Mar '18

29 Mar '18
Add prefix 'SSPx-' for stream name 'NoCodec' to match with SOF nocodec driver. Signed-off-by: Keyon Jie <yang.jie(a)linux.intel.com> --- This shoule be merged together with driver patch: [PATCH] ASoC: SOF: nocodec: add more BE dailinks. Tested on GPMRB with: Kernel https://github.com/plbossart/sound/ #topic/sof-v4.14 c2fdacbcda40ecd23944d960d1b1c34529fd284d SOF: git://git.alsa-project.org/sound-open-firmware.git #1.1-stable eba34c566d660c227d5691dcfc010594bd5ddf3d SOFT: git://git.alsa-project.org/sound-open-firmware-tools.git #1.1-stable 739acd1e5e542b09f7b204f44350d676dacf0000 topology/reef-bxt-nocodec.m4 | 6 +++--- topology/reef-byt-nocodec.m4 | 6 +++--- topology/reef-cht-nocodec.m4 | 6 +++--- topology/test/tplg-build.sh | 44 ++++++++++++++++++++++---------------------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/topology/reef-bxt-nocodec.m4 b/topology/reef-bxt-nocodec.m4 index 7e2b624..3ae2401 100644 --- a/topology/reef-bxt-nocodec.m4 +++ b/topology/reef-bxt-nocodec.m4 @@ -76,14 +76,14 @@ SectionGraph."pipe-bxt-nocodec" { # 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, NoCodec, + 1, SSP, 2, SSP2-NoCodec, PIPELINE_SOURCE_1, 2, s24le, 48, 1000, 0, 0) # capture 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-capture.m4, - 2, SSP, 2, NoCodec, + 2, SSP, 2, SSP2-NoCodec, PIPELINE_SINK_2, 2, s24le, 48, 1000, 0, 0) @@ -93,7 +93,7 @@ PCM_DUPLEX_ADD(Low Latency, 6, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2) # # BE configurations - overrides config in ACPI if present # -DAI_CONFIG(SSP, 2, NoCodec, I2S, 24, +DAI_CONFIG(SSP, 2, SSP2-NoCodec, I2S, 24, DAI_CLOCK(mclk, 19200000, slave), DAI_CLOCK(bclk, 2400000, slave), DAI_CLOCK(fsync, 48000, slave), diff --git a/topology/reef-byt-nocodec.m4 b/topology/reef-byt-nocodec.m4 index 3be5d00..9748f21 100644 --- a/topology/reef-byt-nocodec.m4 +++ b/topology/reef-byt-nocodec.m4 @@ -76,14 +76,14 @@ SectionGraph."pipe-byt-nocodec" { # 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, NoCodec, + 1, SSP, 2, SSP2-NoCodec, PIPELINE_SOURCE_1, 2, s24le, 48, 1000, 0, 0) # capture 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-capture.m4, - 2, SSP, 2, NoCodec, + 2, SSP, 2, SSP2-NoCodec, PIPELINE_SINK_2, 2, s24le, 48, 1000, 0, 0) @@ -93,7 +93,7 @@ PCM_DUPLEX_ADD(Low Latency, 6, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2) # # BE configurations - overrides config in ACPI if present # -DAI_CONFIG(SSP, 2, NoCodec, I2S, 24, +DAI_CONFIG(SSP, 2, SSP2-NoCodec, I2S, 24, DAI_CLOCK(mclk, 19200000, slave), DAI_CLOCK(bclk, 2400000, slave), DAI_CLOCK(fsync, 48000, slave), diff --git a/topology/reef-cht-nocodec.m4 b/topology/reef-cht-nocodec.m4 index 3f61e44..260af57 100644 --- a/topology/reef-cht-nocodec.m4 +++ b/topology/reef-cht-nocodec.m4 @@ -76,14 +76,14 @@ SectionGraph."pipe-cht-nocodec" { # 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, NoCodec, + 1, SSP, 2, SSP2-NoCodec, PIPELINE_SOURCE_1, 2, s24le, 48, 1000, 0, 0) # capture 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-capture.m4, - 2, SSP, 2, NoCodec, + 2, SSP, 2, SSP2-NoCodec, PIPELINE_SINK_2, 2, s24le, 48, 1000, 0, 0) @@ -93,7 +93,7 @@ PCM_DUPLEX_ADD(Low Latency, 6, 0, 0, PIPELINE_PCM_1, PIPELINE_PCM_2) # # BE configurations - overrides config in ACPI if present # -DAI_CONFIG(SSP, 2, NoCodec, I2S, 24, +DAI_CONFIG(SSP, 2, SSP2-NoCodec, I2S, 24, DAI_CLOCK(mclk, 19200000, slave), DAI_CLOCK(bclk, 2400000, slave), DAI_CLOCK(fsync, 48000, slave), diff --git a/topology/test/tplg-build.sh b/topology/test/tplg-build.sh index 5a6a8f5..d8d5ad0 100755 --- a/topology/test/tplg-build.sh +++ b/topology/test/tplg-build.sh @@ -82,12 +82,12 @@ function tone_test { } # Pre-process the simple tests -simple_test nocodec passthrough "NoCodec" s16le 2 s16le 20 16 1920000 19200000 -simple_test nocodec passthrough "NoCodec" s24le 2 s24le 25 24 2400000 19200000 -simple_test nocodec volume "NoCodec" s16le 2 s16le 20 16 1920000 19200000 -simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000 19200000 -simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 19200000 -simple_test nocodec src "NoCodec" s24le 2 s24le 25 24 2400000 19200000 +simple_test nocodec passthrough "SSP2-NoCodec" s16le 2 s16le 20 16 1920000 19200000 +simple_test nocodec passthrough "SSP2-NoCodec" s24le 2 s24le 25 24 2400000 19200000 +simple_test nocodec volume "SSP2-NoCodec" s16le 2 s16le 20 16 1920000 19200000 +simple_test nocodec volume "SSP2-NoCodec" s24le 2 s24le 25 24 2400000 19200000 +simple_test nocodec volume "SSP2-NoCodec" s16le 2 s24le 25 24 2400000 19200000 +simple_test nocodec src "SSP2-NoCodec" s24le 2 s24le 25 24 2400000 19200000 simple_test codec passthrough "SSP2-Codec" s16le 2 s16le 20 16 1920000 19200000 simple_test codec passthrough "SSP2-Codec" s24le 2 s16le 20 16 1920000 19200000 @@ -100,25 +100,25 @@ simple_test codec volume "SSP2-Codec" s16le 2 s24le 25 24 2400000 19200000 simple_test codec src "SSP2-Codec" s24le 2 s24le 25 24 2400000 19200000 # for APL -simple_test nocodec volume "NoCodec" s16le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s24le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s32le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s16le 4 s24le 32 24 3072000 24576000 -simple_test nocodec volume "NoCodec" s24le 4 s24le 32 24 3072000 24576000 -simple_test nocodec volume "NoCodec" s32le 4 s24le 32 24 3072000 24576000 -simple_test nocodec volume "NoCodec" s16le 4 s32le 32 32 3072000 24576000 -simple_test nocodec volume "NoCodec" s24le 4 s32le 32 32 3072000 24576000 -simple_test nocodec volume "NoCodec" s32le 4 s32le 32 32 3072000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s16le 4 s16le 16 16 1536000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s24le 4 s16le 16 16 1536000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s32le 4 s16le 16 16 1536000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s16le 4 s24le 32 24 3072000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s24le 4 s24le 32 24 3072000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s32le 4 s24le 32 24 3072000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s16le 4 s32le 32 32 3072000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s24le 4 s32le 32 32 3072000 24576000 +simple_test nocodec volume "SSP4-NoCodec" s32le 4 s32le 32 32 3072000 24576000 simple_test codec volume "SSP4-Codec" s16le 4 s16le 16 16 1536000 24576000 -simple_test nocodec volume "NoCodec" s16le 5 s16le 16 16 1536000 24576000 -simple_test nocodec src "NoCodec" s24le 4 s24le 32 24 3072000 24576000 +simple_test nocodec volume "SSP5-NoCodec" s16le 5 s16le 16 16 1536000 24576000 +simple_test nocodec src "SSP4-NoCodec" s24le 4 s24le 32 24 3072000 24576000 # for CNL -simple_test nocodec volume "NoCodec" s16le 2 s16le 25 16 2400000 24000000 -simple_test nocodec volume "NoCodec" s16le 2 s24le 25 24 2400000 24000000 -simple_test nocodec volume "NoCodec" s24le 2 s24le 25 24 2400000 24000000 -simple_test nocodec volume "NoCodec" s24le 2 s16le 25 16 2400000 24000000 -simple_test nocodec src "NoCodec" s24le 4 s24le 25 24 2400000 24000000 +simple_test nocodec volume "SSP2-NoCodec" s16le 2 s16le 25 16 2400000 24000000 +simple_test nocodec volume "SSP2-NoCodec" s16le 2 s24le 25 24 2400000 24000000 +simple_test nocodec volume "SSP2-NoCodec" s24le 2 s24le 25 24 2400000 24000000 +simple_test nocodec volume "SSP2-NoCodec" s24le 2 s16le 25 16 2400000 24000000 +simple_test nocodec src "SSP2-NoCodec" s24le 4 s24le 25 24 2400000 24000000 # Tone test: Tone component only supports s32le currently tone_test codec tone "SSP2-Codec" s32le 2 s16le 20 16 1920000 19200000 -- 2.14.1
2 2
0 0
  • ← Newer
  • 1
  • ...
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • ...
  • 157
  • Older →

HyperKitty Powered by HyperKitty version 1.3.8.