From: "Lisandro Damián Nicanor Pérez Meyer" <perezmeyer@gmail.com>
To: 622993@bugs.debian.org, Stuart Pook <slp12227@pook.it>
Cc: Jonathan Nieder <jrnieder@gmail.com>, dri-devel@lists.freedesktop.org
Subject: Re: Bug#622993: every 10s I get "[drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid ..."
Date: Mon, 17 Feb 2014 00:39:41 -0300 [thread overview]
Message-ID: <6090341.IquQv0jnHJ@luna> (raw)
In-Reply-To: <4DBD7B90.8080509@pook.it>
[-- Attachment #1.1.1: Type: text/plain, Size: 4188 bytes --]
=2D-nextPart1707384.WDPpQ5NUxF
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"
(Sorry if I'm spawning a very old thread here).
After all this time I have been patching my kernels to workaround [0][1=
]
[0] <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D624549>
[1] <https://bugs.freedesktop.org/show_bug.cgi?id=3D37040>
Some time ago I found [2] and today I finally solved the problem.
[2] <http://www.blaicher.com/2012/06/howto-fixing-a-broken-edid-eeprom-=
with-a-bus-pirate-v4/>
Some stuff I learned: the kernel does ignores checksums mismatches by 8=
... in=20
the positive side! My mismatch was exactly -1, ie, 255.
I have been modifying the original patch to workaround this since 2011.=
I'm=20
attaching my last patch in case someone else needs it. It does adds a k=
ernel=20
parameter to ignore edid mismatches.
Kinds regards, Lisandro.
=2D-=20
Theory and practice sometimes clash. And when that happens, theory lose=
s.
Every single time.
Linus Benedict Torvalds.
Lisandro Dami=E1n Nicanor P=E9rez Meyer
http://perezmeyer.com.ar/
http://perezmeyer.blogspot.com/
=2D-nextPart1707384.WDPpQ5NUxF
Content-Disposition: attachment; filename="drm-kms-add-a-module-param-to-disable-strict-EDID-3.12.patch"
Content-Transfer-Encoding: 7Bit
Content-Type: text/x-patch; charset="UTF-8"; name="drm-kms-add-a-module-param-to-disable-strict-EDID-3.12.patch"
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 830f750..773c5d0 100644
=2D-- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1018,6 +1018,9 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
}
}
+ if (!drm_edid_strict)
+ return 1;
+
for (i = 0; i < EDID_LENGTH; i++)
csum += raw_edid[i];
if (csum) {
@@ -2021,7 +2024,7 @@ do_inferred_modes(struct detailed_timing *timing, void *c)
closure->modes += drm_dmt_modes_for_range(closure->connector,
closure->edid,
timing);
=2D
+
if (!version_greater(closure->edid, 1, 1))
return; /* GTF not defined yet */
@@ -2258,7 +2261,7 @@ do_cvt_mode(struct detailed_timing *timing, void *c)
static int
add_cvt_modes(struct drm_connector *connector, struct edid *edid)
=2D{
+{
struct detailed_mode_closure closure = {
connector, edid, 0, 0, 0
};
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 39d8645..487a6ef 100644
=2D-- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -49,6 +49,9 @@ 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);
+
/*
* Default to use monotonic timestamps for wait-for-vblank and page-flip
* complete events.
@@ -63,12 +66,14 @@ MODULE_PARM_DESC(rnodes, "Enable experimental render nodes API");
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(timestamp_monotonic, "Use monotonic timestamps");
+MODULE_PARM_DESC(edid_strict, "Strict EDID checks (0 = disable)");
module_param_named(debug, drm_debug, int, 0600);
module_param_named(rnodes, drm_rnodes, 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(timestamp_monotonic, drm_timestamp_monotonic, 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 b46fb45..b86d239 100644
=2D-- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1462,6 +1462,7 @@ extern unsigned int drm_rnodes;
extern unsigned int drm_vblank_offdelay;
extern unsigned int drm_timestamp_precision;
extern unsigned int drm_timestamp_monotonic;
+extern int drm_edid_strict;
extern struct class *drm_class;
extern struct dentry *drm_debugfs_root;
=2D-nextPart1707384.WDPpQ5NUxF--
This is a multi-part message in MIME format.
[-- Attachment #1.1.2: Type: text/plain, Size: 1010 bytes --]
(Sorry if I'm spawning a very old thread here).
After all this time I have been patching my kernels to workaround [0][1]
[0] <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=624549>
[1] <https://bugs.freedesktop.org/show_bug.cgi?id=37040>
Some time ago I found [2] and today I finally solved the problem.
[2] <http://www.blaicher.com/2012/06/howto-fixing-a-broken-edid-eeprom-with-a-bus-pirate-v4/>
Some stuff I learned: the kernel does ignores checksums mismatches by 8... in
the positive side! My mismatch was exactly -1, ie, 255.
I have been modifying the original patch to workaround this since 2011. I'm
attaching my last patch in case someone else needs it. It does adds a kernel
parameter to ignore edid mismatches.
Kinds regards, Lisandro.
--
Theory and practice sometimes clash. And when that happens, theory loses.
Every single time.
Linus Benedict Torvalds.
Lisandro Damián Nicanor Pérez Meyer
http://perezmeyer.com.ar/
http://perezmeyer.blogspot.com/
[-- Attachment #1.1.3: drm-kms-add-a-module-param-to-disable-strict-EDID-3.12.patch --]
[-- Type: text/x-patch, Size: 2682 bytes --]
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 830f750..773c5d0 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1018,6 +1018,9 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
}
}
+ if (!drm_edid_strict)
+ return 1;
+
for (i = 0; i < EDID_LENGTH; i++)
csum += raw_edid[i];
if (csum) {
@@ -2021,7 +2024,7 @@ do_inferred_modes(struct detailed_timing *timing, void *c)
closure->modes += drm_dmt_modes_for_range(closure->connector,
closure->edid,
timing);
-
+
if (!version_greater(closure->edid, 1, 1))
return; /* GTF not defined yet */
@@ -2258,7 +2261,7 @@ do_cvt_mode(struct detailed_timing *timing, void *c)
static int
add_cvt_modes(struct drm_connector *connector, struct edid *edid)
-{
+{
struct detailed_mode_closure closure = {
connector, edid, 0, 0, 0
};
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 39d8645..487a6ef 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -49,6 +49,9 @@ 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);
+
/*
* Default to use monotonic timestamps for wait-for-vblank and page-flip
* complete events.
@@ -63,12 +66,14 @@ MODULE_PARM_DESC(rnodes, "Enable experimental render nodes API");
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(timestamp_monotonic, "Use monotonic timestamps");
+MODULE_PARM_DESC(edid_strict, "Strict EDID checks (0 = disable)");
module_param_named(debug, drm_debug, int, 0600);
module_param_named(rnodes, drm_rnodes, 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(timestamp_monotonic, drm_timestamp_monotonic, 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 b46fb45..b86d239 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1462,6 +1462,7 @@ extern unsigned int drm_rnodes;
extern unsigned int drm_vblank_offdelay;
extern unsigned int drm_timestamp_precision;
extern unsigned int drm_timestamp_monotonic;
+extern int drm_edid_strict;
extern struct class *drm_class;
extern struct dentry *drm_debugfs_root;
[-- Attachment #1.2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
prev parent reply other threads:[~2014-02-17 3:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <201104292156.32388.perezmeyer@gmail.com>
[not found] ` <20110430010752.GA6907@elie>
[not found] ` <201104292359.45739.perezmeyer@gmail.com>
2011-04-30 4:11 ` every 10s I get "[drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid ..." Jonathan Nieder
2011-05-01 15:26 ` Bug#622993: " Stuart Pook
2011-05-01 19:40 ` Thibaut Girka
2011-05-01 19:51 ` Lisandro Damián Nicanor Pérez Meyer
2011-05-01 20:26 ` Thibaut Girka
2011-05-01 20:47 ` Lisandro Damián Nicanor Pérez Meyer
2011-05-01 21:09 ` Thibaut Girka
2011-05-01 21:31 ` Lisandro Damián Nicanor Pérez Meyer
2011-05-02 14:23 ` Alex Deucher
2011-05-02 14:50 ` Lisandro Damián Nicanor Pérez Meyer
2011-05-02 15:25 ` Alex Deucher
2011-05-02 16:56 ` Lisandro Damián Nicanor Pérez Meyer
2011-05-01 20:48 ` Stuart Pook
2014-02-17 3:39 ` Lisandro Damián Nicanor Pérez Meyer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6090341.IquQv0jnHJ@luna \
--to=perezmeyer@gmail.com \
--cc=622993@bugs.debian.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=jrnieder@gmail.com \
--cc=slp12227@pook.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox