Loading drivers/video/msm/mdss/mdss.h +13 −9 Original line number Diff line number Diff line Loading @@ -99,6 +99,15 @@ struct mdss_prefill_data { u32 fbc_lines; }; enum mdss_hw_index { MDSS_HW_MDP, MDSS_HW_DSI0, MDSS_HW_DSI1, MDSS_HW_HDMI, MDSS_HW_EDP, MDSS_MAX_HW_BLK }; struct mdss_data_type { u32 mdp_rev; struct clk *mdp_clk[MDSS_MAX_CLK]; Loading Loading @@ -217,17 +226,11 @@ struct mdss_data_type { struct mdss_perf_tune perf_tune; bool traffic_shaper_en; int iommu_ref_cnt; }; extern struct mdss_data_type *mdss_res; enum mdss_hw_index { MDSS_HW_MDP, MDSS_HW_DSI0, MDSS_HW_DSI1, MDSS_HW_HDMI, MDSS_HW_EDP, MDSS_MAX_HW_BLK u64 ab[MDSS_MAX_HW_BLK]; u64 ib[MDSS_MAX_HW_BLK]; }; extern struct mdss_data_type *mdss_res; struct mdss_hw { u32 hw_ndx; Loading @@ -241,6 +244,7 @@ void mdss_disable_irq(struct mdss_hw *hw); void mdss_disable_irq_nosync(struct mdss_hw *hw); void mdss_bus_bandwidth_ctrl(int enable); int mdss_iommu_ctrl(int enable); int mdss_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota); static inline struct ion_client *mdss_get_ionclient(void) { Loading drivers/video/msm/mdss/mdss_dsi_host.c +3 −3 Original line number Diff line number Diff line Loading @@ -1345,7 +1345,8 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp) * also, axi bus bandwidth need since dsi controller will * fetch dcs commands from axi bus */ mdss_bus_bandwidth_ctrl(1); mdss_bus_scale_set_quota(MDSS_HW_DSI0, SZ_1M, SZ_1M); pr_debug("%s: from_mdp=%d pid=%d\n", __func__, from_mdp, current->pid); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 1); Loading @@ -1361,8 +1362,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp) ret = mdss_dsi_cmdlist_tx(ctrl, req); mdss_iommu_ctrl(0); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0); mdss_bus_bandwidth_ctrl(0); mdss_bus_scale_set_quota(MDSS_HW_DSI0, 0, 0); need_lock: MDSS_XLOG(ctrl->ndx, from_mdp, ctrl->mdp_busy, current->pid, Loading drivers/video/msm/mdss/mdss_mdp.c +24 −1 Original line number Diff line number Diff line Loading @@ -419,7 +419,7 @@ static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata) mdata->reg_bus_hdl); } return mdss_mdp_bus_scale_set_quota(AB_QUOTA, IB_QUOTA); return mdss_bus_scale_set_quota(MDSS_HW_MDP, AB_QUOTA, IB_QUOTA); } static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata) Loading Loading @@ -492,6 +492,29 @@ int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) new_uc_idx); } int mdss_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota) { int rc = 0; int i; u64 total_ab = 0; u64 total_ib = 0; mutex_lock(&bus_bw_lock); mdss_res->ab[client] = ab_quota; mdss_res->ib[client] = ib_quota; for (i = 0; i < MDSS_MAX_HW_BLK; i++) { total_ab += mdss_res->ab[i]; total_ib = max(total_ib, mdss_res->ib[i]); } rc = mdss_mdp_bus_scale_set_quota(total_ab, total_ib); mutex_unlock(&bus_bw_lock); return rc; } static inline u32 mdss_mdp_irq_mask(u32 intr_type, u32 intf_num) { if (intr_type == MDSS_MDP_IRQ_INTF_UNDER_RUN || Loading drivers/video/msm/mdss/mdss_mdp_ctl.c +1 −1 Original line number Diff line number Diff line Loading @@ -996,7 +996,7 @@ static inline void mdss_mdp_ctl_perf_update_bus(struct mdss_data_type *mdata, &mdss_res->ab_factor); trace_mdp_perf_update_bus(bus_ab_quota, bus_ib_quota); ATRACE_INT("bus_quota", bus_ib_quota); mdss_mdp_bus_scale_set_quota(bus_ab_quota, bus_ib_quota); mdss_bus_scale_set_quota(MDSS_HW_MDP, bus_ab_quota, bus_ib_quota); pr_debug("ab=%llu ib=%llu\n", bus_ab_quota, bus_ib_quota); ATRACE_END(__func__); } Loading Loading
drivers/video/msm/mdss/mdss.h +13 −9 Original line number Diff line number Diff line Loading @@ -99,6 +99,15 @@ struct mdss_prefill_data { u32 fbc_lines; }; enum mdss_hw_index { MDSS_HW_MDP, MDSS_HW_DSI0, MDSS_HW_DSI1, MDSS_HW_HDMI, MDSS_HW_EDP, MDSS_MAX_HW_BLK }; struct mdss_data_type { u32 mdp_rev; struct clk *mdp_clk[MDSS_MAX_CLK]; Loading Loading @@ -217,17 +226,11 @@ struct mdss_data_type { struct mdss_perf_tune perf_tune; bool traffic_shaper_en; int iommu_ref_cnt; }; extern struct mdss_data_type *mdss_res; enum mdss_hw_index { MDSS_HW_MDP, MDSS_HW_DSI0, MDSS_HW_DSI1, MDSS_HW_HDMI, MDSS_HW_EDP, MDSS_MAX_HW_BLK u64 ab[MDSS_MAX_HW_BLK]; u64 ib[MDSS_MAX_HW_BLK]; }; extern struct mdss_data_type *mdss_res; struct mdss_hw { u32 hw_ndx; Loading @@ -241,6 +244,7 @@ void mdss_disable_irq(struct mdss_hw *hw); void mdss_disable_irq_nosync(struct mdss_hw *hw); void mdss_bus_bandwidth_ctrl(int enable); int mdss_iommu_ctrl(int enable); int mdss_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota); static inline struct ion_client *mdss_get_ionclient(void) { Loading
drivers/video/msm/mdss/mdss_dsi_host.c +3 −3 Original line number Diff line number Diff line Loading @@ -1345,7 +1345,8 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp) * also, axi bus bandwidth need since dsi controller will * fetch dcs commands from axi bus */ mdss_bus_bandwidth_ctrl(1); mdss_bus_scale_set_quota(MDSS_HW_DSI0, SZ_1M, SZ_1M); pr_debug("%s: from_mdp=%d pid=%d\n", __func__, from_mdp, current->pid); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 1); Loading @@ -1361,8 +1362,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp) ret = mdss_dsi_cmdlist_tx(ctrl, req); mdss_iommu_ctrl(0); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0); mdss_bus_bandwidth_ctrl(0); mdss_bus_scale_set_quota(MDSS_HW_DSI0, 0, 0); need_lock: MDSS_XLOG(ctrl->ndx, from_mdp, ctrl->mdp_busy, current->pid, Loading
drivers/video/msm/mdss/mdss_mdp.c +24 −1 Original line number Diff line number Diff line Loading @@ -419,7 +419,7 @@ static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata) mdata->reg_bus_hdl); } return mdss_mdp_bus_scale_set_quota(AB_QUOTA, IB_QUOTA); return mdss_bus_scale_set_quota(MDSS_HW_MDP, AB_QUOTA, IB_QUOTA); } static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata) Loading Loading @@ -492,6 +492,29 @@ int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) new_uc_idx); } int mdss_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota) { int rc = 0; int i; u64 total_ab = 0; u64 total_ib = 0; mutex_lock(&bus_bw_lock); mdss_res->ab[client] = ab_quota; mdss_res->ib[client] = ib_quota; for (i = 0; i < MDSS_MAX_HW_BLK; i++) { total_ab += mdss_res->ab[i]; total_ib = max(total_ib, mdss_res->ib[i]); } rc = mdss_mdp_bus_scale_set_quota(total_ab, total_ib); mutex_unlock(&bus_bw_lock); return rc; } static inline u32 mdss_mdp_irq_mask(u32 intr_type, u32 intf_num) { if (intr_type == MDSS_MDP_IRQ_INTF_UNDER_RUN || Loading
drivers/video/msm/mdss/mdss_mdp_ctl.c +1 −1 Original line number Diff line number Diff line Loading @@ -996,7 +996,7 @@ static inline void mdss_mdp_ctl_perf_update_bus(struct mdss_data_type *mdata, &mdss_res->ab_factor); trace_mdp_perf_update_bus(bus_ab_quota, bus_ib_quota); ATRACE_INT("bus_quota", bus_ib_quota); mdss_mdp_bus_scale_set_quota(bus_ab_quota, bus_ib_quota); mdss_bus_scale_set_quota(MDSS_HW_MDP, bus_ab_quota, bus_ib_quota); pr_debug("ab=%llu ib=%llu\n", bus_ab_quota, bus_ib_quota); ATRACE_END(__func__); } Loading