Message ID | 20220929184307.258331-4-contact@emersion.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for atomic async page-flips | expand |
On Thu, Sep 29, 2022 at 06:43:42PM +0000, Simon Ser wrote: > This new field indicates whether the driver has the necessary logic > to support async page-flips via the atomic uAPI. This is leveraged by > the next commit to allow user-space to use this functionality. > > All atomic drivers setting drm_mode_config.async_page_flip are updated > to also set drm_mode_config.atomic_async_page_flip_not_supported. We > will gradually check and update these drivers to properly handle > drm_crtc_state.async_flip in their atomic logic. > > The goal of this negative flag is the same as > fb_modifiers_not_supported: we want to eventually get rid of all > drivers missing atomic support for async flips. New drivers should not > set this flag, instead they should support atomic async flips (if > they support async flips at all). IOW, we don't want more drivers > with async flip support for legacy but not atomic. > > v2: only set the flag on atomic drivers (remove it on amdgpu DCE and > on radeon) > > Signed-off-by: Simon Ser <contact@emersion.fr> > Reviewed-by: André Almeida <andrealmeid@igalia.com> > Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Cc: Joshua Ashton <joshua@froggi.es> > Cc: Melissa Wen <mwen@igalia.com> > Cc: Harry Wentland <hwentlan@amd.com> > Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 + > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 1 + > drivers/gpu/drm/i915/display/intel_display.c | 1 + > drivers/gpu/drm/nouveau/nouveau_display.c | 1 + > drivers/gpu/drm/vc4/vc4_kms.c | 1 + > include/drm/drm_mode_config.h | 11 +++++++++++ > 6 files changed, 16 insertions(+) > > 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 44235345fd57..7500e82cf06a 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -3808,6 +3808,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) > adev_to_drm(adev)->mode_config.prefer_shadow = 1; > /* indicates support for immediate flip */ > adev_to_drm(adev)->mode_config.async_page_flip = true; > + adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true; The flag polarity seems weird. Why opt out and not opt in? > > adev_to_drm(adev)->mode_config.fb_base = adev->gmc.aper_base; > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c > index f7e7f4e919c7..ffb3a2fa797f 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c > @@ -639,6 +639,7 @@ static int atmel_hlcdc_dc_modeset_init(struct drm_device *dev) > dev->mode_config.max_height = dc->desc->max_height; > dev->mode_config.funcs = &mode_config_funcs; > dev->mode_config.async_page_flip = true; > + dev->mode_config.atomic_async_page_flip_not_supported = true; > > return 0; > } > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 40fbf8a296e2..e025b3499c9d 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -8621,6 +8621,7 @@ static void intel_mode_config_init(struct drm_i915_private *i915) > mode_config->helper_private = &intel_mode_config_funcs; > > mode_config->async_page_flip = HAS_ASYNC_FLIPS(i915); > + mode_config->atomic_async_page_flip_not_supported = true; > > /* > * Maximum framebuffer dimensions, chosen to match > diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c > index a2f5df568ca5..2b5c4f24aedd 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_display.c > +++ b/drivers/gpu/drm/nouveau/nouveau_display.c > @@ -699,6 +699,7 @@ nouveau_display_create(struct drm_device *dev) > dev->mode_config.async_page_flip = false; > else > dev->mode_config.async_page_flip = true; > + dev->mode_config.atomic_async_page_flip_not_supported = true; > > drm_kms_helper_poll_init(dev); > drm_kms_helper_poll_disable(dev); > diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c > index 4419e810103d..3fe59c6b2cf0 100644 > --- a/drivers/gpu/drm/vc4/vc4_kms.c > +++ b/drivers/gpu/drm/vc4/vc4_kms.c > @@ -1047,6 +1047,7 @@ int vc4_kms_load(struct drm_device *dev) > dev->mode_config.helper_private = &vc4_mode_config_helpers; > dev->mode_config.preferred_depth = 24; > dev->mode_config.async_page_flip = true; > + dev->mode_config.atomic_async_page_flip_not_supported = true; > > ret = vc4_ctm_obj_init(vc4); > if (ret) > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h > index 6b5e01295348..1b535d94f2f4 100644 > --- a/include/drm/drm_mode_config.h > +++ b/include/drm/drm_mode_config.h > @@ -917,6 +917,17 @@ struct drm_mode_config { > */ > bool async_page_flip; > > + /** > + * @atomic_async_page_flip_not_supported: > + * > + * If true, the driver does not support async page-flips with the > + * atomic uAPI. This is only used by old drivers which haven't yet > + * accomodated for &drm_crtc_state.async_flip in their atomic logic, > + * even if they have &drm_mode_config.async_page_flip set to true. > + * New drivers shall not set this flag. > + */ > + bool atomic_async_page_flip_not_supported; > + > /** > * @fb_modifiers_not_supported: > * > -- > 2.37.3 >
On Friday, September 30th, 2022 at 15:53, Ville Syrjälä <ville.syrjala@linux.intel.com> 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 44235345fd57..7500e82cf06a 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > @@ -3808,6 +3808,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) > > adev_to_drm(adev)->mode_config.prefer_shadow = 1; > > /* indicates support for immediate flip */ > > adev_to_drm(adev)->mode_config.async_page_flip = true; > > + adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true; > > The flag polarity seems weird. Why opt out and not opt in? Explained in the commit message.
On Fri, Sep 30, 2022 at 01:56:25PM +0000, Simon Ser wrote: > On Friday, September 30th, 2022 at 15:53, Ville Syrjälä <ville.syrjala@linux.intel.com> 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 44235345fd57..7500e82cf06a 100644 > > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > > @@ -3808,6 +3808,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) > > > adev_to_drm(adev)->mode_config.prefer_shadow = 1; > > > /* indicates support for immediate flip */ > > > adev_to_drm(adev)->mode_config.async_page_flip = true; > > > + adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true; > > > > The flag polarity seems weird. Why opt out and not opt in? > > Explained in the commit message. Seems a bit ambitious, but sure.
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 44235345fd57..7500e82cf06a 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -3808,6 +3808,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) adev_to_drm(adev)->mode_config.prefer_shadow = 1; /* indicates support for immediate flip */ adev_to_drm(adev)->mode_config.async_page_flip = true; + adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true; adev_to_drm(adev)->mode_config.fb_base = adev->gmc.aper_base; diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c index f7e7f4e919c7..ffb3a2fa797f 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c @@ -639,6 +639,7 @@ static int atmel_hlcdc_dc_modeset_init(struct drm_device *dev) dev->mode_config.max_height = dc->desc->max_height; dev->mode_config.funcs = &mode_config_funcs; dev->mode_config.async_page_flip = true; + dev->mode_config.atomic_async_page_flip_not_supported = true; return 0; } diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 40fbf8a296e2..e025b3499c9d 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -8621,6 +8621,7 @@ static void intel_mode_config_init(struct drm_i915_private *i915) mode_config->helper_private = &intel_mode_config_funcs; mode_config->async_page_flip = HAS_ASYNC_FLIPS(i915); + mode_config->atomic_async_page_flip_not_supported = true; /* * Maximum framebuffer dimensions, chosen to match diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index a2f5df568ca5..2b5c4f24aedd 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c @@ -699,6 +699,7 @@ nouveau_display_create(struct drm_device *dev) dev->mode_config.async_page_flip = false; else dev->mode_config.async_page_flip = true; + dev->mode_config.atomic_async_page_flip_not_supported = true; drm_kms_helper_poll_init(dev); drm_kms_helper_poll_disable(dev); diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index 4419e810103d..3fe59c6b2cf0 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -1047,6 +1047,7 @@ int vc4_kms_load(struct drm_device *dev) dev->mode_config.helper_private = &vc4_mode_config_helpers; dev->mode_config.preferred_depth = 24; dev->mode_config.async_page_flip = true; + dev->mode_config.atomic_async_page_flip_not_supported = true; ret = vc4_ctm_obj_init(vc4); if (ret) diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 6b5e01295348..1b535d94f2f4 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -917,6 +917,17 @@ struct drm_mode_config { */ bool async_page_flip; + /** + * @atomic_async_page_flip_not_supported: + * + * If true, the driver does not support async page-flips with the + * atomic uAPI. This is only used by old drivers which haven't yet + * accomodated for &drm_crtc_state.async_flip in their atomic logic, + * even if they have &drm_mode_config.async_page_flip set to true. + * New drivers shall not set this flag. + */ + bool atomic_async_page_flip_not_supported; + /** * @fb_modifiers_not_supported: *