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 <leo.ding@rock-chips.com>
This commit is contained in:
Ding Wei
2022-01-14 18:34:29 +08:00
committed by Tao Huang
parent ccff376b8b
commit 1bb163a911
12 changed files with 33 additions and 20 deletions

View File

@@ -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",

View File

@@ -22,6 +22,7 @@
#include <linux/reset.h>
#include <linux/irqreturn.h>
#include <linux/poll.h>
#include <soc/rockchip/pm_domains.h>
#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,

View File

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

View File

@@ -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");
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -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");
}

View File

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

View File

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

View File

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