On 2026-06-23 04:28, Michel Dänzer wrote:
> 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;
> }
> }
> }
>
This looks a lot nicer, will include when merging or in v3 if needed.
Likewise with the two other comments below.
Thanks,
Leo
>
>> + /*
>> + * 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);
> }
>
>