* [PATCH] drm/edid: shorten log output in case of all zeroes edid block
[not found] <1416103472-16923-1-git-send-email-stefan.bruens@rwth-aachen.de>
@ 2014-11-20 2:25 ` Stefan Brüns
2014-11-21 13:32 ` Jani Nikula
2014-11-20 2:27 ` [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function Stefan Brüns
[not found] ` <1416450460-3692-1-git-send-email-stefan.bruens@rwth-aachen.de>
2 siblings, 1 reply; 13+ messages in thread
From: Stefan Brüns @ 2014-11-20 2:25 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
There is no need to dump the whole EDID block in case it contains no
information. Just print a single line stating the block is empty instead
of 8 lines containing only zeroes.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
---
drivers/gpu/drm/drm_edid.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 3bf9991..ec4f91f 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1080,9 +1080,13 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
bad:
if (print_bad_edid) {
- printk(KERN_ERR "Raw EDID:\n");
- print_hex_dump(KERN_ERR, " \t", DUMP_PREFIX_NONE, 16, 1,
+ if (drm_edid_is_zero(raw_edid, EDID_LENGTH)) {
+ printk(KERN_ERR "EDID block is all zeroes\n");
+ } else {
+ printk(KERN_ERR "Raw EDID:\n");
+ print_hex_dump(KERN_ERR, " \t", DUMP_PREFIX_NONE, 16, 1,
raw_edid, EDID_LENGTH, false);
+ }
}
return false;
}
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function
[not found] <1416103472-16923-1-git-send-email-stefan.bruens@rwth-aachen.de>
2014-11-20 2:25 ` [PATCH] drm/edid: shorten log output in case of all zeroes edid block Stefan Brüns
@ 2014-11-20 2:27 ` Stefan Brüns
2014-11-21 13:34 ` Jani Nikula
[not found] ` <1416450460-3692-1-git-send-email-stefan.bruens@rwth-aachen.de>
2 siblings, 1 reply; 13+ messages in thread
From: Stefan Brüns @ 2014-11-20 2:27 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
The function will also be used by a later patch, so factor it out.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
---
drivers/gpu/drm/drm_edid.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index ec4f91f..b072041 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1048,8 +1048,7 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
}
}
- for (i = 0; i < EDID_LENGTH; i++)
- csum += raw_edid[i];
+ csum = drm_edid_block_checksum(raw_edid);
if (csum) {
if (print_bad_edid) {
DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
@@ -1188,6 +1187,17 @@ static bool drm_edid_is_zero(u8 *in_edid, int length)
return true;
}
+static u8
+drm_edid_block_checksum(u8 *raw_edid)
+{
+ int i;
+ u8 csum = 0;
+ for (i = 0; i < EDID_LENGTH; i++)
+ csum += raw_edid[i];
+
+ return csum;
+}
+
static u8 *
drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
{
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/3] drm/edid: calculate address of current extension block only once
[not found] ` <1416450460-3692-1-git-send-email-stefan.bruens@rwth-aachen.de>
@ 2014-11-20 2:27 ` Stefan Brüns
2014-11-21 13:35 ` Jani Nikula
2014-11-20 2:27 ` [PATCH 3/3] drm/edid: Tighten checksum conditions for CEA blocks Stefan Brüns
1 sibling, 1 reply; 13+ messages in thread
From: Stefan Brüns @ 2014-11-20 2:27 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
---
drivers/gpu/drm/drm_edid.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index b072041..3a10f3f 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1232,12 +1232,11 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
block = new;
for (j = 1; j <= block[0x7e]; j++) {
+ u8 *ext_block = block + (valid_extensions + 1) * EDID_LENGTH;
for (i = 0; i < 4; i++) {
- if (drm_do_probe_ddc_edid(adapter,
- block + (valid_extensions + 1) * EDID_LENGTH,
- j, EDID_LENGTH))
+ if (drm_do_probe_ddc_edid(adapter, ext_block, j, EDID_LENGTH))
goto out;
- if (drm_edid_block_valid(block + (valid_extensions + 1) * EDID_LENGTH, j, print_bad_edid)) {
+ if (drm_edid_block_valid(ext_block, j, print_bad_edid)) {
valid_extensions++;
break;
}
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/3] drm/edid: Tighten checksum conditions for CEA blocks
[not found] ` <1416450460-3692-1-git-send-email-stefan.bruens@rwth-aachen.de>
2014-11-20 2:27 ` [PATCH 2/3] drm/edid: calculate address of current extension block only once Stefan Brüns
@ 2014-11-20 2:27 ` Stefan Brüns
2014-11-21 13:39 ` Jani Nikula
1 sibling, 1 reply; 13+ messages in thread
From: Stefan Brüns @ 2014-11-20 2:27 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
Checksumming was disabled for CEA blocks by
commit 4a638b4e38234233f5c7e6705662fbc0b58d80c2
Author: Adam Jackson <ajax@redhat.com>
Date: Tue May 25 16:33:09 2010 -0400
drm/edid: Allow non-fatal checksum errors in CEA blocks
If only the checksum is wrong, reading twice should result in identical
data, whereas a bad transfer will most likely corrupt different bytes.
Comparing checksums is not sufficient, as there is a considerable chance
of two bad transfers having the same checksum.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
---
drivers/gpu/drm/drm_edid.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 3a10f3f..55963d5 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1203,6 +1203,7 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
{
int i, j = 0, valid_extensions = 0;
u8 *block, *new;
+ u8 *saved_block = NULL;
bool print_bad_edid = !connector->bad_edid_counter || (drm_debug & DRM_UT_KMS);
if ((block = kmalloc(EDID_LENGTH, GFP_KERNEL)) == NULL)
@@ -1233,12 +1234,27 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
for (j = 1; j <= block[0x7e]; j++) {
u8 *ext_block = block + (valid_extensions + 1) * EDID_LENGTH;
+ u8 csum, last_csum = 0;
for (i = 0; i < 4; i++) {
if (drm_do_probe_ddc_edid(adapter, ext_block, j, EDID_LENGTH))
goto out;
- if (drm_edid_block_valid(ext_block, j, print_bad_edid)) {
+ csum = drm_edid_block_csum(ext_block);
+ if (!csum) {
valid_extensions++;
break;
+ } else if (ext_block[0] == CEA_EXT) {
+ /*
+ * Some switches mangle CEA contents without fixing the checksum.
+ * Accept CEA blocks when two reads return identical data.
+ */
+ if (saved_block && csum == last_csum &&
+ !memcmp(ext_block, saved_block, EDID_LENGTH)) {
+ valid_extensions++;
+ break;
+ }
+ kfree(saved_block);
+ saved_block = kmemdup(ext_block, EDID_LENGTH, GFP_KERNEL);
+ last_csum = csum;
}
}
@@ -1249,6 +1265,9 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
connector->bad_edid_counter++;
}
+
+ kfree(saved_block);
+ saved_block = NULL;
}
if (valid_extensions != block[0x7e]) {
@@ -1270,6 +1289,7 @@ carp:
connector->bad_edid_counter++;
out:
+ kfree(saved_block);
kfree(block);
return NULL;
}
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] drm/edid: shorten log output in case of all zeroes edid block
2014-11-20 2:25 ` [PATCH] drm/edid: shorten log output in case of all zeroes edid block Stefan Brüns
@ 2014-11-21 13:32 ` Jani Nikula
2014-11-23 2:21 ` [PATCH 1/2] drm/edid: move drm_edid_is_zero to top, make edid argument const Stefan Brüns
[not found] ` <1416709265-31437-1-git-send-email-stefan.bruens@rwth-aachen.de>
0 siblings, 2 replies; 13+ messages in thread
From: Jani Nikula @ 2014-11-21 13:32 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
On Thu, 20 Nov 2014, Stefan Brüns <stefan.bruens@rwth-aachen.de> wrote:
> There is no need to dump the whole EDID block in case it contains no
> information. Just print a single line stating the block is empty instead
> of 8 lines containing only zeroes.
>
> Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 3bf9991..ec4f91f 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1080,9 +1080,13 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
>
> bad:
> if (print_bad_edid) {
> - printk(KERN_ERR "Raw EDID:\n");
> - print_hex_dump(KERN_ERR, " \t", DUMP_PREFIX_NONE, 16, 1,
> + if (drm_edid_is_zero(raw_edid, EDID_LENGTH)) {
> + printk(KERN_ERR "EDID block is all zeroes\n");
> + } else {
> + printk(KERN_ERR "Raw EDID:\n");
> + print_hex_dump(KERN_ERR, " \t", DUMP_PREFIX_NONE, 16, 1,
> raw_edid, EDID_LENGTH, false);
> + }
> }
> return false;
> }
> --
> 2.1.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function
2014-11-20 2:27 ` [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function Stefan Brüns
@ 2014-11-21 13:34 ` Jani Nikula
2014-11-23 2:40 ` [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function V2 Stefan Brüns
0 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2014-11-21 13:34 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
On Thu, 20 Nov 2014, Stefan Brüns <stefan.bruens@rwth-aachen.de> wrote:
> The function will also be used by a later patch, so factor it out.
>
> Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
> ---
> drivers/gpu/drm/drm_edid.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index ec4f91f..b072041 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1048,8 +1048,7 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
> }
> }
>
> - for (i = 0; i < EDID_LENGTH; i++)
> - csum += raw_edid[i];
> + csum = drm_edid_block_checksum(raw_edid);
With this change, it's no longer necessary to initialize csum to 0 in
drm_edid_block_valid.
> if (csum) {
> if (print_bad_edid) {
> DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
> @@ -1188,6 +1187,17 @@ static bool drm_edid_is_zero(u8 *in_edid, int length)
> return true;
> }
>
> +static u8
> +drm_edid_block_checksum(u8 *raw_edid)
const u8 *raw_edid, please.
Those fixed,
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> +{
> + int i;
> + u8 csum = 0;
> + for (i = 0; i < EDID_LENGTH; i++)
> + csum += raw_edid[i];
> +
> + return csum;
> +}
> +
> static u8 *
> drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
> {
> --
> 2.1.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] drm/edid: calculate address of current extension block only once
2014-11-20 2:27 ` [PATCH 2/3] drm/edid: calculate address of current extension block only once Stefan Brüns
@ 2014-11-21 13:35 ` Jani Nikula
0 siblings, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2014-11-21 13:35 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
On Thu, 20 Nov 2014, Stefan Brüns <stefan.bruens@rwth-aachen.de> wrote:
> Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index b072041..3a10f3f 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1232,12 +1232,11 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
> block = new;
>
> for (j = 1; j <= block[0x7e]; j++) {
> + u8 *ext_block = block + (valid_extensions + 1) * EDID_LENGTH;
> for (i = 0; i < 4; i++) {
> - if (drm_do_probe_ddc_edid(adapter,
> - block + (valid_extensions + 1) * EDID_LENGTH,
> - j, EDID_LENGTH))
> + if (drm_do_probe_ddc_edid(adapter, ext_block, j, EDID_LENGTH))
> goto out;
> - if (drm_edid_block_valid(block + (valid_extensions + 1) * EDID_LENGTH, j, print_bad_edid)) {
> + if (drm_edid_block_valid(ext_block, j, print_bad_edid)) {
> valid_extensions++;
> break;
> }
> --
> 2.1.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] drm/edid: Tighten checksum conditions for CEA blocks
2014-11-20 2:27 ` [PATCH 3/3] drm/edid: Tighten checksum conditions for CEA blocks Stefan Brüns
@ 2014-11-21 13:39 ` Jani Nikula
2014-11-23 2:53 ` Stefan Bruens
0 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2014-11-21 13:39 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
On Thu, 20 Nov 2014, Stefan Brüns <stefan.bruens@rwth-aachen.de> wrote:
> Checksumming was disabled for CEA blocks by
>
> commit 4a638b4e38234233f5c7e6705662fbc0b58d80c2
> Author: Adam Jackson <ajax@redhat.com>
> Date: Tue May 25 16:33:09 2010 -0400
>
> drm/edid: Allow non-fatal checksum errors in CEA blocks
>
> If only the checksum is wrong, reading twice should result in identical
> data, whereas a bad transfer will most likely corrupt different bytes.
> Comparing checksums is not sufficient, as there is a considerable chance
> of two bad transfers having the same checksum.
>
> Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
> ---
> drivers/gpu/drm/drm_edid.c | 22 +++++++++++++++++++++-
> 1 file changed, 21 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 3a10f3f..55963d5 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1203,6 +1203,7 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
> {
> int i, j = 0, valid_extensions = 0;
> u8 *block, *new;
> + u8 *saved_block = NULL;
> bool print_bad_edid = !connector->bad_edid_counter || (drm_debug & DRM_UT_KMS);
>
> if ((block = kmalloc(EDID_LENGTH, GFP_KERNEL)) == NULL)
> @@ -1233,12 +1234,27 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
>
> for (j = 1; j <= block[0x7e]; j++) {
> u8 *ext_block = block + (valid_extensions + 1) * EDID_LENGTH;
> + u8 csum, last_csum = 0;
> for (i = 0; i < 4; i++) {
> if (drm_do_probe_ddc_edid(adapter, ext_block, j, EDID_LENGTH))
> goto out;
> - if (drm_edid_block_valid(ext_block, j, print_bad_edid)) {
> + csum = drm_edid_block_csum(ext_block);
> + if (!csum) {
> valid_extensions++;
> break;
> + } else if (ext_block[0] == CEA_EXT) {
> + /*
> + * Some switches mangle CEA contents without fixing the checksum.
> + * Accept CEA blocks when two reads return identical data.
> + */
> + if (saved_block && csum == last_csum &&
> + !memcmp(ext_block, saved_block, EDID_LENGTH)) {
> + valid_extensions++;
> + break;
> + }
> + kfree(saved_block);
> + saved_block = kmemdup(ext_block, EDID_LENGTH, GFP_KERNEL);
> + last_csum = csum;
I still feel like this should be embedded in drm_edid_block_valid
somehow. Who's going to print the bad edid now? Is it simply no longer
printed in this loop?
I'll defer to others; any better suggestions?
Jani.
> }
> }
>
> @@ -1249,6 +1265,9 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
>
> connector->bad_edid_counter++;
> }
> +
> + kfree(saved_block);
> + saved_block = NULL;
> }
>
> if (valid_extensions != block[0x7e]) {
> @@ -1270,6 +1289,7 @@ carp:
> connector->bad_edid_counter++;
>
> out:
> + kfree(saved_block);
> kfree(block);
> return NULL;
> }
> --
> 2.1.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/2] drm/edid: move drm_edid_is_zero to top, make edid argument const
2014-11-21 13:32 ` Jani Nikula
@ 2014-11-23 2:21 ` Stefan Brüns
[not found] ` <1416709265-31437-1-git-send-email-stefan.bruens@rwth-aachen.de>
1 sibling, 0 replies; 13+ messages in thread
From: Stefan Brüns @ 2014-11-23 2:21 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
drm_edid_is_zero will be used by drm_edid_block valid, move it up.
raw_edid argument can be const.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
---
drivers/gpu/drm/drm_edid.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 3bf9991..f8fb327 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1014,6 +1014,14 @@ module_param_named(edid_fixup, edid_fixup, int, 0400);
MODULE_PARM_DESC(edid_fixup,
"Minimum number of valid EDID header bytes (0-8, default 6)");
+static bool drm_edid_is_zero(const u8 *in_edid, int length)
+{
+ if (memchr_inv(in_edid, 0, length))
+ return false;
+
+ return true;
+}
+
/**
* drm_edid_block_valid - Sanity check the EDID block (base or extension)
* @raw_edid: pointer to raw EDID block
@@ -1176,14 +1184,6 @@ drm_do_probe_ddc_edid(struct i2c_adapter *adapter, unsigned char *buf,
return ret == xfers ? 0 : -1;
}
-static bool drm_edid_is_zero(u8 *in_edid, int length)
-{
- if (memchr_inv(in_edid, 0, length))
- return false;
-
- return true;
-}
-
static u8 *
drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
{
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/2] drm/edid: shorten log output in case of all zeroes edid block V2
[not found] ` <1416709265-31437-1-git-send-email-stefan.bruens@rwth-aachen.de>
@ 2014-11-23 2:21 ` Stefan Brüns
0 siblings, 0 replies; 13+ messages in thread
From: Stefan Brüns @ 2014-11-23 2:21 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
There is no need to dump the whole EDID block in case it contains no
information. Just print a single line stating the block is empty instead
of 8 lines containing only zeroes.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
---
drivers/gpu/drm/drm_edid.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index f8fb327..a71ed93 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1088,9 +1088,13 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
bad:
if (print_bad_edid) {
- printk(KERN_ERR "Raw EDID:\n");
- print_hex_dump(KERN_ERR, " \t", DUMP_PREFIX_NONE, 16, 1,
+ if (drm_edid_is_zero(raw_edid, EDID_LENGTH)) {
+ printk(KERN_ERR "EDID block is all zeroes\n");
+ } else {
+ printk(KERN_ERR "Raw EDID:\n");
+ print_hex_dump(KERN_ERR, " \t", DUMP_PREFIX_NONE, 16, 1,
raw_edid, EDID_LENGTH, false);
+ }
}
return false;
}
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function V2
2014-11-21 13:34 ` Jani Nikula
@ 2014-11-23 2:40 ` Stefan Brüns
2014-11-24 7:50 ` Jani Nikula
0 siblings, 1 reply; 13+ messages in thread
From: Stefan Brüns @ 2014-11-23 2:40 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
The function will also be used by a later patch, so factor it out.
V2: make raw_edid const, define/declare before first use
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index a71ed93..f6c4a1d 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1022,6 +1022,16 @@ static bool drm_edid_is_zero(const u8 *in_edid, int length)
return true;
}
+static u8 drm_edid_block_checksum(const u8 *raw_edid)
+{
+ int i;
+ u8 csum = 0;
+ for (i = 0; i < EDID_LENGTH; i++)
+ csum += raw_edid[i];
+
+ return csum;
+}
+
/**
* drm_edid_block_valid - Sanity check the EDID block (base or extension)
* @raw_edid: pointer to raw EDID block
@@ -1036,7 +1046,6 @@ static bool drm_edid_is_zero(const u8 *in_edid, int length)
bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
{
int i;
- u8 csum = 0;
struct edid *edid = (struct edid *)raw_edid;
if (WARN_ON(!raw_edid))
@@ -1056,9 +1065,7 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
}
}
- for (i = 0; i < EDID_LENGTH; i++)
- csum += raw_edid[i];
- if (csum) {
+ if (drm_edid_block_checksum(raw_edid)) {
if (print_bad_edid) {
DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
}
--
2.1.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] drm/edid: Tighten checksum conditions for CEA blocks
2014-11-21 13:39 ` Jani Nikula
@ 2014-11-23 2:53 ` Stefan Bruens
0 siblings, 0 replies; 13+ messages in thread
From: Stefan Bruens @ 2014-11-23 2:53 UTC (permalink / raw)
To: dri-devel
On Friday 21 November 2014 15:39:40 you wrote:
> I still feel like this should be embedded in drm_edid_block_valid
> somehow. Who's going to print the bad edid now? Is it simply no longer
> printed in this loop?
>
> I'll defer to others; any better suggestions?
>
> Jani.
>
This can not be embedded in drm_edid_block_valid, as the function is
completely "passive", but we must be able to trigger a retransmission of the
bad block.
Regarding printing, this should be added.
Thinking about it, maybe factor out the printing routine, and add the zero
block handling to it?
Kind regards,
Stefan
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function V2
2014-11-23 2:40 ` [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function V2 Stefan Brüns
@ 2014-11-24 7:50 ` Jani Nikula
0 siblings, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2014-11-24 7:50 UTC (permalink / raw)
To: dri-devel; +Cc: stefan.bruens
On Sun, 23 Nov 2014, Stefan Brüns <stefan.bruens@rwth-aachen.de> wrote:
> The function will also be used by a later patch, so factor it out.
>
> V2: make raw_edid const, define/declare before first use
>
> Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index a71ed93..f6c4a1d 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1022,6 +1022,16 @@ static bool drm_edid_is_zero(const u8 *in_edid, int length)
> return true;
> }
>
> +static u8 drm_edid_block_checksum(const u8 *raw_edid)
> +{
> + int i;
> + u8 csum = 0;
> + for (i = 0; i < EDID_LENGTH; i++)
> + csum += raw_edid[i];
> +
> + return csum;
> +}
> +
> /**
> * drm_edid_block_valid - Sanity check the EDID block (base or extension)
> * @raw_edid: pointer to raw EDID block
> @@ -1036,7 +1046,6 @@ static bool drm_edid_is_zero(const u8 *in_edid, int length)
> bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
> {
> int i;
> - u8 csum = 0;
I meant it's no longer necessary to initialize this to 0. You still need
the variable. Please try compiling the code you send and you'll see
why. ;)
BR,
Jani.
> struct edid *edid = (struct edid *)raw_edid;
>
> if (WARN_ON(!raw_edid))
> @@ -1056,9 +1065,7 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
> }
> }
>
> - for (i = 0; i < EDID_LENGTH; i++)
> - csum += raw_edid[i];
> - if (csum) {
> + if (drm_edid_block_checksum(raw_edid)) {
> if (print_bad_edid) {
> DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
> }
> --
> 2.1.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-11-24 7:50 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1416103472-16923-1-git-send-email-stefan.bruens@rwth-aachen.de>
2014-11-20 2:25 ` [PATCH] drm/edid: shorten log output in case of all zeroes edid block Stefan Brüns
2014-11-21 13:32 ` Jani Nikula
2014-11-23 2:21 ` [PATCH 1/2] drm/edid: move drm_edid_is_zero to top, make edid argument const Stefan Brüns
[not found] ` <1416709265-31437-1-git-send-email-stefan.bruens@rwth-aachen.de>
2014-11-23 2:21 ` [PATCH 2/2] drm/edid: shorten log output in case of all zeroes edid block V2 Stefan Brüns
2014-11-20 2:27 ` [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function Stefan Brüns
2014-11-21 13:34 ` Jani Nikula
2014-11-23 2:40 ` [PATCH 1/3] drm/edid: new drm_edid_block_checksum helper function V2 Stefan Brüns
2014-11-24 7:50 ` Jani Nikula
[not found] ` <1416450460-3692-1-git-send-email-stefan.bruens@rwth-aachen.de>
2014-11-20 2:27 ` [PATCH 2/3] drm/edid: calculate address of current extension block only once Stefan Brüns
2014-11-21 13:35 ` Jani Nikula
2014-11-20 2:27 ` [PATCH 3/3] drm/edid: Tighten checksum conditions for CEA blocks Stefan Brüns
2014-11-21 13:39 ` Jani Nikula
2014-11-23 2:53 ` Stefan Bruens
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.