Commit 5ec63bbd authored by Jani Nikula's avatar Jani Nikula

drm/i915/dp: do not proceed with autotests if we don't ACK them

There is no point in setting intel_dp->compliance.test_type, and
proceeding with the autotests, if we're about to NAK the request. Some
drive-by cleanups while at it.

v2: look at the ACK bit, as the result may also contain
    TEST_EDID_CHECKSUM_WRITE

Cc: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: default avatarManasi Navare <manasi.d.navare@intel.com>
Tested-by: default avatarManasi Navare <manasi.d.navare@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1484931846-25390-1-git-send-email-jani.nikula@intel.com
parent 24145517
...@@ -3985,45 +3985,42 @@ static uint8_t intel_dp_autotest_phy_pattern(struct intel_dp *intel_dp) ...@@ -3985,45 +3985,42 @@ static uint8_t intel_dp_autotest_phy_pattern(struct intel_dp *intel_dp)
static void intel_dp_handle_test_request(struct intel_dp *intel_dp) static void intel_dp_handle_test_request(struct intel_dp *intel_dp)
{ {
uint8_t response = DP_TEST_NAK; uint8_t response = DP_TEST_NAK;
uint8_t rxdata = 0; uint8_t request = 0;
int status = 0; int status;
status = drm_dp_dpcd_read(&intel_dp->aux, DP_TEST_REQUEST, &rxdata, 1); status = drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_REQUEST, &request);
if (status <= 0) { if (status <= 0) {
DRM_DEBUG_KMS("Could not read test request from sink\n"); DRM_DEBUG_KMS("Could not read test request from sink\n");
goto update_status; goto update_status;
} }
switch (rxdata) { switch (request) {
case DP_TEST_LINK_TRAINING: case DP_TEST_LINK_TRAINING:
DRM_DEBUG_KMS("LINK_TRAINING test requested\n"); DRM_DEBUG_KMS("LINK_TRAINING test requested\n");
intel_dp->compliance.test_type = DP_TEST_LINK_TRAINING;
response = intel_dp_autotest_link_training(intel_dp); response = intel_dp_autotest_link_training(intel_dp);
break; break;
case DP_TEST_LINK_VIDEO_PATTERN: case DP_TEST_LINK_VIDEO_PATTERN:
DRM_DEBUG_KMS("TEST_PATTERN test requested\n"); DRM_DEBUG_KMS("TEST_PATTERN test requested\n");
intel_dp->compliance.test_type = DP_TEST_LINK_VIDEO_PATTERN;
response = intel_dp_autotest_video_pattern(intel_dp); response = intel_dp_autotest_video_pattern(intel_dp);
break; break;
case DP_TEST_LINK_EDID_READ: case DP_TEST_LINK_EDID_READ:
DRM_DEBUG_KMS("EDID test requested\n"); DRM_DEBUG_KMS("EDID test requested\n");
intel_dp->compliance.test_type = DP_TEST_LINK_EDID_READ;
response = intel_dp_autotest_edid(intel_dp); response = intel_dp_autotest_edid(intel_dp);
break; break;
case DP_TEST_LINK_PHY_TEST_PATTERN: case DP_TEST_LINK_PHY_TEST_PATTERN:
DRM_DEBUG_KMS("PHY_PATTERN test requested\n"); DRM_DEBUG_KMS("PHY_PATTERN test requested\n");
intel_dp->compliance.test_type = DP_TEST_LINK_PHY_TEST_PATTERN;
response = intel_dp_autotest_phy_pattern(intel_dp); response = intel_dp_autotest_phy_pattern(intel_dp);
break; break;
default: default:
DRM_DEBUG_KMS("Invalid test request '%02x'\n", rxdata); DRM_DEBUG_KMS("Invalid test request '%02x'\n", request);
break; break;
} }
if (response & DP_TEST_ACK)
intel_dp->compliance.test_type = request;
update_status: update_status:
status = drm_dp_dpcd_write(&intel_dp->aux, status = drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_RESPONSE, response);
DP_TEST_RESPONSE,
&response, 1);
if (status <= 0) if (status <= 0)
DRM_DEBUG_KMS("Could not write test response to sink\n"); DRM_DEBUG_KMS("Could not write test response to sink\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment