mirror of https://github.com/thesofproject/sof.git
rimage: manifest: Move text offset into non immutable ROM structure.
text_offset was added to an immutable ROM structure that would break some tools and cause instability. Fix this by creating a new structure for rimage manifest data that can be modified without breaking the ROM ABI. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
This commit is contained in:
parent
d5def3349b
commit
f65131645f
|
@ -194,7 +194,7 @@ static int man_get_module_manifest(struct image *image, struct module *module,
|
|||
{
|
||||
Elf32_Shdr *section;
|
||||
struct sof_man_segment_desc *segment;
|
||||
struct sof_man_module sof_mod;
|
||||
struct sof_man_module_manifest sof_mod;
|
||||
size_t count;
|
||||
int ret, man_section_idx;
|
||||
|
||||
|
@ -224,14 +224,14 @@ static int man_get_module_manifest(struct image *image, struct module *module,
|
|||
|
||||
/* configure man_module with sofmod data */
|
||||
memcpy(man_module->struct_id, "$AME", 4);
|
||||
man_module->entry_point = sof_mod.entry_point;
|
||||
memcpy(man_module->name, sof_mod.name, SOF_MAN_MOD_NAME_LEN);
|
||||
memcpy(man_module->uuid, sof_mod.uuid, 16);
|
||||
man_module->affinity_mask = sof_mod.affinity_mask;
|
||||
man_module->type.auto_start = sof_mod.type.auto_start;
|
||||
man_module->type.domain_dp = sof_mod.type.domain_dp;
|
||||
man_module->type.domain_ll = sof_mod.type.domain_ll;
|
||||
man_module->type.load_type = sof_mod.type.load_type;
|
||||
man_module->entry_point = sof_mod.module.entry_point;
|
||||
memcpy(man_module->name, sof_mod.module.name, SOF_MAN_MOD_NAME_LEN);
|
||||
memcpy(man_module->uuid, sof_mod.module.uuid, 16);
|
||||
man_module->affinity_mask = sof_mod.module.affinity_mask;
|
||||
man_module->type.auto_start = sof_mod.module.type.auto_start;
|
||||
man_module->type.domain_dp = sof_mod.module.type.domain_dp;
|
||||
man_module->type.domain_ll = sof_mod.module.type.domain_ll;
|
||||
man_module->type.load_type = sof_mod.module.type.load_type;
|
||||
|
||||
/* read out text_fixup_size from memory mapping */
|
||||
module->text_fixup_size = sof_mod.text_size;
|
||||
|
|
|
@ -75,7 +75,7 @@ union sof_man_segment_flags {
|
|||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Module segment descriptor.
|
||||
* Module segment descriptor. Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_segment_desc {
|
||||
union sof_man_segment_flags flags;
|
||||
|
@ -93,7 +93,7 @@ struct sof_man_segment_desc {
|
|||
#define SOF_MAN_MOD_ID {'$', 'A', 'M', 'E'}
|
||||
|
||||
/*
|
||||
* Each module has an entry in the FW header.
|
||||
* Each module has an entry in the FW header. Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_module {
|
||||
uint8_t struct_id[SOF_MAN_MOD_ID_LEN]; /* SOF_MAN_MOD_ID */
|
||||
|
@ -102,7 +102,6 @@ struct sof_man_module {
|
|||
struct sof_man_module_type type;
|
||||
uint8_t hash[SOF_MAN_MOD_SHA256_LEN];
|
||||
uint32_t entry_point;
|
||||
uint32_t text_size;
|
||||
uint16_t cfg_offset;
|
||||
uint16_t cfg_count;
|
||||
uint32_t affinity_mask;
|
||||
|
@ -112,7 +111,7 @@ struct sof_man_module {
|
|||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Each module has a configuration in the FW header.
|
||||
* Each module has a configuration in the FW header. Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_mod_config {
|
||||
uint32_t par[4]; /* module parameters */
|
||||
|
@ -138,9 +137,9 @@ struct sof_man_mod_config {
|
|||
|
||||
/*
|
||||
* The firmware has a standard header that is checked by the ROM on firmware
|
||||
* loading.
|
||||
* preload_page_count is used by DMA code loader and is entire image size on
|
||||
* CNL. i.e. CNL: total size of the binary’s .text and .rodata
|
||||
* loading. preload_page_count is used by DMA code loader and is entire
|
||||
* image size on CNL. i.e. CNL: total size of the binary’s .text and .rodata
|
||||
* Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_fw_header {
|
||||
uint8_t header_id[4];
|
||||
|
@ -163,7 +162,7 @@ struct sof_man_fw_header {
|
|||
|
||||
/*
|
||||
* Firmware manifest descriptor. This can contain N modules and N module
|
||||
* configs.
|
||||
* configs. Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_fw_desc {
|
||||
struct sof_man_fw_header header;
|
||||
|
@ -181,7 +180,7 @@ struct sof_man_fw_desc {
|
|||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Component Descriptor
|
||||
* Component Descriptor. Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_component_desc {
|
||||
uint32_t reserved[2]; /* all 0 */
|
||||
|
@ -194,7 +193,7 @@ struct sof_man_component_desc {
|
|||
|
||||
|
||||
/*
|
||||
* Audio DSP extended metadata.
|
||||
* Audio DSP extended metadata. Used by ROM - Immutable.
|
||||
*/
|
||||
struct sof_man_adsp_meta_file_ext {
|
||||
uint32_t ext_type; /* always 17 for ADSP extension */
|
||||
|
@ -204,6 +203,14 @@ struct sof_man_adsp_meta_file_ext {
|
|||
struct sof_man_component_desc comp_desc[1];
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Module Manifest for rimage module metadata. Not used by ROM.
|
||||
*/
|
||||
struct sof_man_module_manifest {
|
||||
struct sof_man_module module;
|
||||
uint32_t text_size;
|
||||
};
|
||||
|
||||
/* utility to get module pointer from position */
|
||||
static inline struct sof_man_module *sof_man_get_module(
|
||||
struct sof_man_fw_desc *desc, int index)
|
||||
|
|
|
@ -36,16 +36,18 @@
|
|||
* the SOF executable image but is inserted by object copy as a ELF section
|
||||
* for parsing by rimage (to genrate the manifest).
|
||||
*/
|
||||
struct sof_man_module apl_manifest = {
|
||||
.name = "BASEFW",
|
||||
.uuid = {0x2e, 0x9e, 0x86, 0xfc, 0xf8, 0x45, 0x45, 0x40,
|
||||
0xa4, 0x16, 0x89, 0x88, 0x0a, 0xe3, 0x20, 0xa9},
|
||||
.entry_point = REEF_TEXT_START,
|
||||
.type = {
|
||||
.load_type = SOF_MAN_MOD_TYPE_MODULE,
|
||||
.domain_ll = 1,
|
||||
struct sof_man_module_manifest apl_manifest = {
|
||||
.module = {
|
||||
.name = "BASEFW",
|
||||
.uuid = {0x2e, 0x9e, 0x86, 0xfc, 0xf8, 0x45, 0x45, 0x40,
|
||||
0xa4, 0x16, 0x89, 0x88, 0x0a, 0xe3, 0x20, 0xa9},
|
||||
.entry_point = REEF_TEXT_START,
|
||||
.type = {
|
||||
.load_type = SOF_MAN_MOD_TYPE_MODULE,
|
||||
.domain_ll = 1,
|
||||
},
|
||||
.affinity_mask = 3,
|
||||
},
|
||||
.affinity_mask = 3,
|
||||
.text_size = REEF_TEXT_SIZE + L2_VECTOR_SIZE,
|
||||
};
|
||||
|
||||
|
|
|
@ -36,16 +36,18 @@
|
|||
* the SOF executable image but is inserted by object copy as a ELF section
|
||||
* for parsing by rimage (to genrate the manifest).
|
||||
*/
|
||||
struct sof_man_module cnl_manifest = {
|
||||
.name = "BASEFW",
|
||||
.uuid = {0x32, 0x8c, 0x39, 0x0e, 0xde, 0x5a, 0x4b, 0xba,
|
||||
0x93, 0xb1, 0xc5, 0x04, 0x32, 0x28, 0x0e, 0xe4},
|
||||
.entry_point = REEF_TEXT_START,
|
||||
.type = {
|
||||
.load_type = SOF_MAN_MOD_TYPE_MODULE,
|
||||
.domain_ll = 1,
|
||||
struct sof_man_module_manifest cnl_manifest = {
|
||||
.module = {
|
||||
.name = "BASEFW",
|
||||
.uuid = {0x32, 0x8c, 0x39, 0x0e, 0xde, 0x5a, 0x4b, 0xba,
|
||||
0x93, 0xb1, 0xc5, 0x04, 0x32, 0x28, 0x0e, 0xe4},
|
||||
.entry_point = REEF_TEXT_START,
|
||||
.type = {
|
||||
.load_type = SOF_MAN_MOD_TYPE_MODULE,
|
||||
.domain_ll = 1,
|
||||
},
|
||||
.affinity_mask = 3,
|
||||
},
|
||||
.affinity_mask = 3,
|
||||
};
|
||||
|
||||
/* not used, but stops linker complaining */
|
||||
|
|
|
@ -36,16 +36,18 @@
|
|||
* the SOF executable image but is inserted by object copy as a ELF section
|
||||
* for parsing by rimage (to genrate the manifest).
|
||||
*/
|
||||
struct sof_man_module cnl_bootldr_manifest = {
|
||||
.name = "BRNGUP",
|
||||
.uuid = {0xf3, 0xe4, 0x79, 0x2b, 0x75, 0x46, 0x49, 0xf6,
|
||||
0x89, 0xdf, 0x3b, 0xc1, 0x94, 0xa9, 0x1a, 0xeb},
|
||||
.entry_point = IMR_BOOT_LDR_TEXT_ENTRY_BASE,
|
||||
.type = {
|
||||
.load_type = SOF_MAN_MOD_TYPE_MODULE,
|
||||
.domain_ll = 1,
|
||||
struct sof_man_module_manifest cnl_bootldr_manifest = {
|
||||
.module = {
|
||||
.name = "BRNGUP",
|
||||
.uuid = {0xf3, 0xe4, 0x79, 0x2b, 0x75, 0x46, 0x49, 0xf6,
|
||||
0x89, 0xdf, 0x3b, 0xc1, 0x94, 0xa9, 0x1a, 0xeb},
|
||||
.entry_point = IMR_BOOT_LDR_TEXT_ENTRY_BASE,
|
||||
.type = {
|
||||
.load_type = SOF_MAN_MOD_TYPE_MODULE,
|
||||
.domain_ll = 1,
|
||||
},
|
||||
.affinity_mask = 3,
|
||||
},
|
||||
.affinity_mask = 3,
|
||||
};
|
||||
|
||||
/* not used, but stops linker complaining */
|
||||
|
|
Loading…
Reference in New Issue