msm: mdss: Move PP reg bus vote to reg bus voting framework

There is a new framework for MDSS voting on the reg bus. However,
the postprocessing client was never registered, and therefore making
bus requests without the framework. This change moves the PP reg bus
voting to be a part of the MDSS bus voting framework.

Change-Id: I054b102baec0ccae56e7b9faafa8feadf3fc8d7a
Signed-off-by: Benet Clark <benetc@codeaurora.org>
[cip@codeaurora.org: Resolved merge conflict]
Signed-off-by: Clarence Ip <cip@codeaurora.org>
This commit is contained in:
Benet Clark 2015-09-18 13:06:11 -07:00 committed by David Keitel
parent 61a87e1821
commit 0067dcdcd2
2 changed files with 22 additions and 13 deletions

View file

@ -314,6 +314,7 @@ struct mdss_data_type {
struct list_head reg_bus_clist; struct list_head reg_bus_clist;
struct mutex reg_bus_lock; struct mutex reg_bus_lock;
struct reg_bus_client *reg_bus_clt; struct reg_bus_client *reg_bus_clt;
struct reg_bus_client *pp_reg_bus_clt;
u32 axi_port_cnt; u32 axi_port_cnt;
u32 nrt_axi_port_cnt; u32 nrt_axi_port_cnt;

View file

@ -1960,13 +1960,12 @@ error:
int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl) int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl)
{ {
struct mdss_data_type *mdata = ctl->mdata; struct mdss_data_type *mdata = ctl->mdata;
int ret = 0; int ret = 0, i;
u32 flags, pa_v2_flags; u32 flags, pa_v2_flags;
u32 max_bw_needed; u32 max_bw_needed;
u32 mixer_cnt; u32 mixer_cnt;
u32 mixer_id[MDSS_MDP_INTF_MAX_LAYERMIXER]; u32 mixer_id[MDSS_MDP_INTF_MAX_LAYERMIXER];
u32 disp_num; u32 disp_num;
int i, req = -1;
bool valid_mixers = true; bool valid_mixers = true;
bool valid_ad_panel = true; bool valid_ad_panel = true;
if ((!ctl) || (!ctl->mfd) || (!mdss_pp_res) || (!mdata)) if ((!ctl) || (!ctl->mfd) || (!mdss_pp_res) || (!mdata))
@ -2009,7 +2008,6 @@ int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl)
else else
pa_v2_flags = pa_v2_flags =
mdss_pp_res->pa_v2_disp_cfg[disp_num].pa_v2_data.flags; mdss_pp_res->pa_v2_disp_cfg[disp_num].pa_v2_data.flags;
/* /*
* If a LUT based PP feature needs to be reprogrammed during resume, * If a LUT based PP feature needs to be reprogrammed during resume,
* increase the register bus bandwidth to maximum frequency * increase the register bus bandwidth to maximum frequency
@ -2018,11 +2016,11 @@ int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl)
max_bw_needed = (IS_PP_RESUME_COMMIT(flags) && max_bw_needed = (IS_PP_RESUME_COMMIT(flags) &&
(IS_PP_LUT_DIRTY(flags) || (IS_PP_LUT_DIRTY(flags) ||
IS_SIX_ZONE_DIRTY(flags, pa_v2_flags))); IS_SIX_ZONE_DIRTY(flags, pa_v2_flags)));
if (mdata->reg_bus_hdl && max_bw_needed) { if (mdata->pp_reg_bus_clt && max_bw_needed) {
req = msm_bus_scale_client_update_request(mdata->reg_bus_hdl, ret = mdss_update_reg_bus_vote(mdata->pp_reg_bus_clt,
REG_CLK_CFG_HIGH); VOTE_INDEX_80_MHZ);
if (req) if (ret)
pr_err("Updated reg_bus_scale failed, ret = %d", req); pr_err("Updated reg_bus_scale failed, ret = %d", ret);
} }
if (ctl->mixer_left) { if (ctl->mixer_left) {
@ -2040,11 +2038,11 @@ int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl)
mdata->ad_cfgs[disp_num].reg_sts = 0; mdata->ad_cfgs[disp_num].reg_sts = 0;
} }
if (mdata->reg_bus_hdl && max_bw_needed) { if (mdata->pp_reg_bus_clt && max_bw_needed) {
req = msm_bus_scale_client_update_request(mdata->reg_bus_hdl, ret = mdss_update_reg_bus_vote(mdata->pp_reg_bus_clt,
REG_CLK_CFG_OFF); VOTE_INDEX_DISABLE);
if (req) if (ret)
pr_err("Updated reg_bus_scale failed, ret = %d", req); pr_err("Updated reg_bus_scale failed, ret = %d", ret);
} }
if (IS_PP_RESUME_COMMIT(flags)) if (IS_PP_RESUME_COMMIT(flags))
mdss_pp_res->pp_disp_flags[disp_num] &= mdss_pp_res->pp_disp_flags[disp_num] &=
@ -2304,6 +2302,11 @@ int mdss_mdp_pp_init(struct device *dev)
if (!mdata) if (!mdata)
return -EPERM; return -EPERM;
mdata->pp_reg_bus_clt = mdss_reg_bus_vote_client_create("pp\0");
if (IS_ERR_OR_NULL(mdata->pp_reg_bus_clt))
pr_err("bus client register failed\n");
mutex_lock(&mdss_pp_mutex); mutex_lock(&mdss_pp_mutex);
if (!mdss_pp_res) { if (!mdss_pp_res) {
mdss_pp_res = devm_kzalloc(dev, sizeof(*mdss_pp_res), mdss_pp_res = devm_kzalloc(dev, sizeof(*mdss_pp_res),
@ -2400,6 +2403,8 @@ pp_exit:
void mdss_mdp_pp_term(struct device *dev) void mdss_mdp_pp_term(struct device *dev)
{ {
struct mdss_data_type *mdata = mdss_mdp_get_mdata();
if (mdss_pp_res) { if (mdss_pp_res) {
mutex_lock(&mdss_pp_mutex); mutex_lock(&mdss_pp_mutex);
devm_kfree(dev, mdss_pp_res->dspp_hist); devm_kfree(dev, mdss_pp_res->dspp_hist);
@ -2407,6 +2412,9 @@ void mdss_mdp_pp_term(struct device *dev)
mdss_pp_res = NULL; mdss_pp_res = NULL;
mutex_unlock(&mdss_pp_mutex); mutex_unlock(&mdss_pp_mutex);
} }
mdss_reg_bus_vote_client_destroy(mdata->pp_reg_bus_clt);
mdata->pp_reg_bus_clt = NULL;
} }
int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd) int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd)