Commit 2a11b1b4 authored by Dhinakaran Pandiyan's avatar Dhinakaran Pandiyan

drm/i915: Add function to check for linear surfaces

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
v3: remove 'inline' from function definition (Ville)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181026193805.11077-1-dhinakaran.pandiyan@intel.com
parent a670be33
...@@ -2205,6 +2205,11 @@ static u32 intel_adjust_tile_offset(int *x, int *y, ...@@ -2205,6 +2205,11 @@ static u32 intel_adjust_tile_offset(int *x, int *y,
return new_offset; return new_offset;
} }
static bool is_surface_linear(u64 modifier, int color_plane)
{
return modifier == DRM_FORMAT_MOD_LINEAR;
}
static u32 intel_adjust_aligned_offset(int *x, int *y, static u32 intel_adjust_aligned_offset(int *x, int *y,
const struct drm_framebuffer *fb, const struct drm_framebuffer *fb,
int color_plane, int color_plane,
...@@ -2217,7 +2222,7 @@ static u32 intel_adjust_aligned_offset(int *x, int *y, ...@@ -2217,7 +2222,7 @@ static u32 intel_adjust_aligned_offset(int *x, int *y,
WARN_ON(new_offset > old_offset); 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 tile_size, tile_width, tile_height;
unsigned int pitch_tiles; unsigned int pitch_tiles;
...@@ -2281,14 +2286,13 @@ static u32 intel_compute_aligned_offset(struct drm_i915_private *dev_priv, ...@@ -2281,14 +2286,13 @@ static u32 intel_compute_aligned_offset(struct drm_i915_private *dev_priv,
unsigned int rotation, unsigned int rotation,
u32 alignment) u32 alignment)
{ {
uint64_t fb_modifier = fb->modifier;
unsigned int cpp = fb->format->cpp[color_plane]; unsigned int cpp = fb->format->cpp[color_plane];
u32 offset, offset_aligned; u32 offset, offset_aligned;
if (alignment) if (alignment)
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_size, tile_width, tile_height;
unsigned int tile_rows, tiles, pitch_tiles; unsigned int tile_rows, tiles, pitch_tiles;
...@@ -2525,7 +2529,7 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv, ...@@ -2525,7 +2529,7 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
tile_size); tile_size);
offset /= 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 tile_width, tile_height;
unsigned int pitch_tiles; unsigned int pitch_tiles;
struct drm_rect r; struct drm_rect r;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment