[Sound-open-firmware] [PATCH v2] cnl: core: Add support for xcc

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Fri Mar 30 16:21:52 CEST 2018


On 3/30/18 8:45 AM, Liam Girdwood wrote:
> 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 at linux.intel.com>
> 
> # Conflicts:
> #	src/platform/apollolake/platform.c
> #	src/platform/cannonlake/platform.c

looks like the merge didn't work too well or there was a missing patch 
from the exception handling on some other branch?

> ---
>   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,
> +		},
>   	},
>   };
>   
> 



More information about the Sound-open-firmware mailing list