diff mbox series

[v2,1/2] drm/i915: Add function to check for linear surfaces

Message ID 20181025231026.1839-1-dhinakaran.pandiyan@intel.com (mailing list archive)
State New, archived
Headers show
Series [v2,1/2] drm/i915: Add function to check for linear surfaces | expand

Commit Message

Dhinakaran Pandiyan Oct. 25, 2018, 11:10 p.m. UTC
A framebuffer can comprise surfaces with distinct tiling formats,
making checks against modifier alone insufficient. Make use of a
function to identify a linear surface based on both modifier and color
plane.

v2: Typo fix
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

Ville Syrjälä Oct. 26, 2018, 3:01 p.m. UTC | #1
On Thu, Oct 25, 2018 at 04:10:26PM -0700, Dhinakaran Pandiyan wrote:
> A framebuffer can comprise surfaces with distinct tiling formats,
> making checks against modifier alone insufficient. Make use of a
> function to identify a linear surface based on both modifier and color
> plane.
> 
> v2: Typo fix

newline missing here

> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index fe045abb6472..25e5402efd52 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2205,6 +2205,11 @@ static u32 intel_adjust_tile_offset(int *x, int *y,
>  	return new_offset;
>  }
>  
> +static inline bool is_surface_linear(uint64_t modifier, int color_plane)

inline not needed. s/uint64_t/u64/

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

> +{
> +	return modifier == DRM_FORMAT_MOD_LINEAR;
> +}
> +
>  static u32 intel_adjust_aligned_offset(int *x, int *y,
>  				       const struct drm_framebuffer *fb,
>  				       int color_plane,
> @@ -2217,7 +2222,7 @@ static u32 intel_adjust_aligned_offset(int *x, int *y,
>  
>  	WARN_ON(new_offset > old_offset);
>  
> -	if (fb->modifier != DRM_FORMAT_MOD_LINEAR) {
> +	if (!is_surface_linear(fb->modifier, color_plane)) {
>  		unsigned int tile_size, tile_width, tile_height;
>  		unsigned int pitch_tiles;
>  
> @@ -2281,14 +2286,13 @@ static u32 intel_compute_aligned_offset(struct drm_i915_private *dev_priv,
>  					unsigned int rotation,
>  					u32 alignment)
>  {
> -	uint64_t fb_modifier = fb->modifier;
>  	unsigned int cpp = fb->format->cpp[color_plane];
>  	u32 offset, offset_aligned;
>  
>  	if (alignment)
>  		alignment--;
>  
> -	if (fb_modifier != DRM_FORMAT_MOD_LINEAR) {
> +	if (!is_surface_linear(fb->modifier, color_plane)) {
>  		unsigned int tile_size, tile_width, tile_height;
>  		unsigned int tile_rows, tiles, pitch_tiles;
>  
> @@ -2525,7 +2529,7 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
>  						      tile_size);
>  		offset /= tile_size;
>  
> -		if (fb->modifier != DRM_FORMAT_MOD_LINEAR) {
> +		if (!is_surface_linear(fb->modifier, i)) {
>  			unsigned int tile_width, tile_height;
>  			unsigned int pitch_tiles;
>  			struct drm_rect r;
> -- 
> 2.14.1
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index fe045abb6472..25e5402efd52 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2205,6 +2205,11 @@  static u32 intel_adjust_tile_offset(int *x, int *y,
 	return new_offset;
 }
 
+static inline bool is_surface_linear(uint64_t modifier, int color_plane)
+{
+	return modifier == DRM_FORMAT_MOD_LINEAR;
+}
+
 static u32 intel_adjust_aligned_offset(int *x, int *y,
 				       const struct drm_framebuffer *fb,
 				       int color_plane,
@@ -2217,7 +2222,7 @@  static u32 intel_adjust_aligned_offset(int *x, int *y,
 
 	WARN_ON(new_offset > old_offset);
 
-	if (fb->modifier != DRM_FORMAT_MOD_LINEAR) {
+	if (!is_surface_linear(fb->modifier, color_plane)) {
 		unsigned int tile_size, tile_width, tile_height;
 		unsigned int pitch_tiles;
 
@@ -2281,14 +2286,13 @@  static u32 intel_compute_aligned_offset(struct drm_i915_private *dev_priv,
 					unsigned int rotation,
 					u32 alignment)
 {
-	uint64_t fb_modifier = fb->modifier;
 	unsigned int cpp = fb->format->cpp[color_plane];
 	u32 offset, offset_aligned;
 
 	if (alignment)
 		alignment--;
 
-	if (fb_modifier != DRM_FORMAT_MOD_LINEAR) {
+	if (!is_surface_linear(fb->modifier, color_plane)) {
 		unsigned int tile_size, tile_width, tile_height;
 		unsigned int tile_rows, tiles, pitch_tiles;
 
@@ -2525,7 +2529,7 @@  intel_fill_fb_info(struct drm_i915_private *dev_priv,
 						      tile_size);
 		offset /= tile_size;
 
-		if (fb->modifier != DRM_FORMAT_MOD_LINEAR) {
+		if (!is_surface_linear(fb->modifier, i)) {
 			unsigned int tile_width, tile_height;
 			unsigned int pitch_tiles;
 			struct drm_rect r;