[Intel-gfx] [PATCH 1/3] drm/i915: Set all unused color plane offsets to ~0xfff again
Imre Deak
imre.deak at intel.com
Thu Oct 8 13:23:46 UTC 2020
On Thu, Oct 08, 2020 at 01:16:06PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> When the number of potential color planes grew to 4 we stopped
> setting all unused color plane offsets to ~0xfff. The code
> still tries to do this, but actually does nothing since the
> loop limits are bogus.
>
> skl_check_main_surface() actually depends on this ~0xfff
> behaviour as it will make sure to move the main surface
> offset below the aux surface offset because the hardware
> AUX_DIST must be a non-negative value [1], and for simplicity
> it doesn't bother checking if the AUX plane is actually
> needed or not. So currently it may end up shuffling the
> main surface around based on some stale leftover AUX offset.
>
> The skl+ plane code also just blindly calculates the AUX_DIST
> whether or not the AUX plane is actually needed by the hw or
> not, and that too will now potentially use some stale AUX
> surface offset in the calculation. Would seem nicer to
> guarantee a consistent non-negative AUX_DIST always.
>
> So bring back the original ~0xfff offset behaviour for
> unused color planes. Though it doesn't seem super likely
> that this inconsistency would cause any real issues.
>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com>
> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
> Cc: Imre Deak <imre.deak at intel.com>
> Cc: Radhakrishna Sripada <radhakrishna.sripada at intel.com>
> Fixes: 2dfbf9d2873a ("drm/i915/tgl: Gen-12 display can decompress surfaces compressed by the media engine")
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
Arg. Yes skl_check_main_surface() adjusts now the address needlessly.
The fix looks ok to me:
Reviewed-by: Imre Deak <imre.deak at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 17 +++++------------
> 1 file changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 907e1d155443..44fd7059838f 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -4104,8 +4104,7 @@ static int skl_check_ccs_aux_surface(struct intel_plane_state *plane_state)
> int skl_check_plane_surface(struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->hw.fb;
> - int ret;
> - bool needs_aux = false;
> + int ret, i;
>
> ret = intel_plane_compute_gtt(plane_state);
> if (ret)
> @@ -4119,7 +4118,6 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state)
> * it.
> */
> if (is_ccs_modifier(fb->modifier)) {
> - needs_aux = true;
> ret = skl_check_ccs_aux_surface(plane_state);
> if (ret)
> return ret;
> @@ -4127,20 +4125,15 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state)
>
> if (intel_format_info_is_yuv_semiplanar(fb->format,
> fb->modifier)) {
> - needs_aux = true;
> ret = skl_check_nv12_aux_surface(plane_state);
> if (ret)
> return ret;
> }
>
> - if (!needs_aux) {
> - int i;
> -
> - for (i = 1; i < fb->format->num_planes; i++) {
> - plane_state->color_plane[i].offset = ~0xfff;
> - plane_state->color_plane[i].x = 0;
> - plane_state->color_plane[i].y = 0;
> - }
> + for (i = fb->format->num_planes; i < ARRAY_SIZE(plane_state->color_plane); i++) {
> + plane_state->color_plane[i].offset = ~0xfff;
> + plane_state->color_plane[i].x = 0;
> + plane_state->color_plane[i].y = 0;
> }
>
> ret = skl_check_main_surface(plane_state);
> --
> 2.26.2
>
More information about the Intel-gfx
mailing list