linux/drivers/clk
Paul Cercueil ecfb9f4047 clk: ingenic: jz4760: Update M/N/OD calculation algorithm
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>
2023-01-25 16:08:27 -08:00
..
actions clk: actions: remove redundant assignment after a mask operation 2022-04-22 19:01:20 -07:00
analogbits Merge branch 'akpm' (patches from Andrew) 2021-07-02 12:08:10 -07:00
at91 ARM: at91: rm9200: fix usb device clock id 2022-11-17 15:35:52 +02:00
axis clk: cleanup comments 2022-03-11 18:22:15 -08:00
axs10x treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
baikal-t1 clk: baikal-t1: Convert to platform device driver 2022-09-30 14:20:56 -07:00
bcm firmware: raspberrypi: Move the clock IDs to the firmware header 2022-10-28 13:03:19 +02:00
berlin clk: berlin: Add of_node_put() for of_get_parent() 2022-08-19 14:50:24 -07:00
davinci Merge branches 'clk-fixed-rate', 'clk-spreadtrum', 'clk-pxa' and 'clk-ti' into clk-next 2022-10-04 10:54:14 -07:00
hisilicon Merge branches 'clk-starfive', 'clk-ti', 'clk-terminate' and 'clk-cleanup' into clk-next 2022-03-29 10:19:10 -07:00
imgtec
imx clk: imx: rename imx_obtain_fixed_clk_hw() to imx_get_clk_hw_by_name() 2022-11-25 11:22:15 +02:00
ingenic clk: ingenic: jz4760: Update M/N/OD calculation algorithm 2023-01-25 16:08:27 -08:00
keystone clk: keystone: syscon-clk: Use dev_err_probe() helper 2022-10-17 16:08:17 -07:00
loongson1 clk: loongson1: Terminate clk_div_table with sentinel element 2022-03-11 18:13:24 -08:00
mediatek Merge branches 'clk-mediatek', 'clk-trace', 'clk-qcom' and 'clk-microchip' into clk-next 2022-12-12 11:13:28 -08:00
meson Merge branches 'clk-bindings', 'clk-renesas', 'clk-amlogic', 'clk-allwinner' and 'clk-ti' into clk-next 2022-12-12 11:12:52 -08:00
microchip clk: microchip: mpfs-ccc: Use devm_kasprintf() for allocating formatted strings 2023-01-19 11:45:35 +02:00
mmp clk: mmp: pxa168: control shared SDH bits with separate clock 2022-09-30 13:34:07 -07:00
mstar clk: mstar: msc313 cpupll clk driver 2022-10-27 11:44:27 -07:00
mvebu clk: mvebu: armada-37xx-tbg: Remove the unneeded result variable 2022-09-30 17:46:30 -07:00
mxs
nxp clk: nxp: fix typo in comment 2022-10-03 12:34:32 -07:00
pistachio clk: pistachio: Fix initconst confusion 2022-09-28 18:35:45 -07:00
pxa clk: pxa: add a check for the return value of kzalloc() 2022-10-03 12:32:03 -07:00
qcom Merge branches 'clk-mediatek', 'clk-trace', 'clk-qcom' and 'clk-microchip' into clk-next 2022-12-12 11:13:28 -08:00
ralink clk: ralink: make system controller node a reset provider 2022-02-15 17:06:37 +01:00
renesas clk: renesas: r8a779f0: Fix Ethernet Switch clocks 2022-11-16 09:05:59 +01:00
rockchip Merge branches 'clk-spear', 'clk-fract', 'clk-rockchip' and 'clk-imx' into clk-next 2022-12-12 11:13:08 -08:00
samsung Merge branches 'clk-x86', 'clk-xilinx', 'clk-cleanup', 'clk-mstar' and 'clk-ingenic' into clk-next 2022-12-12 11:12:26 -08:00
sifive clk: sifive: select by default if SOC_SIFIVE 2022-10-17 14:07:11 -07:00
socfpga A pile of clk driver updates with a small tracepoint patch to the clk core this 2022-12-13 13:46:07 -08:00
spear clk: spear: Fix SSP clock definition on SPEAr600 2022-11-22 18:03:52 -08:00
sprd Merge branches 'clk-fixed-rate', 'clk-spreadtrum', 'clk-pxa' and 'clk-ti' into clk-next 2022-10-04 10:54:14 -07:00
st clk: st: Fix memory leak in st_of_quadfs_setup() 2022-12-07 18:27:11 -08:00
starfive clk: starfive: Add JH7100 audio clock driver 2022-03-10 18:17:33 -08:00
stm32 clk: stm32: rcc_reset: Fix missing spin_lock_init() 2022-06-09 15:34:08 -07:00
sunxi clk: sunxi: Do not select the PRCM MFD 2022-07-04 21:59:30 +02:00
sunxi-ng clk: sunxi-ng: f1c100s: Add IR mod clock 2022-11-16 19:49:18 +01:00
tegra clk: tegra: Support BPMP-FW ABI deny flags 2022-11-19 02:00:32 +01:00
ti clk: ti: fix typo in ti_clk_retry_init() code comment 2022-11-22 17:04:20 -08:00
uniphier clk: uniphier: Fix fixed-rate initialization 2022-03-11 19:29:02 -08:00
ux500 clk: ux500: fix a possible off-by-one in u8500_prcc_reset_base() 2022-05-18 13:34:03 -07:00
versatile clk: versatile: clk-icst: use after free on error path 2021-12-07 12:25:29 -08:00
visconti clk: visconti: Fix memory leak in visconti_register_pll() 2022-11-29 12:11:00 -08:00
x86 clk: mxl: syscon_node_to_regmap() returns error pointers 2022-10-26 17:39:33 -07:00
xilinx clk: xilinx: Drop duplicate depends on COMMON_CLK 2022-10-17 15:30:00 -07:00
zynq clk: zynq: Update the parameters to zynq_clk_register_periph_clk 2022-03-29 10:17:49 -07:00
zynqmp clk: zynqmp: pll: rectify rate rounding in zynqmp_pll_round_rate 2022-08-30 15:05:59 -07:00
.kunitconfig clk: explicitly disable CONFIG_UML_PCI_OVER_VIRTIO in .kunitconfig 2022-07-14 10:35:44 -06:00
clk_test.c clk: tests: Add tests for notifiers 2022-10-10 20:37:50 -07:00
clk-apple-nco.c clk: clk-apple-nco: Allow and fix module building 2022-03-15 09:56:12 -07:00
clk-asm9260.c clk: asm9260: use parent index to link the reference clock 2022-09-29 17:55:26 -07:00
clk-aspeed.c
clk-aspeed.h
clk-ast2600.c clk: ast2600: BCLK comes from EPLL 2022-10-03 14:12:15 -07:00
clk-axi-clkgen.c
clk-axm5516.c
clk-bd718x7.c clk: bd718xx: Drop BD70528 support 2021-06-27 18:42:45 -07:00
clk-bm1880.c clk: bm1880: remove kfrees on static allocations 2022-01-06 17:46:56 -08:00
clk-bulk.c clk: bulk: Use dev_err_probe() helper in __clk_bulk_get() 2022-10-17 16:07:51 -07:00
clk-cdce706.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
clk-cdce925.c clk: cdce925: simplify using devm_regulator_get_enable() 2022-10-17 16:06:49 -07:00
clk-clps711x.c clk: clps711x: Terminate clk_div_table with sentinel element 2022-03-11 18:13:24 -08:00
clk-composite.c clk: Stop forwarding clk_rate_requests to the parent 2022-09-15 09:32:11 -07:00
clk-conf.c
clk-cs2000-cp.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
clk-devres.c clk: Fix pointer casting to prevent oops in devm_clk_release() 2022-06-22 16:10:23 -07:00
clk-divider.c clk: Introduce clk_hw_init_rate_request() 2022-09-15 09:31:40 -07:00
clk-en7523.c clk: en7523: fix wrong pointer check in en7523_clk_probe() 2022-04-26 11:17:47 -07:00
clk-fixed-factor.c clk: fixed-factor: Introduce *clk_hw_register_fixed_factor_parent_hw() 2022-07-29 16:44:08 -07:00
clk-fixed-mmio.c
clk-fixed-rate.c clk: fixed-rate: add devm_clk_hw_register_fixed_rate 2022-09-29 17:55:29 -07:00
clk-fractional-divider.c clk: fractional-divider: Regroup inclusions 2022-11-22 18:19:39 -08:00
clk-fractional-divider.h clk: fractional-divider: Hide clk_fractional_divider_ops from wide audience 2021-08-12 12:42:00 -07:00
clk-fsl-flexspi.c
clk-fsl-sai.c
clk-gate_test.c clk: gate: Add some kunit test suites 2022-01-24 17:22:53 -08:00
clk-gate.c clk: gate: Add devm_clk_hw_register_gate() 2021-12-08 11:19:20 +01:00
clk-gemini.c clk: Gemini: fix struct name in kernel-doc 2021-12-02 17:27:48 -08:00
clk-gpio.c
clk-hi655x.c
clk-highbank.c
clk-hsdk-pll.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
clk-k210.c clk: k210: Fix k210_clk_set_parent() 2021-06-30 11:34:36 -07:00
clk-lan966x.c clk: allow building lan966x as a module 2022-10-03 14:14:02 -07:00
clk-lmk04832.c clk: lmk04832: fix kernel-doc warnings 2022-12-08 17:18:43 -08:00
clk-lochnagar.c dt-bindings: clock: Move lochnagar.h to dt-bindings/clock 2022-08-22 16:04:00 -07:00
clk-max9485.c clk: max9485: use simple i2c probe function 2022-04-22 19:28:08 -07:00
clk-max77686.c
clk-milbeaut.c
clk-moxart.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
clk-multiplier.c
clk-mux.c clk: mux: remove redundant initialization of variable width 2022-04-25 15:49:20 -07:00
clk-nomadik.c clk: nomadik: correct struct name kernel-doc warning 2022-12-09 10:26:25 -08:00
clk-npcm7xx.c clk: clk-npcm7xx: Remove unused struct npcm7xx_clk_gate_data and npcm7xx_clk_div_fixed_data 2022-09-28 17:39:04 -07:00
clk-nspire.c
clk-oxnas.c clk: oxnas: Hold reference returned by of_get_parent() 2022-08-19 14:35:43 -07:00
clk-palmas.c clk: palmas: Add a missing SPDX license header 2021-08-05 17:34:30 -07:00
clk-plldig.c
clk-pwm.c
clk-qoriq.c clk: qoriq: Hold reference returned by of_get_parent() 2022-08-19 14:41:47 -07:00
clk-renesas-pcie.c clk: rs9: Fix I2C accessors 2022-10-17 14:06:07 -07:00
clk-rk808.c
clk-s2mps11.c
clk-scmi.c clk: scmi: Support atomic clock enable/disable API 2022-02-21 10:37:00 +00:00
clk-scpi.c
clk-si514.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
clk-si544.c clk: si544: use i2c_match_id and simple i2c probe 2022-04-22 19:28:08 -07:00
clk-si570.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
clk-si5341.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
clk-si5351.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
clk-si5351.h clk: si5351: Update datasheet references 2021-11-02 14:29:17 -07:00
clk-sparx5.c
clk-stm32f4.c clk: stm32: Fix ltdc's clock turn off by clk_disable_unused() after system enter shell 2021-12-15 22:45:48 -08:00
clk-stm32h7.c clk: stm32h7: Switch to clk_divider.determine_rate 2021-08-05 17:36:10 -07:00
clk-stm32mp1.c clk: stm32mp1: Staticize ethrx_src 2022-10-27 17:01:16 -07:00
clk-tps68470.c platform/x86: int3472: Support multiple clock consumers 2022-09-24 19:12:32 +02:00
clk-twl6040.c
clk-versaclock5.c clk: Remove a useless include 2022-11-22 17:52:07 -08:00
clk-versaclock7.c Here's the main clk pull request for this merge window. We have some 2022-10-08 10:06:48 -07:00
clk-vt8500.c
clk-wm831x.c
clk-xgene.c clk: clk-xgene: simplify if-if to if-else 2022-10-03 14:13:29 -07:00
clk.c Merge branches 'clk-mediatek', 'clk-trace', 'clk-qcom' and 'clk-microchip' into clk-next 2022-12-12 11:13:28 -08:00
clk.h
clkdev.c clkdev: Simplify devm_clk_hw_register_clkdev() function 2022-09-30 14:50:11 -07:00
Kconfig Merge branches 'clk-baikal', 'clk-broadcom', 'clk-vc5' and 'clk-versaclock' into clk-next 2022-10-04 10:54:34 -07:00
Makefile clk: Renesas versaclock7 ccf device driver 2022-09-30 17:34:35 -07:00