Commit 2c37e49a authored by Yongqiang Sun's avatar Yongqiang Sun Committed by Alex Deucher

drm/amd/display: Check SCRATCH reg to determine S3 resume.

Use lid state only to determine fast boot optimization is not enough.
For S3/Resume, due to bios isn't involved in boot, eDP wasn't
light up, while lid state is open, if do fast boot optimization,
eDP panel will skip enable link and result in black screen after boot.
And becasue of bios isn't involved, no matter UEFI or Legacy boot,
BIOS_SCRATCH_3 value should be 0, use this to determine the case.
Signed-off-by: default avatarYongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: default avatarCharlene Liu <Charlene.Liu@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7ac897b5
...@@ -1516,18 +1516,41 @@ static struct dc_link *get_link_for_edp_not_in_use( ...@@ -1516,18 +1516,41 @@ static struct dc_link *get_link_for_edp_not_in_use(
*/ */
void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context) void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context)
{ {
/* check eDP lid state: /* check eDP lid state and BIOS_SCRATCH_3 to determine fast boot optimization
* If lid is open, vbios already light up eDP, so we can leverage vbios and skip eDP * UEFI boot
* programming * edp_active_status_from_scratch fast boot optimization
* S4/S5 resume:
* Lid Open true true
* Lid Close false false
*
* S3/ resume:
* Lid Open false false
* Lid Close false false
*
* Legacy boot:
* edp_active_status_from_scratch fast boot optimization
* S4/S resume:
* Lid Open true true
* Lid Close true false
*
* S3/ resume:
* Lid Open false false
* Lid Close false false
*/ */
struct dc_bios *dcb = dc->ctx->dc_bios;
bool lid_state_closed = is_eDP_lid_closed(context); bool lid_state_closed = is_eDP_lid_closed(context);
struct dc_link *edp_link_to_turnoff = NULL; struct dc_link *edp_link_to_turnoff = NULL;
bool edp_active_status_from_scratch =
(dcb->funcs->get_vga_enabled_displays(dc->ctx->dc_bios) == ATOM_DISPLAY_LCD1_ACTIVE);
/*Lid open*/
if (!lid_state_closed) { if (!lid_state_closed) {
edp_link_to_turnoff = get_link_for_edp_not_in_use(dc, context); edp_link_to_turnoff = get_link_for_edp_not_in_use(dc, context);
/* if OS doesn't light up eDP and eDP link is available, we want to disable */ /* if OS doesn't light up eDP and eDP link is available, we want to disable
if (!edp_link_to_turnoff) * If resume from S4/S5, should optimization.
*/
if (!edp_link_to_turnoff && edp_active_status_from_scratch)
dc->apply_edp_fast_boot_optimization = true; dc->apply_edp_fast_boot_optimization = true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment