On 6/22/26 19:17, [email protected] wrote:
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index da118377b73a8..732ddafb5cfea 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -4135,6 +4135,28 @@ static void amdgpu_dm_enable_self_refresh(struct
> amdgpu_display_manager *dm,
> }
> }
>
> +static void dm_arm_vblank_event(struct amdgpu_crtc *acrtc,
> + struct dm_crtc_state *acrtc_state,
> + bool pflip_update,
> + bool cursor_update)
> +{
> + assert_spin_locked(&acrtc->base.dev->event_lock);
> +
> + if (pflip_update && acrtc->base.state->event &&
> + acrtc_state->active_planes > 0) {
> + drm_crtc_vblank_get(&acrtc->base);
> + WARN_ON(acrtc->pflip_status != AMDGPU_FLIP_NONE);
> + /* Arm flip completion handling and event delivery after
> programming. */
> + prepare_flip_isr(acrtc);
> + } else if (cursor_update && acrtc_state->active_planes > 0) {
> + if (acrtc->base.state->event) {
> + drm_crtc_vblank_get(&acrtc->base);
> + acrtc->event = acrtc->base.state->event;
> + acrtc->base.state->event = NULL;
> + }
> + }
> +}
This looks like it can be cleaned up a bit (feel free to ignore though):
{
assert_spin_locked(&acrtc->base.dev->event_lock);
if (acrtc->base.state->event && acrtc_state->active_planes > 0) {
if (pflip_update) {
drm_crtc_vblank_get(&acrtc->base);
WARN_ON(acrtc->pflip_status != AMDGPU_FLIP_NONE);
/* Arm flip completion handling and event delivery
after programming. */
prepare_flip_isr(acrtc);
} else if (cursor_update) {
drm_crtc_vblank_get(&acrtc->base);
acrtc->event = acrtc->base.state->event;
acrtc->base.state->event = NULL;
}
}
}
> + /*
> + * DCE depends on a combination of GRPH_FLIP, VLINE0, and VUPDATE for
> + * event delivery. Only GRPH_FLIP handler can send pflip events, and it
> + * only fires if HW latched to the flip. Maintain legacy behavior by
> + * arming event before programming.
> + */
> + if (amdgpu_ip_version(dm->adev, DCE_HWIP, 0) == 0) {
> + scoped_guard(spinlock_irqsave, &pcrtc->dev->event_lock)
> + dm_arm_vblank_event(acrtc_attach, acrtc_state,
> + pflip_present, cursor_update);
> }
Coding style:
if (amdgpu_ip_version(dm->adev, DCE_HWIP, 0) == 0) {
scoped_guard(spinlock_irqsave, &pcrtc->dev->event_lock) {
dm_arm_vblank_event(acrtc_attach, acrtc_state,
pflip_present, cursor_update);
}
}
Nested multi-line statements require curly braces.
> + if (updated_planes_and_streams)
> + flip_latched_during_prog =
> + !dc_get_flip_pending_on_otg(dm->dc,
> acrtc_attach->otg_inst);
if (updated_planes_and_streams) {
flip_latched_during_prog =
!dc_get_flip_pending_on_otg(dm->dc,
acrtc_attach->otg_inst);
}
--
Earthling Michel Dänzer \ GNOME / Xwayland / Mesa developer
https://redhat.com \ Libre software enthusiast