WSL2-Linux-Kernel/drivers/clk/ingenic
Paul Cercueil 86733ab239 clk: ingenic: jz4760: Update M/N/OD calculation algorithm
commit ecfb9f4047 upstream.

The previous algorithm was pretty broken.

- The inner loop had a '(m > m_max)' condition, and the value of 'm'
  would increase in each iteration;

- Each iteration would actually multiply 'm' by two, so it is not needed
  to re-compute the whole equation at each iteration;

- It would loop until (m & 1) == 0, which means it would loop at most
  once.

- The outer loop would divide the 'n' value by two at the end of each
  iteration. This meant that for a 12 MHz parent clock and a 1.2 GHz
  requested clock, it would first try n=12, then n=6, then n=3, then
  n=1, none of which would work; the only valid value is n=2 in this
  case.

Simplify this algorithm with a single for loop, which decrements 'n'
after each iteration, addressing all of the above problems.

Fixes: bdbfc02937 ("clk: ingenic: Add support for the JZ4760")
Cc: <stable@vger.kernel.org>
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20221214123704.7305-1-paul@crapouillou.net
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-02-14 19:18:03 +01:00
..
Kconfig clk: ingenic: Add support for the JZ4760 2021-06-27 19:49:18 -07:00
Makefile clk: ingenic: Add support for the JZ4760 2021-06-27 19:49:18 -07:00
cgu.c clk: ingenic: Fix bugs with divided dividers 2021-11-25 09:48:32 +01:00
cgu.h clk: ingenic: Support overriding PLLs M/N/OD calc algorithm 2021-06-27 19:49:18 -07:00
jz4725b-cgu.c clk: jz4725b: fix mmc0 clock gating 2022-03-02 11:47:48 +01:00
jz4740-cgu.c clk: Support bypassing dividers 2021-06-27 19:49:17 -07:00
jz4760-cgu.c clk: ingenic: jz4760: Update M/N/OD calculation algorithm 2023-02-14 19:18:03 +01:00
jz4770-cgu.c clk: ingenic: Remove pll_info.no_bypass_bit 2021-06-27 19:49:17 -07:00
jz4780-cgu.c clk: JZ4780: Reformat the code to align it. 2020-07-27 18:18:14 -07:00
pm.c clk: ingenic: Handle setting the Low-Power Mode bit 2019-06-25 15:43:15 -07:00
pm.h clk: ingenic: Handle setting the Low-Power Mode bit 2019-06-25 15:43:15 -07:00
tcu.c clk: ingenic-tcu: Properly enable registers before accessing timers 2022-10-05 10:39:37 +02:00
x1000-cgu.c clk: X1000: Add support for calculat REFCLK of USB PHY. 2020-07-27 18:18:14 -07:00
x1830-cgu.c clk: Ingenic: Add RTC related clocks for Ingenic SoCs. 2020-07-27 18:17:52 -07:00