mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
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:
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user