diff --git a/drivers/amlogic/media_modules/common/firmware/firmware_type.c b/drivers/amlogic/media_modules/common/firmware/firmware_type.c index 5ef2620638b7..d21c597bcd07 100644 --- a/drivers/amlogic/media_modules/common/firmware/firmware_type.c +++ b/drivers/amlogic/media_modules/common/firmware/firmware_type.c @@ -18,8 +18,10 @@ static const struct type_name_s type_name[] = { {VIDEO_DEC_H264_4k2K, "h264_4k2k"}, {VIDEO_DEC_H264_4k2K_SINGLE, "h264_4k2k_single"}, {VIDEO_DEC_H264_MVC, "h264_mvc"}, + {VIDEO_DEC_H264_MVC_GXM, "h264_mvc_gxm"}, {VIDEO_DEC_H264_MULTI, "h264_multi"}, {VIDEO_DEC_H264_MULTI_MMU, "h264_multi_mmu"}, + {VIDEO_DEC_H264_MULTI_GXM, "h264_multi_gxm"}, {VIDEO_DEC_HEVC, "hevc"}, {VIDEO_DEC_HEVC_MMU, "hevc_mmu"}, {VIDEO_DEC_HEVC_G12A, "hevc_g12a"}, diff --git a/drivers/amlogic/media_modules/common/firmware/firmware_type.h b/drivers/amlogic/media_modules/common/firmware/firmware_type.h index 59f53e99d850..7affd819fae1 100644 --- a/drivers/amlogic/media_modules/common/firmware/firmware_type.h +++ b/drivers/amlogic/media_modules/common/firmware/firmware_type.h @@ -34,6 +34,8 @@ enum firmware_type_e { VIDEO_DEC_AVS2_MMU, VIDEO_DEC_AVS_GXM, VIDEO_DEC_AVS_NOCABAC, + VIDEO_DEC_H264_MULTI_GXM, + VIDEO_DEC_H264_MVC_GXM, FIRMWARE_MAX }; diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/h264/vh264_mvc.c b/drivers/amlogic/media_modules/frame_provider/decoder/h264/vh264_mvc.c index cf8db1c26f5b..e96446bfef75 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/h264/vh264_mvc.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/h264/vh264_mvc.c @@ -1419,7 +1419,14 @@ static s32 vh264mvc_init(void) amvdec_enable(); if (tee_enabled()) { - if (tee_load_video_fw((u32)VIDEO_DEC_H264_MVC, 0) != 0) { + pr_info("the video fw from the teeload.\n"); + + if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXM) + ret = tee_load_video_fw((u32)VIDEO_DEC_H264_MVC_GXM, 0); + else + ret = tee_load_video_fw((u32)VIDEO_DEC_H264_MVC, 0); + + if (ret != 0) { amvdec_disable(); return -1; } @@ -1436,7 +1443,11 @@ static s32 vh264mvc_init(void) WRITE_VREG(UCODE_START_ADDR, mc_dma_handle); - size = get_firmware_data(VIDEO_DEC_H264_MVC, buf); + if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXM) + size = get_firmware_data(VIDEO_DEC_H264_MVC_GXM, buf); + else + size = get_firmware_data(VIDEO_DEC_H264_MVC, buf); + if (size < 0) { pr_err("get firmware fail."); vfree(buf); diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/h264_multi/vmh264.c b/drivers/amlogic/media_modules/frame_provider/decoder/h264_multi/vmh264.c index 5b11a88b82c9..e9b936781ab3 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/h264_multi/vmh264.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/h264_multi/vmh264.c @@ -5063,7 +5063,11 @@ static s32 vh264_init(struct vdec_h264_hw_s *hw) if (IS_ERR_OR_NULL(fw)) return -ENOMEM; - size = get_firmware_data(VIDEO_DEC_H264_MULTI, fw->data); + if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXM) + size = get_firmware_data(VIDEO_DEC_H264_MULTI_GXM, fw->data); + else + size = get_firmware_data(VIDEO_DEC_H264_MULTI, fw->data); + if (size < 0) { pr_err("get firmware fail.\n"); vfree(fw); @@ -6350,8 +6354,12 @@ static void run(struct vdec_s *vdec, unsigned long mask, start_process_time(hw); if (tee_enabled()) { - if (tee_load_video_fw((u32)VIDEO_DEC_H264_MULTI, 0) - != 0) { + unsigned int fw_type = VIDEO_DEC_H264_MULTI; + + if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXM) + fw_type = VIDEO_DEC_H264_MULTI_GXM; + + if (tee_load_video_fw(fw_type, 0) != 0) { amvdec_enable_flag = false; amvdec_disable(); pr_err("id: %d, %s: Error amvdec_vdec_loadmc fail\n", diff --git a/firmware/video/video_ucode.bin b/firmware/video/video_ucode.bin index 46f2a7c0e223..721c9b8e4fd8 100644 Binary files a/firmware/video/video_ucode.bin and b/firmware/video/video_ucode.bin differ