Hi Mike, Stephen,
As the .round_rate() callback returns a long clock rate, it cannot
return clock rates that do not fit in signed long, but do fit in
unsigned long. The newer .determine_rate() callback does not suffer
from this limitation. In addition, .determine_rate() provides the
ability to specify a rate range.
This patch series performs the customary preparatory cleanups, and
switches the Z (CPU) and SD clocks in the R-Car Gen2 and Gen3 clock
drivers from the .round_rate() to the .determine_rate() callback.
Note that the "div6" clock driver hasn't been converted yet, so div6
clocks still use .round_rate().
Changes compared to v1[1]:
- Add preparatory arithmetic division improvements
- Split off cpg_sd_clock_calc_div() absorption and SD clock best rate
calculation,
- Use div_u64() for division by unsigned long,
This has been tested on R-Car M2-W and various R-Car Gen3, and should
have no behavioral impact.
To be queued in clk-renesas-for-v5.5.
Thanks for your comments!
[1] [PATCH 0/5] clk: renesas: rcar-gen2/gen3: Switch to .determine_rate()
https://lore.kernel.org/linux-clk/[email protected]/
Geert Uytterhoeven (8):
clk: renesas: rcar-gen2: Improve arithmetic divisions
clk: renesas: rcar-gen3: Improve arithmetic divisions
clk: renesas: rcar-gen3: Avoid double table iteration in SD
.set_rate()
clk: renesas: rcar-gen3: Absorb cpg_sd_clock_calc_div()
clk: renesas: rcar-gen3: Loop to find best rate in
cpg_sd_clock_round_rate()
clk: renesas: rcar-gen2: Switch Z clock to .determine_rate()
clk: renesas: rcar-gen3: Switch Z clocks to .determine_rate()
clk: renesas: rcar-gen3: Switch SD clocks to .determine_rate()
drivers/clk/renesas/rcar-gen2-cpg.c | 25 ++++++-----
drivers/clk/renesas/rcar-gen3-cpg.c | 64 ++++++++++++++++-------------
2 files changed, 49 insertions(+), 40 deletions(-)
--
2.17.1
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds