drm/edid: Don't print an error if the checksum of a CEA block is wrong
authorTomeu Vizoso <tomeu.vizoso@collabora.com>
Thu, 8 Dec 2016 13:11:56 +0000 (14:11 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 8 Feb 2017 13:31:06 +0000 (14:31 +0100)
It's common to share screens within CI labs, and it's also common for
KVM switches to alter the contents of the CEA block but leave the
checksum outdated.

So in this case, print a debug message instead of an error.

References: https://bugs.freedesktop.org/show_bug.cgi?id=98228
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tomi Sarvela <tomi.p.sarvela@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Tested-by: Jari Tahvanainen <jari.tahvanainen@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1481202716-31317-1-git-send-email-tomeu.vizoso@collabora.com
drivers/gpu/drm/drm_edid.c

index c8baab9bee0d05cf904153021db5601ade303586..5a3b34a88ac371e3e905b3367baad1d27e9c50b7 100644 (file)
@@ -1131,16 +1131,19 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid,
 
        csum = drm_edid_block_checksum(raw_edid);
        if (csum) {
-               if (print_bad_edid) {
-                       DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
-               }
-
                if (edid_corrupt)
                        *edid_corrupt = true;
 
                /* allow CEA to slide through, switches mangle this */
-               if (raw_edid[0] != 0x02)
+               if (raw_edid[0] == CEA_EXT) {
+                       DRM_DEBUG("EDID checksum is invalid, remainder is %d\n", csum);
+                       DRM_DEBUG("Assuming a KVM switch modified the CEA block but left the original checksum\n");
+               } else {
+                       if (print_bad_edid)
+                               DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
+
                        goto bad;
+               }
        }
 
        /* per-block-type checks */