diff options
author | 2022-12-14 13:37:04 +0100 | |
---|---|---|
committer | 2023-01-25 16:08:27 -0800 | |
commit | ecfb9f404771dde909ce7743df954370933c3be2 (patch) | |
tree | a9c09f1c62d40d622316d97e664621a7513b5384 /scripts/generate_rust_analyzer.py | |
parent | Merge tag 'clk-microchip-fixes-6.2' of https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux into clk-fixes (diff) | |
download | wireguard-linux-ecfb9f404771dde909ce7743df954370933c3be2.tar.xz wireguard-linux-ecfb9f404771dde909ce7743df954370933c3be2.zip |
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: bdbfc029374f ("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>
Diffstat (limited to 'scripts/generate_rust_analyzer.py')
0 files changed, 0 insertions, 0 deletions