From patchwork Tue Jan 4 23:00:34 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Deucher X-Patchwork-Id: 451901 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p04N0v9S021918 for ; Tue, 4 Jan 2011 23:01:23 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A2DE59EB17 for ; Tue, 4 Jan 2011 15:00:56 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qy0-f170.google.com (mail-qy0-f170.google.com [209.85.216.170]) by gabe.freedesktop.org (Postfix) with ESMTP id 13E759E7EA for ; Tue, 4 Jan 2011 15:00:45 -0800 (PST) Received: by qyk10 with SMTP id 10so18212193qyk.15 for ; Tue, 04 Jan 2011 15:00:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer; bh=rO92SLUQDG5nABe2KxGMoDSaxtohjIq2fps6Z/mVNvk=; b=DoGhFLJHQE8r+8GLMZciLG4NjUU/uiXpZ6GOF63Nwtc8Rds3dayG8R+oF3KFnftd9u 1tSS2tnmlqG46ZaOvRGp7EJSCY856k8ziMxcQwfShQbuTk9U5rA1I2m4Lo1wSKVBrbHM Vg1osruqlxLUUac2Tbri84iNyyVHNtKJkNuzw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=QwaCcGo3CwN9q/T5nBv5GhyNNEX9hebz6CoSDFsGDLFE0Opcsi3E2sBTHWotluBGzi RbbHxtEn/FfA+wQcCuXtqtx+Q83vVen/Ilo+gACQN5JXvG79ti1ekk8ujWMtNgF4zRII YJ7RUwMOQfWvLRgEBV0TwiWQSsMyFKwgzN8cY= Received: by 10.224.60.205 with SMTP id q13mr21694488qah.60.1294182044334; Tue, 04 Jan 2011 15:00:44 -0800 (PST) Received: from localhost.localdomain (static-74-96-105-7.washdc.fios.verizon.net [74.96.105.7]) by mx.google.com with ESMTPS id q12sm13104557qcu.18.2011.01.04.15.00.42 (version=SSLv3 cipher=RC4-MD5); Tue, 04 Jan 2011 15:00:43 -0800 (PST) From: Alex Deucher To: airlied@gmail.com, dri-devel@lists.freedesktop.org Subject: [PATCH] drm/kms: add a module param to disable strict EDID checking Date: Tue, 4 Jan 2011 18:00:34 -0500 Message-Id: <1294182034-16539-1-git-send-email-alexdeucher@gmail.com> X-Mailer: git-send-email 1.7.1.1 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Tue, 04 Jan 2011 23:01:33 +0000 (UTC) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index a245d17..4794faa 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -128,8 +128,8 @@ static const u8 edid_header[] = { }; /* - * Sanity check the EDID block (base or extension). Return 0 if the block - * doesn't check out, or 1 if it's valid. + * Sanity check the EDID block (base or extension). Return false if the block + * doesn't check out, or true if it's valid. */ static bool drm_edid_block_valid(u8 *raw_edid) @@ -160,8 +160,10 @@ drm_edid_block_valid(u8 *raw_edid) DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum); /* allow CEA to slide through, switches mangle this */ - if (raw_edid[0] != 0x02) - goto bad; + if (raw_edid[0] != 0x02) { + if (drm_edid_strict) + goto bad; + } } /* per-block-type checks */ @@ -169,7 +171,8 @@ drm_edid_block_valid(u8 *raw_edid) case 0: /* base */ if (edid->version != 1) { DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version); - goto bad; + if (drm_edid_strict) + goto bad; } if (edid->revision > 4) @@ -180,7 +183,7 @@ drm_edid_block_valid(u8 *raw_edid) break; } - return 1; + return true; bad: if (raw_edid) { @@ -188,7 +191,7 @@ bad: print_hex_dump_bytes(KERN_ERR, DUMP_PREFIX_NONE, raw_edid, EDID_LENGTH); printk("\n"); } - return 0; + return false; } /** diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index d59edc1..8b4530e 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -46,16 +46,21 @@ EXPORT_SYMBOL(drm_vblank_offdelay); unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */ EXPORT_SYMBOL(drm_timestamp_precision); +int drm_edid_strict = 1; /* 0 to disable strict edid conformance */ +EXPORT_SYMBOL(drm_edid_strict); + MODULE_AUTHOR(CORE_AUTHOR); MODULE_DESCRIPTION(CORE_DESC); MODULE_LICENSE("GPL and additional rights"); MODULE_PARM_DESC(debug, "Enable debug output"); MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs]"); MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]"); +MODULE_PARM_DESC(edid_strict, "Strict EDID checks (0 = disable)"); module_param_named(debug, drm_debug, int, 0600); module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600); module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600); +module_param_named(edid_strict, drm_edid_strict, int, 0600); struct idr drm_minors_idr; diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 0f14f94..fd99988 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -1430,6 +1430,8 @@ extern unsigned int drm_debug; extern unsigned int drm_vblank_offdelay; extern unsigned int drm_timestamp_precision; +extern int drm_edid_strict; + extern struct class *drm_class; extern struct proc_dir_entry *drm_proc_root; extern struct dentry *drm_debugfs_root;