[Intel-gfx] [RFC 1/2] drm/i915: Add connector property to force bpc
Sripada, Radhakrishna
radhakrishna.sripada at intel.com
Fri Oct 20 23:54:38 UTC 2017
> -----Original Message-----
> From: Ville Syrjälä [mailto:ville.syrjala at linux.intel.com]
> Sent: Thursday, October 19, 2017 7:09 AM
> To: Jani Nikula <jani.nikula at linux.intel.com>
> Cc: Daniel Vetter <daniel at ffwll.ch>; Sripada, Radhakrishna
> <radhakrishna.sripada at intel.com>; intel-gfx at lists.freedesktop.org; Zanoni,
> Paulo R <paulo.r.zanoni at intel.com>
> Subject: Re: [Intel-gfx] [RFC 1/2] drm/i915: Add connector property to force
> bpc
>
> On Thu, Oct 19, 2017 at 03:56:37PM +0300, Jani Nikula wrote:
> > On Thu, 19 Oct 2017, Daniel Vetter <daniel at ffwll.ch> wrote:
> > > On Wed, Oct 18, 2017 at 03:29:48PM -0700, Sripada, Radhakrishna wrote:
> > >> Currently the user space does not have a way to force the bpc. The
> > >> default bpc to be programmed is decided by the driver and is run
> > >> against connector limitations. Creating a new property for the
> > >> userspace to recommend a certain color depth while scanning out the
> pixels.
> > >>
> > >> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > >> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> > >> Cc: Manasi Navare <manasi.d.navare at intel.com>
> > >> Signed-off-by: Radhakrishna Sripada
> > >> <radhakrishna.sripada at intel.com>
> > >
> > > Why not put this onto the pipe directly? Also, what's the userspace
> > > use-case here, we need those patches too.
> >
> > And rationale in the commit message, please. The "why".
>
> One rationale is cruddy cables/dongles/level shifters/misprogrammed buf
> translations/etc. which fail when we try to push 12bpc HDMI through them.
> And to work around those we probably want this to be a connector property
> so that xrandr will get it automagically. Won't help fbdev of course, but for
> that we'd either need a modparam, or maybe some generic way to expose
> properties via sysfs or something.
>
> See eg. https://bugs.freedesktop.org/show_bug.cgi?id=91434 for likely
> 12bpc issues.
>
> As far as the implementation goes, I'd probably just make it range property
> ("max bpc" or something like that) with some sane range of values (8-16?, or
> maybe we need to go lower?), with the default value being the max.
Thank you for the feedback. I will incorporate the changes in V1 of the patch.
Regards,
Radhakrishna(RK)
>
> >
> > BR,
> > Jani.
> >
> >
> >
> > > -Daniel
> > >
> > >> ---
> > >> drivers/gpu/drm/i915/i915_drv.h | 7 +++++++
> > >> drivers/gpu/drm/i915/intel_atomic.c | 7 +++++++
> > >> drivers/gpu/drm/i915/intel_drv.h | 2 ++
> > >> drivers/gpu/drm/i915/intel_hdmi.c | 1 +
> > >> drivers/gpu/drm/i915/intel_modes.c | 29
> > >> +++++++++++++++++++++++++++++
> > >> 5 files changed, 46 insertions(+)
> > >>
> > >> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> > >> b/drivers/gpu/drm/i915/i915_drv.h index 2783f07c6fc4..e58856f7b08a
> > >> 100644
> > >> --- a/drivers/gpu/drm/i915/i915_drv.h
> > >> +++ b/drivers/gpu/drm/i915/i915_drv.h
> > >> @@ -2521,6 +2521,7 @@ struct drm_i915_private {
> > >>
> > >> struct drm_property *broadcast_rgb_property;
> > >> struct drm_property *force_audio_property;
> > >> + struct drm_property *force_bpc_property;
> > >>
> > >> /* hda/i915 audio component */
> > >> struct i915_audio_component *audio_component; @@ -2858,6
> +2859,12
> > >> @@ enum hdmi_force_audio {
> > >> HDMI_AUDIO_ON, /* force turn on HDMI audio
> */
> > >> };
> > >>
> > >> +enum connector_force_bpc {
> > >> + INTEL_FORCE_BPC_AUTO,
> > >> + INTEL_FORCE_BPC_8,
> > >> + INTEL_FORCE_BPC_10,
> > >> + INTEL_FORCE_BPC_12,
> > >> +};
> > >> #define I915_GTT_OFFSET_NONE ((u32)-1)
> > >>
> > >> /*
> > >> diff --git a/drivers/gpu/drm/i915/intel_atomic.c
> > >> b/drivers/gpu/drm/i915/intel_atomic.c
> > >> index 36d4e635e4ce..10a74669f49a 100644
> > >> --- a/drivers/gpu/drm/i915/intel_atomic.c
> > >> +++ b/drivers/gpu/drm/i915/intel_atomic.c
> > >> @@ -58,6 +58,8 @@ int
> intel_digital_connector_atomic_get_property(struct drm_connector
> *connector,
> > >> *val = intel_conn_state->force_audio;
> > >> else if (property == dev_priv->broadcast_rgb_property)
> > >> *val = intel_conn_state->broadcast_rgb;
> > >> + else if (property == dev_priv->force_bpc_property)
> > >> + *val = intel_conn_state->force_bpc;
> > >> else {
> > >> DRM_DEBUG_ATOMIC("Unknown property %s\n",
> property->name);
> > >> return -EINVAL;
> > >> @@ -95,6 +97,11 @@ int
> intel_digital_connector_atomic_set_property(struct drm_connector
> *connector,
> > >> return 0;
> > >> }
> > >>
> > >> + if (property == dev_priv->force_bpc_property) {
> > >> + intel_conn_state->force_bpc = val;
> > >> + return 0;
> > >> + }
> > >> +
> > >> DRM_DEBUG_ATOMIC("Unknown property %s\n", property-
> >name);
> > >> return -EINVAL;
> > >> }
> > >> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > >> b/drivers/gpu/drm/i915/intel_drv.h
> > >> index 77117e188b04..654e76d19514 100644
> > >> --- a/drivers/gpu/drm/i915/intel_drv.h
> > >> +++ b/drivers/gpu/drm/i915/intel_drv.h
> > >> @@ -341,6 +341,7 @@ struct intel_digital_connector_state {
> > >>
> > >> enum hdmi_force_audio force_audio;
> > >> int broadcast_rgb;
> > >> + enum connector_force_bpc force_bpc;
> > >> };
> > >>
> > >> #define to_intel_digital_connector_state(x) container_of(x, struct
> > >> intel_digital_connector_state, base) @@ -1708,6 +1709,7 @@ int
> > >> intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter
> > >> *adapter); void intel_attach_force_audio_property(struct
> > >> drm_connector *connector); void
> > >> intel_attach_broadcast_rgb_property(struct drm_connector
> > >> *connector); void intel_attach_aspect_ratio_property(struct
> > >> drm_connector *connector);
> > >> +void intel_attach_force_bpc_property(struct drm_connector
> > >> +*connector);
> > >>
> > >>
> > >> /* intel_overlay.c */
> > >> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > >> b/drivers/gpu/drm/i915/intel_hdmi.c
> > >> index 50214e342401..a2d6d97cc730 100644
> > >> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > >> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > >> @@ -1798,6 +1798,7 @@ intel_hdmi_add_properties(struct intel_hdmi
> *intel_hdmi, struct drm_connector *c
> > >> intel_attach_force_audio_property(connector);
> > >> intel_attach_broadcast_rgb_property(connector);
> > >> intel_attach_aspect_ratio_property(connector);
> > >> + intel_attach_force_bpc_property(connector);
> > >> connector->state->picture_aspect_ratio =
> > >> HDMI_PICTURE_ASPECT_NONE; }
> > >>
> > >> diff --git a/drivers/gpu/drm/i915/intel_modes.c
> > >> b/drivers/gpu/drm/i915/intel_modes.c
> > >> index 28a778b785ac..d7be44a951e8 100644
> > >> --- a/drivers/gpu/drm/i915/intel_modes.c
> > >> +++ b/drivers/gpu/drm/i915/intel_modes.c
> > >> @@ -151,3 +151,32 @@ intel_attach_aspect_ratio_property(struct
> drm_connector *connector)
> > >> connector->dev-
> >mode_config.aspect_ratio_property,
> > >> DRM_MODE_PICTURE_ASPECT_NONE);
> > >> }
> > >> +
> > >> +static const struct drm_prop_enum_list force_bpc_names[] = {
> > >> + { INTEL_FORCE_BPC_AUTO, "Automatic" },
> > >> + { INTEL_FORCE_BPC_8, "8 bpc" },
> > >> + { INTEL_FORCE_BPC_10, "10 bpc" },
> > >> + { INTEL_FORCE_BPC_12, "12 bpc" }, };
> > >> +
> > >> +void
> > >> +intel_attach_force_bpc_property(struct drm_connector *connector) {
> > >> + struct drm_device *dev = connector->dev;
> > >> + struct drm_i915_private *dev_priv = to_i915(dev);
> > >> + struct drm_property *prop;
> > >> +
> > >> + prop = dev_priv->force_bpc_property;
> > >> + if (prop == NULL) {
> > >> + prop = drm_property_create_enum(dev,
> DRM_MODE_PROP_ENUM,
> > >> + "bpc",
> > >> + force_bpc_names,
> > >> + ARRAY_SIZE(force_bpc_names));
> > >> + if (prop == NULL)
> > >> + return;
> > >> +
> > >> + dev_priv->force_bpc_property = prop;
> > >> + }
> > >> +
> > >> + drm_object_attach_property(&connector->base, prop, 0); }
> > >> --
> > >> 2.9.3
> > >>
> > >> _______________________________________________
> > >> Intel-gfx mailing list
> > >> Intel-gfx at lists.freedesktop.org
> > >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >
> > --
> > Jani Nikula, Intel Open Source Technology Center
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Ville Syrjälä
> Intel OTC
More information about the Intel-gfx
mailing list