There's no reason to force the first byte to be correct if we're already scoring how correct the header is.
See also: https://bugzilla.redhat.com/show_bug.cgi?id=722909
Signed-off-by: Adam Jackson ajax@redhat.com --- drivers/gpu/drm/drm_edid.c | 18 ++++++++---------- 1 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 3e927ce..5fc3597 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -155,16 +155,14 @@ drm_edid_block_valid(u8 *raw_edid) int i; u8 csum = 0; struct edid *edid = (struct edid *)raw_edid; - - if (raw_edid[0] == 0x00) { - int score = drm_edid_header_is_valid(raw_edid); - if (score == 8) ; - else if (score >= 6) { - DRM_DEBUG("Fixing EDID header, your hardware may be failing\n"); - memcpy(raw_edid, edid_header, sizeof(edid_header)); - } else { - goto bad; - } + int score = drm_edid_header_is_valid(raw_edid); + + if (score == 8) ; + else if (score >= 6) { + DRM_DEBUG("Fixing EDID header, your hardware may be failing\n"); + memcpy(raw_edid, edid_header, sizeof(edid_header)); + } else { + goto bad; }
for (i = 0; i < EDID_LENGTH; i++)
On Thu, Dec 8, 2011 at 12:26 AM, Adam Jackson ajax@redhat.com wrote:
There's no reason to force the first byte to be correct if we're already scoring how correct the header is.
See also: https://bugzilla.redhat.com/show_bug.cgi?id=722909
Signed-off-by: Adam Jackson ajax@redhat.com
drivers/gpu/drm/drm_edid.c | 18 ++++++++---------- 1 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 3e927ce..5fc3597 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -155,16 +155,14 @@ drm_edid_block_valid(u8 *raw_edid) int i; u8 csum = 0; struct edid *edid = (struct edid *)raw_edid;
- if (raw_edid[0] == 0x00) {
- int score = drm_edid_header_is_valid(raw_edid);
- if (score == 8) ;
- else if (score >= 6) {
- DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
- memcpy(raw_edid, edid_header, sizeof(edid_header));
- } else {
- goto bad;
- }
- int score = drm_edid_header_is_valid(raw_edid);
- if (score == 8) ;
- else if (score >= 6) {
- DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
- memcpy(raw_edid, edid_header, sizeof(edid_header));
- } else {
- goto bad;
}
for (i = 0; i < EDID_LENGTH; i++)
1.7.6.4
Acked by: Tormod Volden debian.tormod@gmail.com
Also, I don't find the empty "if" statement very elegant. And the 8 is not so magic, is it? What about:
+ if (score < 6) + goto bad; + else if (score < sizeof(edid_header)) { + DRM_DEBUG("Fixing EDID header, your hardware may be failing\n"); + memcpy(raw_edid, edid_header, sizeof(edid_header)); }
Or would the extra comparison in the good case be unacceptable?
One could think about demagifying 6 somewhat also, but I am not sure it makes it more readable.
Cheers, Tormod
On 12/7/11 6:26 PM, Adam Jackson wrote:
There's no reason to force the first byte to be correct if we're already scoring how correct the header is.
Don't use this. The 00 check is needed to make sure we only attempt the header fixup on the zeroth block (not extensions).
- ajax
On Tue, 2011-12-20 at 15:09 -0500, Adam Jackson wrote:
On 12/7/11 6:26 PM, Adam Jackson wrote:
There's no reason to force the first byte to be correct if we're already scoring how correct the header is.
Don't use this. The 00 check is needed to make sure we only attempt the header fixup on the zeroth block (not extensions).
That's also not sufficient however, I have a Fedora bug where it's the first EDID byte that's busted, fixing that made the checksum correct also.
Ben.
- ajax
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
dri-devel@lists.freedesktop.org