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