All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nautiyal, Ankit K" <ankit.k.nautiyal@intel.com>
To: Dibin Moolakadan Subrahmanian
	<dibin.moolakadan.subrahmanian@intel.com>,
	<intel-gfx@lists.freedesktop.org>,
	<intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH] drm/i915/display: Fix u32 overflow in SNPS PHY HDMI PLL setup
Date: Tue, 3 Jun 2025 22:00:47 +0530	[thread overview]
Message-ID: <2823143d-bf42-4dca-9ae7-e50c60ee5dfd@intel.com> (raw)
In-Reply-To: <20250528064557.4172149-1-dibin.moolakadan.subrahmanian@intel.com>


On 5/28/2025 12:15 PM, Dibin Moolakadan Subrahmanian wrote:
> When configuring the HDMI PLL, calculations use DIV_ROUND_UP_ULL and
> DIV_ROUND_DOWN_ULL macros, which internally rely on do_div. However, do_div
> expects a 32-bit (u32) divisor, and at higher data rates, the divisor can
> exceed this limit. This leads to incorrect division results and
> ultimately misconfigured PLL values.
> This fix replaces do_div calls with  div64_base64 calls where diviser
> can exceed u32 limit.
>
> Signed-off-by: Dibin Moolakadan Subrahmanian <dibin.moolakadan.subrahmanian@intel.com>

Thanks for the patch, pushed to drm-intel-next

Regards,

Ankit

> Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Fixes: 5947642004bf ("drm/i915/display: Add support for SNPS PHY HDMI PLL algorithm for DG2")
> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Cc: Suraj Kandpal <suraj.kandpal@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> ---
>   .../gpu/drm/i915/display/intel_snps_hdmi_pll.c   | 16 ++++++++--------
>   1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c b/drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c
> index c6321dafef4f..74bb3bedf30f 100644
> --- a/drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c
> +++ b/drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c
> @@ -41,12 +41,12 @@ static s64 interp(s64 x, s64 x1, s64 x2, s64 y1, s64 y2)
>   {
>   	s64 dydx;
>   
> -	dydx = DIV_ROUND_UP_ULL((y2 - y1) * 100000, (x2 - x1));
> +	dydx = DIV64_U64_ROUND_UP((y2 - y1) * 100000, (x2 - x1));
>   
> -	return (y1 + DIV_ROUND_UP_ULL(dydx * (x - x1), 100000));
> +	return (y1 + DIV64_U64_ROUND_UP(dydx * (x - x1), 100000));
>   }
>   
> -static void get_ana_cp_int_prop(u32 vco_clk,
> +static void get_ana_cp_int_prop(u64 vco_clk,
>   				u32 refclk_postscalar,
>   				int mpll_ana_v2i,
>   				int c, int a,
> @@ -115,16 +115,16 @@ static void get_ana_cp_int_prop(u32 vco_clk,
>   								      CURVE0_MULTIPLIER));
>   
>   	scaled_interpolated_sqrt =
> -			int_sqrt(DIV_ROUND_UP_ULL(interpolated_product, vco_div_refclk_float) *
> +			int_sqrt(DIV64_U64_ROUND_UP(interpolated_product, vco_div_refclk_float) *
>   			DIV_ROUND_DOWN_ULL(1000000000000ULL, 55));
>   
>   	/* Scale vco_div_refclk for ana_cp_int */
>   	scaled_vco_div_refclk2 = DIV_ROUND_UP_ULL(vco_div_refclk_float, 1000000);
> -	adjusted_vco_clk2 = 1460281 * DIV_ROUND_UP_ULL(scaled_interpolated_sqrt *
> +	adjusted_vco_clk2 = 1460281 * DIV64_U64_ROUND_UP(scaled_interpolated_sqrt *
>   						       scaled_vco_div_refclk2,
>   						       curve_1_interpolated);
>   
> -	*ana_cp_prop = DIV_ROUND_UP_ULL(adjusted_vco_clk2, curve_2_scaled2);
> +	*ana_cp_prop = DIV64_U64_ROUND_UP(adjusted_vco_clk2, curve_2_scaled2);
>   	*ana_cp_prop = max(1, min(*ana_cp_prop, 127));
>   }
>   
> @@ -165,10 +165,10 @@ static void compute_hdmi_tmds_pll(u64 pixel_clock, u32 refclk,
>   	/* Select appropriate v2i point */
>   	if (datarate <= INTEL_SNPS_PHY_HDMI_9999MHZ) {
>   		mpll_ana_v2i = 2;
> -		tx_clk_div = ilog2(DIV_ROUND_DOWN_ULL(INTEL_SNPS_PHY_HDMI_9999MHZ, datarate));
> +		tx_clk_div = ilog2(div64_u64(INTEL_SNPS_PHY_HDMI_9999MHZ, datarate));
>   	} else {
>   		mpll_ana_v2i = 3;
> -		tx_clk_div = ilog2(DIV_ROUND_DOWN_ULL(INTEL_SNPS_PHY_HDMI_16GHZ, datarate));
> +		tx_clk_div = ilog2(div64_u64(INTEL_SNPS_PHY_HDMI_16GHZ, datarate));
>   	}
>   	vco_clk = (datarate << tx_clk_div) >> 1;
>   

      parent reply	other threads:[~2025-06-03 16:31 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-28  6:45 [PATCH] drm/i915/display: Fix u32 overflow in SNPS PHY HDMI PLL setup Dibin Moolakadan Subrahmanian
2025-05-28  8:33 ` ✓ CI.Patch_applied: success for " Patchwork
2025-05-28  8:33 ` ✓ CI.checkpatch: " Patchwork
2025-05-28  8:34 ` ✓ CI.KUnit: " Patchwork
2025-05-28  8:37 ` ✗ CI.Build: failure " Patchwork
2025-05-28 13:52 ` ✓ i915.CI.BAT: success " Patchwork
2025-05-28 16:36 ` ✗ i915.CI.Full: failure " Patchwork
2025-06-02  5:12 ` ✓ CI.Patch_applied: success for drm/i915/display: Fix u32 overflow in SNPS PHY HDMI PLL setup (rev2) Patchwork
2025-06-02  5:13 ` ✓ CI.checkpatch: " Patchwork
2025-06-02  5:14 ` ✓ CI.KUnit: " Patchwork
2025-06-02  5:24 ` ✓ CI.Build: " Patchwork
2025-06-02  5:27 ` ✓ CI.Hooks: " Patchwork
2025-06-02  5:28 ` ✓ CI.checksparse: " Patchwork
2025-06-02  5:53 ` ✓ Xe.CI.BAT: " Patchwork
2025-06-02  6:44 ` ✓ i915.CI.Full: success for drm/i915/display: Fix u32 overflow in SNPS PHY HDMI PLL setup Patchwork
2025-06-02  8:18 ` ✗ Xe.CI.Full: failure for drm/i915/display: Fix u32 overflow in SNPS PHY HDMI PLL setup (rev2) Patchwork
2025-06-03  7:53 ` [PATCH] drm/i915/display: Fix u32 overflow in SNPS PHY HDMI PLL setup Nautiyal, Ankit K
2025-06-03 16:30 ` Nautiyal, Ankit K [this message]

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=2823143d-bf42-4dca-9ae7-e50c60ee5dfd@intel.com \
    --to=ankit.k.nautiyal@intel.com \
    --cc=dibin.moolakadan.subrahmanian@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.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: link
Be 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.