From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> To: Paulo Zanoni <paulo.r.zanoni@intel.com>, intel-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org Subject: Re: [Intel-gfx] [PATCH 5/9] drm/i915/gen9: minimum scanlines for Y tile is not always 4 Date: Tue, 27 Sep 2016 08:06:23 +0100 [thread overview] Message-ID: <18aa9128-a5ec-ee7a-0602-27676742b86b@linux.intel.com> (raw) In-Reply-To: <1474578035-424-6-git-send-email-paulo.r.zanoni@intel.com> Hi, On 22/09/2016 22:00, Paulo Zanoni wrote: > During watermarks calculations, this value is used in 3 different > places. Only one of them was not using a hardcoded 4. Move the code up > so everybody can benefit from the actual value. > > This should only help on situations with Y tiling + 90/270 rotation + > 1 or 2 bpp or NV12. I don't think bothering stable with this was required since 90/270 on NV12 was never fully enabled AFAIR. Unless Ville accidentaly enabled it in his recent rewrite? But it was not put in due instability issues so I hope not. Regards, Tvrtko > Cc: stable@vger.kernel.org > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> > --- > drivers/gpu/drm/i915/intel_pm.c | 56 +++++++++++++++++++++++------------------ > 1 file changed, 32 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c > index ee561c2..a7f5f7f 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -3495,7 +3495,8 @@ static uint32_t skl_wm_method1(uint32_t pixel_rate, uint8_t cpp, uint32_t latenc > > static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, > uint32_t horiz_pixels, uint8_t cpp, > - uint64_t tiling, uint32_t latency) > + uint64_t tiling, uint32_t latency, > + uint32_t y_min_scanlines) > { > uint32_t ret; > uint32_t plane_bytes_per_line, plane_blocks_per_line; > @@ -3508,9 +3509,9 @@ static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, > > if (tiling == I915_FORMAT_MOD_Y_TILED || > tiling == I915_FORMAT_MOD_Yf_TILED) { > - plane_bytes_per_line *= 4; > + plane_bytes_per_line *= y_min_scanlines; > plane_blocks_per_line = DIV_ROUND_UP(plane_bytes_per_line, 512); > - plane_blocks_per_line /= 4; > + plane_blocks_per_line /= y_min_scanlines; > } else if (tiling == DRM_FORMAT_MOD_NONE) { > plane_blocks_per_line = DIV_ROUND_UP(plane_bytes_per_line, 512) + 1; > } else { > @@ -3567,6 +3568,7 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, > uint8_t cpp; > uint32_t width = 0, height = 0; > uint32_t plane_pixel_rate; > + uint32_t y_min_scanlines; > > if (latency == 0 || !cstate->base.active || !intel_pstate->base.visible) { > *enabled = false; > @@ -3582,38 +3584,44 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, > cpp = drm_format_plane_cpp(fb->pixel_format, 0); > plane_pixel_rate = skl_adjusted_plane_pixel_rate(cstate, intel_pstate); > > + if (intel_rotation_90_or_270(pstate->rotation)) { > + int cpp = (fb->pixel_format == DRM_FORMAT_NV12) ? > + drm_format_plane_cpp(fb->pixel_format, 1) : > + drm_format_plane_cpp(fb->pixel_format, 0); > + > + switch (cpp) { > + case 1: > + y_min_scanlines = 16; > + break; > + case 2: > + y_min_scanlines = 8; > + break; > + default: > + WARN(1, "Unsupported pixel depth for rotation"); > + case 4: > + y_min_scanlines = 4; > + break; > + } > + } else { > + y_min_scanlines = 4; > + } > + > method1 = skl_wm_method1(plane_pixel_rate, cpp, latency); > method2 = skl_wm_method2(plane_pixel_rate, > cstate->base.adjusted_mode.crtc_htotal, > width, > cpp, > fb->modifier[0], > - latency); > + latency, > + y_min_scanlines); > > plane_bytes_per_line = width * cpp; > plane_blocks_per_line = DIV_ROUND_UP(plane_bytes_per_line, 512); > > if (fb->modifier[0] == I915_FORMAT_MOD_Y_TILED || > fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED) { > - uint32_t min_scanlines = 4; > - uint32_t y_tile_minimum; > - if (intel_rotation_90_or_270(pstate->rotation)) { > - int cpp = (fb->pixel_format == DRM_FORMAT_NV12) ? > - drm_format_plane_cpp(fb->pixel_format, 1) : > - drm_format_plane_cpp(fb->pixel_format, 0); > - > - switch (cpp) { > - case 1: > - min_scanlines = 16; > - break; > - case 2: > - min_scanlines = 8; > - break; > - case 8: > - WARN(1, "Unsupported pixel depth for rotation"); > - } > - } > - y_tile_minimum = plane_blocks_per_line * min_scanlines; > + uint32_t y_tile_minimum = plane_blocks_per_line * > + y_min_scanlines; > selected_result = max(method2, y_tile_minimum); > } else { > if ((ddb_allocation / plane_blocks_per_line) >= 1) > @@ -3628,7 +3636,7 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, > if (level >= 1 && level <= 7) { > if (fb->modifier[0] == I915_FORMAT_MOD_Y_TILED || > fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED) > - res_lines += 4; > + res_lines += y_min_scanlines; > else > res_blocks++; > }
WARNING: multiple messages have this Message-ID (diff)
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> To: Paulo Zanoni <paulo.r.zanoni@intel.com>, intel-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org Subject: Re: [PATCH 5/9] drm/i915/gen9: minimum scanlines for Y tile is not always 4 Date: Tue, 27 Sep 2016 08:06:23 +0100 [thread overview] Message-ID: <18aa9128-a5ec-ee7a-0602-27676742b86b@linux.intel.com> (raw) In-Reply-To: <1474578035-424-6-git-send-email-paulo.r.zanoni@intel.com> Hi, On 22/09/2016 22:00, Paulo Zanoni wrote: > During watermarks calculations, this value is used in 3 different > places. Only one of them was not using a hardcoded 4. Move the code up > so everybody can benefit from the actual value. > > This should only help on situations with Y tiling + 90/270 rotation + > 1 or 2 bpp or NV12. I don't think bothering stable with this was required since 90/270 on NV12 was never fully enabled AFAIR. Unless Ville accidentaly enabled it in his recent rewrite? But it was not put in due instability issues so I hope not. Regards, Tvrtko > Cc: stable@vger.kernel.org > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> > --- > drivers/gpu/drm/i915/intel_pm.c | 56 +++++++++++++++++++++++------------------ > 1 file changed, 32 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c > index ee561c2..a7f5f7f 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -3495,7 +3495,8 @@ static uint32_t skl_wm_method1(uint32_t pixel_rate, uint8_t cpp, uint32_t latenc > > static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, > uint32_t horiz_pixels, uint8_t cpp, > - uint64_t tiling, uint32_t latency) > + uint64_t tiling, uint32_t latency, > + uint32_t y_min_scanlines) > { > uint32_t ret; > uint32_t plane_bytes_per_line, plane_blocks_per_line; > @@ -3508,9 +3509,9 @@ static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, > > if (tiling == I915_FORMAT_MOD_Y_TILED || > tiling == I915_FORMAT_MOD_Yf_TILED) { > - plane_bytes_per_line *= 4; > + plane_bytes_per_line *= y_min_scanlines; > plane_blocks_per_line = DIV_ROUND_UP(plane_bytes_per_line, 512); > - plane_blocks_per_line /= 4; > + plane_blocks_per_line /= y_min_scanlines; > } else if (tiling == DRM_FORMAT_MOD_NONE) { > plane_blocks_per_line = DIV_ROUND_UP(plane_bytes_per_line, 512) + 1; > } else { > @@ -3567,6 +3568,7 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, > uint8_t cpp; > uint32_t width = 0, height = 0; > uint32_t plane_pixel_rate; > + uint32_t y_min_scanlines; > > if (latency == 0 || !cstate->base.active || !intel_pstate->base.visible) { > *enabled = false; > @@ -3582,38 +3584,44 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, > cpp = drm_format_plane_cpp(fb->pixel_format, 0); > plane_pixel_rate = skl_adjusted_plane_pixel_rate(cstate, intel_pstate); > > + if (intel_rotation_90_or_270(pstate->rotation)) { > + int cpp = (fb->pixel_format == DRM_FORMAT_NV12) ? > + drm_format_plane_cpp(fb->pixel_format, 1) : > + drm_format_plane_cpp(fb->pixel_format, 0); > + > + switch (cpp) { > + case 1: > + y_min_scanlines = 16; > + break; > + case 2: > + y_min_scanlines = 8; > + break; > + default: > + WARN(1, "Unsupported pixel depth for rotation"); > + case 4: > + y_min_scanlines = 4; > + break; > + } > + } else { > + y_min_scanlines = 4; > + } > + > method1 = skl_wm_method1(plane_pixel_rate, cpp, latency); > method2 = skl_wm_method2(plane_pixel_rate, > cstate->base.adjusted_mode.crtc_htotal, > width, > cpp, > fb->modifier[0], > - latency); > + latency, > + y_min_scanlines); > > plane_bytes_per_line = width * cpp; > plane_blocks_per_line = DIV_ROUND_UP(plane_bytes_per_line, 512); > > if (fb->modifier[0] == I915_FORMAT_MOD_Y_TILED || > fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED) { > - uint32_t min_scanlines = 4; > - uint32_t y_tile_minimum; > - if (intel_rotation_90_or_270(pstate->rotation)) { > - int cpp = (fb->pixel_format == DRM_FORMAT_NV12) ? > - drm_format_plane_cpp(fb->pixel_format, 1) : > - drm_format_plane_cpp(fb->pixel_format, 0); > - > - switch (cpp) { > - case 1: > - min_scanlines = 16; > - break; > - case 2: > - min_scanlines = 8; > - break; > - case 8: > - WARN(1, "Unsupported pixel depth for rotation"); > - } > - } > - y_tile_minimum = plane_blocks_per_line * min_scanlines; > + uint32_t y_tile_minimum = plane_blocks_per_line * > + y_min_scanlines; > selected_result = max(method2, y_tile_minimum); > } else { > if ((ddb_allocation / plane_blocks_per_line) >= 1) > @@ -3628,7 +3636,7 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, > if (level >= 1 && level <= 7) { > if (fb->modifier[0] == I915_FORMAT_MOD_Y_TILED || > fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED) > - res_lines += 4; > + res_lines += y_min_scanlines; > else > res_blocks++; > } _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-09-27 7:06 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-22 21:00 [PATCH 0/9] SKL/KBL watermark fixes, v3 Paulo Zanoni 2016-09-22 21:00 ` [PATCH 1/9] drm/i915: SAGV is not SKL-only, so rename a few things Paulo Zanoni 2016-09-22 21:00 ` [PATCH 2/9] drm/i915: introduce intel_has_sagv() Paulo Zanoni 2016-09-22 21:00 ` Paulo Zanoni 2016-09-22 21:00 ` [PATCH 3/9] drm/i915/kbl: KBL also needs to run the SAGV code Paulo Zanoni 2016-09-22 21:00 ` Paulo Zanoni 2016-09-22 21:00 ` [PATCH 4/9] drm/i915/gen9: fix the WaWmMemoryReadLatency implementation Paulo Zanoni 2016-09-22 21:00 ` Paulo Zanoni 2016-09-22 21:00 ` [PATCH 5/9] drm/i915/gen9: minimum scanlines for Y tile is not always 4 Paulo Zanoni 2016-09-27 7:06 ` Tvrtko Ursulin [this message] 2016-09-27 7:06 ` Tvrtko Ursulin 2016-09-22 21:00 ` [PATCH 6/9] drm/i915/gen9: fix plane_blocks_per_line on watermarks calculations Paulo Zanoni 2016-09-22 21:00 ` Paulo Zanoni 2016-09-27 7:20 ` [Intel-gfx] " Tvrtko Ursulin 2016-09-22 21:00 ` [PATCH 7/9] drm/i915/gen9: fix the watermark res_blocks value Paulo Zanoni 2016-09-22 21:00 ` [PATCH 8/9] drm/i915/gen9: implement missing case for SKL watermarks calculation Paulo Zanoni 2016-09-22 21:00 ` [PATCH 9/9] drm/i915/gen9: fail the modeset instead of WARNing on unsupported config Paulo Zanoni 2016-09-22 21:49 ` ✗ Fi.CI.BAT: warning for SKL/KBL watermark fixes (rev3) Patchwork 2016-09-26 17:57 ` Paulo Zanoni
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=18aa9128-a5ec-ee7a-0602-27676742b86b@linux.intel.com \ --to=tvrtko.ursulin@linux.intel.com \ --cc=intel-gfx@lists.freedesktop.org \ --cc=paulo.r.zanoni@intel.com \ --cc=stable@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.