Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Nautiyal, Ankit K" <ankit.k.nautiyal@intel.com>
To: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>,
	<intel-gfx@lists.freedesktop.org>
Cc: <intel-xe@lists.freedesktop.org>, <jani.nikula@intel.com>
Subject: Re: [PATCH v3 4/5] drm/i915/scaler: Check if vblank is sufficient for scaler
Date: Tue, 7 Jan 2025 19:31:46 +0530	[thread overview]
Message-ID: <6044f5cd-a5a4-485c-9db8-ead5d4339fa7@intel.com> (raw)
In-Reply-To: <20250106165111.1672722-5-mitulkumar.ajitkumar.golani@intel.com>


On 1/6/2025 10:21 PM, Mitul Golani wrote:
> Check if vblank is too short for scaler prefill latency.
>
> --v2:
> - Use hweight* family of functions for counting bits. [Jani]
> - Update precision handling for hscale and vscale. [Ankit]
> - Consider chroma downscaling factor during latency
> calculation. [Ankit]
> - Replace function name from scaler_prefill_time to
> scaler_prefill_latency.
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
>   drivers/gpu/drm/i915/display/skl_watermark.c | 31 ++++++++++++++++++++
>   1 file changed, 31 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 29e8ea91c858..95f60819fe0a 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -2292,6 +2292,36 @@ static int icl_build_plane_wm(struct intel_crtc_state *crtc_state,
>   	return 0;
>   }
>   
> +static int
> +scaler_prefill_latency(const struct intel_crtc_state *crtc_state)
> +{
> +	const struct intel_crtc_scaler_state *scaler_state =
> +					&crtc_state->scaler_state;
> +	int count = hweight32(scaler_state->scaler_users);
> +	int latency;
> +	long long  hscale_k =
> +		mul_u32_u32(scaler_state->scalers[0].hscale, 1000);
> +	long long vscale_k =
> +		mul_u32_u32(scaler_state->scalers[0].vscale, 1000);


I understand you want to retain the precision so multiplying by 1000 
makes sense.

But these values are left shifted by 16 so to do any calculation need to 
right shift by after you are multiplying by 1000.

> +
> +	if (!count)
> +		return 0;
> +
> +	if (count > 1) {
> +		int chroma_downscaling_factor =
> +			crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444 ? 2 : 1;

This should be YCBCR420.


> +
> +		latency = (4 * crtc_state->linetime) +
> +			  (chroma_downscaling_factor *
> +			   DIV_ROUND_UP_ULL((4 * crtc_state->linetime * hscale_k * vscale_k),
> +					    USHRT_MAX));

Need to divide by 1000 * 1000 here, since you multiplied these earlier.


Regards,

Ankit


> +	} else {
> +		latency = 4 * crtc_state->linetime;
> +	}
> +
> +	return latency;
> +}
> +
>   static bool
>   skl_is_vblank_too_short(const struct intel_crtc_state *crtc_state,
>   			int wm0_lines, int latency)
> @@ -2302,6 +2332,7 @@ skl_is_vblank_too_short(const struct intel_crtc_state *crtc_state,
>   	/* FIXME missing scaler and DSC pre-fill time */
>   	return crtc_state->framestart_delay +
>   		intel_usecs_to_scanlines(adjusted_mode, latency) +
> +		scaler_prefill_latency(crtc_state) +
>   		wm0_lines >
>   		adjusted_mode->crtc_vtotal - adjusted_mode->crtc_vblank_start;
>   }

  reply	other threads:[~2025-01-07 14:02 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-06 16:51 [PATCH v3 0/5] Check Scaler and DSC Prefill Latency Against Vblank Mitul Golani
2025-01-06 16:51 ` [PATCH v3 1/5] drm/i915/scaler: Add and compute scaling factors Mitul Golani
2025-01-07 13:00   ` Nautiyal, Ankit K
2025-01-06 16:51 ` [PATCH v3 2/5] drm/i915/scaler: Use crtc_state to setup plane or pipe scaler Mitul Golani
2025-01-07 13:04   ` Nautiyal, Ankit K
2025-01-06 16:51 ` [PATCH v3 3/5] drm/i915/scaler: Compute scaling factors for " Mitul Golani
2025-01-07 13:54   ` Nautiyal, Ankit K
2025-01-08  8:45   ` Dan Carpenter
2025-01-08 13:29     ` Golani, Mitulkumar Ajitkumar
2025-01-06 16:51 ` [PATCH v3 4/5] drm/i915/scaler: Check if vblank is sufficient for scaler Mitul Golani
2025-01-07 14:01   ` Nautiyal, Ankit K [this message]
2025-01-06 16:51 ` [PATCH v3 5/5] drm/i915/dsc: Check if dsc prefill sufficient for vblank Mitul Golani
2025-01-07 14:06   ` Nautiyal, Ankit K
2025-01-06 17:17 ` ✓ CI.Patch_applied: success for Check Scaler and DSC Prefill Latency Against Vblank Patchwork
2025-01-06 17:17 ` ✓ CI.checkpatch: " Patchwork
2025-01-06 17:19 ` ✓ CI.KUnit: " Patchwork
2025-01-06 17:37 ` ✓ CI.Build: " Patchwork
2025-01-06 17:39 ` ✓ CI.Hooks: " Patchwork
2025-01-06 17:41 ` ✗ CI.checksparse: warning " Patchwork
2025-01-06 18:07 ` ✓ Xe.CI.BAT: success " Patchwork
2025-01-07 11:57 ` ✗ Xe.CI.Full: failure " Patchwork

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=6044f5cd-a5a4-485c-9db8-ead5d4339fa7@intel.com \
    --to=ankit.k.nautiyal@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jani.nikula@intel.com \
    --cc=mitulkumar.ajitkumar.golani@intel.com \
    /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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox