mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user