/* * Copyright 2011 Freescale Semiconductor, Inc. * Copyright 2011 Linaro Ltd. * * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include static int mx6q_ipuv3_init(int id) { imx_reset_ipu(id); return 0; } static void mx6q_ipuv3_pg(int enable) { /*TODO*/ } static struct imx_ipuv3_platform_data ipuv3_pdata = { .rev = 4, .init = mx6q_ipuv3_init, .pg = mx6q_ipuv3_pg, }; static const struct of_dev_auxdata imx6q_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA("fsl,ipuv3", MX6Q_IPU1_BASE_ADDR, "imx-ipuv3.0", &ipuv3_pdata), OF_DEV_AUXDATA("fsl,ipuv3", MX6Q_IPU2_BASE_ADDR, "imx-ipuv3.1", &ipuv3_pdata), }; static void __init imx6q_init_machine(void) { of_platform_populate(NULL, of_default_bus_match_table, imx6q_auxdata_lookup, NULL); imx6q_pm_init(); } static void __init imx6q_map_io(void) { imx_lluart_map_io(); imx_scu_map_io(); imx6q_clock_map_io(); init_consistent_dma_size(SZ_64MB); } static void __init imx6q_gpio_add_irq_domain(struct device_node *np, struct device_node *interrupt_parent) { static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS - 32 * 7; /* imx6q gets 7 gpio ports */ irq_domain_add_simple(np, gpio_irq_base); gpio_irq_base += 32; } static const struct of_device_id imx6q_irq_match[] __initconst = { { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, { .compatible = "fsl,imx6q-gpio", .data = imx6q_gpio_add_irq_domain, }, { /* sentinel */ } }; static void __init imx6q_init_irq(void) { l2x0_of_init(0, ~0UL); imx_src_init(); imx_gpc_init(); of_irq_init(imx6q_irq_match); } static void __init imx6q_timer_init(void) { mx6q_clocks_init(); } static struct sys_timer imx6q_timer = { .init = imx6q_timer_init, }; static const char *imx6q_dt_compat[] __initdata = { "fsl,imx6q-sabreauto", "fsl,imx6q-sabrelite", NULL, }; DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)") .map_io = imx6q_map_io, .init_irq = imx6q_init_irq, .handle_irq = imx6q_handle_irq, .timer = &imx6q_timer, .init_machine = imx6q_init_machine, .dt_compat = imx6q_dt_compat, MACHINE_END