aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Eduardo Gallo Filho <[email protected]>2023-09-26 14:15:18 +0000
committerThomas Zimmermann <[email protected]>2023-10-12 07:51:19 +0000
commitf2f455981a34ce8ca88a41458c09494b387d344f (patch)
treec1ebcccfa2da094958fd9574f51c495a4740250a
parentfbdev: Replace fb_pgprotect() with pgprot_framebuffer() (diff)
downloadkernel-f2f455981a34ce8ca88a41458c09494b387d344f.tar.gz
kernel-f2f455981a34ce8ca88a41458c09494b387d344f.zip
drm: Remove plane hsub/vsub alignment requirement for core helpers
The drm_format_info_plane_{height,width} functions was implemented using regular division for the plane size calculation, which cause issues [1][2] when used on contexts where the dimensions are misaligned with relation to the subsampling factors. So, replace the regular division by the DIV_ROUND_UP macro. This allows these functions to be used in more drivers, making further work to bring more core presence on them possible. [1] http://patchwork.freedesktop.org/patch/msgid/[email protected] [2] https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Carlos Eduardo Gallo Filho <[email protected]> Reviewed-by: AndrĂ© Almeida <[email protected]> Signed-off-by: Thomas Zimmermann <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
-rw-r--r--include/drm/drm_fourcc.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
index 532ae78ca747..ccf91daa4307 100644
--- a/include/drm/drm_fourcc.h
+++ b/include/drm/drm_fourcc.h
@@ -22,6 +22,7 @@
#ifndef __DRM_FOURCC_H__
#define __DRM_FOURCC_H__
+#include <linux/math.h>
#include <linux/types.h>
#include <uapi/drm/drm_fourcc.h>
@@ -279,7 +280,7 @@ int drm_format_info_plane_width(const struct drm_format_info *info, int width,
if (plane == 0)
return width;
- return width / info->hsub;
+ return DIV_ROUND_UP(width, info->hsub);
}
/**
@@ -301,7 +302,7 @@ int drm_format_info_plane_height(const struct drm_format_info *info, int height,
if (plane == 0)
return height;
- return height / info->vsub;
+ return DIV_ROUND_UP(height, info->vsub);
}
const struct drm_format_info *__drm_format_info(u32 format);