--- 6f7cabf62cb81e82a3277e0324d5fb3b786d6cae +++ bbcb4a21aa8c328c3c44fca069c51963d080a911 @@ -2280,7 +2280,9 @@ static int mdp_off(struct platform_devic mdp_clk_ctrl(0); #ifdef CONFIG_MSM_BUS_SCALING - mdp_bus_scale_update_request(0, 0); + + mdp_bus_scale_update_request(0, 0, 0, 0); + #endif if (mdp_rev >= MDP_REV_41 && mfd->panel.type == MIPI_CMD_PANEL) mdp_dsi_cmd_overlay_suspend(mfd); @@ -2403,8 +2405,8 @@ void mdp_hw_version(void) #ifdef CONFIG_MSM_BUS_SCALING -#ifndef MDP_BUS_VECTOR_ENTRY -#define MDP_BUS_VECTOR_ENTRY(ab_val, ib_val) \ +#ifndef MDP_BUS_VECTOR_ENTRY_P0 +#define MDP_BUS_VECTOR_ENTRY_P0(ab_val, ib_val) \ { \ .src = MSM_BUS_MASTER_MDP_PORT0, \ .dst = MSM_BUS_SLAVE_EBI_CH0, \ @@ -2412,17 +2414,51 @@ void mdp_hw_version(void) .ib = (ib_val), \ } #endif +#ifndef MDP_BUS_VECTOR_ENTRY_P1 +#define MDP_BUS_VECTOR_ENTRY_P1(ab_val, ib_val) \ + { \ + .src = MSM_BUS_MASTER_MDP_PORT1, \ + .dst = MSM_BUS_SLAVE_EBI_CH0, \ + .ab = (ab_val), \ + .ib = (ib_val), \ + } +#endif + + /* * Entry 0 hold 0 request * Entry 1 and 2 do ping pong request */ -static struct msm_bus_vectors mdp_bus_vectors[] = { - MDP_BUS_VECTOR_ENTRY(0, 0), - MDP_BUS_VECTOR_ENTRY( 128000000, 160000000), - MDP_BUS_VECTOR_ENTRY( 128000000, 160000000), +static struct msm_bus_vectors mdp_bus_init_vectors[] = { + MDP_BUS_VECTOR_ENTRY_P0(0, 0), + MDP_BUS_VECTOR_ENTRY_P1(0, 0), +}; + +static struct msm_bus_vectors mdp_bus_ping_vectors[] = { + MDP_BUS_VECTOR_ENTRY_P0(128000000, 160000000), + MDP_BUS_VECTOR_ENTRY_P1(128000000, 160000000), +}; + +static struct msm_bus_vectors mdp_bus_pong_vectors[] = { + MDP_BUS_VECTOR_ENTRY_P0(128000000, 160000000), + MDP_BUS_VECTOR_ENTRY_P1(128000000, 160000000), +}; + +static struct msm_bus_paths mdp_bus_usecases[] = { + { + ARRAY_SIZE(mdp_bus_init_vectors), + mdp_bus_init_vectors, + }, + { + ARRAY_SIZE(mdp_bus_ping_vectors), + mdp_bus_ping_vectors, + }, + { + ARRAY_SIZE(mdp_bus_pong_vectors), + mdp_bus_pong_vectors, + }, }; -static struct msm_bus_paths mdp_bus_usecases[ARRAY_SIZE(mdp_bus_vectors)]; static struct msm_bus_scale_pdata mdp_bus_scale_table = { .usecase = mdp_bus_usecases, .num_usecases = ARRAY_SIZE(mdp_bus_usecases), @@ -2433,12 +2469,7 @@ static uint32_t mdp_bus_scale_handle; static int mdp_bus_scale_register(void) { struct msm_bus_scale_pdata *bus_pdata = &mdp_bus_scale_table; - int i; - for (i = 0; i < bus_pdata->num_usecases; i++) { - mdp_bus_usecases[i].num_paths = 1; - mdp_bus_usecases[i].vectors = &mdp_bus_vectors[i]; - } - + if (!mdp_bus_scale_handle) { mdp_bus_scale_handle = msm_bus_scale_register_client(bus_pdata); if (!mdp_bus_scale_handle) { @@ -2450,14 +2481,14 @@ static int mdp_bus_scale_register(void) } static int bus_index = 1; -int mdp_bus_scale_update_request(u64 ab, u64 ib) +int mdp_bus_scale_update_request(u64 ab_p0, u64 ib_p0, u64 ab_p1, u64 ib_p1) { if (mdp_bus_scale_handle < 1) { pr_err("%s invalid bus handle\n", __func__); return -EINVAL; } - if (!ab) + if ((!ab_p0) && (!ab_p1)) return msm_bus_scale_client_update_request (mdp_bus_scale_handle, 0); @@ -2465,14 +2496,23 @@ int mdp_bus_scale_update_request(u64 ab, bus_index++; bus_index = (bus_index > 2) ? 1 : bus_index; - mdp_bus_usecases[bus_index].vectors->ab = min(ab, mdp_max_bw); - ib = max(ib, ab); - mdp_bus_usecases[bus_index].vectors->ib = min(ib, mdp_max_bw); - + mdp_bus_usecases[bus_index].vectors[0].ab = min(ab_p0, mdp_max_bw); + ib_p0 = max(ib_p0, ab_p0); + mdp_bus_usecases[bus_index].vectors[0].ib = min(ib_p0, mdp_max_bw); + + mdp_bus_usecases[bus_index].vectors[1].ab = min(ab_p1, mdp_max_bw); + ib_p1 = max(ib_p1, ab_p1); + mdp_bus_usecases[bus_index].vectors[1].ib = min(ib_p1, mdp_max_bw); + pr_debug("%s: handle=%d index=%d ab=%llu ib=%llu\n", __func__, (u32)mdp_bus_scale_handle, bus_index, - mdp_bus_usecases[bus_index].vectors->ab, - mdp_bus_usecases[bus_index].vectors->ib); + mdp_bus_usecases[bus_index].vectors[0].ab, + mdp_bus_usecases[bus_index].vectors[0].ib); + pr_debug("%s: p1 handle=%d index=%d ab=%llu ib=%llu\n", __func__, + (u32)mdp_bus_scale_handle, bus_index, + mdp_bus_usecases[bus_index].vectors[1].ab, + mdp_bus_usecases[bus_index].vectors[1].ib); + return msm_bus_scale_client_update_request (mdp_bus_scale_handle, bus_index); @@ -2482,15 +2522,25 @@ int mdp_bus_scale_restore_request(void) { u64 ab, ib; if (!bus_index || - !mdp_bus_usecases[bus_index].vectors->ab) { + !mdp_bus_usecases[bus_index].vectors[0].ab) { ab = mdp_max_bw; ib = mdp_max_bw; } else { - ab = mdp_bus_usecases[bus_index].vectors->ab; - ib = mdp_bus_usecases[bus_index].vectors->ib; + ab = mdp_bus_usecases[bus_index].vectors[0].ab; + ib = mdp_bus_usecases[bus_index].vectors[0].ib; } pr_info("%s: ab=%llu ib=%llu\n", __func__, ab, ib); - return mdp_bus_scale_update_request(ab, ib); + + pr_debug("%s: index=%d ab_p0=%llu ib_p0=%llu\n", __func__, bus_index, + mdp_bus_usecases[bus_index].vectors[0].ab, + mdp_bus_usecases[bus_index].vectors[0].ib); + pr_debug("%s: index=%d ab_p1=%llu ib_p1=%llu\n", __func__, bus_index, + mdp_bus_usecases[bus_index].vectors[1].ab, + mdp_bus_usecases[bus_index].vectors[1].ib); + + return mdp_bus_scale_update_request(ab, ib, + mdp_bus_usecases[bus_index].vectors[1].ab, + mdp_bus_usecases[bus_index].vectors[1].ib); } #endif @@ -3030,7 +3080,7 @@ static int mdp_probe(struct platform_dev /* req bus bandwidth immediately */ if (!(mfd->cont_splash_done)) - mdp_bus_scale_update_request(mdp_max_bw, mdp_max_bw); + mdp_bus_scale_update_request(mdp_max_bw, mdp_max_bw,mdp_max_bw,mdp_max_bw); #endif /* set driver data */