video: rockchip: mpp: rkvdec2: fix reset issue for link mode

for vdpu382 rkvdec, use soft reset first

Signed-off-by: Chandler Chen <chandler.chen@rock-chips.com>
Change-Id: I99f369609f882eae9924f6ac59d3d6e5522004ad
This commit is contained in:
Chandler Chen
2023-03-02 16:52:26 +08:00
committed by Tao Huang
parent 9e961c37ec
commit 868cbbf3b0
2 changed files with 40 additions and 7 deletions

View File

@@ -19,6 +19,7 @@
#include <linux/devfreq_cooling.h>
#include <soc/rockchip/rockchip_ipa.h>
#include <soc/rockchip/rockchip_dmc.h>
#include <soc/rockchip/rockchip_opp_select.h>
#include <soc/rockchip/rockchip_system_monitor.h>
@@ -1161,6 +1162,24 @@ static int rkvdec2_soft_reset(struct mpp_dev *mpp)
}
static int rkvdec2_sip_reset(struct mpp_dev *mpp)
{
mpp_debug_enter();
if (IS_REACHABLE(CONFIG_ROCKCHIP_SIP)) {
/* sip reset */
rockchip_dmcfreq_lock();
sip_smc_vpu_reset(0, 0, 0);
rockchip_dmcfreq_unlock();
} else {
rkvdec2_reset(mpp);
}
mpp_debug_leave();
return 0;
}
int rkvdec2_reset(struct mpp_dev *mpp)
{
struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp);
@@ -1213,7 +1232,16 @@ static struct mpp_hw_ops rkvdec_rk3568_hw_ops = {
.clk_off = rkvdec2_clk_off,
.get_freq = rkvdec2_get_freq,
.set_freq = rkvdec2_set_freq,
.reset = rkvdec2_reset,
.reset = rkvdec2_sip_reset,
};
static struct mpp_hw_ops rkvdec_rk3588_hw_ops = {
.init = rkvdec2_init,
.clk_on = rkvdec2_clk_on,
.clk_off = rkvdec2_clk_off,
.get_freq = rkvdec2_get_freq,
.set_freq = rkvdec2_set_freq,
.reset = rkvdec2_sip_reset,
};
static struct mpp_dev_ops rkvdec_v2_dev_ops = {
@@ -1267,6 +1295,14 @@ static const struct mpp_dev_var rkvdec_vdpu382_data = {
.dev_ops = &rkvdec_v2_dev_ops,
};
static const struct mpp_dev_var rkvdec_rk3588_data = {
.device_type = MPP_DEVICE_RKVDEC,
.hw_info = &rkvdec_v2_hw_info,
.trans_info = rkvdec_v2_trans,
.hw_ops = &rkvdec_rk3588_hw_ops,
.dev_ops = &rkvdec_v2_dev_ops,
};
static const struct of_device_id mpp_rkvdec2_dt_match[] = {
{
.compatible = "rockchip,rkv-decoder-v2",
@@ -1281,6 +1317,7 @@ static const struct of_device_id mpp_rkvdec2_dt_match[] = {
#ifdef CONFIG_CPU_RK3588
{
.compatible = "rockchip,rkv-decoder-v2-ccu",
.data = &rkvdec_rk3588_data,
},
#endif
#ifdef CONFIG_CPU_RK3528

View File

@@ -753,7 +753,6 @@ done:
static int rkvdec2_link_reset(struct mpp_dev *mpp)
{
struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp);
dev_info(mpp->dev, "resetting...\n");
@@ -764,11 +763,8 @@ static int rkvdec2_link_reset(struct mpp_dev *mpp)
rockchip_save_qos(mpp->dev);
mutex_lock(&dec->sip_reset_lock);
rockchip_dmcfreq_lock();
sip_smc_vpu_reset(0, 0, 0);
rockchip_dmcfreq_unlock();
mutex_unlock(&dec->sip_reset_lock);
if (mpp->hw_ops->reset)
mpp->hw_ops->reset(mpp);
rockchip_restore_qos(mpp->dev);