manifest: Use module manifest from toml as a template for elf modules

The manifest for elf modules is read from their .module section.
The modules configuration parsed from a toml file was completely ignored.
After this change, the parsed configuration is treated as a template for
the module manifest.

Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
This commit is contained in:
Adrian Warecki 2023-03-31 12:50:25 +02:00 committed by Liam Girdwood
parent debf4cf605
commit 25804e7dc8
2 changed files with 14 additions and 2 deletions

View File

@ -662,6 +662,10 @@ static int man_create_modules(struct image *image, struct sof_man_fw_desc *desc,
for (; i < image->num_modules; i++) { for (; i < image->num_modules; i++) {
man_module = (void *)desc + SOF_MAN_MODULE_OFFSET(i - offset); man_module = (void *)desc + SOF_MAN_MODULE_OFFSET(i - offset);
/* Use manifest created using toml files as template */
assert(i < image->adsp->modules->mod_man_count);
memcpy(man_module, &image->adsp->modules->mod_man[i], sizeof(*man_module));
module = &image->module[i]; module = &image->module[i];
if (i == 0) if (i == 0)
@ -693,12 +697,14 @@ static void man_create_modules_in_config(struct image *image, struct sof_man_fw_
if (!modules) if (!modules)
return; return;
/*skip bringup and base module */ /* skip modules passed as parameters. Their manifests have already been copied by the
for (i = 2; i < modules->mod_man_count; i++) { * man_create_modules function. */
for (i = image->num_modules; i < modules->mod_man_count; i++) {
man_module = (void *)desc + SOF_MAN_MODULE_OFFSET(i); man_module = (void *)desc + SOF_MAN_MODULE_OFFSET(i);
memcpy(man_module, &modules->mod_man[i], sizeof(*man_module)); memcpy(man_module, &modules->mod_man[i], sizeof(*man_module));
} }
/* We need to copy the configurations for all modules. */
cfg_start = (void *)desc + SOF_MAN_MODULE_OFFSET(i); cfg_start = (void *)desc + SOF_MAN_MODULE_OFFSET(i);
memcpy(cfg_start, modules->mod_cfg, modules->mod_cfg_count * sizeof(struct sof_man_mod_config)); memcpy(cfg_start, modules->mod_cfg, modules->mod_cfg_count * sizeof(struct sof_man_mod_config));

View File

@ -206,6 +206,12 @@ int main(int argc, char *argv[])
goto out; goto out;
} }
if (image.num_modules > image.adsp->modules->mod_man_count) {
fprintf(stderr, "error: Each ELF input module requires entry in toml file.\n");
ret = -EINVAL;
goto out;
}
/* getopt reorders argv[] */ /* getopt reorders argv[] */
for (i = first_non_opt; i < argc; i++) { for (i = first_non_opt; i < argc; i++) {
/* When there is more than one module, then first one is bootloader. /* When there is more than one module, then first one is bootloader.