[PATCH v3 0/2] Fix clk_divider_bestdiv() to get max clk rate supported and add some kunit test suites
From: Prabhakar
Date: Tue Apr 21 2026 - 14:29:43 EST
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Hi all,
This patch series includes two patches. The first patch fixes the
clk_divider_bestdiv() function in clk-divider driver to return the
maximum clock rate supported by the divider when the requested rate
is larger than the parent clock rate. The second patch adds some
kunit test suites for clk-divider driver to verify the fix.
v2->v3:
- Added Rb tag
- Swapped the order of the patches
- Added the expected value in the fixup patch
v1->v2:
- Updated the patch#1 fixing review comments from Sashiko
- Added a new patch#2 to add some kunit test suites for clk-divider driver
# case 1: Without the fix
-------------------------
root@rzn2h-evk:~# modprobe clk-divider_test;modprobe -r clk-divider_test
[ 28.584792] KTAP version 1
[ 28.591070] 1..1
[ 28.595258] KTAP version 1
[ 28.602327] # Subtest: clk_divider_bestdiv
[ 28.612609] # module: clk_divider_test
[ 28.612618] 1..2
[ 28.627986] ok 1 clk_divider_bestdiv_ulong_max_returns_max_rate
[ 28.628793] ok 2 clk_divider_bestdiv_mux_ulong_max_returns_max_rate
[ 28.643341] # clk_divider_bestdiv: pass:2 fail:0 skip:0 total:2
[ 28.658389] # Totals: pass:2 fail:0 skip:0 total:2
[ 28.672085] ok 1 clk_divider_bestdiv
# case 2: With the fix and no changes to Kunit test case
--------------------------------------------------------
root@rzn2h-evk:~# modprobe clk-divider_test;modprobe -r clk-divider_test
[ 43.105680] KTAP version 1
[ 43.108854] 1..1
[ 43.110998] KTAP version 1
[ 43.114449] # Subtest: clk_divider_bestdiv
[ 43.119601] # module: clk_divider_test
[ 43.119609] 1..2
[ 43.127192] # clk_divider_bestdiv_ulong_max_returns_max_rate: EXPECTATION FAILED at drivers/clk/clk-divider_test.c:71
[ 43.127192] Expected rate == 1000000000UL / 8, but
[ 43.127192] rate == 500000000 (0x1dcd6500)
[ 43.127192] 1000000000UL / 8 == 125000000 (0x7735940)
[ 43.127578] not ok 1 clk_divider_bestdiv_ulong_max_returns_max_rate
[ 43.158547] # clk_divider_bestdiv_mux_ulong_max_returns_max_rate: EXPECTATION FAILED at drivers/clk/clk-divider_test.c:141
[ 43.158547] Expected rate == 0, but
[ 43.158547] rate == 2000000000 (0x77359400)
[ 43.189942] not ok 2 clk_divider_bestdiv_mux_ulong_max_returns_max_rate
[ 43.189953] # clk_divider_bestdiv: pass:0 fail:2 skip:0 total:2
[ 43.197828] # Totals: pass:0 fail:2 skip:0 total:2
[ 43.204592] not ok 1 clk_divider_bestdiv
root@rzn2h-evk:~#
# Case 3: With the fixes to core and Kunit test case
----------------------------------------------------
root@rzn2h-evk:~# modprobe clk-divider_test;modprobe -r clk-divider_test
[ 21.006247] KTAP version 1
[ 21.009423] 1..1
[ 21.011565] KTAP version 1
[ 21.015135] # Subtest: clk_divider_bestdiv
[ 21.020189] # module: clk_divider_test
[ 21.020197] 1..2
[ 21.028241] ok 1 clk_divider_bestdiv_ulong_max_returns_max_rate
[ 21.029020] ok 2 clk_divider_bestdiv_mux_ulong_max_returns_max_rate
[ 21.036313] # clk_divider_bestdiv: pass:2 fail:0 skip:0 total:2
[ 21.043976] # Totals: pass:2 fail:0 skip:0 total:2
[ 21.050732] ok 1 clk_divider_bestdiv
Cheers,
Prabhakar
Lad Prabhakar (2):
clk: divider: Add KUnit tests for clk_divider_bestdiv() ULONG_MAX
handling
clk: divider: Fix clk_divider_bestdiv() returning min rate for large
rate requests
drivers/clk/Kconfig | 8 ++
drivers/clk/Makefile | 1 +
drivers/clk/clk-divider.c | 25 ++++--
drivers/clk/clk-divider_test.c | 158 +++++++++++++++++++++++++++++++++
4 files changed, 184 insertions(+), 8 deletions(-)
create mode 100644 drivers/clk/clk-divider_test.c
--
2.53.0