static int mdss_mdp_ctl_perf_commit(u32 flags) { struct mdss_mdp_ctl *ctl; int cnum; unsigned long clk_rate = 0; u64 bus_ab_quota = 0, bus_ib_quota = 0; if (!flags) { pr_err("nothing to update\n"); return -EINVAL; } mutex_lock(&mdss_mdp_ctl_lock); for (cnum = 0; cnum < MDSS_MDP_MAX_CTL; cnum++) { ctl = &mdss_mdp_ctl_list[cnum]; if (ctl->power_on) { bus_ab_quota += ctl->bus_ab_quota; bus_ib_quota += ctl->bus_ib_quota; if (ctl->clk_rate > clk_rate) clk_rate = ctl->clk_rate; } } if (flags & MDSS_MDP_PERF_UPDATE_BUS) { bus_ab_quota = bus_ab_quota << MDSS_MDP_BUS_FACTOR_SHIFT; bus_ib_quota = MDSS_MDP_BUS_FUDGE_FACTOR(bus_ib_quota); bus_ib_quota <<= MDSS_MDP_BUS_FACTOR_SHIFT; if ((bus_ib_quota == 0) && (clk_rate > 0)) { /* allocate min bw for panel cmds if mdp is active */ bus_ib_quota = SZ_16M; } mdss_mdp_bus_scale_set_quota(bus_ab_quota, bus_ib_quota); } if (flags & MDSS_MDP_PERF_UPDATE_CLK) { clk_rate = MDSS_MDP_CLK_FUDGE_FACTOR(clk_rate); pr_debug("update clk rate = %lu\n", clk_rate); mdss_mdp_set_clk_rate(clk_rate); } mutex_unlock(&mdss_mdp_ctl_lock); return 0; }
static int mdss_mdp_ctl_perf_commit(struct mdss_data_type *mdata, u32 flags) { struct mdss_mdp_ctl *ctl; int cnum; unsigned long clk_rate = 0; u64 bus_ab_quota = 0, bus_ib_quota = 0; if (!flags) { pr_err("nothing to update\n"); return -EINVAL; } mutex_lock(&mdss_mdp_ctl_lock); for (cnum = 0; cnum < mdata->nctl; cnum++) { ctl = mdata->ctl_off + cnum; if (ctl->power_on) { bus_ab_quota += ctl->bus_ab_quota; bus_ib_quota += ctl->bus_ib_quota; if (ctl->clk_rate > clk_rate) clk_rate = ctl->clk_rate; } } if (flags & MDSS_MDP_PERF_UPDATE_BUS) { bus_ab_quota = bus_ib_quota << MDSS_MDP_BUS_FACTOR_SHIFT; bus_ib_quota = MDSS_MDP_BUS_FUDGE_FACTOR(bus_ib_quota); bus_ib_quota <<= MDSS_MDP_BUS_FACTOR_SHIFT; mdss_mdp_bus_scale_set_quota(bus_ab_quota, bus_ib_quota); } if (flags & MDSS_MDP_PERF_UPDATE_CLK) { clk_rate = MDSS_MDP_CLK_FUDGE_FACTOR(clk_rate); pr_debug("update clk rate = %lu\n", clk_rate); mdss_mdp_set_clk_rate(clk_rate); } mutex_unlock(&mdss_mdp_ctl_lock); return 0; }