Skip to content

Commit

Permalink
drm/i915/tgl: Make sure FBs have a correct CCS plane stride
Browse files Browse the repository at this point in the history
The CCS plane stride must be fixed on TGL, as it's not configurable for
the display. Instead the HW has a hardwired logic to determine it from
the main plane stride. Make sure userspace passes in the correct stride.

Cc: Dhinakaran Pandiyan <[email protected]>
Cc: Ville Syrjälä <[email protected]>
Cc: Mika Kahola <[email protected]>
Signed-off-by: Imre Deak <[email protected]>
Reviewed-by: Mika Kahola <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
  • Loading branch information
ideak committed Dec 23, 2019
1 parent b3e57bc commit 71df86f
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions drivers/gpu/drm/i915/display/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -2621,6 +2621,12 @@ bool is_ccs_modifier(u64 modifier)
modifier == I915_FORMAT_MOD_Yf_TILED_CCS;
}

static int gen12_ccs_aux_stride(struct drm_framebuffer *fb, int ccs_plane)
{
return DIV_ROUND_UP(fb->pitches[ccs_to_main_plane(fb, ccs_plane)],
512) * 64;
}

u32 intel_plane_fb_max_stride(struct drm_i915_private *dev_priv,
u32 pixel_format, u64 modifier)
{
Expand Down Expand Up @@ -16550,6 +16556,17 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
goto err;
}

if (is_gen12_ccs_plane(fb, i)) {
int ccs_aux_stride = gen12_ccs_aux_stride(fb, i);

if (fb->pitches[i] != ccs_aux_stride) {
DRM_DEBUG_KMS("ccs aux plane %d pitch (%d) must be %d\n",
i,
fb->pitches[i], ccs_aux_stride);
goto err;
}
}

fb->obj[i] = &obj->base;
}

Expand Down

0 comments on commit 71df86f

Please sign in to comment.