diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index 7d0741ebb920..d30f157a23ef 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -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 diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c b/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c index 2d37714c59d3..58bba121bdc7 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c @@ -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);