author | Nanxin Qin <nanxin.qin@amlogic.com> | 2017-02-16 07:14:45 (GMT) |
---|---|---|
committer | Nanxin Qin <nanxin.qin@amlogic.com> | 2017-02-16 09:51:13 (GMT) |
commit | c942a2ab68780b8be2dceb87de4b5e4c121993e4 (patch) | |
tree | 0dfd360ff845c2f235ce478bb9dffe254c820743 | |
parent | 0662fbe89ee20cd6f5e445aef1bd98f16ccba125 (diff) | |
download | media-c942a2ab68780b8be2dceb87de4b5e4c121993e4.zip media-c942a2ab68780b8be2dceb87de4b5e4c121993e4.tar.gz media-c942a2ab68780b8be2dceb87de4b5e4c121993e4.tar.bz2 |
update info of the firmware config.
Change-Id: Ibb6c4b40346acbd7b04e3acd03e5bf322ba6491c
Signed-off-by: Nanxin Qin <nanxin.qin@amlogic.com>
-rw-r--r-- | drivers/common/firmware/firmware.h | 1 | ||||
-rw-r--r-- | drivers/common/firmware/firmware_cfg.h | 16 | ||||
-rw-r--r-- | drivers/common/firmware/firmware_drv.c | 32 |
3 files changed, 21 insertions, 28 deletions
diff --git a/drivers/common/firmware/firmware.h b/drivers/common/firmware/firmware.h index d1e7c21..b7d56d7 100644 --- a/drivers/common/firmware/firmware.h +++ b/drivers/common/firmware/firmware.h @@ -39,6 +39,7 @@ struct firmware_info_s { }; struct ucode_info_s { + int cpu; enum firmware_type_e type; const char *name; }; diff --git a/drivers/common/firmware/firmware_cfg.h b/drivers/common/firmware/firmware_cfg.h index 577460e..089253c 100644 --- a/drivers/common/firmware/firmware_cfg.h +++ b/drivers/common/firmware/firmware_cfg.h @@ -1,5 +1,5 @@ /* - * drivers/amlogic/media/common/firmware/firmware_info.h + * drivers/amlogic/media/common/firmware/firmware_cfg.h * * Copyright (C) 2016 Amlogic, Inc. All rights reserved. * @@ -15,9 +15,15 @@ * */ -{VIDEO_PACKAGE, "gxl_ucode.bin"}, +/*all firmwares in one bin.*/ +{MESON_CPU_MAJOR_ID_GXBB, VIDEO_PACKAGE, "video_ucode.bin"}, +{MESON_CPU_MAJOR_ID_GXTVBB, VIDEO_PACKAGE, "video_ucode.bin"}, +{MESON_CPU_MAJOR_ID_GXL, VIDEO_PACKAGE, "video_ucode.bin"}, +{MESON_CPU_MAJOR_ID_GXM, VIDEO_PACKAGE, "video_ucode.bin"}, +{MESON_CPU_MAJOR_ID_TXL, VIDEO_PACKAGE, "video_ucode.bin"}, -{VIDEO_DEC_HEVC, "gxl_h265.bin"}, - -{VIDEO_DEC_H264, "gxl_h264.bin"}, +/*firmware for a special format, to replace the format in the package.*/ +{MESON_CPU_MAJOR_ID_GXL, VIDEO_DEC_HEVC, "h265.bin"}, +{MESON_CPU_MAJOR_ID_GXL, VIDEO_DEC_H264, "h264.bin"}, +{MESON_CPU_MAJOR_ID_GXL, VIDEO_DEC_H264_MULTI, "h264_multi.bin"}, diff --git a/drivers/common/firmware/firmware_drv.c b/drivers/common/firmware/firmware_drv.c index f86ad8d..8b1e73b 100644 --- a/drivers/common/firmware/firmware_drv.c +++ b/drivers/common/firmware/firmware_drv.c @@ -290,6 +290,7 @@ static int set_firmware_info(void) int ret = 0, i, len; struct firmware_info_s *info; int info_size = ARRAY_SIZE(ucode_info); + int cpu = get_cpu_type(); char *path = __getname(); const char *name; @@ -297,6 +298,9 @@ static int set_firmware_info(void) return -ENOMEM; for (i = 0; i < info_size; i++) { + if (cpu != ucode_info[i].cpu) + continue; + name = ucode_info[i].name; if (IS_ERR_OR_NULL(name)) break; @@ -345,7 +349,7 @@ static int checksum(struct firmware_s *firmware) return firmware->header.checksum != (crc ^ ~0U) ? 0 : 1; } -static int check_repeat(struct firmware_s *data, const char *name) +static int check_repeat(struct firmware_s *data, enum firmware_type_e type) { struct firmware_mgr_s *mgr = g_mgr; struct firmware_info_s *info; @@ -358,7 +362,7 @@ static int check_repeat(struct firmware_s *data, const char *name) list_for_each_entry(info, &mgr->head, node) { struct firmware_s *tmp; - if (strcmp(info->name, name)) + if (info->type != type) continue; if (IS_ERR_OR_NULL(info->data)) { @@ -368,13 +372,6 @@ static int check_repeat(struct firmware_s *data, const char *name) return 1; } - if (info->data->header.time >= data->header.time) { - pr_info("the %s data is old.\n", info->name); - kfree(data); - - return 1; - } - pr_info("the %s data is new.\n", info->name); tmp = info->data; info->data = data; @@ -395,7 +392,6 @@ static int firmware_parse_package(struct firmware_info_s *package, struct firmware_info_s *info; struct firmware_s *data; char *pack_data; - const char *cpu; int info_len, len; char *path = __getname(); @@ -422,10 +418,6 @@ static int firmware_parse_package(struct firmware_info_s *package, if (!pack_info->header.length) break; - cpu = get_cpu_type_name(); - if (strcmp(cpu, pack_info->header.cpu)) - continue; - len = snprintf(path, PATH_MAX, "%s/%s", DIR, pack_info->header.name); if (len >= PATH_MAX) @@ -461,7 +453,7 @@ static int firmware_parse_package(struct firmware_info_s *package, goto out; } - if (check_repeat(data, info->name)) { + if (check_repeat(data, info->type)) { kfree(info); continue; } @@ -481,14 +473,8 @@ err: static int firmware_parse_code(struct firmware_info_s *info, char *buf, int size) { - const char *cpu = get_cpu_type_name(); - struct firmware_s *data; - - data = (struct firmware_s *)buf; - if (strcmp(cpu, data->header.cpu)) { - del_info(info); - return 0; - } + if (!IS_ERR_OR_NULL(info->data)) + kfree(info->data); info->data = kzalloc(FRIMWARE_SIZE, GFP_KERNEL); if (IS_ERR_OR_NULL(info->data)) |