Loading msm/sde_rsc.c +6 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[sde_rsc:%s:%d]: " fmt, __func__, __LINE__ Loading Loading @@ -531,6 +531,8 @@ static int sde_rsc_switch_to_cmd(struct sde_rsc_priv *rsc, /* indicate wait for vsync for vid to cmd state switch & cfg update */ if (!rc && (rsc->current_state == SDE_RSC_VID_STATE || rsc->current_state == SDE_RSC_CMD_STATE)) { rsc->post_poms = true; /* clear VSYNC timestamp for indication when update completes */ if (rsc->hw_ops.hw_vsync) rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0); Loading Loading @@ -670,6 +672,8 @@ static int sde_rsc_switch_to_vid(struct sde_rsc_priv *rsc, /* indicate wait for vsync for vid to cmd state switch & cfg update */ if (!rc && (rsc->current_state == SDE_RSC_VID_STATE || rsc->current_state == SDE_RSC_CMD_STATE)) { rsc->post_poms = true; /* clear VSYNC timestamp for indication when update completes */ if (rsc->hw_ops.hw_vsync) rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0); Loading Loading @@ -737,6 +741,7 @@ static int sde_rsc_switch_to_idle(struct sde_rsc_priv *rsc, rc = CLK_MODE_SWITCH_SUCCESS; } else if (rsc->hw_ops.state_update) { rc = rsc->hw_ops.state_update(rsc, SDE_RSC_IDLE_STATE); rsc->post_poms = false; if (!rc) rpmh_mode_solver_set(rsc->rpmh_dev, true); } Loading msm/sde_rsc_hw_v3.c +8 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[sde_rsc_hw:%s:%d]: " fmt, __func__, __LINE__ Loading Loading @@ -278,7 +278,7 @@ static int sde_rsc_mode2_entry_trigger(struct sde_rsc_priv *rsc) rc = 0; break; } usleep_range(10, 100); usleep_range(50, 100); } return rc; Loading Loading @@ -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, 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++) { rc = sde_rsc_mode2_entry_trigger(rsc); if (!rc) Loading msm/sde_rsc_priv.h +4 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #ifndef _SDE_RSC_PRIV_H_ Loading Loading @@ -186,6 +186,7 @@ struct sde_rsc_bw_config { * bw_config: check sde_rsc_bw_config structure description. * dev: rsc device node * resource_refcount: Track rsc resource refcount * post_poms: bool if a panel mode change occurred */ struct sde_rsc_priv { u32 version; Loading Loading @@ -227,6 +228,8 @@ struct sde_rsc_priv { struct sde_rsc_bw_config bw_config; struct device *dev; atomic_t resource_refcount; bool post_poms; }; /** Loading Loading
msm/sde_rsc.c +6 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[sde_rsc:%s:%d]: " fmt, __func__, __LINE__ Loading Loading @@ -531,6 +531,8 @@ static int sde_rsc_switch_to_cmd(struct sde_rsc_priv *rsc, /* indicate wait for vsync for vid to cmd state switch & cfg update */ if (!rc && (rsc->current_state == SDE_RSC_VID_STATE || rsc->current_state == SDE_RSC_CMD_STATE)) { rsc->post_poms = true; /* clear VSYNC timestamp for indication when update completes */ if (rsc->hw_ops.hw_vsync) rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0); Loading Loading @@ -670,6 +672,8 @@ static int sde_rsc_switch_to_vid(struct sde_rsc_priv *rsc, /* indicate wait for vsync for vid to cmd state switch & cfg update */ if (!rc && (rsc->current_state == SDE_RSC_VID_STATE || rsc->current_state == SDE_RSC_CMD_STATE)) { rsc->post_poms = true; /* clear VSYNC timestamp for indication when update completes */ if (rsc->hw_ops.hw_vsync) rsc->hw_ops.hw_vsync(rsc, VSYNC_ENABLE, NULL, 0, 0); Loading Loading @@ -737,6 +741,7 @@ static int sde_rsc_switch_to_idle(struct sde_rsc_priv *rsc, rc = CLK_MODE_SWITCH_SUCCESS; } else if (rsc->hw_ops.state_update) { rc = rsc->hw_ops.state_update(rsc, SDE_RSC_IDLE_STATE); rsc->post_poms = false; if (!rc) rpmh_mode_solver_set(rsc->rpmh_dev, true); } Loading
msm/sde_rsc_hw_v3.c +8 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[sde_rsc_hw:%s:%d]: " fmt, __func__, __LINE__ Loading Loading @@ -278,7 +278,7 @@ static int sde_rsc_mode2_entry_trigger(struct sde_rsc_priv *rsc) rc = 0; break; } usleep_range(10, 100); usleep_range(50, 100); } return rc; Loading Loading @@ -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, 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++) { rc = sde_rsc_mode2_entry_trigger(rsc); if (!rc) Loading
msm/sde_rsc_priv.h +4 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #ifndef _SDE_RSC_PRIV_H_ Loading Loading @@ -186,6 +186,7 @@ struct sde_rsc_bw_config { * bw_config: check sde_rsc_bw_config structure description. * dev: rsc device node * resource_refcount: Track rsc resource refcount * post_poms: bool if a panel mode change occurred */ struct sde_rsc_priv { u32 version; Loading Loading @@ -227,6 +228,8 @@ struct sde_rsc_priv { struct sde_rsc_bw_config bw_config; struct device *dev; atomic_t resource_refcount; bool post_poms; }; /** Loading