aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTero Kristo2014-09-01 04:37:42 -0500
committerLokesh Vutla2014-09-01 06:51:13 -0500
commit02a7eb06458090cc0104abd306891d05f2e49b59 (patch)
tree32e6aadd9eea99726a2b20b2d34eb858aa87c637
parente80e55ebbf2856614f48dc060713b37dbc468ecc (diff)
downloadkernel-video-02a7eb06458090cc0104abd306891d05f2e49b59.tar.gz
kernel-video-02a7eb06458090cc0104abd306891d05f2e49b59.tar.xz
kernel-video-02a7eb06458090cc0104abd306891d05f2e49b59.zip
clk: ti: fix clk_init retry logic with generic of_clk_init use
Adding support for using generic of_clk_init caused an issue with retrying clock init, in such way that retry init was never attempted for failed clocks. Fixed by exporting the retry init call into its own driver API, and calling this after of_clk_init from low level IO init. Fixes: e80e55ebbf2856614 ("clk: ti: change clock init to use generic of_clk_init") Reported-by: Carlos Hernandez <ceh@ti.com> Signed-off-by: Tero Kristo <t-kristo@ti.com> Tested-by: Sekhar Nori <nsekhar@ti.com>
-rw-r--r--arch/arm/mach-omap2/io.c2
-rw-r--r--drivers/clk/ti/clk.c22
-rw-r--r--include/linux/clk/ti.h1
3 files changed, 18 insertions, 7 deletions
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index 70fabad68f6..0e0d425492e 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -736,6 +736,8 @@ int __init omap_clk_init(void)
736 736
737 of_clk_init(NULL); 737 of_clk_init(NULL);
738 738
739 ti_dt_clk_init_retry();
740
739 ti_dt_clockdomains_setup(); 741 ti_dt_clockdomains_setup();
740 742
741 ret = omap_clk_soc_init(); 743 ret = omap_clk_soc_init();
diff --git a/drivers/clk/ti/clk.c b/drivers/clk/ti/clk.c
index f7201d06e5f..94e78936d95 100644
--- a/drivers/clk/ti/clk.c
+++ b/drivers/clk/ti/clk.c
@@ -146,8 +146,6 @@ void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index)
146void ti_dt_clk_init_provider(struct device_node *parent, int index) 146void ti_dt_clk_init_provider(struct device_node *parent, int index)
147{ 147{
148 struct device_node *clocks; 148 struct device_node *clocks;
149 struct clk_init_item *retry;
150 struct clk_init_item *tmp;
151 149
152 /* get clocks for this parent */ 150 /* get clocks for this parent */
153 clocks = of_get_child_by_name(parent, "clocks"); 151 clocks = of_get_child_by_name(parent, "clocks");
@@ -158,11 +156,21 @@ void ti_dt_clk_init_provider(struct device_node *parent, int index)
158 156
159 /* add clocks node info */ 157 /* add clocks node info */
160 clocks_node_ptr[index] = clocks; 158 clocks_node_ptr[index] = clocks;
159}
161 160
162 list_for_each_entry_safe(retry, tmp, &retry_list, link) { 161void ti_dt_clk_init_retry(void)
163 pr_debug("retry-init: %s\n", retry->node->name); 162{
164 retry->func(retry->hw, retry->node); 163 struct clk_init_item *retry;
165 list_del(&retry->link); 164 struct clk_init_item *tmp;
166 kfree(retry); 165 int retries = 5;
166
167 while (!list_empty(&retry_list) && retries) {
168 list_for_each_entry_safe(retry, tmp, &retry_list, link) {
169 pr_debug("retry-init: %s\n", retry->node->name);
170 retry->func(retry->hw, retry->node);
171 list_del(&retry->link);
172 kfree(retry);
173 }
174 retries--;
167 } 175 }
168} 176}
diff --git a/include/linux/clk/ti.h b/include/linux/clk/ti.h
index e8d8a35034a..6001135c1ff 100644
--- a/include/linux/clk/ti.h
+++ b/include/linux/clk/ti.h
@@ -292,6 +292,7 @@ void omap2xxx_clkt_vps_init(void);
292void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index); 292void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index);
293void ti_dt_clocks_register(struct ti_dt_clk *oclks); 293void ti_dt_clocks_register(struct ti_dt_clk *oclks);
294void ti_dt_clk_init_provider(struct device_node *np, int index); 294void ti_dt_clk_init_provider(struct device_node *np, int index);
295void ti_dt_clk_init_retry(void);
295void ti_dt_clockdomains_setup(void); 296void ti_dt_clockdomains_setup(void);
296int ti_clk_retry_init(struct device_node *node, struct clk_hw *hw, 297int ti_clk_retry_init(struct device_node *node, struct clk_hw *hw,
297 ti_of_clk_init_cb_t func); 298 ti_of_clk_init_cb_t func);