* [PATCH 0/2] drm: Fix atomic helper dirtyfb stalls @ 2021-05-08 19:56 Rob Clark 2021-05-08 19:56 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark 0 siblings, 1 reply; 5+ messages in thread From: Rob Clark @ 2021-05-08 19:56 UTC (permalink / raw) To: dri-devel Cc: Rob Clark, Abhinav Kumar, Bernard, open list:DRM DRIVER FOR MSM ADRENO GPU, Hongbo Yao, Kalyan Thota, open list:DRM DRIVER FOR MSM ADRENO GPU, open list, Maxime Ripard, Qinglang Miao, Stephen Boyd From: Rob Clark <robdclark@chromium.org> Someone on IRC once asked an innocent enough sounding question: Why with xf86-video-modesetting is es2gears limited at 120fps. So I broke out the perfetto tracing mesa MR and took a look. It turns out the problem was drm_atomic_helper_dirtyfb(), which would end up waiting for vblank.. es2gears would rapidly push two frames to Xorg, which would blit them to screen and in idle hook (I assume) call the DIRTYFB ioctl. Which in turn would do an atomic update to flush the dirty rects, which would stall until the next vblank. And then the whole process would repeat. But this is a bit silly, we only need dirtyfb for command mode DSI panels. So lets just skip it otherwise. Rob Clark (2): drm: Fix dirtyfb stalls drm/msm/dpu: Wire up needs_dirtyfb drivers/gpu/drm/drm_damage_helper.c | 8 ++++++++ drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 14 ++++++++++++++ include/drm/drm_modeset_helper_vtables.h | 14 ++++++++++++++ 3 files changed, 36 insertions(+) -- 2.30.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb 2021-05-08 19:56 [PATCH 0/2] drm: Fix atomic helper dirtyfb stalls Rob Clark @ 2021-05-08 19:56 ` Rob Clark 2021-05-09 15:38 ` Tested houdek.ryan 2021-05-09 16:28 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark 0 siblings, 2 replies; 5+ messages in thread From: Rob Clark @ 2021-05-08 19:56 UTC (permalink / raw) To: dri-devel Cc: Rob Clark, Rob Clark, Sean Paul, David Airlie, Daniel Vetter, Abhinav Kumar, Stephen Boyd, Maxime Ripard, Kalyan Thota, Qinglang Miao, Hongbo Yao, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list From: Rob Clark <robdclark@chromium.org> Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index 5a74f93e29da..868ee6136438 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -143,6 +143,19 @@ static bool dpu_crtc_get_scanout_position(struct drm_crtc *crtc, return true; } +static bool dpu_crtc_needs_dirtyfb(struct drm_crtc *crtc) +{ + struct drm_encoder *encoder; + + drm_for_each_encoder_mask (encoder, crtc->dev, crtc->state->encoder_mask) { + if (dpu_encoder_get_intf_mode(encoder) == INTF_MODE_CMD) { + return true; + } + } + + return false; +} + static void _dpu_crtc_setup_blend_cfg(struct dpu_crtc_mixer *mixer, struct dpu_plane_state *pstate, struct dpu_format *format) { @@ -1343,6 +1356,7 @@ static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = { .atomic_begin = dpu_crtc_atomic_begin, .atomic_flush = dpu_crtc_atomic_flush, .get_scanout_position = dpu_crtc_get_scanout_position, + .needs_dirtyfb = dpu_crtc_needs_dirtyfb, }; /* initialize crtc */ -- 2.30.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Tested 2021-05-08 19:56 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark @ 2021-05-09 15:38 ` houdek.ryan 2021-05-10 15:26 ` Tested Alex Deucher 2021-05-09 16:28 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark 1 sibling, 1 reply; 5+ messages in thread From: houdek.ryan @ 2021-05-09 15:38 UTC (permalink / raw) To: robdclark Cc: abhinavk, airlied, dri-devel, freedreno, kalyan_t, linux-arm-msm, linux-kernel, maxime, miaoqinglang, robdclark, sean, swboyd, yaohongbo, Ryan Houdek I have tested this on my end and it resolves the 120hz problem. Tested-By: Ryan Houdek <Houdek.Ryan@fex-emu.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Tested 2021-05-09 15:38 ` Tested houdek.ryan @ 2021-05-10 15:26 ` Alex Deucher 0 siblings, 0 replies; 5+ messages in thread From: Alex Deucher @ 2021-05-10 15:26 UTC (permalink / raw) To: houdek.ryan Cc: Rob Clark, robdclark, Dave Airlie, linux-arm-msm, yaohongbo, LKML, Maling list - DRI developers, swboyd, Sean Paul, Qinglang Miao, abhinavk, kalyan_t, freedreno, Maxime Ripard Sorry, what patch are you referring to? Alex On Mon, May 10, 2021 at 4:04 AM <houdek.ryan@fex-emu.org> wrote: > > I have tested this on my end and it resolves the 120hz problem. > > Tested-By: Ryan Houdek <Houdek.Ryan@fex-emu.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb 2021-05-08 19:56 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark 2021-05-09 15:38 ` Tested houdek.ryan @ 2021-05-09 16:28 ` Rob Clark 1 sibling, 0 replies; 5+ messages in thread From: Rob Clark @ 2021-05-09 16:28 UTC (permalink / raw) To: dri-devel Cc: Rob Clark, Sean Paul, David Airlie, Daniel Vetter, Abhinav Kumar, Stephen Boyd, Maxime Ripard, Kalyan Thota, Qinglang Miao, Hongbo Yao, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list, Ryan Houdek On Sat, May 8, 2021 at 12:53 PM Rob Clark <robdclark@gmail.com> wrote: > > From: Rob Clark <robdclark@chromium.org> > > Signed-off-by: Rob Clark <robdclark@chromium.org> From Ryan (sending this for him because mailing list workflow is lame): I have tested this on my end and it resolves the 120hz problem. Tested-By: Ryan Houdek <Houdek.Ryan@fex-emu.org> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > index 5a74f93e29da..868ee6136438 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > @@ -143,6 +143,19 @@ static bool dpu_crtc_get_scanout_position(struct drm_crtc *crtc, > return true; > } > > +static bool dpu_crtc_needs_dirtyfb(struct drm_crtc *crtc) > +{ > + struct drm_encoder *encoder; > + > + drm_for_each_encoder_mask (encoder, crtc->dev, crtc->state->encoder_mask) { > + if (dpu_encoder_get_intf_mode(encoder) == INTF_MODE_CMD) { > + return true; > + } > + } > + > + return false; > +} > + > static void _dpu_crtc_setup_blend_cfg(struct dpu_crtc_mixer *mixer, > struct dpu_plane_state *pstate, struct dpu_format *format) > { > @@ -1343,6 +1356,7 @@ static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = { > .atomic_begin = dpu_crtc_atomic_begin, > .atomic_flush = dpu_crtc_atomic_flush, > .get_scanout_position = dpu_crtc_get_scanout_position, > + .needs_dirtyfb = dpu_crtc_needs_dirtyfb, > }; > > /* initialize crtc */ > -- > 2.30.2 > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-05-10 15:31 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-05-08 19:56 [PATCH 0/2] drm: Fix atomic helper dirtyfb stalls Rob Clark 2021-05-08 19:56 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark 2021-05-09 15:38 ` Tested houdek.ryan 2021-05-10 15:26 ` Tested Alex Deucher 2021-05-09 16:28 ` [PATCH 2/2] drm/msm/dpu: Wire up needs_dirtyfb Rob Clark
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).