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);