Commit 202fb33b authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/ast: Avoid reprogramming primary-plane scanout address



Some AST-based BMCs stop display output for up to 5 seconds after
reprogramming the scanout address. As the address is fixed, avoid
re-setting the address' value.

v2:
	* only update offset if it changed (Jocelyn)

Reported-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Tested-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221013112923.769-9-tzimmermann@suse.de
parent f2fa5a99
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -671,11 +671,20 @@ static void ast_primary_plane_helper_atomic_update(struct drm_plane *plane,
		ast_handle_damage(ast_plane, shadow_plane_state->data, fb, &damage);
	}

	/*
	 * Some BMCs stop scanning out the video signal after the driver
	 * reprogrammed the offset or scanout address. This stalls display
	 * output for several seconds and makes the display unusable.
	 * Therefore only update the offset if it changes and reprogram the
	 * address after enabling the plane.
	 */
	if (!old_fb || old_fb->pitches[0] != fb->pitches[0])
		ast_set_offset_reg(ast, fb);
	if (!old_fb) {
		ast_set_start_address_crt1(ast, (u32)ast_plane->offset);

		ast_set_index_reg_mask(ast, AST_IO_SEQ_PORT, 0x1, 0xdf, 0x00);
	}
}

static void ast_primary_plane_helper_atomic_disable(struct drm_plane *plane,
						    struct drm_atomic_state *state)