forked from mirrors/linux
		
	ARM: imx: create mxc_arch_reset_init_dt() for DT boot
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>
This commit is contained in:
		
							parent
							
								
									18cb680f1a
								
							
						
					
					
						commit
						c1e31d126b
					
				
					 7 changed files with 26 additions and 9 deletions
				
			
		|  | @ -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_set_cpu_type(unsigned int type); | ||||||
| extern void mxc_restart(char, const char *); | extern void mxc_restart(char, const char *); | ||||||
| extern void mxc_arch_reset_init(void __iomem *); | extern void mxc_arch_reset_init(void __iomem *); | ||||||
|  | extern void mxc_arch_reset_init_dt(void); | ||||||
| extern int mx53_revision(void); | extern int mx53_revision(void); | ||||||
| extern int imx6q_revision(void); | extern int imx6q_revision(void); | ||||||
| extern int mx53_display_revision(void); | extern int mx53_display_revision(void); | ||||||
|  |  | ||||||
|  | @ -15,12 +15,11 @@ | ||||||
| #include <asm/mach/arch.h> | #include <asm/mach/arch.h> | ||||||
| #include <asm/mach/time.h> | #include <asm/mach/time.h> | ||||||
| #include "common.h" | #include "common.h" | ||||||
| #include "hardware.h" |  | ||||||
| #include "mx25.h" | #include "mx25.h" | ||||||
| 
 | 
 | ||||||
| static void __init imx25_dt_init(void) | 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); | 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -16,14 +16,13 @@ | ||||||
| #include <asm/mach/time.h> | #include <asm/mach/time.h> | ||||||
| 
 | 
 | ||||||
| #include "common.h" | #include "common.h" | ||||||
| #include "hardware.h" |  | ||||||
| #include "mx27.h" | #include "mx27.h" | ||||||
| 
 | 
 | ||||||
| static void __init imx27_dt_init(void) | static void __init imx27_dt_init(void) | ||||||
| { | { | ||||||
| 	struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; | 	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); | 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,12 +16,11 @@ | ||||||
| #include <asm/mach/time.h> | #include <asm/mach/time.h> | ||||||
| 
 | 
 | ||||||
| #include "common.h" | #include "common.h" | ||||||
| #include "hardware.h" |  | ||||||
| #include "mx31.h" | #include "mx31.h" | ||||||
| 
 | 
 | ||||||
| static void __init imx31_dt_init(void) | 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); | 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -17,14 +17,13 @@ | ||||||
| #include <asm/mach/time.h> | #include <asm/mach/time.h> | ||||||
| 
 | 
 | ||||||
| #include "common.h" | #include "common.h" | ||||||
| #include "hardware.h" |  | ||||||
| #include "mx51.h" | #include "mx51.h" | ||||||
| 
 | 
 | ||||||
| static void __init imx51_dt_init(void) | static void __init imx51_dt_init(void) | ||||||
| { | { | ||||||
| 	struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; | 	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); | 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||||||
| 	platform_device_register_full(&devinfo); | 	platform_device_register_full(&devinfo); | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ static void __init imx53_qsb_init(void) | ||||||
| 
 | 
 | ||||||
| static void __init imx53_dt_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")) | 	if (of_machine_is_compatible("fsl,imx53-qsb")) | ||||||
| 		imx53_qsb_init(); | 		imx53_qsb_init(); | ||||||
|  |  | ||||||
|  | @ -21,6 +21,8 @@ | ||||||
| #include <linux/io.h> | #include <linux/io.h> | ||||||
| #include <linux/err.h> | #include <linux/err.h> | ||||||
| #include <linux/delay.h> | #include <linux/delay.h> | ||||||
|  | #include <linux/of.h> | ||||||
|  | #include <linux/of_address.h> | ||||||
| 
 | 
 | ||||||
| #include <asm/system_misc.h> | #include <asm/system_misc.h> | ||||||
| #include <asm/proc-fns.h> | #include <asm/proc-fns.h> | ||||||
|  | @ -75,3 +77,21 @@ void __init mxc_arch_reset_init(void __iomem *base) | ||||||
| 
 | 
 | ||||||
| 	clk_prepare(wdog_clk); | 	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); | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Shawn Guo
						Shawn Guo