From 1bb163a911256987bcc49748d75e0c87bf5f9015 Mon Sep 17 00:00:00 2001 From: Ding Wei Date: Fri, 14 Jan 2022 18:34:29 +0800 Subject: [PATCH] video: rockchip: mpp: Wrap rockchip_pmu_idle_request with skip flag Add skip flag to control whether do it. Change-Id: I9e373d1261b688313d2a3bd7aad0e847405b7fbe Signed-off-by: Ding Wei --- drivers/video/rockchip/mpp/mpp_common.c | 2 ++ drivers/video/rockchip/mpp/mpp_common.h | 11 +++++++++++ drivers/video/rockchip/mpp/mpp_iep2.c | 4 ++-- drivers/video/rockchip/mpp/mpp_jpgdec.c | 4 ++-- drivers/video/rockchip/mpp/mpp_rkvdec.c | 4 ++-- drivers/video/rockchip/mpp/mpp_rkvdec2.c | 4 ++-- drivers/video/rockchip/mpp/mpp_rkvenc.c | 4 ++-- drivers/video/rockchip/mpp/mpp_rkvenc2.c | 4 ++-- drivers/video/rockchip/mpp/mpp_vdpu1.c | 4 ++-- drivers/video/rockchip/mpp/mpp_vdpu2.c | 4 ++-- drivers/video/rockchip/mpp/mpp_vepu1.c | 4 ++-- drivers/video/rockchip/mpp/mpp_vepu2.c | 4 ++-- 12 files changed, 33 insertions(+), 20 deletions(-) diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index aa1ea5c4e514..bfeb1802a316 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -1754,6 +1754,8 @@ int mpp_dev_probe(struct mpp_dev *mpp, /* Get disable auto frequent flag from dtsi */ mpp->auto_freq_en = !device_property_read_bool(dev, "rockchip,disable-auto-freq"); + /* read flag for pum idle request */ + mpp->skip_idle = device_property_read_bool(dev, "rockchip,skip-pmu-idle-request"); /* read link table capacity */ ret = of_property_read_u32(np, "rockchip,task-capacity", diff --git a/drivers/video/rockchip/mpp/mpp_common.h b/drivers/video/rockchip/mpp/mpp_common.h index 7961d6b23690..a56255d00d6b 100644 --- a/drivers/video/rockchip/mpp/mpp_common.h +++ b/drivers/video/rockchip/mpp/mpp_common.h @@ -22,6 +22,7 @@ #include #include #include +#include #define MHZ (1000 * 1000) @@ -293,6 +294,8 @@ struct mpp_dev { struct kthread_work work; /* the flag for get/get/reduce freq */ bool auto_freq_en; + /* the flag for pmu idle request before device reset */ + bool skip_idle; /* * The task capacity is the task queue length that hardware can accept. @@ -749,6 +752,14 @@ static inline int mpp_reset_up_write(struct mpp_reset_group *group) return 0; } +static inline int mpp_pmu_idle_request(struct mpp_dev *mpp, bool idle) +{ + if (mpp->skip_idle) + return 0; + + return rockchip_pmu_idle_request(mpp->dev, idle); +} + #ifdef CONFIG_ROCKCHIP_MPP_PROC_FS struct proc_dir_entry * mpp_procfs_create_u32(const char *name, umode_t mode, diff --git a/drivers/video/rockchip/mpp/mpp_iep2.c b/drivers/video/rockchip/mpp/mpp_iep2.c index 16f729b69398..45b7469f564e 100644 --- a/drivers/video/rockchip/mpp/mpp_iep2.c +++ b/drivers/video/rockchip/mpp/mpp_iep2.c @@ -870,7 +870,7 @@ static int iep2_reset(struct mpp_dev *mpp) if (iep->rst_a && iep->rst_h && iep->rst_s) { /* Don't skip this or iommu won't work after reset */ - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(iep->rst_a); mpp_safe_reset(iep->rst_h); mpp_safe_reset(iep->rst_s); @@ -878,7 +878,7 @@ static int iep2_reset(struct mpp_dev *mpp) mpp_safe_unreset(iep->rst_a); mpp_safe_unreset(iep->rst_h); mpp_safe_unreset(iep->rst_s); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } return 0; diff --git a/drivers/video/rockchip/mpp/mpp_jpgdec.c b/drivers/video/rockchip/mpp/mpp_jpgdec.c index 3e94ceef256b..524e2d521437 100644 --- a/drivers/video/rockchip/mpp/mpp_jpgdec.c +++ b/drivers/video/rockchip/mpp/mpp_jpgdec.c @@ -510,13 +510,13 @@ static int jpgdec_reset(struct mpp_dev *mpp) mpp_debug(DEBUG_RESET, "reset in\n"); /* Don't skip this or iommu won't work after reset */ - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(dec->rst_a); mpp_safe_reset(dec->rst_h); udelay(5); mpp_safe_unreset(dec->rst_a); mpp_safe_unreset(dec->rst_h); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); mpp_debug(DEBUG_RESET, "reset out\n"); } diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec.c b/drivers/video/rockchip/mpp/mpp_rkvdec.c index 546fb82dc04f..2cd0625f164c 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec.c @@ -1629,7 +1629,7 @@ static int rkvdec_reset(struct mpp_dev *mpp) mpp_debug_enter(); if (dec->rst_a && dec->rst_h) { - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(dec->rst_niu_a); mpp_safe_reset(dec->rst_niu_h); mpp_safe_reset(dec->rst_a); @@ -1645,7 +1645,7 @@ static int rkvdec_reset(struct mpp_dev *mpp) mpp_safe_unreset(dec->rst_core); mpp_safe_unreset(dec->rst_cabac); mpp_safe_unreset(dec->rst_hevc_cabac); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } mpp_debug_leave(); diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index 3a02c707e33f..3609e3c427fb 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -810,7 +810,7 @@ int rkvdec2_reset(struct mpp_dev *mpp) mpp_debug_enter(); if (dec->rst_a && dec->rst_h) { - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(dec->rst_niu_a); mpp_safe_reset(dec->rst_niu_h); mpp_safe_reset(dec->rst_a); @@ -826,7 +826,7 @@ int rkvdec2_reset(struct mpp_dev *mpp) mpp_safe_unreset(dec->rst_core); mpp_safe_unreset(dec->rst_cabac); mpp_safe_unreset(dec->rst_hevc_cabac); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } mpp_debug_leave(); diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc.c b/drivers/video/rockchip/mpp/mpp_rkvenc.c index 5f4925e11677..9352297ff386 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvenc.c +++ b/drivers/video/rockchip/mpp/mpp_rkvenc.c @@ -1268,7 +1268,7 @@ static int rkvenc_reset(struct mpp_dev *mpp) mpp_write(mpp, RKVENC_INT_STATUS_BASE, 0); /* cru reset */ if (enc->rst_a && enc->rst_h && enc->rst_core) { - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(enc->rst_a); mpp_safe_reset(enc->rst_h); mpp_safe_reset(enc->rst_core); @@ -1276,7 +1276,7 @@ static int rkvenc_reset(struct mpp_dev *mpp) mpp_safe_unreset(enc->rst_a); mpp_safe_unreset(enc->rst_h); mpp_safe_unreset(enc->rst_core); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } #ifdef CONFIG_PM_DEVFREQ if (enc->devfreq) diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc2.c b/drivers/video/rockchip/mpp/mpp_rkvenc2.c index dfffbbf4516b..c13211e7c6a3 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvenc2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvenc2.c @@ -1208,7 +1208,7 @@ static int rkvenc_reset(struct mpp_dev *mpp) /* cru reset */ if (enc->rst_a && enc->rst_h && enc->rst_core) { - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(enc->rst_a); mpp_safe_reset(enc->rst_h); mpp_safe_reset(enc->rst_core); @@ -1216,7 +1216,7 @@ static int rkvenc_reset(struct mpp_dev *mpp) mpp_safe_unreset(enc->rst_a); mpp_safe_unreset(enc->rst_h); mpp_safe_unreset(enc->rst_core); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } set_bit(mpp->core_id, &queue->core_idle); diff --git a/drivers/video/rockchip/mpp/mpp_vdpu1.c b/drivers/video/rockchip/mpp/mpp_vdpu1.c index a14f10208ced..adb6b5951b67 100644 --- a/drivers/video/rockchip/mpp/mpp_vdpu1.c +++ b/drivers/video/rockchip/mpp/mpp_vdpu1.c @@ -671,13 +671,13 @@ static int vdpu_reset(struct mpp_dev *mpp) mpp_debug(DEBUG_RESET, "reset in\n"); /* Don't skip this or iommu won't work after reset */ - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(dec->rst_a); mpp_safe_reset(dec->rst_h); udelay(5); mpp_safe_unreset(dec->rst_a); mpp_safe_unreset(dec->rst_h); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); mpp_debug(DEBUG_RESET, "reset out\n"); } diff --git a/drivers/video/rockchip/mpp/mpp_vdpu2.c b/drivers/video/rockchip/mpp/mpp_vdpu2.c index f6970331bb8e..7a83333fef3e 100644 --- a/drivers/video/rockchip/mpp/mpp_vdpu2.c +++ b/drivers/video/rockchip/mpp/mpp_vdpu2.c @@ -604,13 +604,13 @@ static int vdpu_reset(struct mpp_dev *mpp) mpp_write(mpp, VDPU2_REG_DEC_INT, 0); if (dec->rst_a && dec->rst_h) { /* Don't skip this or iommu won't work after reset */ - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(dec->rst_a); mpp_safe_reset(dec->rst_h); udelay(5); mpp_safe_unreset(dec->rst_a); mpp_safe_unreset(dec->rst_h); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } return 0; diff --git a/drivers/video/rockchip/mpp/mpp_vepu1.c b/drivers/video/rockchip/mpp/mpp_vepu1.c index aef0ad7b42cb..975bda09305d 100644 --- a/drivers/video/rockchip/mpp/mpp_vepu1.c +++ b/drivers/video/rockchip/mpp/mpp_vepu1.c @@ -656,13 +656,13 @@ static int vepu_reset(struct mpp_dev *mpp) if (enc->rst_a && enc->rst_h) { /* Don't skip this or iommu won't work after reset */ - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(enc->rst_a); mpp_safe_reset(enc->rst_h); udelay(5); mpp_safe_unreset(enc->rst_a); mpp_safe_unreset(enc->rst_h); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } mpp_write(mpp, VEPU1_REG_ENC_EN, 0); diff --git a/drivers/video/rockchip/mpp/mpp_vepu2.c b/drivers/video/rockchip/mpp/mpp_vepu2.c index fbf028d27c98..6244157b87b2 100644 --- a/drivers/video/rockchip/mpp/mpp_vepu2.c +++ b/drivers/video/rockchip/mpp/mpp_vepu2.c @@ -808,13 +808,13 @@ static int vepu_reset(struct mpp_dev *mpp) if (enc->rst_a && enc->rst_h) { /* Don't skip this or iommu won't work after reset */ - rockchip_pmu_idle_request(mpp->dev, true); + mpp_pmu_idle_request(mpp, true); mpp_safe_reset(enc->rst_a); mpp_safe_reset(enc->rst_h); udelay(5); mpp_safe_unreset(enc->rst_a); mpp_safe_unreset(enc->rst_h); - rockchip_pmu_idle_request(mpp->dev, false); + mpp_pmu_idle_request(mpp, false); } mpp_write(mpp, VEPU2_REG_INT, VEPU2_INT_CLEAR);