diff options
Diffstat (limited to 'arch/arm/mach-imx/mach-imx6sl.c')
-rw-r--r-- | arch/arm/mach-imx/mach-imx6sl.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/arch/arm/mach-imx/mach-imx6sl.c b/arch/arm/mach-imx/mach-imx6sl.c index 0d75dc54f715..2f952e3fcf89 100644 --- a/arch/arm/mach-imx/mach-imx6sl.c +++ b/arch/arm/mach-imx/mach-imx6sl.c | |||
@@ -7,35 +7,60 @@ | |||
7 | * | 7 | * |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/clk-provider.h> | ||
11 | #include <linux/irqchip.h> | 10 | #include <linux/irqchip.h> |
12 | #include <linux/of.h> | 11 | #include <linux/of.h> |
13 | #include <linux/of_platform.h> | 12 | #include <linux/of_platform.h> |
13 | #include <linux/mfd/syscon.h> | ||
14 | #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h> | ||
15 | #include <linux/regmap.h> | ||
14 | #include <asm/mach/arch.h> | 16 | #include <asm/mach/arch.h> |
15 | #include <asm/mach/map.h> | 17 | #include <asm/mach/map.h> |
16 | 18 | ||
17 | #include "common.h" | 19 | #include "common.h" |
18 | 20 | ||
21 | static void __init imx6sl_fec_init(void) | ||
22 | { | ||
23 | struct regmap *gpr; | ||
24 | |||
25 | /* set FEC clock from internal PLL clock source */ | ||
26 | gpr = syscon_regmap_lookup_by_compatible("fsl,imx6sl-iomuxc-gpr"); | ||
27 | if (!IS_ERR(gpr)) { | ||
28 | regmap_update_bits(gpr, IOMUXC_GPR1, | ||
29 | IMX6SL_GPR1_FEC_CLOCK_MUX2_SEL_MASK, 0); | ||
30 | regmap_update_bits(gpr, IOMUXC_GPR1, | ||
31 | IMX6SL_GPR1_FEC_CLOCK_MUX1_SEL_MASK, 0); | ||
32 | } else { | ||
33 | pr_err("failed to find fsl,imx6sl-iomux-gpr regmap\n"); | ||
34 | } | ||
35 | } | ||
36 | |||
19 | static void __init imx6sl_init_machine(void) | 37 | static void __init imx6sl_init_machine(void) |
20 | { | 38 | { |
39 | struct device *parent; | ||
40 | |||
21 | mxc_arch_reset_init_dt(); | 41 | mxc_arch_reset_init_dt(); |
22 | 42 | ||
23 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 43 | parent = imx_soc_device_init(); |
44 | if (parent == NULL) | ||
45 | pr_warn("failed to initialize soc device\n"); | ||
46 | |||
47 | of_platform_populate(NULL, of_default_bus_match_table, NULL, parent); | ||
48 | |||
49 | imx6sl_fec_init(); | ||
50 | imx_anatop_init(); | ||
51 | /* Reuse imx6q pm code */ | ||
52 | imx6q_pm_init(); | ||
24 | } | 53 | } |
25 | 54 | ||
26 | static void __init imx6sl_init_irq(void) | 55 | static void __init imx6sl_init_irq(void) |
27 | { | 56 | { |
57 | imx_init_revision_from_anatop(); | ||
28 | imx_init_l2cache(); | 58 | imx_init_l2cache(); |
29 | imx_src_init(); | 59 | imx_src_init(); |
30 | imx_gpc_init(); | 60 | imx_gpc_init(); |
31 | irqchip_init(); | 61 | irqchip_init(); |
32 | } | 62 | } |
33 | 63 | ||
34 | static void __init imx6sl_timer_init(void) | ||
35 | { | ||
36 | of_clk_init(NULL); | ||
37 | } | ||
38 | |||
39 | static const char *imx6sl_dt_compat[] __initdata = { | 64 | static const char *imx6sl_dt_compat[] __initdata = { |
40 | "fsl,imx6sl", | 65 | "fsl,imx6sl", |
41 | NULL, | 66 | NULL, |
@@ -44,7 +69,6 @@ static const char *imx6sl_dt_compat[] __initdata = { | |||
44 | DT_MACHINE_START(IMX6SL, "Freescale i.MX6 SoloLite (Device Tree)") | 69 | DT_MACHINE_START(IMX6SL, "Freescale i.MX6 SoloLite (Device Tree)") |
45 | .map_io = debug_ll_io_init, | 70 | .map_io = debug_ll_io_init, |
46 | .init_irq = imx6sl_init_irq, | 71 | .init_irq = imx6sl_init_irq, |
47 | .init_time = imx6sl_timer_init, | ||
48 | .init_machine = imx6sl_init_machine, | 72 | .init_machine = imx6sl_init_machine, |
49 | .dt_compat = imx6sl_dt_compat, | 73 | .dt_compat = imx6sl_dt_compat, |
50 | .restart = mxc_restart, | 74 | .restart = mxc_restart, |