2014-12-10 21:53 GMT-02:00 Todd Previte <tprev...@gmail.com>:
> Move the DPCD read to the top and check for an interrupt from the sink to 
> catch
> Displayport automated testing requests necessary to support Displayport 
> compliance
> testing. The checks for active connectors and link status are moved below the
> check for the interrupt.

Why exactly is this needed?

>
> Adds a check at the top to verify that the device is connected. This is 
> necessary
> for DP compliance testing to ensure that test requests are captured and 
> acknowledged.

Why exactly? Can you please describe in terms of how the code is
executed in each case and what is missing?

Since there appears to be 2 different changes, shouldn't this patch be
split into 2 different patches?

> If a test request is present during a connected->disconnected transition,
> the test code will attempt to execute even though the connection has been 
> disabled,
> resulting in a faied test.
>
> Signed-off-by: Todd Previte <tprev...@gmail.com>
> ---
>  drivers/gpu/drm/i915/intel_dp.c | 32 +++++++++++++++++++-------------
>  1 file changed, 19 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 3dc92a3..1b452cc 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -3890,21 +3890,14 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
>
>         WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
>
> -       if (!intel_encoder->connectors_active)
> -               return;
> -
> -       if (WARN_ON(!intel_encoder->base.crtc))
> -               return;
> -
> -       if (!to_intel_crtc(intel_encoder->base.crtc)->active)
> -               return;
> -
> -       /* Try to read receiver status if the link appears to be up */
> -       if (!intel_dp_get_link_status(intel_dp, link_status)) {
> +       /* Bail if not connected */

Bikeshed: I don't see the reason for the comment above :)

Other than that, the patch looks fine. Let's see what PRTS will say about it.


> +       if (intel_dp->attached_connector->base.status !=
> +           connector_status_connected) {
> +               DRM_DEBUG_KMS("Not connected\n");
>                 return;
>         }
>
> -       /* Now read the DPCD to see if it's actually running */
> +       /* Attempt to read the DPCD */
>         if (!intel_dp_get_dpcd(intel_dp)) {
>                 return;
>         }
> @@ -3916,13 +3909,26 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
>                 drm_dp_dpcd_writeb(&intel_dp->aux,
>                                    DP_DEVICE_SERVICE_IRQ_VECTOR,
>                                    sink_irq_vector);
> -
>                 if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
>                         intel_dp_handle_test_request(intel_dp);
>                 if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
>                         DRM_DEBUG_DRIVER("CP or sink specific irq 
> unhandled\n");
>         }
>
> +       if (!intel_encoder->connectors_active)
> +               return;
> +
> +       if (WARN_ON(!intel_encoder->base.crtc))
> +               return;
> +
> +       if (!to_intel_crtc(intel_encoder->base.crtc)->active)
> +               return;
> +
> +       /* Try to read receiver status if the link appears to be up */
> +       if (!intel_dp_get_link_status(intel_dp, link_status)) {
> +               return;
> +       }
> +
>         if (!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) {
>                 DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
>                               intel_encoder->base.name);
> --
> 1.9.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Paulo Zanoni
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to