From 33dbbfb3d6ed8606eacd82ef07c45aa60019aeeb Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Thu, 7 Oct 2021 17:45:37 +0200 Subject: [PATCH] Xtensa: ADSP: bootloader: use proper struct field access Replace byte-counting with proper structure field access. Signed-off-by: Guennadi Liakhovetski --- .../intel_adsp/common/bootloader/boot_loader.c | 12 ++++++------ soc/xtensa/intel_adsp/common/bootloader/manifest.h | 8 +------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/soc/xtensa/intel_adsp/common/bootloader/boot_loader.c b/soc/xtensa/intel_adsp/common/bootloader/boot_loader.c index e7a219f7574..6e94988ff8d 100644 --- a/soc/xtensa/intel_adsp/common/bootloader/boot_loader.c +++ b/soc/xtensa/intel_adsp/common/bootloader/boot_loader.c @@ -99,12 +99,12 @@ static void parse_module(struct sof_man_fw_header *hdr, switch (mod->segment[i].flags.r.type) { case SOF_MAN_SEGMENT_TEXT: case SOF_MAN_SEGMENT_DATA: - bias = (mod->segment[i].file_offset - - SOF_MAN_ELF_TEXT_OFFSET); + bias = mod->segment[i].file_offset - + SOF_MAN_ELF_TEXT_OFFSET; /* copy from IMR to SRAM */ bmemcpy((void *)mod->segment[i].v_base_addr, - (void *)((int)hdr + bias), + (uint8_t *)hdr + bias, mod->segment[i].flags.r.length * HOST_PAGE_SIZE); break; @@ -140,8 +140,8 @@ static uint32_t get_fw_size_in_use(void) /* Calculate fw size passed in BASEFW module in MANIFEST */ for (i = MAN_SKIP_ENTRIES; i < hdr->num_module_entries; i++) { - mod = (struct sof_man_module *)((char *)desc + - SOF_MAN_MODULE_OFFSET(i)); + mod = desc->man_module + i; + if (strcmp((char *)mod->name, "BASEFW")) continue; for (i = 0; i < MANIFEST_SEGMENT_COUNT; i++) { @@ -172,8 +172,8 @@ static void parse_manifest(void) /* copy module to SRAM - skip bootloader module */ for (i = MAN_SKIP_ENTRIES; i < hdr->num_module_entries; i++) { + mod = desc->man_module + i; - mod = (void *)((uintptr_t)desc + SOF_MAN_MODULE_OFFSET(i)); z_xtensa_cache_inv(mod, sizeof(*mod)); parse_module(hdr, mod); } diff --git a/soc/xtensa/intel_adsp/common/bootloader/manifest.h b/soc/xtensa/intel_adsp/common/bootloader/manifest.h index f329032fc12..9ac61af3b54 100644 --- a/soc/xtensa/intel_adsp/common/bootloader/manifest.h +++ b/soc/xtensa/intel_adsp/common/bootloader/manifest.h @@ -156,6 +156,7 @@ struct sof_man_fw_desc { * struct sof_man_mod_config mod_config[]; */ + struct sof_man_module man_module[]; } __attribute__((packed)); /* @@ -189,11 +190,4 @@ struct sof_man_module_manifest { uint32_t text_size; }; -/* - * Module offset in manifest. - */ -#define SOF_MAN_MODULE_OFFSET(index) \ - (sizeof(struct sof_man_fw_header) + \ - (index) * sizeof(struct sof_man_module)) - #endif