Message ID | 1548917996-28081-39-git-send-email-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Implement HDCP2.2 | expand |
daniel, Could you please review this patch too.? Already Updated this as per your previous review comment. --Ram On 1/31/2019 12:29 PM, Ramalingam C wrote: > Implement the required WA sequence for KBL to fix the > incorrect positioning of the window of oppurtunity and enc_en > signalling. > > v2: > WA is moved into the toggle_signalling [Daniel] > > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > --- > drivers/gpu/drm/i915/intel_hdmi.c | 42 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 42 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c > index 2c4bf6d0c39f..ae20288f7bbf 100644 > --- a/drivers/gpu/drm/i915/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > @@ -1083,10 +1083,44 @@ int intel_hdmi_hdcp_read_v_prime_part(struct intel_digital_port *intel_dig_port, > return ret; > } > > +static int kbl_repositioning_enc_en_signal(struct intel_connector *connector) > +{ > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > + struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector); > + struct drm_crtc *crtc = connector->base.state->crtc; > + struct intel_crtc *intel_crtc = container_of(crtc, > + struct intel_crtc, base); > + u32 scanline; > + int ret; > + > + for (;;) { > + scanline = I915_READ(PIPEDSL(intel_crtc->pipe)); > + if (scanline > 100 && scanline < 200) > + break; > + usleep_range(25, 50); > + } > + > + ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, false); > + if (ret) { > + DRM_ERROR("Disable HDCP signalling failed (%d)\n", ret); > + return ret; > + } > + ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, true); > + if (ret) { > + DRM_ERROR("Enable HDCP signalling failed (%d)\n", ret); > + return ret; > + } > + > + return 0; > +} > + > static > int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > bool enable) > { > + struct intel_hdmi *hdmi = &intel_dig_port->hdmi; > + struct intel_connector *connector = hdmi->attached_connector; > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > int ret; > > if (!enable) > @@ -1098,6 +1132,14 @@ int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > enable ? "Enable" : "Disable", ret); > return ret; > } > + > + /* > + * WA: To fix incorrect positioning of the window of > + * opportunity and enc_en signalling in KABYLAKE. > + */ > + if (IS_KABYLAKE(dev_priv) && enable) > + return kbl_repositioning_enc_en_signal(connector); > + > return 0; > } >
>-----Original Message----- >From: C, Ramalingam >Sent: Thursday, January 31, 2019 12:30 PM >To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; >daniel.vetter@ffwll.ch; Winkler, Tomas <tomas.winkler@intel.com>; Shankar, >Uma <uma.shankar@intel.com> >Cc: C, Ramalingam <ramalingam.c@intel.com> >Subject: [PATCH v10 38/40] drm/i915: Fix KBL HDCP2.2 encrypt status signalling > >Implement the required WA sequence for KBL to fix the incorrect positioning of >the window of oppurtunity and enc_en signalling. Typo in opportunity. > >v2: > WA is moved into the toggle_signalling [Daniel] > >Signed-off-by: Ramalingam C <ramalingam.c@intel.com> >--- > drivers/gpu/drm/i915/intel_hdmi.c | 42 >+++++++++++++++++++++++++++++++++++++++ > 1 file changed, 42 insertions(+) > >diff --git a/drivers/gpu/drm/i915/intel_hdmi.c >b/drivers/gpu/drm/i915/intel_hdmi.c >index 2c4bf6d0c39f..ae20288f7bbf 100644 >--- a/drivers/gpu/drm/i915/intel_hdmi.c >+++ b/drivers/gpu/drm/i915/intel_hdmi.c >@@ -1083,10 +1083,44 @@ int intel_hdmi_hdcp_read_v_prime_part(struct >intel_digital_port *intel_dig_port, > return ret; > } > Would be good to add a comment here as to what exactly is the WA and what you are trying to do here. >+static int kbl_repositioning_enc_en_signal(struct intel_connector >+*connector) { >+ struct drm_i915_private *dev_priv = to_i915(connector->base.dev); >+ struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector); >+ struct drm_crtc *crtc = connector->base.state->crtc; >+ struct intel_crtc *intel_crtc = container_of(crtc, >+ struct intel_crtc, base); >+ u32 scanline; >+ int ret; >+ >+ for (;;) { >+ scanline = I915_READ(PIPEDSL(intel_crtc->pipe)); >+ if (scanline > 100 && scanline < 200) >+ break; >+ usleep_range(25, 50); >+ } >+ >+ ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, false); >+ if (ret) { >+ DRM_ERROR("Disable HDCP signalling failed (%d)\n", ret); >+ return ret; >+ } >+ ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, true); >+ if (ret) { >+ DRM_ERROR("Enable HDCP signalling failed (%d)\n", ret); >+ return ret; >+ } >+ >+ return 0; >+} >+ > static > int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > bool enable) > { >+ struct intel_hdmi *hdmi = &intel_dig_port->hdmi; >+ struct intel_connector *connector = hdmi->attached_connector; >+ struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > int ret; > > if (!enable) >@@ -1098,6 +1132,14 @@ int intel_hdmi_hdcp_toggle_signalling(struct >intel_digital_port *intel_dig_port, > enable ? "Enable" : "Disable", ret); > return ret; > } >+ >+ /* >+ * WA: To fix incorrect positioning of the window of >+ * opportunity and enc_en signalling in KABYLAKE. >+ */ >+ if (IS_KABYLAKE(dev_priv) && enable) >+ return kbl_repositioning_enc_en_signal(connector); >+ > return 0; > } > >-- >2.7.4
On Mon, Feb 04, 2019 at 09:02:35PM +0530, C, Ramalingam wrote: > daniel, > > Could you please review this patch too.? Already Updated this as per your > previous review comment. Oops, missed this one somehow. Looks much cleaner now imo. Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > > --Ram > > On 1/31/2019 12:29 PM, Ramalingam C wrote: > > Implement the required WA sequence for KBL to fix the > > incorrect positioning of the window of oppurtunity and enc_en > > signalling. > > > > v2: > > WA is moved into the toggle_signalling [Daniel] > > > > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > > --- > > drivers/gpu/drm/i915/intel_hdmi.c | 42 +++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 42 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c > > index 2c4bf6d0c39f..ae20288f7bbf 100644 > > --- a/drivers/gpu/drm/i915/intel_hdmi.c > > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > > @@ -1083,10 +1083,44 @@ int intel_hdmi_hdcp_read_v_prime_part(struct intel_digital_port *intel_dig_port, > > return ret; > > } > > +static int kbl_repositioning_enc_en_signal(struct intel_connector *connector) > > +{ > > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > > + struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector); > > + struct drm_crtc *crtc = connector->base.state->crtc; > > + struct intel_crtc *intel_crtc = container_of(crtc, > > + struct intel_crtc, base); > > + u32 scanline; > > + int ret; > > + > > + for (;;) { > > + scanline = I915_READ(PIPEDSL(intel_crtc->pipe)); > > + if (scanline > 100 && scanline < 200) > > + break; > > + usleep_range(25, 50); > > + } > > + > > + ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, false); > > + if (ret) { > > + DRM_ERROR("Disable HDCP signalling failed (%d)\n", ret); > > + return ret; > > + } > > + ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, true); > > + if (ret) { > > + DRM_ERROR("Enable HDCP signalling failed (%d)\n", ret); > > + return ret; > > + } > > + > > + return 0; > > +} > > + > > static > > int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > > bool enable) > > { > > + struct intel_hdmi *hdmi = &intel_dig_port->hdmi; > > + struct intel_connector *connector = hdmi->attached_connector; > > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > > int ret; > > if (!enable) > > @@ -1098,6 +1132,14 @@ int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > > enable ? "Enable" : "Disable", ret); > > return ret; > > } > > + > > + /* > > + * WA: To fix incorrect positioning of the window of > > + * opportunity and enc_en signalling in KABYLAKE. > > + */ > > + if (IS_KABYLAKE(dev_priv) && enable) > > + return kbl_repositioning_enc_en_signal(connector); > > + > > return 0; > > } >
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 2c4bf6d0c39f..ae20288f7bbf 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -1083,10 +1083,44 @@ int intel_hdmi_hdcp_read_v_prime_part(struct intel_digital_port *intel_dig_port, return ret; } +static int kbl_repositioning_enc_en_signal(struct intel_connector *connector) +{ + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); + struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector); + struct drm_crtc *crtc = connector->base.state->crtc; + struct intel_crtc *intel_crtc = container_of(crtc, + struct intel_crtc, base); + u32 scanline; + int ret; + + for (;;) { + scanline = I915_READ(PIPEDSL(intel_crtc->pipe)); + if (scanline > 100 && scanline < 200) + break; + usleep_range(25, 50); + } + + ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, false); + if (ret) { + DRM_ERROR("Disable HDCP signalling failed (%d)\n", ret); + return ret; + } + ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, true); + if (ret) { + DRM_ERROR("Enable HDCP signalling failed (%d)\n", ret); + return ret; + } + + return 0; +} + static int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, bool enable) { + struct intel_hdmi *hdmi = &intel_dig_port->hdmi; + struct intel_connector *connector = hdmi->attached_connector; + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); int ret; if (!enable) @@ -1098,6 +1132,14 @@ int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, enable ? "Enable" : "Disable", ret); return ret; } + + /* + * WA: To fix incorrect positioning of the window of + * opportunity and enc_en signalling in KABYLAKE. + */ + if (IS_KABYLAKE(dev_priv) && enable) + return kbl_repositioning_enc_en_signal(connector); + return 0; }
Implement the required WA sequence for KBL to fix the incorrect positioning of the window of oppurtunity and enc_en signalling. v2: WA is moved into the toggle_signalling [Daniel] Signed-off-by: Ramalingam C <ramalingam.c@intel.com> --- drivers/gpu/drm/i915/intel_hdmi.c | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)