On Mon, Mar 13, 2017 at 12:22:53PM +0200, Sharma, Shashank wrote:
> Regards
> 
> Shashank
> 
> > From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> >
> > Check that the sink really declared 12bpc support before we enable it.
> > This should not actually never happen since it's mandatory for HDMI sinks 
> > to support 12bpc if they support any deep color modes. But reality 
> > disagrees with the theory and there are actually sinks in the wild that 
> > violate the spec.
> >
> > v2: Fix the output_types check
> >      Update commit message to state that these things are in fact real
> >
> > Cc: sta...@vger.kernel.org
> > Cc: Nicholas Sielicki <nicholas.sieli...@gmail.com>
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99250
> > Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> > ---
> >   drivers/gpu/drm/i915/intel_hdmi.c | 24 +++++++++++++++++++++---
> >   1 file changed, 21 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c 
> > b/drivers/gpu/drm/i915/intel_hdmi.c
> > index a580de80d2b5..2bf5915284aa 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -1298,16 +1298,34 @@ intel_hdmi_mode_valid(struct drm_connector 
> > *connector,
> >   
> >   static bool hdmi_12bpc_possible(struct intel_crtc_state *crtc_state)  {
> > -   struct drm_device *dev = crtc_state->base.crtc->dev;
> > +   struct drm_i915_private *dev_priv =
> > +           to_i915(crtc_state->base.crtc->dev);
> > +   struct drm_atomic_state *state = crtc_state->base.state;
> > +   struct drm_connector_state *connector_state;
> > +   struct drm_connector *connector;
> > +   int i;
> >   
> > -   if (HAS_GMCH_DISPLAY(to_i915(dev)))
> > +   if (HAS_GMCH_DISPLAY(dev_priv))
> >             return false;
> >   
> >     /*
> >      * HDMI 12bpc affects the clocks, so it's only possible
> >      * when not cloning with other encoder types.
> >      */
> > -   return crtc_state->output_types == 1 << INTEL_OUTPUT_HDMI;
> > +   if (crtc_state->output_types != 1 << INTEL_OUTPUT_HDMI)
> > +           return false;
> > +
> This function is called from only one place ( for now), and that already 
> has a pipe_config->has_hdmi_sink check.
> Does it makes sense to have only one of the checks ? I can understand 
> that this might be to comple

has_hdmi_sink is not the same thing. It just says we're talking to at
least one HDMI sink and thus can send infoframes/audio. output_types on 
the other hand lists all the different port types we're cloning with.
So you can do HDMI+VGA for instance and still the HDMI goes to a real
HDMI sink so we'll have has_hdmi_sink==true. But since VGA can't deal
with the 1.5x clock we can't do deep color when cloning.

> > +   for_each_connector_in_state(state, connector, connector_state, i) {
> > +           const struct drm_display_info *info = &connector->display_info;
> > +
> > +           if (connector_state->crtc != crtc_state->base.crtc)
> > +                   continue;
> > +
> > +           if ((info->edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_36) == 0)
> > +                   return false;
> Do we want to have a info->bpc check too, or they are more or less same ?

That was already checked at the start of the state computation. So
state->pipe_bpp already accounts for that. However as info->bpc is just
the max bpc the sink can do it's not sufficient to guarantee it can doo
all lower bpc values.

> - Shashank
> > +   }
> > +
> > +   return true;
> >   }
> >   
> >   bool intel_hdmi_compute_config(struct intel_encoder *encoder,
> > --
> > 2.10.2
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-de...@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to