Re: [PATCH] drm/ast: Fix black screen when getting out of suspend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

Am 22.06.22 um 14:48 schrieb Jocelyn Falempe:
With an AST2600, the screen is garbage when going out of suspend.
This is because color settings are lost, and not restored on resume.
Force the color settings on DPMS_ON, to make sure the settings are correct.

I didn't write this code, it comes from the out-of-tree aspeed driver v1.13
https://www.aspeedtech.com/support_driver/

Signed-off-by: Jocelyn Falempe <jfalempe@xxxxxxxxxx>
Tested-by: Venkat Tadikonda <venkateswara.rao@xxxxxxxxx>
---
  drivers/gpu/drm/ast/ast_mode.c | 13 +++++++++++++
  1 file changed, 13 insertions(+)

diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index 3eb9afecd9d4..cdddcb5c4439 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -990,6 +990,9 @@ static void ast_crtc_dpms(struct drm_crtc *crtc, int mode)
  {
  	struct ast_private *ast = to_ast_private(crtc->dev);
  	u8 ch = AST_DPMS_VSYNC_OFF | AST_DPMS_HSYNC_OFF;
+	struct ast_crtc_state *ast_state;
+	const struct drm_format_info *format;
+	struct ast_vbios_mode_info *vbios_mode_info;
/* TODO: Maybe control display signal generation with
  	 *       Sync Enable (bit CR17.7).
@@ -1007,6 +1010,16 @@ static void ast_crtc_dpms(struct drm_crtc *crtc, int mode)
  			ast_dp_set_on_off(crtc->dev, 1);
  		}
+ ast_state = to_ast_crtc_state(crtc->state);
+		format = ast_state->format;
+
+		if (format){
+			vbios_mode_info = &ast_state->vbios_mode_info;
+
+			ast_set_color_reg(ast, format);
+			ast_set_vbios_color_reg(ast, format, vbios_mode_info);
+		}
+

I've seen suspend issues on other AST devices besides the 2600. This seems to be an improvement on AST2300 at least. Therefore

Tested-by: Thomas Zimmermann <tzimmermann@xxxxxxx>

The DPMS code need to be integrated into atomic_enable at some point. (It's for a later patchset.) It's a relict of the old non-atomic modesetting that never got done correctly.

Best regards
Thomas

  		ast_crtc_load_lut(ast, crtc);
  		break;
  	case DRM_MODE_DPMS_STANDBY:

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux