From 6297906d971622330a870d9c97ce0838b2222af3 Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Tue, 15 Dec 2020 16:48:41 +0100 Subject: [PATCH 1/3] ext_man: Remove dictionary elements counter from ABI for ext_man_config_data This value shouldn't be included in any ABI header, because it may vary between firmware configurations. This change makes header file more similar to version provided by kernel. Signed-off-by: Karol Trzcinski --- src/include/kernel/ext_manifest.h | 2 +- src/init/ext_manifest.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/include/kernel/ext_manifest.h b/src/include/kernel/ext_manifest.h index 4963428733ae..17fd262fd885 100644 --- a/src/include/kernel/ext_manifest.h +++ b/src/include/kernel/ext_manifest.h @@ -95,7 +95,7 @@ struct ext_man_dbg_abi { struct ext_man_config_data { struct ext_man_elem_header hdr; - struct config_elem elems[EXT_MAN_CONFIG_LAST_ELEM]; + struct config_elem elems[]; } __packed; #endif /* __KERNEL_EXT_MANIFEST_H__ */ diff --git a/src/init/ext_manifest.c b/src/init/ext_manifest.c index 2e9b5b5574f5..6568ffebf419 100644 --- a/src/init/ext_manifest.c +++ b/src/init/ext_manifest.c @@ -85,10 +85,14 @@ const struct ext_man_dbg_abi ext_man_dbg_info }, }; +/* increment this value after adding any element to ext_man_config dictionary */ +#define CONFIG_ELEM_CNT (EXT_MAN_CONFIG_LAST_ELEM - 1) + const struct ext_man_config_data ext_man_config __aligned(EXT_MAN_ALIGN) __section(".fw_metadata") = { .hdr.type = EXT_MAN_ELEM_CONFIG_DATA, - .hdr.elem_size = ALIGN_UP(sizeof(struct ext_man_config_data), + .hdr.elem_size = ALIGN_UP(sizeof(struct ext_man_config_data) + + sizeof(struct config_elem) * CONFIG_ELEM_CNT, EXT_MAN_ALIGN), .elems = { {EXT_MAN_CONFIG_IPC_MSG_SIZE, SOF_IPC_MSG_MAX_SIZE}, From e703310d7e6377baa32b8c039f11abdcafdc8fd5 Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Tue, 15 Dec 2020 16:52:50 +0100 Subject: [PATCH 2/3] ext_man: cavs: Always include EXT_MAN_CAVS_CONFIG_LPRO element to manifest This value should be included to output image with proper value instead of including only for some configurations. It will reduce dictionary element counting complexity. Signed-off-by: Karol Trzcinski --- src/platform/intel/cavs/ext_manifest.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/platform/intel/cavs/ext_manifest.c b/src/platform/intel/cavs/ext_manifest.c index b8b2dec715bf..c671421e5410 100644 --- a/src/platform/intel/cavs/ext_manifest.c +++ b/src/platform/intel/cavs/ext_manifest.c @@ -16,9 +16,7 @@ const struct ext_man_cavs_config_data ext_man_cavs_config .hdr.elem_size = ALIGN_UP(sizeof(struct ext_man_cavs_config_data), EXT_MAN_ALIGN), .elems = { -#if CONFIG_CAVS_LPRO_ONLY - {EXT_MAN_CAVS_CONFIG_LPRO, CONFIG_CAVS_LPRO_ONLY}, -#endif + {EXT_MAN_CAVS_CONFIG_LPRO, IS_ENABLED(CONFIG_CAVS_LPRO_ONLY)}, {EXT_MAN_CAVS_CONFIG_OUTBOX_SIZE, SRAM_OUTBOX_SIZE}, {EXT_MAN_CAVS_CONFIG_INBOX_SIZE, SRAM_INBOX_SIZE}, }, From 7e9fd5d7ae3e4b28ce9697955ffa661ef77c3c90 Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Mon, 21 Dec 2020 09:32:59 +0100 Subject: [PATCH 3/3] ext_man: Remove dictionary elements counter from ABI for ext_man_cavs_config_data This value shouldn't be included in any ABI header, because it may vary between firmware configurations. This change makes header file more similar to version provided by kernel. Signed-off-by: Karol Trzcinski --- src/platform/intel/cavs/ext_manifest.c | 6 +++++- src/platform/intel/cavs/include/cavs/ext_manifest.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/platform/intel/cavs/ext_manifest.c b/src/platform/intel/cavs/ext_manifest.c index c671421e5410..4325c46aca2c 100644 --- a/src/platform/intel/cavs/ext_manifest.c +++ b/src/platform/intel/cavs/ext_manifest.c @@ -10,10 +10,14 @@ #include #include +/* Describes elements counter from ext_man_cavs_config dictionary */ +#define CAVS_CONFIG_ELEM_CNT (EXT_MAN_CAVS_CONFIG_LAST_ELEM - 1) + const struct ext_man_cavs_config_data ext_man_cavs_config __aligned(EXT_MAN_ALIGN) __section(".fw_metadata") = { .hdr.type = EXT_MAN_ELEM_PLATFORM_CONFIG_DATA, - .hdr.elem_size = ALIGN_UP(sizeof(struct ext_man_cavs_config_data), + .hdr.elem_size = ALIGN_UP(sizeof(struct ext_man_cavs_config_data) + + sizeof(struct config_elem) * CAVS_CONFIG_ELEM_CNT, EXT_MAN_ALIGN), .elems = { {EXT_MAN_CAVS_CONFIG_LPRO, IS_ENABLED(CONFIG_CAVS_LPRO_ONLY)}, diff --git a/src/platform/intel/cavs/include/cavs/ext_manifest.h b/src/platform/intel/cavs/include/cavs/ext_manifest.h index 305b29463273..3eaf2d3d6c49 100644 --- a/src/platform/intel/cavs/include/cavs/ext_manifest.h +++ b/src/platform/intel/cavs/include/cavs/ext_manifest.h @@ -22,7 +22,7 @@ enum cavs_config_elem_type { struct ext_man_cavs_config_data { struct ext_man_elem_header hdr; - struct config_elem elems[EXT_MAN_CAVS_CONFIG_LAST_ELEM]; + struct config_elem elems[]; } __packed; #endif /* __KERNEL_EXT_MANIFEST_H__ */