[PATCH v7 2/5] drm: Add vrr_enabled property to drm CRTC
Daniel Vetter
daniel at ffwll.ch
Wed Jan 30 11:02:03 UTC 2019
On Wed, Jan 30, 2019 at 11:42 AM Daniel Vetter <daniel at ffwll.ch> wrote:
>
> On Thu, Nov 8, 2018 at 3:44 PM Nicholas Kazlauskas
> <nicholas.kazlauskas at amd.com> wrote:
> >
> > This patch introduces the 'vrr_enabled' CRTC property to allow
> > dynamic control over variable refresh rate support for a CRTC.
> >
> > This property should be treated like a content hint to the driver -
> > if the hardware or driver is not capable of driving variable refresh
> > timings then this is not considered an error.
> >
> > Capability for variable refresh rate support should be determined
> > by querying the vrr_capable drm connector property.
> >
> > It is worth noting that while the property is intended for atomic use
> > it isn't filtered from legacy userspace queries. This allows for Xorg
> > userspace drivers to implement support.
> >
> > Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
> > Reviewed-by: Harry Wentland <harry.wentland at amd.com>
> > Cc: Manasi Navare <manasi.d.navare at intel.com>
> > ---
> > drivers/gpu/drm/drm_atomic_uapi.c | 4 ++++
> > drivers/gpu/drm/drm_crtc.c | 2 ++
> > drivers/gpu/drm/drm_mode_config.c | 6 ++++++
> > include/drm/drm_crtc.h | 9 +++++++++
> > include/drm/drm_mode_config.h | 5 +++++
> > 5 files changed, 26 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> > index d5b7f315098c..eec396a57b88 100644
> > --- a/drivers/gpu/drm/drm_atomic_uapi.c
> > +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> > @@ -433,6 +433,8 @@ static int drm_atomic_crtc_set_property(struct drm_crtc *crtc,
> > ret = drm_atomic_set_mode_prop_for_crtc(state, mode);
> > drm_property_blob_put(mode);
> > return ret;
> > + } else if (property == config->prop_vrr_enabled) {
> > + state->vrr_enabled = val;
> > } else if (property == config->degamma_lut_property) {
> > ret = drm_atomic_replace_property_blob_from_id(dev,
> > &state->degamma_lut,
> > @@ -491,6 +493,8 @@ drm_atomic_crtc_get_property(struct drm_crtc *crtc,
> > *val = state->active;
> > else if (property == config->prop_mode_id)
> > *val = (state->mode_blob) ? state->mode_blob->base.id : 0;
> > + else if (property == config->prop_vrr_enabled)
> > + *val = state->vrr_enabled;
> > else if (property == config->degamma_lut_property)
> > *val = (state->degamma_lut) ? state->degamma_lut->base.id : 0;
> > else if (property == config->ctm_property)
> > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> > index 268a182ae189..6f8ddfcfaba5 100644
> > --- a/drivers/gpu/drm/drm_crtc.c
> > +++ b/drivers/gpu/drm/drm_crtc.c
> > @@ -340,6 +340,8 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
> > drm_object_attach_property(&crtc->base, config->prop_mode_id, 0);
> > drm_object_attach_property(&crtc->base,
> > config->prop_out_fence_ptr, 0);
> > + drm_object_attach_property(&crtc->base,
> > + config->prop_vrr_enabled, 0);
> > }
> >
> > return 0;
> > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > index ee80788f2c40..5670c67f28d4 100644
> > --- a/drivers/gpu/drm/drm_mode_config.c
> > +++ b/drivers/gpu/drm/drm_mode_config.c
> > @@ -310,6 +310,12 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
> > return -ENOMEM;
> > dev->mode_config.prop_mode_id = prop;
> >
> > + prop = drm_property_create_bool(dev, 0,
> > + "VRR_ENABLED");
>
> VRR_ENABLED doesn't match vrr_enabled in the docs. But the connector
> one seems to indeed be lowercase. And casing matters for properties
>
> Can you pls figure out who's right here and fix this confusion up?
I checked the igt quickly, patch is typed, will send out today or so.
-Daniel
>
> Thanks, Daniel
>
> > + if (!prop)
> > + return -ENOMEM;
> > + dev->mode_config.prop_vrr_enabled = prop;
> > +
> > prop = drm_property_create(dev,
> > DRM_MODE_PROP_BLOB,
> > "DEGAMMA_LUT", 0);
> > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> > index b21437bc95bf..39c3900aab3c 100644
> > --- a/include/drm/drm_crtc.h
> > +++ b/include/drm/drm_crtc.h
> > @@ -290,6 +290,15 @@ struct drm_crtc_state {
> > */
> > u32 pageflip_flags;
> >
> > + /**
> > + * @vrr_enabled:
> > + *
> > + * Indicates if variable refresh rate should be enabled for the CRTC.
> > + * Support for the requested vrr state will depend on driver and
> > + * hardware capabiltiy - lacking support is not treated as failure.
> > + */
> > + bool vrr_enabled;
> > +
> > /**
> > * @event:
> > *
> > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> > index 928e4172a0bb..49f2fcfdb5fc 100644
> > --- a/include/drm/drm_mode_config.h
> > +++ b/include/drm/drm_mode_config.h
> > @@ -639,6 +639,11 @@ struct drm_mode_config {
> > * connectors must be of and active must be set to disabled, too.
> > */
> > struct drm_property *prop_mode_id;
> > + /**
> > + * @prop_vrr_enabled: Default atomic CRTC property to indicate
> > + * whether variable refresh rate should be enabled on the CRTC.
> > + */
> > + struct drm_property *prop_vrr_enabled;
> >
> > /**
> > * @dvi_i_subconnector_property: Optional DVI-I property to
> > --
> > 2.19.1
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the dri-devel
mailing list