aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4216-drm-amd-display-Check-SCRATCH-reg-to-determine-S3-re.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4216-drm-amd-display-Check-SCRATCH-reg-to-determine-S3-re.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4216-drm-amd-display-Check-SCRATCH-reg-to-determine-S3-re.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4216-drm-amd-display-Check-SCRATCH-reg-to-determine-S3-re.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4216-drm-amd-display-Check-SCRATCH-reg-to-determine-S3-re.patch
new file mode 100644
index 00000000..dea707bd
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4216-drm-amd-display-Check-SCRATCH-reg-to-determine-S3-re.patch
@@ -0,0 +1,74 @@
+From f2d21896f604143f0ffef1bdb8d138d9e0f22642 Mon Sep 17 00:00:00 2001
+From: Yongqiang Sun <yongqiang.sun@amd.com>
+Date: Fri, 6 Apr 2018 21:38:10 -0400
+Subject: [PATCH 4216/5725] 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: Yongqiang Sun <yongqiang.sun@amd.com>
+Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ .../amd/display/dc/dce110/dce110_hw_sequencer.c | 33 ++++++++++++++++++----
+ 1 file changed, 28 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+index 430d67b..3920310 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+@@ -1526,18 +1526,41 @@ static struct dc_link *get_link_for_edp_not_in_use(
+ */
+ void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context)
+ {
+- /* check eDP lid state:
+- * If lid is open, vbios already light up eDP, so we can leverage vbios and skip eDP
+- * programming
++ /* check eDP lid state and BIOS_SCRATCH_3 to determine fast boot optimization
++ * UEFI boot
++ * 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);
+ 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) {
+ 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 (!edp_link_to_turnoff)
++ /* if OS doesn't light up eDP and eDP link is available, we want to disable
++ * If resume from S4/S5, should optimization.
++ */
++ if (!edp_link_to_turnoff && edp_active_status_from_scratch)
+ dc->apply_edp_fast_boot_optimization = true;
+ }
+
+--
+2.7.4
+