Skip to content

Commit

Permalink
clk: meson: Support PLL with fixed fractional denominators
Browse files Browse the repository at this point in the history
Some PLLS with fractional multipliers have fractional denominators with
fixed values, instead of the previous "(1 << pll-> frc.width)".

Signed-off-by: Chuan Liu <chuan.liu@amlogic.com>
Link: https://lore.kernel.org/r/20240909-fix_clk-v3-1-a6d8f6333c04@amlogic.com
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
  • Loading branch information
Chuan Liu authored and Jerome Brunet committed Sep 30, 2024
1 parent eb61a12 commit c939154
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
8 changes: 5 additions & 3 deletions drivers/clk/meson/clk-pll.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,13 @@ static unsigned long __pll_params_to_rate(unsigned long parent_rate,
struct meson_clk_pll_data *pll)
{
u64 rate = (u64)parent_rate * m;
unsigned int frac_max = pll->frac_max ? pll->frac_max :
(1 << pll->frac.width);

if (frac && MESON_PARM_APPLICABLE(&pll->frac)) {
u64 frac_rate = (u64)parent_rate * frac;

rate += DIV_ROUND_UP_ULL(frac_rate,
(1 << pll->frac.width));
rate += DIV_ROUND_UP_ULL(frac_rate, frac_max);
}

return DIV_ROUND_UP_ULL(rate, n);
Expand Down Expand Up @@ -100,7 +101,8 @@ static unsigned int __pll_params_with_frac(unsigned long rate,
unsigned int n,
struct meson_clk_pll_data *pll)
{
unsigned int frac_max = (1 << pll->frac.width);
unsigned int frac_max = pll->frac_max ? pll->frac_max :
(1 << pll->frac.width);
u64 val = (u64)rate * n;

/* Bail out if we are already over the requested rate */
Expand Down
1 change: 1 addition & 0 deletions drivers/clk/meson/clk-pll.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ struct meson_clk_pll_data {
unsigned int init_count;
const struct pll_params_table *table;
const struct pll_mult_range *range;
unsigned int frac_max;
u8 flags;
};

Expand Down

0 comments on commit c939154

Please sign in to comment.