On 31.07.25 22:51, Harry Wentland wrote: > Thanks for the series. It makes sense to me.
I'm glad to hear it, thanks for taking a look. May I take this as R-b? >> 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 0b8ac9edc070..e78249b55345 100644 >> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c >> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c >> @@ -10021,6 +10021,21 @@ static void dm_set_writeback(struct >> amdgpu_display_manager *dm, >> drm_writeback_queue_job(wb_conn, new_con_state); >> } >> >> +static void >> +update_hw_done_deadline(struct dm_crtc_state *dm_new_crtc_state) >> +{ >> + struct dc_stream_state *stream = dm_new_crtc_state->stream; >> + struct dc_crtc_timing *timing = &stream->timing; >> + struct drm_crtc *crtc = dm_new_crtc_state->base.crtc; >> + uint32_t deadline_lines, deadline_us; >> + >> + /* XXX: My guess, AMD display team to the rescue! */ >> + deadline_lines = timing->v_total - timing->v_addressable - >> timing->v_front_porch; > > This works on DCE. On DCN we'll need to take the offset into account. > This diff on top of your changesshould do it, but it's not tested. > The dc_stream changes probably fit in their own patch. Thanks, I'll incorporate it. > 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 629fd21a611f..314074527216 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -10082,11 +10082,19 @@ update_hw_done_deadline(struct dm_crtc_state > *dm_new_crtc_state) > struct dc_crtc_timing *timing = &stream->timing; > struct drm_crtc *crtc = dm_new_crtc_state->base.crtc; > uint32_t deadline_lines, deadline_us; > + int vupdate_offset = dc_stream_get_vupdate_offset_from_vsync(stream); > + > + /* note: > + * vupdate_offset is non-existant on DCE and function will return 0 > + * vupdate_offset could be positive or negative on DCN > + * vupdate_offset depends on timing and HW bandwidth requirements > + */ > + deadline_lines = timing->v_total - timing->v_addressable - > + timing->v_front_porch - vupdate_offset; Hmm, if it depends on bandwidth, we'll need to recalculate it for all CRTCs after a modeset for any of them, right? -- Earthling Michel Dänzer \ GNOME / Xwayland / Mesa developer https://redhat.com \ Libre software enthusiast