drivers/clk/ti/clk-dra7-atl.c | 12 +++--- drivers/clk/ti/clkt_dpll.c | 36 ++++++++--------- drivers/clk/ti/clock.h | 6 +-- drivers/clk/ti/composite.c | 6 +-- drivers/clk/ti/divider.c | 12 +++--- drivers/clk/ti/dpll.c | 10 +---- drivers/clk/ti/dpll3xxx.c | 7 +++- drivers/clk/ti/dpll44xx.c | 89 +++++++++++++++---------------------------- drivers/clk/ti/fapll.c | 48 +++++++++++++---------- include/linux/clk/ti.h | 8 ++-- 10 files changed, 105 insertions(+), 129 deletions(-)
The round_rate() clk ops is deprecated in the clk framework in favor of the determine_rate() clk ops. The first two patches in this series drops the round_rate() function since a determine_rate() function is already implemented. The remaining patches convert the drivers using the Coccinelle semantic patch posted below. I did a few minor cosmetic cleanups of the code in a few cases. I want to call out the changes to the dpll driver since a fair number of changes had to be done outside of Coccinelle. I unfortunately don't have this particular hardware on hand, so I was not able to test it. I broke the changes to this driver up into smaller chunks to make it easier to review. Coccinelle semantic patch: virtual patch // Look up the current name of the round_rate function @ has_round_rate @ identifier round_rate_name =~ ".*_round_rate"; identifier hw_param, rate_param, parent_rate_param; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { ... } // Rename the route_rate function name to determine_rate() @ script:python generate_name depends on has_round_rate @ round_rate_name << has_round_rate.round_rate_name; new_name; @@ coccinelle.new_name = round_rate_name.replace("_round_rate", "_determine_rate") // Change rate to req->rate; also change occurrences of 'return XXX'. @ chg_rate depends on generate_name @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; identifier ERR =~ "E.*"; expression E; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { <... ( -return -ERR; +return -ERR; | - return rate_param; + return 0; | - return E; + req->rate = E; + + return 0; | - rate_param + req->rate ) ...> } // Coccinelle only transforms the first occurrence of the rate parameter // Run a second time. FIXME: Is there a better way to do this? @ chg_rate2 depends on generate_name @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { <... - rate_param + req->rate ...> } // Change parent_rate to req->best_parent_rate @ chg_parent_rate depends on generate_name @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { <... ( - *parent_rate_param + req->best_parent_rate | - parent_rate_param + &req->best_parent_rate ) ...> } // Convert the function definition from round_rate() to determine_rate() @ func_definition depends on chg_rate @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; identifier generate_name.new_name; @@ - long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, - unsigned long *parent_rate_param) + int new_name(struct clk_hw *hw, struct clk_rate_request *req) { ... } // Update the ops from round_rate() to determine_rate() @ ops depends on func_definition @ identifier has_round_rate.round_rate_name; identifier generate_name.new_name; @@ { ..., - .round_rate = round_rate_name, + .determine_rate = new_name, ..., } Note that I used coccinelle 1.2 instead of 1.3 since the newer version adds unnecessary braces as described in this post. https://lore.kernel.org/cocci/67642477-5f3e-4b2a-914d-579a54f48cbd@intel.com/ Signed-off-by: Brian Masney <bmasney@redhat.com> --- Brian Masney (7): clk: ti: dpll: remove round_rate() in favor of determine_rate() clk: ti: dpll: change error return from ~0 to -EINVAL clk: ti: dpll: convert from round_rate() to determine_rate() clk: ti: composite: convert from round_rate() to determine_rate() clk: ti: divider: convert from round_rate() to determine_rate() clk: ti: dra7-atl: convert from round_rate() to determine_rate() clk: ti: fapll: convert from round_rate() to determine_rate() drivers/clk/ti/clk-dra7-atl.c | 12 +++--- drivers/clk/ti/clkt_dpll.c | 36 ++++++++--------- drivers/clk/ti/clock.h | 6 +-- drivers/clk/ti/composite.c | 6 +-- drivers/clk/ti/divider.c | 12 +++--- drivers/clk/ti/dpll.c | 10 +---- drivers/clk/ti/dpll3xxx.c | 7 +++- drivers/clk/ti/dpll44xx.c | 89 +++++++++++++++---------------------------- drivers/clk/ti/fapll.c | 48 +++++++++++++---------- include/linux/clk/ti.h | 8 ++-- 10 files changed, 105 insertions(+), 129 deletions(-) --- base-commit: 8f5ae30d69d7543eee0d70083daf4de8fe15d585 change-id: 20250729-b4-clk-ti-round-rate-33eded8e61bb Best regards, -- Brian Masney <bmasney@redhat.com>
On Mon, Aug 11, 2025 at 08:48:05AM -0400, Brian Masney wrote: > The round_rate() clk ops is deprecated in the clk framework in favor > of the determine_rate() clk ops. The first two patches in this series > drops the round_rate() function since a determine_rate() function is > already implemented. The remaining patches convert the drivers using > the Coccinelle semantic patch posted below. I did a few minor cosmetic > cleanups of the code in a few cases. > > I want to call out the changes to the dpll driver since a fair number > of changes had to be done outside of Coccinelle. I unfortunately don't > have this particular hardware on hand, so I was not able to test it. > I broke the changes to this driver up into smaller chunks to make it > easier to review. I included this patch series in this PULL request to Stephen: https://lore.kernel.org/linux-clk/aL8MXYrR5uoBa4cB@x1/T/#u Brian
Am Mon, 11 Aug 2025 08:48:05 -0400 schrieb Brian Masney <bmasney@redhat.com>: > The round_rate() clk ops is deprecated in the clk framework in favor > of the determine_rate() clk ops. The first two patches in this series > drops the round_rate() function since a determine_rate() function is > already implemented. The remaining patches convert the drivers using > the Coccinelle semantic patch posted below. I did a few minor cosmetic > cleanups of the code in a few cases. > > I want to call out the changes to the dpll driver since a fair number > of changes had to be done outside of Coccinelle. I unfortunately don't > have this particular hardware on hand, so I was not able to test it. > I broke the changes to this driver up into smaller chunks to make it > easier to review. > Tested-by: Anddreas Kemnade <andreas@kemnade.info> # OMAP3 GTA04, OMAP4 Panda No new scary things seen on boot. Can someone check this on AM3, too? Regards, Andreas
Andreas Kemnade <andreas@kemnade.info> writes: > Am Mon, 11 Aug 2025 08:48:05 -0400 > schrieb Brian Masney <bmasney@redhat.com>: > >> The round_rate() clk ops is deprecated in the clk framework in favor >> of the determine_rate() clk ops. The first two patches in this series >> drops the round_rate() function since a determine_rate() function is >> already implemented. The remaining patches convert the drivers using >> the Coccinelle semantic patch posted below. I did a few minor cosmetic >> cleanups of the code in a few cases. >> >> I want to call out the changes to the dpll driver since a fair number >> of changes had to be done outside of Coccinelle. I unfortunately don't >> have this particular hardware on hand, so I was not able to test it. >> I broke the changes to this driver up into smaller chunks to make it >> easier to review. >> > Tested-by: Anddreas Kemnade <andreas@kemnade.info> # OMAP3 GTA04, OMAP4 Panda > > No new scary things seen on boot. Can someone check this on AM3, too? I gave this a basic boot test on am335x-boneblack. All is well. Reviewed-by: Kevin Hilman <khilman@baylibre.com> Tested-by: Kevin Hilman <khilman@baylibre.com> Kevin
© 2016 - 2025 Red Hat, Inc.