aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/mach-imx6sl.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx/mach-imx6sl.c')
-rw-r--r--arch/arm/mach-imx/mach-imx6sl.c40
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
21static 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
19static void __init imx6sl_init_machine(void) 37static 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
26static void __init imx6sl_init_irq(void) 55static 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
34static void __init imx6sl_timer_init(void)
35{
36 of_clk_init(NULL);
37}
38
39static const char *imx6sl_dt_compat[] __initdata = { 64static 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 = {
44DT_MACHINE_START(IMX6SL, "Freescale i.MX6 SoloLite (Device Tree)") 69DT_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,