* [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure
@ 2014-06-07 16:09 Alexander Shiyan
2014-06-07 16:09 ` [PATCH 2/2] ARM: i.MX27 clk: Use of_clk_init() for DT case Alexander Shiyan
2014-06-09 3:15 ` [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure Shawn Guo
0 siblings, 2 replies; 3+ messages in thread
From: Alexander Shiyan @ 2014-06-07 16:09 UTC (permalink / raw)
To: linux-arm-kernel
This patch separates DT and non-DT clock initialization procedure,
so we can avoid a lot of unneeded clk_register_clkdev() for DT case.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-imx/clk-imx27.c | 39 ++++++++++++++++++++++++---------------
1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c
index 317a662..f5a6a3f 100644
--- a/arch/arm/mach-imx/clk-imx27.c
+++ b/arch/arm/mach-imx/clk-imx27.c
@@ -89,10 +89,9 @@ enum mx27_clks {
static struct clk *clk[clk_max];
static struct clk_onecell_data clk_data;
-int __init mx27_clocks_init(unsigned long fref)
+static void __init _mx27_clocks_init(unsigned long fref)
{
- int i;
- struct device_node *np;
+ unsigned i;
clk[dummy] = imx_clk_fixed("dummy", 0);
clk[ckih] = imx_clk_fixed("ckih", fref);
@@ -206,12 +205,16 @@ int __init mx27_clocks_init(unsigned long fref)
pr_err("i.MX27 clk %d: register failed with %ld\n",
i, PTR_ERR(clk[i]));
- np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm");
- if (np) {
- clk_data.clks = clk;
- clk_data.clk_num = ARRAY_SIZE(clk);
- of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
- }
+ clk_register_clkdev(clk[cpu_div], NULL, "cpu0");
+
+ clk_prepare_enable(clk[emi_ahb_gate]);
+
+ imx_print_silicon_rev("i.MX27", mx27_revision());
+}
+
+int __init mx27_clocks_init(unsigned long fref)
+{
+ _mx27_clocks_init(fref);
clk_register_clkdev(clk[uart1_ipg_gate], "ipg", "imx21-uart.0");
clk_register_clkdev(clk[per1_gate], "per", "imx21-uart.0");
@@ -274,14 +277,9 @@ int __init mx27_clocks_init(unsigned long fref)
clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "imx27-camera.0");
clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0");
clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0");
- clk_register_clkdev(clk[cpu_div], NULL, "cpu0");
mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1);
- clk_prepare_enable(clk[emi_ahb_gate]);
-
- imx_print_silicon_rev("i.MX27", mx27_revision());
-
return 0;
}
@@ -298,5 +296,16 @@ int __init mx27_clocks_init_dt(void)
break;
}
- return mx27_clocks_init(fref);
+ _mx27_clocks_init(fref);
+
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm");
+ BUG_ON(!np);
+
+ clk_data.clks = clk;
+ clk_data.clk_num = ARRAY_SIZE(clk);
+ of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+
+ mxc_timer_init_dt(of_find_compatible_node(NULL, NULL, "fsl,imx1-gpt"));
+
+ return 0;
}
--
1.8.5.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] ARM: i.MX27 clk: Use of_clk_init() for DT case
2014-06-07 16:09 [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure Alexander Shiyan
@ 2014-06-07 16:09 ` Alexander Shiyan
2014-06-09 3:15 ` [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure Shawn Guo
1 sibling, 0 replies; 3+ messages in thread
From: Alexander Shiyan @ 2014-06-07 16:09 UTC (permalink / raw)
To: linux-arm-kernel
Replace .init_time() hook with of_clk_init() for DT targets.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-imx/clk-imx27.c | 57 ++++++++++++++++++++++---------------------
arch/arm/mach-imx/common.h | 1 -
arch/arm/mach-imx/imx27-dt.c | 6 -----
3 files changed, 29 insertions(+), 35 deletions(-)
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c
index f5a6a3f..8c55797 100644
--- a/arch/arm/mach-imx/clk-imx27.c
+++ b/arch/arm/mach-imx/clk-imx27.c
@@ -1,32 +1,31 @@
#include <linux/clk.h>
-#include <linux/io.h>
-#include <linux/module.h>
+#include <linux/clk-provider.h>
#include <linux/clkdev.h>
#include <linux/err.h>
-#include <linux/clk-provider.h>
#include <linux/of.h>
+#include <linux/of_address.h>
#include "clk.h"
#include "common.h"
#include "hardware.h"
-#define IO_ADDR_CCM(off) (MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off)))
+static void __iomem *ccm __initdata;
/* Register offsets */
-#define CCM_CSCR IO_ADDR_CCM(0x0)
-#define CCM_MPCTL0 IO_ADDR_CCM(0x4)
-#define CCM_MPCTL1 IO_ADDR_CCM(0x8)
-#define CCM_SPCTL0 IO_ADDR_CCM(0xc)
-#define CCM_SPCTL1 IO_ADDR_CCM(0x10)
-#define CCM_OSC26MCTL IO_ADDR_CCM(0x14)
-#define CCM_PCDR0 IO_ADDR_CCM(0x18)
-#define CCM_PCDR1 IO_ADDR_CCM(0x1c)
-#define CCM_PCCR0 IO_ADDR_CCM(0x20)
-#define CCM_PCCR1 IO_ADDR_CCM(0x24)
-#define CCM_CCSR IO_ADDR_CCM(0x28)
-#define CCM_PMCTL IO_ADDR_CCM(0x2c)
-#define CCM_PMCOUNT IO_ADDR_CCM(0x30)
-#define CCM_WKGDCTL IO_ADDR_CCM(0x34)
+#define CCM_CSCR (ccm + 0x00)
+#define CCM_MPCTL0 (ccm + 0x04)
+#define CCM_MPCTL1 (ccm + 0x08)
+#define CCM_SPCTL0 (ccm + 0x0c)
+#define CCM_SPCTL1 (ccm + 0x10)
+#define CCM_OSC26MCTL (ccm + 0x14)
+#define CCM_PCDR0 (ccm + 0x18)
+#define CCM_PCDR1 (ccm + 0x1c)
+#define CCM_PCCR0 (ccm + 0x20)
+#define CCM_PCCR1 (ccm + 0x24)
+#define CCM_CCSR (ccm + 0x28)
+#define CCM_PMCTL (ccm + 0x2c)
+#define CCM_PMCOUNT (ccm + 0x30)
+#define CCM_WKGDCTL (ccm + 0x34)
#define CCM_CSCR_UPDATE_DIS (1 << 31)
#define CCM_CSCR_SSI2 (1 << 23)
@@ -93,6 +92,8 @@ static void __init _mx27_clocks_init(unsigned long fref)
{
unsigned i;
+ BUG_ON(!ccm);
+
clk[dummy] = imx_clk_fixed("dummy", 0);
clk[ckih] = imx_clk_fixed("ckih", fref);
clk[ckil] = imx_clk_fixed("ckil", 32768);
@@ -214,6 +215,8 @@ static void __init _mx27_clocks_init(unsigned long fref)
int __init mx27_clocks_init(unsigned long fref)
{
+ ccm = ioremap(MX27_CCM_BASE_ADDR, SZ_4K);
+
_mx27_clocks_init(fref);
clk_register_clkdev(clk[uart1_ipg_gate], "ipg", "imx21-uart.0");
@@ -283,29 +286,27 @@ int __init mx27_clocks_init(unsigned long fref)
return 0;
}
-int __init mx27_clocks_init_dt(void)
+static void __init mx27_clocks_init_dt(struct device_node *np)
{
- struct device_node *np;
+ struct device_node *refnp;
u32 fref = 26000000; /* default */
- for_each_compatible_node(np, NULL, "fixed-clock") {
- if (!of_device_is_compatible(np, "fsl,imx-osc26m"))
+ for_each_compatible_node(refnp, NULL, "fixed-clock") {
+ if (!of_device_is_compatible(refnp, "fsl,imx-osc26m"))
continue;
- if (!of_property_read_u32(np, "clock-frequency", &fref))
+ if (!of_property_read_u32(refnp, "clock-frequency", &fref))
break;
}
- _mx27_clocks_init(fref);
+ ccm = of_iomap(np, 0);
- np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm");
- BUG_ON(!np);
+ _mx27_clocks_init(fref);
clk_data.clks = clk;
clk_data.clk_num = ARRAY_SIZE(clk);
of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
mxc_timer_init_dt(of_find_compatible_node(NULL, NULL, "fsl,imx1-gpt"));
-
- return 0;
}
+CLK_OF_DECLARE(imx27_ccm, "fsl,imx27-ccm", mx27_clocks_init_dt);
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index 5aaea2b..7668ff5 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -56,7 +56,6 @@ int mx27_clocks_init(unsigned long fref);
int mx31_clocks_init(unsigned long fref);
int mx35_clocks_init(void);
int mx25_clocks_init_dt(void);
-int mx27_clocks_init_dt(void);
int mx31_clocks_init_dt(void);
struct platform_device *mxc_register_gpio(char *name, int id,
resource_size_t iobase, resource_size_t iosize, int irq, int irq_high);
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c
index 17bd405..080e66c 100644
--- a/arch/arm/mach-imx/imx27-dt.c
+++ b/arch/arm/mach-imx/imx27-dt.c
@@ -34,16 +34,10 @@ static const char * const imx27_dt_board_compat[] __initconst = {
NULL
};
-static void __init imx27_timer_init(void)
-{
- mx27_clocks_init_dt();
-}
-
DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)")
.map_io = mx27_map_io,
.init_early = imx27_init_early,
.init_irq = mx27_init_irq,
- .init_time = imx27_timer_init,
.init_machine = imx27_dt_init,
.dt_compat = imx27_dt_board_compat,
.restart = mxc_restart,
--
1.8.5.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure
2014-06-07 16:09 [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure Alexander Shiyan
2014-06-07 16:09 ` [PATCH 2/2] ARM: i.MX27 clk: Use of_clk_init() for DT case Alexander Shiyan
@ 2014-06-09 3:15 ` Shawn Guo
1 sibling, 0 replies; 3+ messages in thread
From: Shawn Guo @ 2014-06-09 3:15 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Jun 07, 2014 at 08:09:25PM +0400, Alexander Shiyan wrote:
> This patch separates DT and non-DT clock initialization procedure,
> so we can avoid a lot of unneeded clk_register_clkdev() for DT case.
>
> Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Applied both, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-06-09 3:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-07 16:09 [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure Alexander Shiyan
2014-06-07 16:09 ` [PATCH 2/2] ARM: i.MX27 clk: Use of_clk_init() for DT case Alexander Shiyan
2014-06-09 3:15 ` [PATCH 1/2] ARM: i.MX27 clk: Separate DT and non-DT init procedure Shawn Guo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).