Message ID | 20201008101608.8652-2-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] drm/i915: Set all unused color plane offsets to ~0xfff again | expand |
On Thu, Oct 08, 2020 at 01:16:07PM +0300, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > when the hardware isn't going to use the aux plane there's no > real point in dealing with the relevant hardware restrictions. > So let's just skip all that when not necessary. > > We can now also remove the offset=~0xfff behaviour for unused > color planes. Let's just zero out everyting so as to not leave > stale garbage behind to confuse people debugging the code. > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 14 +++++++++----- > drivers/gpu/drm/i915/display/intel_sprite.c | 6 +++--- > 2 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 44fd7059838f..34ba34f84b2a 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -2001,13 +2001,17 @@ static int ccs_to_main_plane(const struct drm_framebuffer *fb, int ccs_plane) > return ccs_plane - fb->format->num_planes / 2; > } > > -/* Return either the main plane's CCS or - if not a CCS FB - UV plane */ > int intel_main_to_aux_plane(const struct drm_framebuffer *fb, int main_plane) > { > + struct drm_i915_private *i915 = to_i915(fb->dev); > + > if (is_ccs_modifier(fb->modifier)) > return main_to_ccs_plane(fb, main_plane); > - > - return 1; > + else if (INTEL_GEN(i915) < 11 && > + intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) > + return 1; > + else > + return 0; > } > > bool > @@ -3933,7 +3937,7 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state) > * main surface offset, and it must be non-negative. Make > * sure that is what we will get. > */ > - if (offset > aux_offset) > + if (aux_plane && offset > aux_offset) > offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0, > offset, aux_offset & ~(alignment - 1)); > > @@ -4131,7 +4135,7 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state) > } > > 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].offset = 0; > plane_state->color_plane[i].x = 0; > plane_state->color_plane[i].y = 0; > } > diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c > index 2da11ab6343c..bf8c82a2b213 100644 > --- a/drivers/gpu/drm/i915/display/intel_sprite.c > +++ b/drivers/gpu/drm/i915/display/intel_sprite.c > @@ -656,7 +656,6 @@ skl_program_plane(struct intel_plane *plane, > const struct drm_framebuffer *fb = plane_state->hw.fb; > int aux_plane = intel_main_to_aux_plane(fb, color_plane); > u32 aux_dist = plane_state->color_plane[aux_plane].offset - surf_addr; > - u32 aux_stride = skl_plane_stride(plane_state, aux_plane); > int crtc_x = plane_state->uapi.dst.x1; > int crtc_y = plane_state->uapi.dst.y1; > u32 x = plane_state->color_plane[color_plane].x; > @@ -691,6 +690,9 @@ skl_program_plane(struct intel_plane *plane, > crtc_y = 0; > } > > + if (INTEL_GEN(dev_priv) < 12 && aux_plane) > + aux_dist |= skl_plane_stride(plane_state, aux_plane); > + > spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); > > intel_de_write_fw(dev_priv, PLANE_STRIDE(pipe, plane_id), stride); > @@ -699,8 +701,6 @@ skl_program_plane(struct intel_plane *plane, > intel_de_write_fw(dev_priv, PLANE_SIZE(pipe, plane_id), > (src_h << 16) | src_w); > > - if (INTEL_GEN(dev_priv) < 12) > - aux_dist |= aux_stride; > intel_de_write_fw(dev_priv, PLANE_AUX_DIST(pipe, plane_id), aux_dist); > > if (icl_is_hdr_plane(dev_priv, plane_id)) > -- > 2.26.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 44fd7059838f..34ba34f84b2a 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -2001,13 +2001,17 @@ static int ccs_to_main_plane(const struct drm_framebuffer *fb, int ccs_plane) return ccs_plane - fb->format->num_planes / 2; } -/* Return either the main plane's CCS or - if not a CCS FB - UV plane */ int intel_main_to_aux_plane(const struct drm_framebuffer *fb, int main_plane) { + struct drm_i915_private *i915 = to_i915(fb->dev); + if (is_ccs_modifier(fb->modifier)) return main_to_ccs_plane(fb, main_plane); - - return 1; + else if (INTEL_GEN(i915) < 11 && + intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) + return 1; + else + return 0; } bool @@ -3933,7 +3937,7 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state) * main surface offset, and it must be non-negative. Make * sure that is what we will get. */ - if (offset > aux_offset) + if (aux_plane && offset > aux_offset) offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0, offset, aux_offset & ~(alignment - 1)); @@ -4131,7 +4135,7 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state) } 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].offset = 0; plane_state->color_plane[i].x = 0; plane_state->color_plane[i].y = 0; } diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c index 2da11ab6343c..bf8c82a2b213 100644 --- a/drivers/gpu/drm/i915/display/intel_sprite.c +++ b/drivers/gpu/drm/i915/display/intel_sprite.c @@ -656,7 +656,6 @@ skl_program_plane(struct intel_plane *plane, const struct drm_framebuffer *fb = plane_state->hw.fb; int aux_plane = intel_main_to_aux_plane(fb, color_plane); u32 aux_dist = plane_state->color_plane[aux_plane].offset - surf_addr; - u32 aux_stride = skl_plane_stride(plane_state, aux_plane); int crtc_x = plane_state->uapi.dst.x1; int crtc_y = plane_state->uapi.dst.y1; u32 x = plane_state->color_plane[color_plane].x; @@ -691,6 +690,9 @@ skl_program_plane(struct intel_plane *plane, crtc_y = 0; } + if (INTEL_GEN(dev_priv) < 12 && aux_plane) + aux_dist |= skl_plane_stride(plane_state, aux_plane); + spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); intel_de_write_fw(dev_priv, PLANE_STRIDE(pipe, plane_id), stride); @@ -699,8 +701,6 @@ skl_program_plane(struct intel_plane *plane, intel_de_write_fw(dev_priv, PLANE_SIZE(pipe, plane_id), (src_h << 16) | src_w); - if (INTEL_GEN(dev_priv) < 12) - aux_dist |= aux_stride; intel_de_write_fw(dev_priv, PLANE_AUX_DIST(pipe, plane_id), aux_dist); if (icl_is_hdr_plane(dev_priv, plane_id))