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

Thomas Zimmermann tzimmermann at suse.de
Fri Jun 24 07:31:19 UTC 2022


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 at redhat.com>
> Tested-by: Venkat Tadikonda <venkateswara.rao at intel.com>
> ---
>   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 at suse.de>

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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220624/652144cb/attachment.sig>


More information about the dri-devel mailing list