Hi Todd
On 10/04/15 16:12, Todd Previte wrote:
Displayport compliance test 4.2.2.6 requires that a source device be capable of detecting a corrupt EDID. The test specification states that the sink device sets up the EDID with an invalid checksum. To do this, the sink sets up an invalid EDID header, expecting the source device to generate the checksum and compare it to the value stored in the last byte of the block data.
Unfortunately, the DRM EDID reading and parsing functions are actually too good in this case; the header is fixed before the checksum is computed and thus the code never sees the invalid checksum. This results in a failure to pass the compliance test.
To correct this issue, a checksum is generated when the EDID header is detected as corrupted. If the checksum is invalid, it sets the header_corrupt flag and logs the errors. In the case of a more seriously damaged header (fixup score less than the threshold) the code does not generate the checksum but does set the header_corrupt flag.
V2:
- Removed the static bool global
- Added a bool to the drm_connector struct to reaplce the static one for holding the status of raw edid header corruption detection
- Modified the function signature of the is_valid function to take an additional parameter to store the corruption detected value
- Fixed the other callers of the above is_valid function
V3:
- Updated the commit message to be more clear about what and why this patch does what it does.
- Added comment in code to clarify the operations there
- Removed compliance variable and check_link_status update; those have been moved to a later patch
- Removed variable assignment from the bottom of the test handler
Signed-off-by: Todd Previte tprevite@gmail.com Cc: dri-devel@lists.freedesktop.org
drivers/gpu/drm/drm_edid.c | 31 ++++++++++++++++++++++++++----- drivers/gpu/drm/drm_edid_load.c | 7 +++++-- drivers/gpu/drm/i2c/tda998x_drv.c | 4 ++-- include/drm/drm_crtc.h | 8 +++++++- 4 files changed, 40 insertions(+), 10 deletions(-)
Neither this nor patch 09/11 seems to be i915 specific. If you're doing another revision you might want to use just "drm:".
Cheers, Emil