diff mbox series

[12/12] drm/edid: reduce magic when updating the EDID block checksum

Message ID 0ec68aa82b4be2d46e442e74e341419d10c4c41b.1648578814.git.jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/edid: cleanup and refactoring around validity checks | expand

Commit Message

Jani Nikula March 29, 2022, 6:42 p.m. UTC
The code modifying the EDID block should not need to do tricks to fix
the checksum. We have a function for computing the checksum, use it.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_edid.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ville Syrjälä March 31, 2022, 2:59 p.m. UTC | #1
On Tue, Mar 29, 2022 at 09:42:19PM +0300, Jani Nikula wrote:
> The code modifying the EDID block should not need to do tricks to fix
> the checksum. We have a function for computing the checksum, use it.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/drm_edid.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index d0a76781ed19..d2dfab28b5b7 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1840,8 +1840,8 @@ static struct edid *edid_filter_invalid_blocks(const struct edid *edid,
>  			memcpy(base++, block, EDID_LENGTH);
>  	}
>  
> -	new->checksum += new->extensions - valid_extensions;
>  	new->extensions = valid_extensions;
> +	new->checksum = edid_block_compute_checksum(new);

Seems to happen after we've validated the base block so this won't
accidentally fix up an already bad checksum.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

>
>  out:
>  	kfree(edid);
> -- 
> 2.30.2
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index d0a76781ed19..d2dfab28b5b7 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1840,8 +1840,8 @@  static struct edid *edid_filter_invalid_blocks(const struct edid *edid,
 			memcpy(base++, block, EDID_LENGTH);
 	}
 
-	new->checksum += new->extensions - valid_extensions;
 	new->extensions = valid_extensions;
+	new->checksum = edid_block_compute_checksum(new);
 
 out:
 	kfree(edid);