diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/avs2/vavs2.c b/drivers/amlogic/media_modules/frame_provider/decoder/avs2/vavs2.c index 790b94b4efdb..cc221610d586 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/avs2/vavs2.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/avs2/vavs2.c @@ -6338,7 +6338,7 @@ static s32 vavs2_init(struct vdec_s *vdec) return 0; } - + hevc_enable_DMC(hw_to_vdec(dec)); amhevc_enable(); ret = amhevc_loadmc_ex(VFORMAT_AVS2, NULL, fw->data); diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c b/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c index 371d3dfe88a8..f0d97b5c080e 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c @@ -10590,6 +10590,7 @@ static s32 vh265_init(struct hevc_state_s *hevc) return 0; } #endif + hevc_enable_DMC(hw_to_vdec(hevc)); amhevc_enable(); if (hevc->mmu_enable) diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c b/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c index 9f6538175c0b..3e7a47f7a287 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c @@ -3563,6 +3563,17 @@ void vdec_reset_core(struct vdec_s *vdec) } EXPORT_SYMBOL(vdec_reset_core); +void hevc_enable_DMC(struct vdec_s *vdec) +{ + unsigned long flags; + spin_lock_irqsave(&vdec_spin_lock, flags); + codec_dmcbus_write(DMC_REQ_CTRL, + codec_dmcbus_read(DMC_REQ_CTRL) | (1 << 4)); + spin_unlock_irqrestore(&vdec_spin_lock, flags); +} + +EXPORT_SYMBOL(hevc_enable_DMC); + void hevc_reset_core(struct vdec_s *vdec) { unsigned long flags; diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.h b/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.h index 6972e7dfabc2..b7287fb95238 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.h +++ b/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.h @@ -421,6 +421,7 @@ extern void vdec_set_step_mode(void); extern void vdec_disable_DMC(struct vdec_s *vdec); extern void vdec_enable_DMC(struct vdec_s *vdec); +extern void hevc_enable_DMC(struct vdec_s *vdec); int vdec_read_user_data(struct vdec_s *vdec, struct userdata_param_t *p_userdata_param); diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/vp9/vvp9.c b/drivers/amlogic/media_modules/frame_provider/decoder/vp9/vvp9.c index cc83d60db158..42ecd4613b83 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/vp9/vvp9.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/vp9/vvp9.c @@ -8099,7 +8099,7 @@ static s32 vvp9_init(struct VP9Decoder_s *pbi) return 0; } #endif - + hevc_enable_DMC(hw_to_vdec(pbi)); amhevc_enable(); ret = amhevc_loadmc_ex(VFORMAT_VP9, NULL, fw->data);