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

Reply via email to