On 2023-05-20 03:28:46, Dmitry Baryshkov wrote:
> Simplify calculatoins around pixel_clk_rate division. Replace common

calculations*

> pattern of doing 64-bit multiplication and then a do_div() call with
> simpler mult_frac call.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>

That's a cool function, I did not know of its existence!  Will keep it
in mind in future drm/msm changes and review, thanks for showing this!
(There seem to be a few more places where we *could* apply this)

Reviewed-by: Marijn Suijten <marijn.suij...@somainline.org>

> ---
>  drivers/gpu/drm/msm/dsi/dsi_host.c | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c 
> b/drivers/gpu/drm/msm/dsi/dsi_host.c
> index 2b257b459974..744f2398a6d6 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi_host.c
> +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
> @@ -585,7 +585,7 @@ unsigned long dsi_byte_clk_get_rate(struct mipi_dsi_host 
> *host, bool is_bonded_d
>       u8 lanes = msm_host->lanes;
>       u32 bpp = dsi_get_bpp(msm_host->format);
>       unsigned long pclk_rate = dsi_get_pclk_rate(mode, is_bonded_dsi);
> -     u64 pclk_bpp = (u64)pclk_rate * bpp;
> +     unsigned long pclk_bpp;
>  
>       if (lanes == 0) {
>               pr_err("%s: forcing mdss_dsi lanes to 1\n", __func__);
> @@ -594,9 +594,9 @@ unsigned long dsi_byte_clk_get_rate(struct mipi_dsi_host 
> *host, bool is_bonded_d
>  
>       /* CPHY "byte_clk" is in units of 16 bits */
>       if (msm_host->cphy_mode)
> -             do_div(pclk_bpp, (16 * lanes));
> +             pclk_bpp = mult_frac(pclk_rate, bpp, 16 * lanes);
>       else
> -             do_div(pclk_bpp, (8 * lanes));
> +             pclk_bpp = mult_frac(pclk_rate, bpp, 8 * lanes);
>  
>       return pclk_bpp;
>  }
> @@ -627,15 +627,12 @@ int dsi_calc_clk_rate_6g(struct msm_dsi_host *msm_host, 
> bool is_bonded_dsi)
>  int dsi_calc_clk_rate_v2(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
>  {
>       u32 bpp = dsi_get_bpp(msm_host->format);
> -     u64 pclk_bpp;
>       unsigned int esc_mhz, esc_div;
>       unsigned long byte_mhz;
>  
>       dsi_calc_pclk(msm_host, is_bonded_dsi);
>  
> -     pclk_bpp = (u64)msm_host->pixel_clk_rate * bpp;
> -     do_div(pclk_bpp, 8);
> -     msm_host->src_clk_rate = pclk_bpp;
> +     msm_host->src_clk_rate = mult_frac(msm_host->pixel_clk_rate, bpp, 8);
>  
>       /*
>        * esc clock is byte clock followed by a 4 bit divider,
> -- 
> 2.39.2
> 

Reply via email to