mach-imx6q.c revision 3c8276c6bc912025db50ff7e93af6bc7c3de0c8c
113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo/* 213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * Copyright 2011 Freescale Semiconductor, Inc. 313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * Copyright 2011 Linaro Ltd. 413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * 513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * The code contained herein is licensed under the GNU General Public 613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * License. You may obtain a copy of the GNU General Public License 713eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * Version 2 or later at the following locations: 813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * 913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * http://www.opensource.org/licenses/gpl-license.html 1013eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo * http://www.gnu.org/copyleft/gpl.html 1113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo */ 1213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 1313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <linux/init.h> 1413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <linux/irq.h> 1513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <linux/irqdomain.h> 1613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <linux/of.h> 1713eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <linux/of_irq.h> 1813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <linux/of_platform.h> 1913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <asm/hardware/cache-l2x0.h> 2013eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <asm/hardware/gic.h> 2113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <asm/mach/arch.h> 2213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <asm/mach/time.h> 2313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <mach/common.h> 2413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo#include <mach/hardware.h> 2513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 2613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic void __init imx6q_init_machine(void) 2713eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo{ 2813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 2913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 3013eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo imx6q_pm_init(); 3113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo} 3213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 3313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic void __init imx6q_map_io(void) 3413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo{ 3513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo imx_lluart_map_io(); 3613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo imx_scu_map_io(); 37f475058f48d3acb3c3979311c9532f3113839468Richard Zhao imx6q_clock_map_io(); 3813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo} 3913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 402a3267a489f1dc4284b64a4b88c62011946dc7ffShawn Guostatic int __init imx6q_gpio_add_irq_domain(struct device_node *np, 4113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo struct device_node *interrupt_parent) 4213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo{ 4304aafd713bae8a75933c7821dc012b0ec9046bcaShawn Guo static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS; 4413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 4504aafd713bae8a75933c7821dc012b0ec9046bcaShawn Guo gpio_irq_base -= 32; 4613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo irq_domain_add_simple(np, gpio_irq_base); 472a3267a489f1dc4284b64a4b88c62011946dc7ffShawn Guo 482a3267a489f1dc4284b64a4b88c62011946dc7ffShawn Guo return 0; 4913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo} 5013eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 5113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic const struct of_device_id imx6q_irq_match[] __initconst = { 5213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, 5313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo { .compatible = "fsl,imx6q-gpio", .data = imx6q_gpio_add_irq_domain, }, 5413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo { /* sentinel */ } 5513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo}; 5613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 5713eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic void __init imx6q_init_irq(void) 5813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo{ 5913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo l2x0_of_init(0, ~0UL); 6013eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo imx_src_init(); 6113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo imx_gpc_init(); 6213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo of_irq_init(imx6q_irq_match); 6313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo} 6413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 6513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic void __init imx6q_timer_init(void) 6613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo{ 6713eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo mx6q_clocks_init(); 6813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo} 6913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 7013eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic struct sys_timer imx6q_timer = { 7113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .init = imx6q_timer_init, 7213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo}; 7313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 7413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guostatic const char *imx6q_dt_compat[] __initdata = { 7513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo "fsl,imx6q-sabreauto", 763c8276c6bc912025db50ff7e93af6bc7c3de0c8cRichard Zhao "fsl,imx6q-sabrelite", 7713eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo NULL, 7813eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo}; 7913eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo 8013eed9897a2160272df2804ac3bbd4d91c76e577Shawn GuoDT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)") 8113eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .map_io = imx6q_map_io, 8213eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .init_irq = imx6q_init_irq, 8313eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .handle_irq = imx6q_handle_irq, 8413eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .timer = &imx6q_timer, 8513eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .init_machine = imx6q_init_machine, 8613eed9897a2160272df2804ac3bbd4d91c76e577Shawn Guo .dt_compat = imx6q_dt_compat, 8713eed9897a2160272df2804ac3bbd4d91c76e577Shawn GuoMACHINE_END 88