arch/arm/mach-omap1/clock.c | 19 +++++++++++++------ arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 12 +++++++----- arch/arm/mach-versatile/spc.c | 9 +++++---- 3 files changed, 25 insertions(+), 15 deletions(-)
The round_rate() clk ops is deprecated in the clk framework in favor of the determine_rate() clk ops, so let's go ahead and convert the drivers in the arm32 subsystem using the Coccinelle semantic patch posted below. I did a few minor cosmetic cleanups of the code in a few cases. 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 (3): ARM: OMAP1: clock: convert from round_rate() to determine_rate() ARM: OMAP2+: clock: convert from round_rate() to determine_rate() ARM: versatile: clock: convert from round_rate() to determine_rate() arch/arm/mach-omap1/clock.c | 19 +++++++++++++------ arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 12 +++++++----- arch/arm/mach-versatile/spc.c | 9 +++++---- 3 files changed, 25 insertions(+), 15 deletions(-) --- base-commit: b551c4e2a98a177a06148cf16505643cd2108386 change-id: 20250710-arm32-clk-round-rate-e52d845e682c Best regards, -- Brian Masney <bmasney@redhat.com>
Hi all, On Thu, Jul 10, 2025 at 07:42:15PM -0400, Brian Masney wrote: > The round_rate() clk ops is deprecated in the clk framework in favor > of the determine_rate() clk ops, so let's go ahead and convert the > drivers in the arm32 subsystem using the Coccinelle semantic patch > posted below. I did a few minor cosmetic cleanups of the code in a > few cases. Would it be possible to get this picked up for v6.18? I'd like to remove this API from drivers/clk in v6.19. Thanks, Brian
On Thu, 10 Jul 2025 19:42:15 -0400, Brian Masney wrote: > The round_rate() clk ops is deprecated in the clk framework in favor > of the determine_rate() clk ops, so let's go ahead and convert the > drivers in the arm32 subsystem using the Coccinelle semantic patch > posted below. I did a few minor cosmetic cleanups of the code in a > few cases. > > Coccinelle semantic patch: > > [...] Applied, thanks! [1/3] ARM: OMAP1: clock: convert from round_rate() to determine_rate() commit: e2c0510935c5485a2dacfd13af3958536b9d138b [2/3] ARM: OMAP2+: clock: convert from round_rate() to determine_rate() commit: bb676996ed583464504123721195e98a708fbba9 Best regards, -- Kevin Hilman <khilman@baylibre.com>
Kevin Hilman <khilman@baylibre.com> writes: > On Thu, 10 Jul 2025 19:42:15 -0400, Brian Masney wrote: >> The round_rate() clk ops is deprecated in the clk framework in favor >> of the determine_rate() clk ops, so let's go ahead and convert the >> drivers in the arm32 subsystem using the Coccinelle semantic patch >> posted below. I did a few minor cosmetic cleanups of the code in a >> few cases. >> >> Coccinelle semantic patch: >> >> [...] > > Applied, thanks! > > [1/3] ARM: OMAP1: clock: convert from round_rate() to determine_rate() > commit: e2c0510935c5485a2dacfd13af3958536b9d138b > [2/3] ARM: OMAP2+: clock: convert from round_rate() to determine_rate() > commit: bb676996ed583464504123721195e98a708fbba9 I only toook the OMAP patches, Linus W. should take the mach-versatile one as he's the maintainer for that platform. Kevin
© 2016 - 2025 Red Hat, Inc.