From 53abf03bf2dfef6f62bbc90e2c85eb1bb3662b9d Mon Sep 17 00:00:00 2001 From: Johnson Ding Date: Sat, 11 May 2024 19:44:27 +0800 Subject: [PATCH] fix[hal_jpeg_vdpu1]: fix dec failed on RK3036 problem For kernel 4.4 and before, if VPU only has decoder, register size is 101. Thus extra size append at offset of 164*4 will be ignored by kernel. Change-Id: Idf4524099615b8ffd46766f55c9c0ea481f7cb76 Signed-off-by: Johnson Ding --- mpp/hal/vpu/jpegd/hal_jpegd_vdpu1.c | 7 ++++++- osal/driver/vcodec_service.c | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mpp/hal/vpu/jpegd/hal_jpegd_vdpu1.c b/mpp/hal/vpu/jpegd/hal_jpegd_vdpu1.c index d660928f..96692ad1 100644 --- a/mpp/hal/vpu/jpegd/hal_jpegd_vdpu1.c +++ b/mpp/hal/vpu/jpegd/hal_jpegd_vdpu1.c @@ -915,10 +915,15 @@ MPP_RET hal_jpegd_vdpu1_start(void *hal, HalTaskInfo *task) do { MppDevRegWrCfg wr_cfg; MppDevRegRdCfg rd_cfg; - RK_U32 reg_size = mpp_get_ioctl_version() ? + MppIoctlVersion ioctl_version = mpp_get_ioctl_version(); + RK_U32 reg_size = ioctl_version ? sizeof(((JpegdIocRegInfo *)0)->regs) : sizeof(JpegdIocRegInfo) - EXTRA_INFO_SIZE; + if (ROCKCHIP_SOC_RK3036 == mpp_get_soc_type() && + IOCTL_VCODEC_SERVICE == ioctl_version) + reg_size -= sizeof(((JpegdIocRegInfo *)0)->regs_diff); + wr_cfg.reg = regs; wr_cfg.size = reg_size; wr_cfg.offset = 0; diff --git a/osal/driver/vcodec_service.c b/osal/driver/vcodec_service.c index 1cb43cfe..2064e2ba 100644 --- a/osal/driver/vcodec_service.c +++ b/osal/driver/vcodec_service.c @@ -488,7 +488,10 @@ MPP_RET vcodec_service_init(void *ctx, MppClientType type) case VPU_CLIENT_VDPU1_PP : { name = mpp_find_device(mpp_vpu_dev); client_type = VPU_DEC_PP; - reg_size = VDPU1_PP_REGISTERS; + if (ROCKCHIP_SOC_RK3036 == mpp_get_soc_type()) + reg_size = VDPU1_REGISTERS; + else + reg_size = VDPU1_PP_REGISTERS; } break; case VPU_CLIENT_VDPU2_PP : { name = mpp_find_device(mpp_vpu_dev);