[PATCH V6] Displayport compliance testing V6

Todd Previte
2015-04-15T15:39:01Z

This is the 6th iteration of the Displayport compliance testing patch set for
performing compliance testing operations of the i915 driver. High level changes
are listed below, with the specifics for each patch listed in the commit messages.

Kernel:

Changes for V4:
- Removed the code for link configuration in debugfs. It wasn’t used in this
patch set so there was no need to add 500+ lines of code to the kernel. It may
be reintroduced in a future patch if it becomes necessary to support link
configuration testing for Displayport compliance
- Merged working changes in to the kernel code to keep the patches smaller and
as discrete, testable units. This included moving variables around between
patches such that their declaration and use appears in the same patch. One
variable was removed entirely as it was no longer necessary.
- Changed the debugfs interface for test control. Previously test control was
handled by a single file that contained tags and values that were parsed and
used by both the user app and the kernel. This required a lot of parsing code
on both sides of the equation. That has been eliminated in favor of 3 separate,
single value files for test type, test data and testing active. This reduces
the overhead of polling on test_active in the user app as well as eliminating
the need to parse a single monolithic file every time it checks the flag
(currently 1ms intervals). The net result is a more responsible app and a lot
less code on both sides.

Changes for V5:
- Removed a duplicate EDID read from the EDID auto test function
- Added a failsafe check in the I2C DEFER check to make sure a misbhaving
device wouldn’t cause an infinite loop
- Shuffled around some variable declarations and assignments to put them in
the correct patches and places
- Fixed a commit message that was no longer accurate
- Removed the main stream disable code from check_link_status as this doesn’t
play nice with a number of systems. A replacement for this will be done in
the user app when necessary.

Changes for V6:
- Addressed all the review feedback from V5 and made the necessary changes
- Added a new flag for detecting EDID header corruption for compliance testing
- Cleaned up checkpatch.pl issues
- Fixed whitespace/formatting problems
- Made substantial adjustments to the hpd_pulse code to make sure it works for
all permutations of SST/MST and short/long pulses
- Reintegrated patches 2 and 3 into a single patch again
- Removed several instances of duplicate code
- Propagate the long_hpd flag into check_link_status to only perform the EDID
read for a long pulse (hot plug event)

Userspace app:

The userspace app can be found here:

https://github.com/tprevite/intel-gpu-tools/tree/dp_compliance

The user app has the following requirements:
- Must be executed as root from the command line
- No other display managers can be running. Must be in console mode.
- Only the test device should be connected to one of the external Displayport
ports. No other displays should be connected via Displayport. eDP displays are
ignored by the compliance code so they should operate normally.

Previous versions of the user app disabled all displays on the DUT. That is no
longer necessary in order to execute Displayport compliance testing. The app can
be run remotely via an SSH login or directly on the DUT at the preference of the
operator. Aside from starting and stopping the app itself, no direct interaction
is necessary at this time on the part of the test operator to perform compliance
testing.

Some of the tests will still pass if the user app isn't running. The primary
purpose of the user space application is to handle the heavy lifting of the
mode sets required to set the specific display resolutions for the tests.

Changes for V2:
- Removed unnecessary memcpy()s and replaced with assignments
- Updated the README
- Moved the menu code around and reworded it to be more accurate
- Added a “NONE” display mode to disable the main link

Changes for V3:
- Rewrote the input handling code
- Cleaned up some minor issues / extraneous tags
- Fixed a minor bug in the setup of the failsafe video mode
- Removed the delay on startup and updated the output messages
accordingly

The Github version is the most up to date, with several patches having been
applied recently which are encapsulated in the high level notes for V3 above.