Commit 1ca068ed authored by Zi Yu Liao's avatar Zi Yu Liao Committed by Alex Deucher
Browse files

drm/amd/display: fix DMCU hang when going into Modern Standby



[why]
When the system is going into suspend, set_backlight gets called
after the eDP got blanked. Since smooth brightness is enabled,
the driver will make a call into the DMCU to ramp the brightness.
The DMCU would try to enable ABM to do so. But since the display is
blanked, this ends up causing ABM1_ACE_DBUF_REG_UPDATE_PENDING to
get stuck at 1, which results in a dead lock in the DMCU firmware.

[how]
Disable brightness ramping when the eDP display is blanked.

Signed-off-by: default avatarZi Yu Liao <ziyu.liao@amd.com>
Reviewed-by: default avatarEric Yang <eric.yang2@amd.com>
Acked-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarLeo Li <sunpeng.li@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 19f87696
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -2336,7 +2336,7 @@ bool dc_link_set_backlight_level(const struct dc_link *link,
			if (core_dc->current_state->res_ctx.pipe_ctx[i].stream) {
				if (core_dc->current_state->res_ctx.
						pipe_ctx[i].stream->link
						== link)
						== link) {
					/* DMCU -1 for all controller id values,
					 * therefore +1 here
					 */
@@ -2344,6 +2344,13 @@ bool dc_link_set_backlight_level(const struct dc_link *link,
						core_dc->current_state->
						res_ctx.pipe_ctx[i].stream_res.tg->inst +
						1;

					/* Disable brightness ramping when the display is blanked
					 * as it can hang the DMCU
					 */
					if (core_dc->current_state->res_ctx.pipe_ctx[i].plane_state == NULL)
						frame_ramp = 0;
				}
			}
		}
		abm->funcs->set_backlight_level_pwm(