From 17bc01b78f2bd27890cae9ba8acc35aa5c5c3923 Mon Sep 17 00:00:00 2001 From: Vedang Nagar Date: Fri, 24 Feb 2023 18:30:28 +0530 Subject: [PATCH] video: driver: Move clk/qcom.h to external reseource file Move qcom.h header file from resources.h to resources_ext file. Change-Id: I81735461f093fe724a51d66538be1cc562fc0e24 Signed-off-by: Vedang Nagar --- driver/variant/iris33/src/msm_vidc_iris33.c | 8 ++-- driver/vidc/inc/resources.h | 13 +++-- driver/vidc/src/resources_ext.c | 53 +++++++++++++++++---- 3 files changed, 59 insertions(+), 15 deletions(-) diff --git a/driver/variant/iris33/src/msm_vidc_iris33.c b/driver/variant/iris33/src/msm_vidc_iris33.c index d0d616edd0..b0c3eec567 100644 --- a/driver/variant/iris33/src/msm_vidc_iris33.c +++ b/driver/variant/iris33/src/msm_vidc_iris33.c @@ -432,11 +432,11 @@ static int __power_off_iris33_controller(struct msm_vidc_core *core) 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); + "video_cc_mvs0c_clk", MSM_VIDC_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); + "video_cc_mvs0c_clk", MSM_VIDC_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"); @@ -534,11 +534,11 @@ skip_video_xo_reset: /* remove retain mem and retain peripheral */ rc = call_res_op(core, clk_set_flag, core, - "video_cc_mvs0c_clk", CLKFLAG_NORETAIN_PERIPH); + "video_cc_mvs0c_clk", MSM_VIDC_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); + "video_cc_mvs0c_clk", MSM_VIDC_CLKFLAG_NORETAIN_MEM); if (rc) d_vpr_e("%s: set noretain mem failed\n", __func__); diff --git a/driver/vidc/inc/resources.h b/driver/vidc/inc/resources.h index bee1748e66..baa890a1b2 100644 --- a/driver/vidc/inc/resources.h +++ b/driver/vidc/inc/resources.h @@ -7,8 +7,6 @@ #ifndef _MSM_VIDC_RESOURCES_H_ #define _MSM_VIDC_RESOURCES_H_ -#include - struct icc_path; struct regulator; struct clk; @@ -103,6 +101,15 @@ struct msm_vidc_core; #define venus_hfi_for_each_device_region(__device, __sinfo) \ venus_hfi_for_each_thing(__device, __sinfo, device_region) +enum msm_vidc_branch_mem_flags { + MSM_VIDC_CLKFLAG_RETAIN_PERIPH, + MSM_VIDC_CLKFLAG_NORETAIN_PERIPH, + MSM_VIDC_CLKFLAG_RETAIN_MEM, + MSM_VIDC_CLKFLAG_NORETAIN_MEM, + MSM_VIDC_CLKFLAG_PERIPH_OFF_SET, + MSM_VIDC_CLKFLAG_PERIPH_OFF_CLEAR, +}; + struct bus_info { struct icc_path *icc; const char *name; @@ -274,7 +281,7 @@ struct msm_vidc_resources_ops { int (*clk_disable)(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 char *name, enum msm_vidc_branch_mem_flags flag); int (*clk_print_residency_stats)(struct msm_vidc_core *core); int (*clk_reset_residency_stats)(struct msm_vidc_core *core); }; diff --git a/driver/vidc/src/resources_ext.c b/driver/vidc/src/resources_ext.c index bcd5cca7aa..40af6b0d75 100644 --- a/driver/vidc/src/resources_ext.c +++ b/driver/vidc/src/resources_ext.c @@ -5,6 +5,8 @@ */ #include +#include + #ifdef CONFIG_MSM_MMRM #include #endif @@ -499,19 +501,54 @@ static int __set_clocks_ext(struct msm_vidc_core *core, u64 freq) return 0; } -static int __clock_set_flag_ext(struct msm_vidc_core *core, - const char *name, enum branch_mem_flags flag) +static int qcom_clk_get_branch_flag(enum msm_vidc_branch_mem_flags vidc_flag, + enum branch_mem_flags *clk_flag) { - struct clock_info *cinfo = NULL; - bool found = false; + switch (vidc_flag) { + case MSM_VIDC_CLKFLAG_RETAIN_PERIPH: + *clk_flag = CLKFLAG_RETAIN_PERIPH; + break; + case MSM_VIDC_CLKFLAG_NORETAIN_PERIPH: + *clk_flag = CLKFLAG_NORETAIN_PERIPH; + break; + case MSM_VIDC_CLKFLAG_RETAIN_MEM: + *clk_flag = CLKFLAG_RETAIN_MEM; + break; + case MSM_VIDC_CLKFLAG_NORETAIN_MEM: + *clk_flag = CLKFLAG_NORETAIN_MEM; + break; + case MSM_VIDC_CLKFLAG_PERIPH_OFF_SET: + *clk_flag = CLKFLAG_PERIPH_OFF_SET; + break; + case MSM_VIDC_CLKFLAG_PERIPH_OFF_CLEAR: + *clk_flag = CLKFLAG_PERIPH_OFF_CLEAR; + break; + default: + d_vpr_e("%s: invalid clk flag: %d\n", __func__, vidc_flag); + return -EINVAL; + } + return 0; +} - /* get clock handle */ - venus_hfi_for_each_clock(core, cinfo) { +static int __clock_set_flag_ext(struct msm_vidc_core *core, + const char *name, enum msm_vidc_branch_mem_flags flag) +{ + int rc = 0; + struct clock_info *cinfo = NULL; + bool found = false; + enum branch_mem_flags mem_flag; + + /* 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); + rc = qcom_clk_get_branch_flag(flag, &mem_flag); + if (rc) + return rc; + + qcom_clk_set_flags(cinfo->clk, mem_flag); + d_vpr_h("%s: set flag %d on clock %s\n", __func__, mem_flag, name); break; } if (!found) {