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: Jocelyn Falempe <jfalempe@redhat.com> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> Tested-by: Jocelyn Falempe <jfalempe@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20221013112923.769-9-tzimmermann@suse.de
This commit is contained in:
parent
f2fa5a99ca
commit
202fb33be3
@ -671,10 +671,19 @@ static void ast_primary_plane_helper_atomic_update(struct drm_plane *plane,
|
||||
ast_handle_damage(ast_plane, shadow_plane_state->data, fb, &damage);
|
||||
}
|
||||
|
||||
ast_set_offset_reg(ast, fb);
|
||||
ast_set_start_address_crt1(ast, (u32)ast_plane->offset);
|
||||
|
||||
ast_set_index_reg_mask(ast, AST_IO_SEQ_PORT, 0x1, 0xdf, 0x00);
|
||||
/*
|
||||
* 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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user