Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: bcm: iproc: Migrate to clk_hw based registration and OF APIs

Now that we have clk_hw based provider APIs to register clks, we
can get rid of struct clk pointers while registering clks in
these drivers, allowing us to move closer to a clear split of
consumer and provider clk APIs.

Cc: Jon Mason <jonmason@broadcom.com>
Cc: Simran Rai <ssimran@broadcom.com>
Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
Tested-by: Ray Jui <rjui@broadcom.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

authored by

Stephen Boyd and committed by
Stephen Boyd
ff02c6c0 fb2cd7d0

+33 -35
+4 -5
drivers/clk/bcm/clk-iproc-armpll.c
··· 244 244 void __init iproc_armpll_setup(struct device_node *node) 245 245 { 246 246 int ret; 247 - struct clk *clk; 248 247 struct iproc_arm_pll *pll; 249 248 struct clk_init_data init; 250 249 const char *parent_name; ··· 264 265 init.num_parents = (parent_name ? 1 : 0); 265 266 pll->hw.init = &init; 266 267 267 - clk = clk_register(NULL, &pll->hw); 268 - if (WARN_ON(IS_ERR(clk))) 268 + ret = clk_hw_register(NULL, &pll->hw); 269 + if (WARN_ON(ret)) 269 270 goto err_iounmap; 270 271 271 - ret = of_clk_add_provider(node, of_clk_src_simple_get, clk); 272 + ret = of_clk_add_hw_provider(node, of_clk_hw_simple_get, &pll->hw); 272 273 if (WARN_ON(ret)) 273 274 goto err_clk_unregister; 274 275 275 276 return; 276 277 277 278 err_clk_unregister: 278 - clk_unregister(clk); 279 + clk_hw_unregister(&pll->hw); 279 280 err_iounmap: 280 281 iounmap(pll->base); 281 282 err_free_pll:
+13 -14
drivers/clk/bcm/clk-iproc-asiu.c
··· 37 37 void __iomem *div_base; 38 38 void __iomem *gate_base; 39 39 40 - struct clk_onecell_data clk_data; 40 + struct clk_hw_onecell_data *clk_data; 41 41 struct iproc_asiu_clk *clks; 42 42 }; 43 43 ··· 197 197 if (WARN_ON(!asiu)) 198 198 return; 199 199 200 - asiu->clk_data.clk_num = num_clks; 201 - asiu->clk_data.clks = kcalloc(num_clks, sizeof(*asiu->clk_data.clks), 202 - GFP_KERNEL); 203 - if (WARN_ON(!asiu->clk_data.clks)) 200 + asiu->clk_data = kzalloc(sizeof(*asiu->clk_data->hws) * num_clks + 201 + sizeof(*asiu->clk_data), GFP_KERNEL); 202 + if (WARN_ON(!asiu->clk_data)) 204 203 goto err_clks; 204 + asiu->clk_data->num = num_clks; 205 205 206 206 asiu->clks = kcalloc(num_clks, sizeof(*asiu->clks), GFP_KERNEL); 207 207 if (WARN_ON(!asiu->clks)) ··· 217 217 218 218 for (i = 0; i < num_clks; i++) { 219 219 struct clk_init_data init; 220 - struct clk *clk; 221 220 const char *parent_name; 222 221 struct iproc_asiu_clk *asiu_clk; 223 222 const char *clk_name; ··· 239 240 init.num_parents = (parent_name ? 1 : 0); 240 241 asiu_clk->hw.init = &init; 241 242 242 - clk = clk_register(NULL, &asiu_clk->hw); 243 - if (WARN_ON(IS_ERR(clk))) 243 + ret = clk_hw_register(NULL, &asiu_clk->hw); 244 + if (WARN_ON(ret)) 244 245 goto err_clk_register; 245 - asiu->clk_data.clks[i] = clk; 246 + asiu->clk_data->hws[i] = &asiu_clk->hw; 246 247 } 247 248 248 - ret = of_clk_add_provider(node, of_clk_src_onecell_get, 249 - &asiu->clk_data); 249 + ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, 250 + asiu->clk_data); 250 251 if (WARN_ON(ret)) 251 252 goto err_clk_register; 252 253 253 254 return; 254 255 255 256 err_clk_register: 256 - for (i = 0; i < num_clks; i++) 257 - clk_unregister(asiu->clk_data.clks[i]); 257 + while (--i >= 0) 258 + clk_hw_unregister(asiu->clk_data->hws[i]); 258 259 iounmap(asiu->gate_base); 259 260 260 261 err_iomap_gate: ··· 264 265 kfree(asiu->clks); 265 266 266 267 err_asiu_clks: 267 - kfree(asiu->clk_data.clks); 268 + kfree(asiu->clk_data); 268 269 269 270 err_clks: 270 271 kfree(asiu);
+16 -16
drivers/clk/bcm/clk-iproc-pll.c
··· 89 89 const struct iproc_pll_vco_param *vco_param; 90 90 unsigned int num_vco_entries; 91 91 92 - struct clk_onecell_data clk_data; 92 + struct clk_hw_onecell_data *clk_data; 93 93 struct iproc_clk *clks; 94 94 }; 95 95 ··· 625 625 unsigned int num_clks) 626 626 { 627 627 int i, ret; 628 - struct clk *clk; 629 628 struct iproc_pll *pll; 630 629 struct iproc_clk *iclk; 631 630 struct clk_init_data init; ··· 637 638 if (WARN_ON(!pll)) 638 639 return; 639 640 640 - pll->clk_data.clk_num = num_clks; 641 - pll->clk_data.clks = kcalloc(num_clks, sizeof(*pll->clk_data.clks), 642 - GFP_KERNEL); 643 - if (WARN_ON(!pll->clk_data.clks)) 641 + pll->clk_data = kzalloc(sizeof(*pll->clk_data->hws) * num_clks + 642 + sizeof(*pll->clk_data), GFP_KERNEL); 643 + if (WARN_ON(!pll->clk_data)) 644 644 goto err_clk_data; 645 + pll->clk_data->num = num_clks; 645 646 646 647 pll->clks = kcalloc(num_clks, sizeof(*pll->clks), GFP_KERNEL); 647 648 if (WARN_ON(!pll->clks)) ··· 693 694 694 695 iproc_pll_sw_cfg(pll); 695 696 696 - clk = clk_register(NULL, &iclk->hw); 697 - if (WARN_ON(IS_ERR(clk))) 697 + ret = clk_hw_register(NULL, &iclk->hw); 698 + if (WARN_ON(ret)) 698 699 goto err_pll_register; 699 700 700 - pll->clk_data.clks[0] = clk; 701 + pll->clk_data->hws[0] = &iclk->hw; 701 702 702 703 /* now initialize and register all leaf clocks */ 703 704 for (i = 1; i < num_clks; i++) { ··· 723 724 init.num_parents = (parent_name ? 1 : 0); 724 725 iclk->hw.init = &init; 725 726 726 - clk = clk_register(NULL, &iclk->hw); 727 - if (WARN_ON(IS_ERR(clk))) 727 + ret = clk_hw_register(NULL, &iclk->hw); 728 + if (WARN_ON(ret)) 728 729 goto err_clk_register; 729 730 730 - pll->clk_data.clks[i] = clk; 731 + pll->clk_data->hws[i] = &iclk->hw; 731 732 } 732 733 733 - ret = of_clk_add_provider(node, of_clk_src_onecell_get, &pll->clk_data); 734 + ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, 735 + pll->clk_data); 734 736 if (WARN_ON(ret)) 735 737 goto err_clk_register; 736 738 737 739 return; 738 740 739 741 err_clk_register: 740 - for (i = 0; i < num_clks; i++) 741 - clk_unregister(pll->clk_data.clks[i]); 742 + while (--i >= 0) 743 + clk_hw_unregister(pll->clk_data->hws[i]); 742 744 743 745 err_pll_register: 744 746 if (pll->status_base != pll->control_base) ··· 759 759 kfree(pll->clks); 760 760 761 761 err_clks: 762 - kfree(pll->clk_data.clks); 762 + kfree(pll->clk_data); 763 763 764 764 err_clk_data: 765 765 kfree(pll);