* [PATCH 0/3] ARM: imx: make mxs_restart() work for DT boot
@ 2013-05-13 1:32 Shawn Guo
2013-05-13 1:32 ` [PATCH 1/3] ARM: imx: include <asm/io.h> in hardware.h Shawn Guo
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 1:32 UTC (permalink / raw)
To: linux-arm-kernel
The mxs_restart() currently only works for non-DT platforms. And per
Russell's comment, it's not going to work reliably, because the restart
routine could be called in atomic context while mxs_restart() is calling
clk_prepare() there.
The series fixes above potential problem by moving clk_prepare() into
initialization function mxc_arch_reset_init() and only keeping atomic
part clk_enable() in mxs_restart().
Then a DT variant initialization function imx_arch_reset_init() is
added, so that DT platforms can use mxs_restart() as well after invoking
the initialization function.
Shawn Guo (3):
ARM: imx: include <asm/io.h> in hardware.h
ARM: imx: move clk_prepare() out from mxs_restart()
ARM: imx: create imx_arch_reset_init() for DT boot
arch/arm/mach-imx/common.h | 1 +
arch/arm/mach-imx/hardware.h | 1 +
arch/arm/mach-imx/imx25-dt.c | 2 ++
arch/arm/mach-imx/imx27-dt.c | 2 ++
arch/arm/mach-imx/imx31-dt.c | 2 ++
arch/arm/mach-imx/imx51-dt.c | 2 ++
arch/arm/mach-imx/mach-imx53.c | 3 +++
arch/arm/mach-imx/mm-imx1.c | 2 +-
arch/arm/mach-imx/mm-imx21.c | 2 +-
arch/arm/mach-imx/mm-imx25.c | 2 +-
arch/arm/mach-imx/mm-imx27.c | 2 +-
arch/arm/mach-imx/mm-imx3.c | 4 ++--
arch/arm/mach-imx/mm-imx5.c | 3 +--
arch/arm/mach-imx/system.c | 47 +++++++++++++++++++++++++++++++---------
14 files changed, 57 insertions(+), 18 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] ARM: imx: include <asm/io.h> in hardware.h
2013-05-13 1:32 [PATCH 0/3] ARM: imx: make mxs_restart() work for DT boot Shawn Guo
@ 2013-05-13 1:32 ` Shawn Guo
2013-05-13 1:32 ` [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart() Shawn Guo
2013-05-13 1:32 ` [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot Shawn Guo
2 siblings, 0 replies; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 1:32 UTC (permalink / raw)
To: linux-arm-kernel
As IOMEM is referenced in hardware.h, <asm/io.h> should be included
there.
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
arch/arm/mach-imx/hardware.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/mach-imx/hardware.h b/arch/arm/mach-imx/hardware.h
index 356131f..a3b0b04 100644
--- a/arch/arm/mach-imx/hardware.h
+++ b/arch/arm/mach-imx/hardware.h
@@ -20,6 +20,7 @@
#ifndef __ASM_ARCH_MXC_HARDWARE_H__
#define __ASM_ARCH_MXC_HARDWARE_H__
+#include <asm/io.h>
#include <asm/sizes.h>
#define addr_in_module(addr, mod) \
--
1.7.9.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart()
2013-05-13 1:32 [PATCH 0/3] ARM: imx: make mxs_restart() work for DT boot Shawn Guo
2013-05-13 1:32 ` [PATCH 1/3] ARM: imx: include <asm/io.h> in hardware.h Shawn Guo
@ 2013-05-13 1:32 ` Shawn Guo
2013-05-13 8:25 ` Sascha Hauer
2013-05-13 1:32 ` [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot Shawn Guo
2 siblings, 1 reply; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 1:32 UTC (permalink / raw)
To: linux-arm-kernel
It's inappropriate to call clk_prepare() in mxs_restart(), because the
restart routine could be called in atomic context. Move clk_get() and
clk_prepare() into mxc_arch_reset_init() and only have the atomic part
clk_enable() be called in mxs_restart().
As a result, mxc_arch_reset_init() needs to be called after clk gets
initialized.
While there, it also changes printk(KERN_ERR ...) to pr_err() and adds
__init annotation for mxc_arch_reset_init().
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
arch/arm/mach-imx/imx25-dt.c | 3 +++
arch/arm/mach-imx/imx27-dt.c | 3 +++
arch/arm/mach-imx/imx31-dt.c | 3 +++
arch/arm/mach-imx/imx51-dt.c | 3 +++
arch/arm/mach-imx/mach-imx53.c | 3 +++
arch/arm/mach-imx/mm-imx1.c | 2 +-
arch/arm/mach-imx/mm-imx21.c | 2 +-
arch/arm/mach-imx/mm-imx25.c | 2 +-
arch/arm/mach-imx/mm-imx27.c | 2 +-
arch/arm/mach-imx/mm-imx3.c | 4 ++--
arch/arm/mach-imx/mm-imx5.c | 3 +--
arch/arm/mach-imx/system.c | 27 +++++++++++++++++----------
12 files changed, 39 insertions(+), 18 deletions(-)
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c
index 8234839..ec33991 100644
--- a/arch/arm/mach-imx/imx25-dt.c
+++ b/arch/arm/mach-imx/imx25-dt.c
@@ -15,10 +15,13 @@
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include "common.h"
+#include "hardware.h"
#include "mx25.h"
static void __init imx25_dt_init(void)
{
+ mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
+
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c
index 4aaead0..93aef1a 100644
--- a/arch/arm/mach-imx/imx27-dt.c
+++ b/arch/arm/mach-imx/imx27-dt.c
@@ -16,12 +16,15 @@
#include <asm/mach/time.h>
#include "common.h"
+#include "hardware.h"
#include "mx27.h"
static void __init imx27_dt_init(void)
{
struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
+ mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
+
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
platform_device_register_full(&devinfo);
diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c
index 67de611..d8b3b22 100644
--- a/arch/arm/mach-imx/imx31-dt.c
+++ b/arch/arm/mach-imx/imx31-dt.c
@@ -16,10 +16,13 @@
#include <asm/mach/time.h>
#include "common.h"
+#include "hardware.h"
#include "mx31.h"
static void __init imx31_dt_init(void)
{
+ mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
+
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c
index ab24cc3..55f47a0 100644
--- a/arch/arm/mach-imx/imx51-dt.c
+++ b/arch/arm/mach-imx/imx51-dt.c
@@ -17,12 +17,15 @@
#include <asm/mach/time.h>
#include "common.h"
+#include "hardware.h"
#include "mx51.h"
static void __init imx51_dt_init(void)
{
struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
+ mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
+
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
platform_device_register_full(&devinfo);
}
diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c
index f579c61..7a56561 100644
--- a/arch/arm/mach-imx/mach-imx53.c
+++ b/arch/arm/mach-imx/mach-imx53.c
@@ -21,6 +21,7 @@
#include <asm/mach/time.h>
#include "common.h"
+#include "hardware.h"
#include "mx53.h"
static void __init imx53_qsb_init(void)
@@ -38,6 +39,8 @@ static void __init imx53_qsb_init(void)
static void __init imx53_dt_init(void)
{
+ mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
+
if (of_machine_is_compatible("fsl,imx53-qsb"))
imx53_qsb_init();
diff --git a/arch/arm/mach-imx/mm-imx1.c b/arch/arm/mach-imx/mm-imx1.c
index 3c609c5..e065fed 100644
--- a/arch/arm/mach-imx/mm-imx1.c
+++ b/arch/arm/mach-imx/mm-imx1.c
@@ -39,7 +39,6 @@ void __init mx1_map_io(void)
void __init imx1_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX1);
- mxc_arch_reset_init(MX1_IO_ADDRESS(MX1_WDT_BASE_ADDR));
imx_iomuxv1_init(MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR),
MX1_NUM_GPIO_PORT);
}
@@ -51,6 +50,7 @@ void __init mx1_init_irq(void)
void __init imx1_soc_init(void)
{
+ mxc_arch_reset_init(MX1_IO_ADDRESS(MX1_WDT_BASE_ADDR));
mxc_device_init();
mxc_register_gpio("imx1-gpio", 0, MX1_GPIO1_BASE_ADDR, SZ_256,
diff --git a/arch/arm/mach-imx/mm-imx21.c b/arch/arm/mach-imx/mm-imx21.c
index d8ccd3a..2e91ab2 100644
--- a/arch/arm/mach-imx/mm-imx21.c
+++ b/arch/arm/mach-imx/mm-imx21.c
@@ -66,7 +66,6 @@ void __init mx21_map_io(void)
void __init imx21_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX21);
- mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR));
imx_iomuxv1_init(MX21_IO_ADDRESS(MX21_GPIO_BASE_ADDR),
MX21_NUM_GPIO_PORT);
}
@@ -82,6 +81,7 @@ static const struct resource imx21_audmux_res[] __initconst = {
void __init imx21_soc_init(void)
{
+ mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR));
mxc_device_init();
mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c
index 9357707..e065c11 100644
--- a/arch/arm/mach-imx/mm-imx25.c
+++ b/arch/arm/mach-imx/mm-imx25.c
@@ -54,7 +54,6 @@ void __init imx25_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX25);
mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR));
- mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
}
void __init mx25_init_irq(void)
@@ -89,6 +88,7 @@ static const struct resource imx25_audmux_res[] __initconst = {
void __init imx25_soc_init(void)
{
+ mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
mxc_device_init();
/* i.mx25 has the i.mx35 type gpio */
diff --git a/arch/arm/mach-imx/mm-imx27.c b/arch/arm/mach-imx/mm-imx27.c
index 4f1be65..7d82a5a 100644
--- a/arch/arm/mach-imx/mm-imx27.c
+++ b/arch/arm/mach-imx/mm-imx27.c
@@ -66,7 +66,6 @@ void __init mx27_map_io(void)
void __init imx27_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX27);
- mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
imx_iomuxv1_init(MX27_IO_ADDRESS(MX27_GPIO_BASE_ADDR),
MX27_NUM_GPIO_PORT);
}
@@ -82,6 +81,7 @@ static const struct resource imx27_audmux_res[] __initconst = {
void __init imx27_soc_init(void)
{
+ mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
mxc_device_init();
/* i.mx27 has the i.mx21 type gpio */
diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c
index e0e69a6..8f0f606 100644
--- a/arch/arm/mach-imx/mm-imx3.c
+++ b/arch/arm/mach-imx/mm-imx3.c
@@ -138,7 +138,6 @@ void __init mx31_map_io(void)
void __init imx31_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX31);
- mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
arch_ioremap_caller = imx3_ioremap_caller;
arm_pm_idle = imx3_idle;
mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR);
@@ -174,6 +173,7 @@ void __init imx31_soc_init(void)
imx3_init_l2x0();
+ mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
mxc_device_init();
mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0);
@@ -216,7 +216,6 @@ void __init imx35_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX35);
mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
- mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
arm_pm_idle = imx3_idle;
arch_ioremap_caller = imx3_ioremap_caller;
mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR);
@@ -272,6 +271,7 @@ void __init imx35_soc_init(void)
imx3_init_l2x0();
+ mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
mxc_device_init();
mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0);
diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c
index b7c4e70..cf193d8 100644
--- a/arch/arm/mach-imx/mm-imx5.c
+++ b/arch/arm/mach-imx/mm-imx5.c
@@ -83,7 +83,6 @@ void __init imx51_init_early(void)
imx51_ipu_mipi_setup();
mxc_set_cpu_type(MXC_CPU_MX51);
mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
- mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
imx_src_init();
}
@@ -91,7 +90,6 @@ void __init imx53_init_early(void)
{
mxc_set_cpu_type(MXC_CPU_MX53);
mxc_iomux_v3_init(MX53_IO_ADDRESS(MX53_IOMUXC_BASE_ADDR));
- mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
imx_src_init();
}
@@ -129,6 +127,7 @@ static const struct resource imx51_audmux_res[] __initconst = {
void __init imx51_soc_init(void)
{
+ mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
mxc_device_init();
/* i.mx51 has the i.mx35 type gpio */
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c
index 695e0d7..02cf449 100644
--- a/arch/arm/mach-imx/system.c
+++ b/arch/arm/mach-imx/system.c
@@ -30,6 +30,7 @@
#include "hardware.h"
static void __iomem *wdog_base;
+static struct clk *wdog_clk;
/*
* Reset the system. It is called by machine_restart().
@@ -38,16 +39,13 @@ void mxc_restart(char mode, const char *cmd)
{
unsigned int wcr_enable;
- if (cpu_is_mx1()) {
- wcr_enable = (1 << 0);
- } else {
- struct clk *clk;
+ if (wdog_clk)
+ clk_enable(wdog_clk);
- clk = clk_get_sys("imx2-wdt.0", NULL);
- if (!IS_ERR(clk))
- clk_prepare_enable(clk);
+ if (cpu_is_mx1())
+ wcr_enable = (1 << 0);
+ else
wcr_enable = (1 << 2);
- }
/* Assert SRS signal */
__raw_writew(wcr_enable, wdog_base);
@@ -55,7 +53,7 @@ void mxc_restart(char mode, const char *cmd)
/* wait for reset to assert... */
mdelay(500);
- printk(KERN_ERR "Watchdog reset failed to assert reset\n");
+ pr_err("%s: Watchdog reset failed to assert reset\n", __func__);
/* delay to allow the serial port to show the message */
mdelay(50);
@@ -64,7 +62,16 @@ void mxc_restart(char mode, const char *cmd)
soft_restart(0);
}
-void mxc_arch_reset_init(void __iomem *base)
+void __init mxc_arch_reset_init(void __iomem *base)
{
wdog_base = base;
+
+ wdog_clk = clk_get_sys("imx2-wdt.0", NULL);
+ if (IS_ERR(wdog_clk)) {
+ pr_warn("%s: failed to get wdog clock\n", __func__);
+ wdog_clk = NULL;
+ return;
+ }
+
+ clk_prepare(wdog_clk);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot
2013-05-13 1:32 [PATCH 0/3] ARM: imx: make mxs_restart() work for DT boot Shawn Guo
2013-05-13 1:32 ` [PATCH 1/3] ARM: imx: include <asm/io.h> in hardware.h Shawn Guo
2013-05-13 1:32 ` [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart() Shawn Guo
@ 2013-05-13 1:32 ` Shawn Guo
2013-05-13 8:27 ` Sascha Hauer
2013-05-13 13:05 ` [PATCH v2 3/3] ARM: imx: create mxc_arch_reset_init_dt() " Shawn Guo
2 siblings, 2 replies; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 1:32 UTC (permalink / raw)
To: linux-arm-kernel
The mxc_arch_reset_init() uses static mapping and calls clk_get_sys() to
get clock. It's suitable for non-DT boot but not for DT boot where
dynamic mapping and of_clk_get() should be used instead. Create
imx_arch_reset_init() as the DT variant of mxc_arch_reset_init(),
and change DT platforms to use it.
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
arch/arm/mach-imx/common.h | 1 +
arch/arm/mach-imx/imx25-dt.c | 3 +--
arch/arm/mach-imx/imx27-dt.c | 3 +--
arch/arm/mach-imx/imx31-dt.c | 3 +--
arch/arm/mach-imx/imx51-dt.c | 3 +--
arch/arm/mach-imx/mach-imx53.c | 2 +-
arch/arm/mach-imx/system.c | 20 ++++++++++++++++++++
7 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index c08ae3f..3ef909b 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -74,6 +74,7 @@ extern struct platform_device *mxc_register_gpio(char *name, int id,
extern void mxc_set_cpu_type(unsigned int type);
extern void mxc_restart(char, const char *);
extern void mxc_arch_reset_init(void __iomem *);
+extern void imx_arch_reset_init(void);
extern int mx53_revision(void);
extern int imx6q_revision(void);
extern int mx53_display_revision(void);
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c
index ec33991..a2575267 100644
--- a/arch/arm/mach-imx/imx25-dt.c
+++ b/arch/arm/mach-imx/imx25-dt.c
@@ -15,12 +15,11 @@
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx25.h"
static void __init imx25_dt_init(void)
{
- mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
+ imx_arch_reset_init();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c
index 93aef1a..174e441 100644
--- a/arch/arm/mach-imx/imx27-dt.c
+++ b/arch/arm/mach-imx/imx27-dt.c
@@ -16,14 +16,13 @@
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx27.h"
static void __init imx27_dt_init(void)
{
struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
- mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
+ imx_arch_reset_init();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c
index d8b3b22..a07cdec 100644
--- a/arch/arm/mach-imx/imx31-dt.c
+++ b/arch/arm/mach-imx/imx31-dt.c
@@ -16,12 +16,11 @@
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx31.h"
static void __init imx31_dt_init(void)
{
- mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
+ imx_arch_reset_init();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c
index 55f47a0..b2f5830 100644
--- a/arch/arm/mach-imx/imx51-dt.c
+++ b/arch/arm/mach-imx/imx51-dt.c
@@ -17,14 +17,13 @@
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx51.h"
static void __init imx51_dt_init(void)
{
struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
- mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
+ imx_arch_reset_init();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
platform_device_register_full(&devinfo);
diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c
index 7a56561..e0da2cc 100644
--- a/arch/arm/mach-imx/mach-imx53.c
+++ b/arch/arm/mach-imx/mach-imx53.c
@@ -39,7 +39,7 @@ static void __init imx53_qsb_init(void)
static void __init imx53_dt_init(void)
{
- mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
+ imx_arch_reset_init();
if (of_machine_is_compatible("fsl,imx53-qsb"))
imx53_qsb_init();
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c
index 02cf449..973f01d 100644
--- a/arch/arm/mach-imx/system.c
+++ b/arch/arm/mach-imx/system.c
@@ -21,6 +21,8 @@
#include <linux/io.h>
#include <linux/err.h>
#include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
#include <asm/system_misc.h>
#include <asm/proc-fns.h>
@@ -75,3 +77,21 @@ void __init mxc_arch_reset_init(void __iomem *base)
clk_prepare(wdog_clk);
}
+
+void __init imx_arch_reset_init(void)
+{
+ struct device_node *np;
+
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx21-wdt");
+ wdog_base = of_iomap(np, 0);
+ WARN_ON(!wdog_base);
+
+ wdog_clk = of_clk_get(np, 0);
+ if (IS_ERR(wdog_clk)) {
+ pr_warn("%s: failed to get wdog clock\n", __func__);
+ wdog_clk = NULL;
+ return;
+ }
+
+ clk_prepare(wdog_clk);
+}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart()
2013-05-13 1:32 ` [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart() Shawn Guo
@ 2013-05-13 8:25 ` Sascha Hauer
2013-05-13 12:51 ` Shawn Guo
0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2013-05-13 8:25 UTC (permalink / raw)
To: linux-arm-kernel
Hi Shawn,
In the subject:
s/mxs_restart/mxc_restart/
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot
2013-05-13 1:32 ` [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot Shawn Guo
@ 2013-05-13 8:27 ` Sascha Hauer
2013-05-13 12:52 ` Shawn Guo
2013-05-13 13:05 ` [PATCH v2 3/3] ARM: imx: create mxc_arch_reset_init_dt() " Shawn Guo
1 sibling, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2013-05-13 8:27 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, May 13, 2013 at 09:32:08AM +0800, Shawn Guo wrote:
> The mxc_arch_reset_init() uses static mapping and calls clk_get_sys() to
> get clock. It's suitable for non-DT boot but not for DT boot where
> dynamic mapping and of_clk_get() should be used instead. Create
> imx_arch_reset_init() as the DT variant of mxc_arch_reset_init(),
> and change DT platforms to use it.
Having mxc_arch_reset_init for !dt and the same functionality for dt
named imx_arch_reset_init is a bit confusing. Maybe add _dt_ to the
function name?
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart()
2013-05-13 8:25 ` Sascha Hauer
@ 2013-05-13 12:51 ` Shawn Guo
0 siblings, 0 replies; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 12:51 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, May 13, 2013 at 10:25:35AM +0200, Sascha Hauer wrote:
> Hi Shawn,
>
> In the subject:
>
> s/mxs_restart/mxc_restart/
Thanks, Sascha. Fixed it and commit log as well.
Shawn
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot
2013-05-13 8:27 ` Sascha Hauer
@ 2013-05-13 12:52 ` Shawn Guo
2013-05-13 12:54 ` Sascha Hauer
0 siblings, 1 reply; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 12:52 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, May 13, 2013 at 10:27:08AM +0200, Sascha Hauer wrote:
> On Mon, May 13, 2013 at 09:32:08AM +0800, Shawn Guo wrote:
> > The mxc_arch_reset_init() uses static mapping and calls clk_get_sys() to
> > get clock. It's suitable for non-DT boot but not for DT boot where
> > dynamic mapping and of_clk_get() should be used instead. Create
> > imx_arch_reset_init() as the DT variant of mxc_arch_reset_init(),
> > and change DT platforms to use it.
>
> Having mxc_arch_reset_init for !dt and the same functionality for dt
> named imx_arch_reset_init is a bit confusing. Maybe add _dt_ to the
> function name?
Ok, will change it to mxc_arch_reset_init_dt() avoid the confusion.
Shawn
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot
2013-05-13 12:52 ` Shawn Guo
@ 2013-05-13 12:54 ` Sascha Hauer
0 siblings, 0 replies; 11+ messages in thread
From: Sascha Hauer @ 2013-05-13 12:54 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, May 13, 2013 at 08:52:17PM +0800, Shawn Guo wrote:
> On Mon, May 13, 2013 at 10:27:08AM +0200, Sascha Hauer wrote:
> > On Mon, May 13, 2013 at 09:32:08AM +0800, Shawn Guo wrote:
> > > The mxc_arch_reset_init() uses static mapping and calls clk_get_sys() to
> > > get clock. It's suitable for non-DT boot but not for DT boot where
> > > dynamic mapping and of_clk_get() should be used instead. Create
> > > imx_arch_reset_init() as the DT variant of mxc_arch_reset_init(),
> > > and change DT platforms to use it.
> >
> > Having mxc_arch_reset_init for !dt and the same functionality for dt
> > named imx_arch_reset_init is a bit confusing. Maybe add _dt_ to the
> > function name?
>
> Ok, will change it to mxc_arch_reset_init_dt() avoid the confusion.
I think we both prefer 'imx' over 'mxc', but maybe changing this is
topic for another patch.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 3/3] ARM: imx: create mxc_arch_reset_init_dt() for DT boot
2013-05-13 1:32 ` [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot Shawn Guo
2013-05-13 8:27 ` Sascha Hauer
@ 2013-05-13 13:05 ` Shawn Guo
2013-05-13 14:59 ` Sascha Hauer
1 sibling, 1 reply; 11+ messages in thread
From: Shawn Guo @ 2013-05-13 13:05 UTC (permalink / raw)
To: linux-arm-kernel
The mxc_arch_reset_init() uses static mapping and calls clk_get_sys() to
get clock. It's suitable for non-DT boot but not for DT boot where
dynamic mapping and of_clk_get() should be used instead. Create
mxc_arch_reset_init_dt() as the DT variant of mxc_arch_reset_init(),
and change DT platforms to use it.
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
Changes since v1:
* Rename the new function as mxc_arch_reset_init_dt()
arch/arm/mach-imx/common.h | 1 +
arch/arm/mach-imx/imx25-dt.c | 3 +--
arch/arm/mach-imx/imx27-dt.c | 3 +--
arch/arm/mach-imx/imx31-dt.c | 3 +--
arch/arm/mach-imx/imx51-dt.c | 3 +--
arch/arm/mach-imx/mach-imx53.c | 2 +-
arch/arm/mach-imx/system.c | 20 ++++++++++++++++++++
7 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index c08ae3f..963971e1 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -74,6 +74,7 @@ extern struct platform_device *mxc_register_gpio(char *name, int id,
extern void mxc_set_cpu_type(unsigned int type);
extern void mxc_restart(char, const char *);
extern void mxc_arch_reset_init(void __iomem *);
+extern void mxc_arch_reset_init_dt(void);
extern int mx53_revision(void);
extern int imx6q_revision(void);
extern int mx53_display_revision(void);
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c
index ec33991..3e1ec5f 100644
--- a/arch/arm/mach-imx/imx25-dt.c
+++ b/arch/arm/mach-imx/imx25-dt.c
@@ -15,12 +15,11 @@
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx25.h"
static void __init imx25_dt_init(void)
{
- mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
+ mxc_arch_reset_init_dt();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c
index 93aef1a..4e235ec 100644
--- a/arch/arm/mach-imx/imx27-dt.c
+++ b/arch/arm/mach-imx/imx27-dt.c
@@ -16,14 +16,13 @@
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx27.h"
static void __init imx27_dt_init(void)
{
struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
- mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
+ mxc_arch_reset_init_dt();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c
index d8b3b22..818a1cc 100644
--- a/arch/arm/mach-imx/imx31-dt.c
+++ b/arch/arm/mach-imx/imx31-dt.c
@@ -16,12 +16,11 @@
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx31.h"
static void __init imx31_dt_init(void)
{
- mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
+ mxc_arch_reset_init_dt();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c
index 55f47a0..53e43e5 100644
--- a/arch/arm/mach-imx/imx51-dt.c
+++ b/arch/arm/mach-imx/imx51-dt.c
@@ -17,14 +17,13 @@
#include <asm/mach/time.h>
#include "common.h"
-#include "hardware.h"
#include "mx51.h"
static void __init imx51_dt_init(void)
{
struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
- mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
+ mxc_arch_reset_init_dt();
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
platform_device_register_full(&devinfo);
diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c
index 7a56561..74e7b94c 100644
--- a/arch/arm/mach-imx/mach-imx53.c
+++ b/arch/arm/mach-imx/mach-imx53.c
@@ -39,7 +39,7 @@ static void __init imx53_qsb_init(void)
static void __init imx53_dt_init(void)
{
- mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
+ mxc_arch_reset_init_dt();
if (of_machine_is_compatible("fsl,imx53-qsb"))
imx53_qsb_init();
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c
index 02cf449..7cdc79a 100644
--- a/arch/arm/mach-imx/system.c
+++ b/arch/arm/mach-imx/system.c
@@ -21,6 +21,8 @@
#include <linux/io.h>
#include <linux/err.h>
#include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
#include <asm/system_misc.h>
#include <asm/proc-fns.h>
@@ -75,3 +77,21 @@ void __init mxc_arch_reset_init(void __iomem *base)
clk_prepare(wdog_clk);
}
+
+void __init mxc_arch_reset_init_dt(void)
+{
+ struct device_node *np;
+
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx21-wdt");
+ wdog_base = of_iomap(np, 0);
+ WARN_ON(!wdog_base);
+
+ wdog_clk = of_clk_get(np, 0);
+ if (IS_ERR(wdog_clk)) {
+ pr_warn("%s: failed to get wdog clock\n", __func__);
+ wdog_clk = NULL;
+ return;
+ }
+
+ clk_prepare(wdog_clk);
+}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 3/3] ARM: imx: create mxc_arch_reset_init_dt() for DT boot
2013-05-13 13:05 ` [PATCH v2 3/3] ARM: imx: create mxc_arch_reset_init_dt() " Shawn Guo
@ 2013-05-13 14:59 ` Sascha Hauer
0 siblings, 0 replies; 11+ messages in thread
From: Sascha Hauer @ 2013-05-13 14:59 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, May 13, 2013 at 09:05:02PM +0800, Shawn Guo wrote:
> The mxc_arch_reset_init() uses static mapping and calls clk_get_sys() to
> get clock. It's suitable for non-DT boot but not for DT boot where
> dynamic mapping and of_clk_get() should be used instead. Create
> mxc_arch_reset_init_dt() as the DT variant of mxc_arch_reset_init(),
> and change DT platforms to use it.
>
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
(For the whole series)
Sascha
> ---
> Changes since v1:
> * Rename the new function as mxc_arch_reset_init_dt()
>
> arch/arm/mach-imx/common.h | 1 +
> arch/arm/mach-imx/imx25-dt.c | 3 +--
> arch/arm/mach-imx/imx27-dt.c | 3 +--
> arch/arm/mach-imx/imx31-dt.c | 3 +--
> arch/arm/mach-imx/imx51-dt.c | 3 +--
> arch/arm/mach-imx/mach-imx53.c | 2 +-
> arch/arm/mach-imx/system.c | 20 ++++++++++++++++++++
> 7 files changed, 26 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
> index c08ae3f..963971e1 100644
> --- a/arch/arm/mach-imx/common.h
> +++ b/arch/arm/mach-imx/common.h
> @@ -74,6 +74,7 @@ extern struct platform_device *mxc_register_gpio(char *name, int id,
> extern void mxc_set_cpu_type(unsigned int type);
> extern void mxc_restart(char, const char *);
> extern void mxc_arch_reset_init(void __iomem *);
> +extern void mxc_arch_reset_init_dt(void);
> extern int mx53_revision(void);
> extern int imx6q_revision(void);
> extern int mx53_display_revision(void);
> diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c
> index ec33991..3e1ec5f 100644
> --- a/arch/arm/mach-imx/imx25-dt.c
> +++ b/arch/arm/mach-imx/imx25-dt.c
> @@ -15,12 +15,11 @@
> #include <asm/mach/arch.h>
> #include <asm/mach/time.h>
> #include "common.h"
> -#include "hardware.h"
> #include "mx25.h"
>
> static void __init imx25_dt_init(void)
> {
> - mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
> + mxc_arch_reset_init_dt();
>
> of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
> }
> diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c
> index 93aef1a..4e235ec 100644
> --- a/arch/arm/mach-imx/imx27-dt.c
> +++ b/arch/arm/mach-imx/imx27-dt.c
> @@ -16,14 +16,13 @@
> #include <asm/mach/time.h>
>
> #include "common.h"
> -#include "hardware.h"
> #include "mx27.h"
>
> static void __init imx27_dt_init(void)
> {
> struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
>
> - mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
> + mxc_arch_reset_init_dt();
>
> of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
>
> diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c
> index d8b3b22..818a1cc 100644
> --- a/arch/arm/mach-imx/imx31-dt.c
> +++ b/arch/arm/mach-imx/imx31-dt.c
> @@ -16,12 +16,11 @@
> #include <asm/mach/time.h>
>
> #include "common.h"
> -#include "hardware.h"
> #include "mx31.h"
>
> static void __init imx31_dt_init(void)
> {
> - mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
> + mxc_arch_reset_init_dt();
>
> of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
> }
> diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c
> index 55f47a0..53e43e5 100644
> --- a/arch/arm/mach-imx/imx51-dt.c
> +++ b/arch/arm/mach-imx/imx51-dt.c
> @@ -17,14 +17,13 @@
> #include <asm/mach/time.h>
>
> #include "common.h"
> -#include "hardware.h"
> #include "mx51.h"
>
> static void __init imx51_dt_init(void)
> {
> struct platform_device_info devinfo = { .name = "cpufreq-cpu0", };
>
> - mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
> + mxc_arch_reset_init_dt();
>
> of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
> platform_device_register_full(&devinfo);
> diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c
> index 7a56561..74e7b94c 100644
> --- a/arch/arm/mach-imx/mach-imx53.c
> +++ b/arch/arm/mach-imx/mach-imx53.c
> @@ -39,7 +39,7 @@ static void __init imx53_qsb_init(void)
>
> static void __init imx53_dt_init(void)
> {
> - mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
> + mxc_arch_reset_init_dt();
>
> if (of_machine_is_compatible("fsl,imx53-qsb"))
> imx53_qsb_init();
> diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c
> index 02cf449..7cdc79a 100644
> --- a/arch/arm/mach-imx/system.c
> +++ b/arch/arm/mach-imx/system.c
> @@ -21,6 +21,8 @@
> #include <linux/io.h>
> #include <linux/err.h>
> #include <linux/delay.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
>
> #include <asm/system_misc.h>
> #include <asm/proc-fns.h>
> @@ -75,3 +77,21 @@ void __init mxc_arch_reset_init(void __iomem *base)
>
> clk_prepare(wdog_clk);
> }
> +
> +void __init mxc_arch_reset_init_dt(void)
> +{
> + struct device_node *np;
> +
> + np = of_find_compatible_node(NULL, NULL, "fsl,imx21-wdt");
> + wdog_base = of_iomap(np, 0);
> + WARN_ON(!wdog_base);
> +
> + wdog_clk = of_clk_get(np, 0);
> + if (IS_ERR(wdog_clk)) {
> + pr_warn("%s: failed to get wdog clock\n", __func__);
> + wdog_clk = NULL;
> + return;
> + }
> +
> + clk_prepare(wdog_clk);
> +}
> --
> 1.7.9.5
>
>
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2013-05-13 14:59 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-13 1:32 [PATCH 0/3] ARM: imx: make mxs_restart() work for DT boot Shawn Guo
2013-05-13 1:32 ` [PATCH 1/3] ARM: imx: include <asm/io.h> in hardware.h Shawn Guo
2013-05-13 1:32 ` [PATCH 2/3] ARM: imx: move clk_prepare() out from mxs_restart() Shawn Guo
2013-05-13 8:25 ` Sascha Hauer
2013-05-13 12:51 ` Shawn Guo
2013-05-13 1:32 ` [PATCH 3/3] ARM: imx: create imx_arch_reset_init() for DT boot Shawn Guo
2013-05-13 8:27 ` Sascha Hauer
2013-05-13 12:52 ` Shawn Guo
2013-05-13 12:54 ` Sascha Hauer
2013-05-13 13:05 ` [PATCH v2 3/3] ARM: imx: create mxc_arch_reset_init_dt() " Shawn Guo
2013-05-13 14:59 ` Sascha Hauer
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).