clk: ti: change clock init to use generic of_clk_init
Subsystems (6)
PATCH 1/1 clk: ti: change clock init to use generic of_clk_init
Previously, the TI clock driver initialized all the clocks hierarchically under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range to use.
This patch allows the TI clock driver to use a few new features provided by the generic of_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)
--- arch/arm/mach-omap2/io.c | 10 ++++++++-- arch/arm/mach-omap2/prm_common.c | 2 -- drivers/clk/ti/clk.c | 31 ++++++++++++++++--------------- 3 files changed, 24 insertions(+), 19 deletions(-)
arch/arm/mach-omap2/io.c +8 -2
@@ -734,8 +734,14 @@ int __init omap_clk_init(void)ti_clk_init_features (); ret =of_prcm_init (); -if (!ret) - ret =omap_clk_soc_init (); +if (ret) +return ret; + +of_clk_init (NULL ); + +ti_dt_clockdomains_setup (); + + ret =omap_clk_soc_init ();return ret; }
arch/arm/mach-omap2/prm_common.c +0 -2
@@ -525,8 +525,6 @@ int __init of_prcm_init(void) memmap_index++; } -ti_dt_clockdomains_setup (); -return 0 ; }
drivers/clk/ti/clk.c +16 -15
@@ -25,8 +25,8 @@#undef pr_fmt#define pr_fmt (fmt) "%s: " fmt, __func__ -static int ti_dt_clk_memmap_index;struct ti_clk_ll_ops *ti_clk_ll_ops; +static struct device_node *clocks_node_ptr[CLK_MAX_MEMMAPS ];/** * ti_dt_clocks_register - register DT alias clocks during boot
@@ -108,9 +108,21 @@ void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index)struct clk_omap_reg *reg;u32 val;u32 tmp; +int i; reg = (struct clk_omap_reg *)&tmp; - reg->index = ti_dt_clk_memmap_index; + +for (i =0 ; i <CLK_MAX_MEMMAPS ; i++) { +if (clocks_node_ptr[i] == node->parent) +break ; + } + +if (i ==CLK_MAX_MEMMAPS ) { +pr_err ("clk-provider not found for %s!\n" , node->name); +return NULL ; + } + + reg->index = i;if (of_property_read_u32_index (node,"reg" , index, &val)) {pr_err ("%s must have reg[%d]!\n" , node->name, index);
@@ -133,15 +145,10 @@ void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index)*/ void ti_dt_clk_init_provider (struct device_node *parent,int index) { -const struct of_device_id *match; -struct device_node *np;struct device_node *clocks; -of_clk_init_cb_t clk_init_cb;struct clk_init_item *retry;struct clk_init_item *tmp; - ti_dt_clk_memmap_index = index; -/* get clocks for this parent */ clocks =of_get_child_by_name (parent,"clocks" );if (!clocks) {
@@ -149,14 +156,8 @@ void ti_dt_clk_init_provider(struct device_node *parent, int index)return ; } -for_each_child_of_node (clocks, np) { - match =of_match_node (&__clk_of_table, np); -if (!match) -continue ; - clk_init_cb = (of_clk_init_cb_t )match->data; -pr_debug ("%s: initializing: %s\n" , __func__, np->name); -clk_init_cb (np); - } +/* add clocks node info */ + clocks_node_ptr[index] = clocks;list_for_each_entry_safe (retry, tmp, &retry_list, link) {pr_debug ("retry-init: %s\n" , retry->node->name);
Signature · 1 line
1.7.9.5
PATCH 1/1 clk: ti: change clock init to use generic of_clk_init
Quoted 9 lines · Tero Kristo
Previously, the TI clock driver initialized all the clocks hierarchically under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range to use.
This patch allows the TI clock driver to use a few new features provided by the generic
of_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)
Quoted 8 lines
Signed-off-by Tero Kristo <[email protected]>Cc Mike Turquette <[email protected]>Cc Paul Walmsley <[email protected]>Cc Tony Lindgren <[email protected]>Cc Mark Rutland <[email protected]>Cc Peter Ujfalusi <[email protected]>Cc Jyri Sarha <[email protected]>Cc Stefan Assmann <[email protected]>
Tony Lindgren
maintainerPATCH 1/1 clk: ti: change clock init to use generic of_clk_init
In reply to Tero KristoQuoted 8 lines · Tero Kristo
Previously, the TI clock driver initialized all the clocks hierarchically under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range to use.
This patch allows the TI clock driver to use a few new features provided by the generic
of_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)
Paul, any comments on this one?
Regards,
Tony
Quoted 121 lines
Signed-off-by Tero Kristo <[email protected]>Cc Mike Turquette <[email protected]>Cc Paul Walmsley <[email protected]>Cc Tony Lindgren <[email protected]>Cc Mark Rutland <[email protected]>Cc Peter Ujfalusi <[email protected]>Cc Jyri Sarha <[email protected]>Cc Stefan Assmann <[email protected]>--- arch/arm/mach-omap2/io.c | 10 ++++++++-- arch/arm/mach-omap2/prm_common.c | 2 -- drivers/clk/ti/clk.c | 31 ++++++++++++++++--------------- 3 files changed, 24 insertions(+), 19 deletions(-)arch/arm/mach-omap2/io.c +8
-2@@ -734,8 +734,14 @@ int __init omap_clk_init(void)ti_clk_init_features (); ret =of_prcm_init (); -if (!ret) - ret =omap_clk_soc_init (); +if (ret) +return ret; + +of_clk_init (NULL ); + +ti_dt_clockdomains_setup (); + + ret =omap_clk_soc_init ();return ret; }arch/arm/mach-omap2/prm_common.c +0
-2@@ -525,8 +525,6 @@ int __init of_prcm_init(void) memmap_index++; } -ti_dt_clockdomains_setup (); -return 0 ; }drivers/clk/ti/clk.c +16
-15@@ -25,8 +25,8 @@#undef pr_fmt#define pr_fmt (fmt) "%s: " fmt, __func__ -static int ti_dt_clk_memmap_index;struct ti_clk_ll_ops *ti_clk_ll_ops; +static struct device_node *clocks_node_ptr[CLK_MAX_MEMMAPS ];/** * ti_dt_clocks_register - register DT alias clocks during boot @@ -108,9 +108,21 @@ void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index)struct clk_omap_reg *reg;u32 val;u32 tmp; +int i; reg = (struct clk_omap_reg *)&tmp; - reg->index = ti_dt_clk_memmap_index; + +for (i =0 ; i <CLK_MAX_MEMMAPS ; i++) { +if (clocks_node_ptr[i] == node->parent) +break ; + } + +if (i ==CLK_MAX_MEMMAPS ) { +pr_err ("clk-provider not found for %s!\n" , node->name); +return NULL ; + } + + reg->index = i;if (of_property_read_u32_index (node,"reg" , index, &val)) {pr_err ("%s must have reg[%d]!\n" , node->name, index);@@ -133,15 +145,10 @@ void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index)*/ void ti_dt_clk_init_provider (struct device_node *parent,int index) { -const struct of_device_id *match; -struct device_node *np;struct device_node *clocks; -of_clk_init_cb_t clk_init_cb;struct clk_init_item *retry;struct clk_init_item *tmp; - ti_dt_clk_memmap_index = index; -/* get clocks for this parent */ clocks =of_get_child_by_name (parent,"clocks" );if (!clocks) {@@ -149,14 +156,8 @@ void ti_dt_clk_init_provider(struct device_node *parent, int index)return ; } -for_each_child_of_node (clocks, np) { - match =of_match_node (&__clk_of_table, np); -if (!match) -continue ; - clk_init_cb = (of_clk_init_cb_t )match->data; -pr_debug ("%s: initializing: %s\n" , __func__, np->name); -clk_init_cb (np); - } +/* add clocks node info */ + clocks_node_ptr[index] = clocks;list_for_each_entry_safe (retry, tmp, &retry_list, link) {pr_debug ("retry-init: %s\n" , retry->node->name);Signature · 1 line
1.7.9.5
Paul Walmsley
maintainerPATCH 1/1 clk: ti: change clock init to use generic of_clk_init
Quoted 11 lines · Tony Lindgren
Quoted 8 lines · Tero Kristo
Previously, the TI clock driver initialized all the clocks hierarchically under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range to use.
This patch allows the TI clock driver to use a few new features provided by the generic
of_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)Paul, any comments on this one?
Not at this point.
- Paul
PATCH 1/1 clk: ti: change clock init to use generic of_clk_init
Quoted 8 lines · Paul Walmsley
Quoted 6 lines · Tony Lindgren
Quoted 5 lines · Tero Kristo
Previously, the TI clock driver initialized all the clocks hierarchically under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range to use.
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
This patch allows the TI clock driver to use a few new features provided by the generic
of_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)Paul, any comments on this one?
Not at this point.
Tony, ok to merge this through clock tree?
-Tero
PATCH 1/1 clk: ti: change clock init to use generic of_clk_init
Quoted 16 lines · Tero Kristo
Quoted 15 lines · Paul Walmsley
Quoted 13 lines · Tony Lindgren
Quoted 11 lines · Tero Kristo
Previously, the TI clock driver initialized all the clocks hierarchically
under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range
to use.This patch allows the TI clock driver to use a few new features provided
by the genericof_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
Paul, any comments on this one?
Not at this point.
Tony, ok to merge this through clock tree?
Oh btw, this is v1, I posted v2 a week back here:
http://article.gmane.org/gmane.linux.ports.arm.omap/118551
v2 has the retry init logic fixed in it (mainly for DPLLs which can have two separate parents which of both must be available during init.)
-Tero
Tony Lindgren
maintainerPATCH 1/1 clk: ti: change clock init to use generic of_clk_init
Quoted 21 lines · Tero Kristo
Quoted 20 lines · Tero Kristo
Quoted 18 lines · Paul Walmsley
Quoted 8 lines · Tony Lindgren
Quoted 7 lines · Tero Kristo
Previously, the TI clock driver initialized all the clocks hierarchically
under each separate clock provider node. Now, each clock that requires IO access will instead check their parent node to find out which IO range
to use.Quoted 6 lines
Quoted 4 lines
This patch allows the TI clock driver to use a few new features provided
by the genericof_clk_init, and also allows registration of clock nodes outside the clock hierarchy (for example, any external clocks.)Paul, any comments on this one?
Not at this point.
Quoted 8 lines
Quoted 1 line
Tony, ok to merge this through clock tree?
Oh btw, this is v1, I posted v2 a week back here:
http://article.gmane.org/gmane.linux.ports.arm.omap/118551
v2 has the retry init logic fixed in it (mainly for DPLLs which can have two separate parents which of both must be available during init.)
Oh OK. I acked that one so please feel free to merge it via the clock tree. It does not seem to confilict with anything I have queued up.
Regards,
Tony