disp: msm: increase delay times while waiting to turn off rscc clocks

RSC is timing out while checking for power control register,
increasing wait times only after a poms, removes this issue.

Change-Id: I4a324eb3c87e7dfb84d9a8b0a11597327d206a74
Signed-off-by: Nilaan Gunabalachandran <ngunabal@codeaurora.org>
Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
这个提交包含在:
Nilaan Gunabalachandran
2019-12-13 10:05:36 -05:00
提交者 Gerrit - the friendly Code Review server
父节点 1f331b536f
当前提交 eddae0d758
修改 3 个文件,包含 15 行新增1 行删除

查看文件

@@ -554,6 +554,8 @@ vsync_wait:
/* indicate wait for vsync for vid to cmd state switch & cfg update */ /* indicate wait for vsync for vid to cmd state switch & cfg update */
if (!rc && (rsc->current_state == SDE_RSC_VID_STATE || if (!rc && (rsc->current_state == SDE_RSC_VID_STATE ||
rsc->current_state == SDE_RSC_CMD_STATE)) { rsc->current_state == SDE_RSC_CMD_STATE)) {
rsc->post_poms = true;
/* clear VSYNC timestamp for indication when update completes */ /* clear VSYNC timestamp for indication when update completes */
if (rsc->hw_ops.hw_vsync) if (rsc->hw_ops.hw_vsync)
rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0); rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0);
@@ -707,6 +709,8 @@ vsync_wait:
/* indicate wait for vsync for vid to cmd state switch & cfg update */ /* indicate wait for vsync for vid to cmd state switch & cfg update */
if (!rc && (rsc->current_state == SDE_RSC_VID_STATE || if (!rc && (rsc->current_state == SDE_RSC_VID_STATE ||
rsc->current_state == SDE_RSC_CMD_STATE)) { rsc->current_state == SDE_RSC_CMD_STATE)) {
rsc->post_poms = true;
/* clear VSYNC timestamp for indication when update completes */ /* clear VSYNC timestamp for indication when update completes */
if (rsc->hw_ops.hw_vsync) if (rsc->hw_ops.hw_vsync)
rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0); rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0);
@@ -774,6 +778,7 @@ static int sde_rsc_switch_to_idle(struct sde_rsc_priv *rsc,
rc = CLK_MODE_SWITCH_SUCCESS; rc = CLK_MODE_SWITCH_SUCCESS;
} else if (rsc->hw_ops.state_update) { } else if (rsc->hw_ops.state_update) {
rc = rsc->hw_ops.state_update(rsc, SDE_RSC_IDLE_STATE); rc = rsc->hw_ops.state_update(rsc, SDE_RSC_IDLE_STATE);
rsc->post_poms = false;
if (!rc) { if (!rc) {
rpmh_mode_solver_set(rsc->rpmh_dev, true); rpmh_mode_solver_set(rsc->rpmh_dev, true);
sde_rsc_set_data_bus_mode(&rsc->phandle, sde_rsc_set_data_bus_mode(&rsc->phandle,

查看文件

@@ -278,7 +278,7 @@ static int sde_rsc_mode2_entry_trigger(struct sde_rsc_priv *rsc)
rc = 0; rc = 0;
break; break;
} }
usleep_range(10, 100); usleep_range(50, 100);
} }
return rc; return rc;
@@ -343,6 +343,12 @@ static int sde_rsc_mode2_entry_v3(struct sde_rsc_priv *rsc)
dss_reg_w(&rsc->drv_io, SDE_RSC_SOLVER_SOLVER_MODES_ENABLED_DRV0, dss_reg_w(&rsc->drv_io, SDE_RSC_SOLVER_SOLVER_MODES_ENABLED_DRV0,
0x7, rsc->debug_mode); 0x7, rsc->debug_mode);
/**
* increase delay time to wait before mode2 entry,
* longer time required subsequent to panel mode change
*/
if (rsc->post_poms)
usleep_range(750, 1000);
for (i = 0; i <= MAX_MODE2_ENTRY_TRY; i++) { for (i = 0; i <= MAX_MODE2_ENTRY_TRY; i++) {
rc = sde_rsc_mode2_entry_trigger(rsc); rc = sde_rsc_mode2_entry_trigger(rsc);
if (!rc) if (!rc)

查看文件

@@ -193,6 +193,7 @@ struct sde_rsc_bw_config {
* resource_refcount: Track rsc resource refcount * resource_refcount: Track rsc resource refcount
* profiling_supp: Indicates if HW has support for profiling counters * profiling_supp: Indicates if HW has support for profiling counters
* profiling_en: Flag for rsc lpm profiling counters, true=enabled * profiling_en: Flag for rsc lpm profiling counters, true=enabled
* post_poms: bool if a panel mode change occurred
*/ */
struct sde_rsc_priv { struct sde_rsc_priv {
u32 version; u32 version;
@@ -236,6 +237,8 @@ struct sde_rsc_priv {
atomic_t resource_refcount; atomic_t resource_refcount;
bool profiling_supp; bool profiling_supp;
bool profiling_en; bool profiling_en;
bool post_poms;
}; };
/** /**