Write firmware file micro version to manifest for cAVS platforms

SOF CMake can extract FW file version from latest git tag and defines
SOF_MAJOR, SOF_MINOR and SOF_MICRO for 3 version fields. But rimage only
gets major and minor version from SOF CMake and writes them into the
standard firmware manifest header of cAVS platforms.

This patch make rimage also get the micro version from SOF CMake, and
write it to the unused hotfix_version field of manifest header.

This update will enable sof_ri_info.py to dump entire file version from
a FW binary for cAVS platforms. So we can check if a FW release candidate
is built from the correct git tag.

Signed-off-by: mengdonglin <mengdong.lin@intel.com>

update
This commit is contained in:
mengdonglin 2022-05-04 06:25:47 -04:00 committed by Liam Girdwood
parent 05be213d46
commit 9d453321f8
3 changed files with 16 additions and 6 deletions

View File

@ -109,6 +109,7 @@ struct image {
char* fw_ver_build_string;
uint16_t fw_ver_major;
uint16_t fw_ver_minor;
uint16_t fw_ver_micro;
uint16_t fw_ver_build;
};

View File

@ -776,6 +776,7 @@ int man_write_fw_v1_5(struct image *image)
/* firmware and build version */
m->desc.header.major_version = image->fw_ver_major;
m->desc.header.minor_version = image->fw_ver_minor;
m->desc.header.hotfix_version = image->fw_ver_micro;
m->desc.header.build_version = image->fw_ver_build;
/* create each module */
@ -845,6 +846,7 @@ int man_write_fw_v1_5_sue(struct image *image)
/* firmware and build version */
m->desc.header.major_version = image->fw_ver_major;
m->desc.header.minor_version = image->fw_ver_minor;
m->desc.header.hotfix_version = image->fw_ver_micro;
m->desc.header.build_version = image->fw_ver_build;
/* create each module - subtract the boot loader exec header */
@ -916,6 +918,7 @@ int man_write_fw_v1_8(struct image *image)
m->css.version.build_version = image->fw_ver_build;
m->desc.header.major_version = image->fw_ver_major;
m->desc.header.minor_version = image->fw_ver_minor;
m->desc.header.hotfix_version = image->fw_ver_micro;
m->desc.header.build_version = image->fw_ver_build;
/* create each module */
@ -1022,6 +1025,7 @@ int man_write_fw_meu_v1_5(struct image *image)
/* firmware and build version */
desc->header.major_version = image->fw_ver_major;
desc->header.minor_version = image->fw_ver_minor;
desc->header.hotfix_version = image->fw_ver_micro;
desc->header.build_version = image->fw_ver_build;
/* create each module */
@ -1102,6 +1106,7 @@ int man_write_fw_meu_v1_8(struct image *image)
/* firmware and build version */
desc->header.major_version = image->fw_ver_major;
desc->header.minor_version = image->fw_ver_minor;
desc->header.hotfix_version = image->fw_ver_micro;
desc->header.build_version = image->fw_ver_build;
/* create each module */
@ -1182,6 +1187,7 @@ int man_write_fw_meu_v2_5(struct image *image)
/* firmware and build version */
desc->header.major_version = image->fw_ver_major;
desc->header.minor_version = image->fw_ver_minor;
desc->header.hotfix_version = image->fw_ver_micro;
desc->header.build_version = image->fw_ver_build;
/* create each module */
@ -1266,6 +1272,7 @@ int man_write_fw_v2_5(struct image *image)
m->css.version.build_version = image->fw_ver_build;
m->desc.header.major_version = image->fw_ver_major;
m->desc.header.minor_version = image->fw_ver_minor;
m->desc.header.hotfix_version = image->fw_ver_micro;
m->desc.header.build_version = image->fw_ver_build;
/* create each module */

View File

@ -26,7 +26,7 @@ static void usage(char *name)
fprintf(stdout, "\t -r enable relocatable ELF files\n");
fprintf(stdout, "\t -s MEU signing offset, disables rimage signing\n");
fprintf(stdout, "\t -i set IMR type\n");
fprintf(stdout, "\t -f firmware version = x.y\n");
fprintf(stdout, "\t -f firmware version = major.minor.micro\n");
fprintf(stdout, "\t -b build version\n");
fprintf(stdout, "\t -e build extended manifest\n");
fprintf(stdout, "\t -y verify signed file\n");
@ -115,19 +115,21 @@ int main(int argc, char *argv[])
return -EINVAL;
}
/* firmware version and build id */
/* firmware version: major.minor.micro */
if (image.fw_ver_string) {
ret = sscanf(image.fw_ver_string, "%hu.%hu",
ret = sscanf(image.fw_ver_string, "%hu.%hu.%hu",
&image.fw_ver_major,
&image.fw_ver_minor);
&image.fw_ver_minor,
&image.fw_ver_micro);
if (ret != 2) {
if (ret != 3) {
fprintf(stderr,
"error: cannot parse firmware version\n");
"error: cannot parse firmware version major.minor.micro\n");
return -EINVAL;
}
}
/* firmware build id */
if (image.fw_ver_build_string) {
ret = sscanf(image.fw_ver_build_string, "%hu",
&image.fw_ver_build);