video: driver: set force mem and pheripheral on flags

Set mvs0c clock flags (force mem and pheripheral on).

Change-Id: I52380a30a4c74d9658f989377b5c77209cd8a33e
Signed-off-by: Maheshwar Ajja <quic_majja@quicinc.com>
This commit is contained in:
Maheshwar Ajja
2022-12-16 18:16:52 -08:00
parent da842a9f2f
commit 4716d7bc72
3 changed files with 46 additions and 0 deletions

View File

@@ -434,6 +434,15 @@ static int __power_off_iris33_controller(struct msm_vidc_core *core)
rc = call_res_op(core, reset_control_assert, core, "video_axi_reset"); rc = call_res_op(core, reset_control_assert, core, "video_axi_reset");
if (rc) if (rc)
d_vpr_e("%s: assert video_axi_reset failed\n", __func__); d_vpr_e("%s: assert video_axi_reset failed\n", __func__);
/* set retain mem and peripheral before asset mvs0c reset */
rc = call_res_op(core, clk_set_flag, core,
"video_cc_mvs0c_clk", CLKFLAG_RETAIN_MEM);
if (rc)
d_vpr_e("%s: set retain mem failed\n", __func__);
rc = call_res_op(core, clk_set_flag, core,
"video_cc_mvs0c_clk", CLKFLAG_RETAIN_PERIPH);
if (rc)
d_vpr_e("%s: set retain peripheral failed\n", __func__);
rc = call_res_op(core, reset_control_assert, core, "video_mvs0c_reset"); rc = call_res_op(core, reset_control_assert, core, "video_mvs0c_reset");
if (rc) if (rc)
d_vpr_e("%s: assert video_mvs0c_reset failed\n", __func__); d_vpr_e("%s: assert video_mvs0c_reset failed\n", __func__);
@@ -487,6 +496,16 @@ static int __power_off_iris33_controller(struct msm_vidc_core *core)
if (rc) if (rc)
return rc; return rc;
/* remove retain mem and retain peripheral */
rc = call_res_op(core, clk_set_flag, core,
"video_cc_mvs0c_clk", CLKFLAG_NORETAIN_PERIPH);
if (rc)
d_vpr_e("%s: set noretain peripheral failed\n", __func__);
rc = call_res_op(core, clk_set_flag, core,
"video_cc_mvs0c_clk", CLKFLAG_NORETAIN_MEM);
if (rc)
d_vpr_e("%s: set noretain mem failed\n", __func__);
/* Turn off MVP MVS0C core clock */ /* Turn off MVP MVS0C core clock */
rc = call_res_op(core, clk_disable, core, "video_cc_mvs0c_clk"); rc = call_res_op(core, clk_disable, core, "video_cc_mvs0c_clk");
if (rc) { if (rc) {

View File

@@ -6,6 +6,8 @@
#ifndef _MSM_VIDC_RESOURCES_H_ #ifndef _MSM_VIDC_RESOURCES_H_
#define _MSM_VIDC_RESOURCES_H_ #define _MSM_VIDC_RESOURCES_H_
#include <linux/clk/qcom.h>
struct icc_path; struct icc_path;
struct regulator; struct regulator;
struct clk; struct clk;
@@ -223,6 +225,8 @@ struct msm_vidc_resources_ops {
int (*clk_disable)(struct msm_vidc_core *core, const char *name); int (*clk_disable)(struct msm_vidc_core *core, const char *name);
int (*clk_enable)(struct msm_vidc_core *core, const char *name); int (*clk_enable)(struct msm_vidc_core *core, const char *name);
int (*clk_set_flag)(struct msm_vidc_core *core,
const char *name, enum branch_mem_flags flag);
}; };
const struct msm_vidc_resources_ops *get_resources_ops(void); const struct msm_vidc_resources_ops *get_resources_ops(void);

View File

@@ -346,6 +346,28 @@ static int __init_clocks(struct msm_vidc_core *core)
return rc; return rc;
} }
static int __clock_set_flag(struct msm_vidc_core *core,
const char *name, enum branch_mem_flags flag)
{
struct clock_info *cinfo = NULL;
bool found = false;
/* get clock handle */
venus_hfi_for_each_clock(core, cinfo) {
if (strcmp(cinfo->name, name))
continue;
found = true;
qcom_clk_set_flags(cinfo->clk, flag);
d_vpr_h("%s: set flag %d on clock %s\n", __func__, flag, name);
break;
}
if (!found) {
d_vpr_e("%s: failed to find clock: %s\n", __func__, name);
return -EINVAL;
}
return 0;
}
static int __init_reset_clocks(struct msm_vidc_core *core) static int __init_reset_clocks(struct msm_vidc_core *core)
{ {
const struct clk_rst_table *rst_tbl; const struct clk_rst_table *rst_tbl;
@@ -1437,6 +1459,7 @@ static const struct msm_vidc_resources_ops res_ops = {
.set_clks = __set_clocks, .set_clks = __set_clocks,
.clk_enable = __prepare_enable_clock, .clk_enable = __prepare_enable_clock,
.clk_disable = __disable_unprepare_clock, .clk_disable = __disable_unprepare_clock,
.clk_set_flag = __clock_set_flag,
}; };
const struct msm_vidc_resources_ops *get_resources_ops(void) const struct msm_vidc_resources_ops *get_resources_ops(void)