summaryrefslogtreecommitdiff
authorNanxin 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)
commitc942a2ab68780b8be2dceb87de4b5e4c121993e4 (patch)
tree0dfd360ff845c2f235ce478bb9dffe254c820743
parent0662fbe89ee20cd6f5e445aef1bd98f16ccba125 (diff)
downloadmedia-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>
Diffstat
-rw-r--r--drivers/common/firmware/firmware.h1
-rw-r--r--drivers/common/firmware/firmware_cfg.h16
-rw-r--r--drivers/common/firmware/firmware_drv.c32
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))