On Mon, Oct 22, 2018 at 07:46:02PM +0530, Ramalingam C wrote: > For reusability purpose, this patch implements the hdcp1.4 bksv's > read and validation as a functions. > > For detecting the HDMI panel's HDCP capability this fucntions will be > used. > > v2: > Rebased. > v3: > No Changes. > v4: > inline tag is removed with modified error msg. > v5: > No Changes. > v6: > No Changes. > v7: > Realigned the code. > > Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> > Reviewed-by: Sean Paul <seanpaul@xxxxxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/i915/intel_hdcp.c | 62 ++++++++++++++++++++++++--------------- > 1 file changed, 38 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_hdcp.c b/drivers/gpu/drm/i915/intel_hdcp.c > index 26e48fc95543..20908ff018e6 100644 > --- a/drivers/gpu/drm/i915/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/intel_hdcp.c > @@ -16,6 +16,41 @@ > > #define KEY_LOAD_TRIES 5 > > +static > +bool intel_hdcp_is_ksv_valid(u8 *ksv) > +{ > + int i, ones = 0; > + /* KSV has 20 1's and 20 0's */ > + for (i = 0; i < DRM_HDCP_KSV_LEN; i++) > + ones += hweight8(ksv[i]); > + if (ones != 20) > + return false; > + > + return true; > +} > + > +static > +int intel_hdcp_read_valid_bksv(struct intel_digital_port *intel_dig_port, > + const struct intel_hdcp_shim *shim, u8 *bksv) > +{ > + int ret, i, tries = 2; > + > + /* HDCP spec states that we must retry the bksv if it is invalid */ > + for (i = 0; i < tries; i++) { > + ret = shim->read_bksv(intel_dig_port, bksv); > + if (ret) > + return ret; > + if (intel_hdcp_is_ksv_valid(bksv)) > + break; > + } > + if (i == tries) { > + DRM_ERROR("Bksv is invalid\n"); > + return -ENODEV; > + } > + > + return 0; > +} > + > static int intel_hdcp_poll_ksv_fifo(struct intel_digital_port *intel_dig_port, > const struct intel_hdcp_shim *shim) > { > @@ -168,18 +203,6 @@ u32 intel_hdcp_get_repeater_ctl(struct intel_digital_port *intel_dig_port) > } > > static > -bool intel_hdcp_is_ksv_valid(u8 *ksv) > -{ > - int i, ones = 0; > - /* KSV has 20 1's and 20 0's */ > - for (i = 0; i < DRM_HDCP_KSV_LEN; i++) > - ones += hweight8(ksv[i]); > - if (ones != 20) > - return false; > - return true; > -} > - > -static > int intel_hdcp_validate_v_prime(struct intel_digital_port *intel_dig_port, > const struct intel_hdcp_shim *shim, > u8 *ksv_fifo, u8 num_downstream, u8 *bstatus) > @@ -527,18 +550,9 @@ static int intel_hdcp_auth(struct intel_digital_port *intel_dig_port, > > memset(&bksv, 0, sizeof(bksv)); > > - /* HDCP spec states that we must retry the bksv if it is invalid */ > - for (i = 0; i < tries; i++) { > - ret = shim->read_bksv(intel_dig_port, bksv.shim); > - if (ret) > - return ret; > - if (intel_hdcp_is_ksv_valid(bksv.shim)) > - break; > - } > - if (i == tries) { > - DRM_ERROR("HDCP failed, Bksv is invalid\n"); > - return -ENODEV; > - } > + ret = intel_hdcp_read_valid_bksv(intel_dig_port, shim, bksv.shim); > + if (ret < 0) > + return ret; > > I915_WRITE(PORT_HDCP_BKSVLO(port), bksv.reg[0]); > I915_WRITE(PORT_HDCP_BKSVHI(port), bksv.reg[1]); > -- > 2.7.4 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx