18c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer/*
28c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *  Copyright (C) 1999,2000 Arm Limited
38c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *  Copyright (C) 2000 Deep Blue Solutions Ltd
48c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *  Copyright (C) 2002 Shane Nay (shane@minirl.com)
58c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *  Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
68c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *    - add MX31 specific definitions
78c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *
88c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * This program is free software; you can redistribute it and/or modify
98c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * it under the terms of the GNU General Public License as published by
108c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * the Free Software Foundation; either version 2 of the License, or
118c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * (at your option) any later version.
128c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer *
138c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * This program is distributed in the hope that it will be useful,
148c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * but WITHOUT ANY WARRANTY; without even the implied warranty of
158c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
168c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * GNU General Public License for more details.
178c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer */
188c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
198c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <linux/mm.h>
208c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <linux/init.h>
218c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <linux/err.h>
228c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
238c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <asm/pgtable.h>
248c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <asm/mach/map.h>
258c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
268c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <mach/common.h>
273622360430e90d47a0d028dd5333a13771589331Shawn Guo#include <mach/devices-common.h>
288c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <mach/hardware.h>
298c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <mach/mx25.h>
308c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer#include <mach/iomux-v3.h>
315ae30b477e9fb7319e2976fbf3521c0fac2625f1Sascha Hauer#include <mach/irqs.h>
328c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
338c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer/*
348c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * This table defines static virtual address mappings for I/O regions.
3508ff97b5214143c3bd47add6ec49097cb848120aUwe Kleine-König * These are the mappings common across all MX25 boards.
368c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer */
3708ff97b5214143c3bd47add6ec49097cb848120aUwe Kleine-Königstatic struct map_desc mx25_io_desc[] __initdata = {
3808ff97b5214143c3bd47add6ec49097cb848120aUwe Kleine-König	imx_map_entry(MX25, AVIC, MT_DEVICE_NONSHARED),
3908ff97b5214143c3bd47add6ec49097cb848120aUwe Kleine-König	imx_map_entry(MX25, AIPS1, MT_DEVICE_NONSHARED),
4008ff97b5214143c3bd47add6ec49097cb848120aUwe Kleine-König	imx_map_entry(MX25, AIPS2, MT_DEVICE_NONSHARED),
418c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer};
428c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
438c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer/*
448c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * This function initializes the memory map. It is called during the
458c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * system startup to create static physical to virtual memory mappings
468c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer * for the IO modules.
478c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer */
488c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauervoid __init mx25_map_io(void)
498c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer{
503dac219615b88010601ee52e7b5fd1c32ef789eaUwe Kleine-König	iotable_init(mx25_io_desc, ARRAY_SIZE(mx25_io_desc));
513dac219615b88010601ee52e7b5fd1c32ef789eaUwe Kleine-König}
523dac219615b88010601ee52e7b5fd1c32ef789eaUwe Kleine-König
533dac219615b88010601ee52e7b5fd1c32ef789eaUwe Kleine-Königvoid __init imx25_init_early(void)
543dac219615b88010601ee52e7b5fd1c32ef789eaUwe Kleine-König{
558c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer	mxc_set_cpu_type(MXC_CPU_MX25);
568c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer	mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR));
578c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer	mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
588c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer}
598c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
608c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauervoid __init mx25_init_irq(void)
618c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer{
62cf3a6aba2f8402d4e45f7f263a0e69f779cd1bdcUwe Kleine-König	mxc_init_irq(MX25_IO_ADDRESS(MX25_AVIC_BASE_ADDR));
638c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer}
648c25c36f33157a2e2a1fcd60b6dc00feace80631Sascha Hauer
653622360430e90d47a0d028dd5333a13771589331Shawn Guostatic struct sdma_script_start_addrs imx25_sdma_script __initdata = {
663622360430e90d47a0d028dd5333a13771589331Shawn Guo	.ap_2_ap_addr = 729,
673622360430e90d47a0d028dd5333a13771589331Shawn Guo	.uart_2_mcu_addr = 904,
683622360430e90d47a0d028dd5333a13771589331Shawn Guo	.per_2_app_addr = 1255,
693622360430e90d47a0d028dd5333a13771589331Shawn Guo	.mcu_2_app_addr = 834,
703622360430e90d47a0d028dd5333a13771589331Shawn Guo	.uartsh_2_mcu_addr = 1120,
713622360430e90d47a0d028dd5333a13771589331Shawn Guo	.per_2_shp_addr = 1329,
723622360430e90d47a0d028dd5333a13771589331Shawn Guo	.mcu_2_shp_addr = 1048,
733622360430e90d47a0d028dd5333a13771589331Shawn Guo	.ata_2_mcu_addr = 1560,
743622360430e90d47a0d028dd5333a13771589331Shawn Guo	.mcu_2_ata_addr = 1479,
753622360430e90d47a0d028dd5333a13771589331Shawn Guo	.app_2_per_addr = 1189,
763622360430e90d47a0d028dd5333a13771589331Shawn Guo	.app_2_mcu_addr = 770,
773622360430e90d47a0d028dd5333a13771589331Shawn Guo	.shp_2_per_addr = 1407,
783622360430e90d47a0d028dd5333a13771589331Shawn Guo	.shp_2_mcu_addr = 979,
793622360430e90d47a0d028dd5333a13771589331Shawn Guo};
803622360430e90d47a0d028dd5333a13771589331Shawn Guo
813622360430e90d47a0d028dd5333a13771589331Shawn Guostatic struct sdma_platform_data imx25_sdma_pdata __initdata = {
822e534b21a51bad9d1fad125adac6ad49e64e1d7aShawn Guo	.fw_name = "sdma-imx25.bin",
833622360430e90d47a0d028dd5333a13771589331Shawn Guo	.script_addrs = &imx25_sdma_script,
843622360430e90d47a0d028dd5333a13771589331Shawn Guo};
853622360430e90d47a0d028dd5333a13771589331Shawn Guo
863bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhaostatic const struct resource imx25_audmux_res[] __initconst = {
873bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhao	DEFINE_RES_MEM(MX25_AUDMUX_BASE_ADDR, SZ_16K),
883bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhao};
893bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhao
90b78d8e59a6f611e229fab8ec3014c58eba975000Shawn Guovoid __init imx25_soc_init(void)
91b78d8e59a6f611e229fab8ec3014c58eba975000Shawn Guo{
92e7fc6ae7446710a487510d212137a43289bbe90eShawn Guo	/* i.mx25 has the i.mx31 type gpio */
93e7fc6ae7446710a487510d212137a43289bbe90eShawn Guo	mxc_register_gpio("imx31-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0);
94e7fc6ae7446710a487510d212137a43289bbe90eShawn Guo	mxc_register_gpio("imx31-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0);
95e7fc6ae7446710a487510d212137a43289bbe90eShawn Guo	mxc_register_gpio("imx31-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0);
96e7fc6ae7446710a487510d212137a43289bbe90eShawn Guo	mxc_register_gpio("imx31-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0);
973622360430e90d47a0d028dd5333a13771589331Shawn Guo
9862550cd7c08f1a38d0ade1de18baec10f83412bbShawn Guo	/* i.mx25 has the i.mx35 type sdma */
9962550cd7c08f1a38d0ade1de18baec10f83412bbShawn Guo	imx_add_imx_sdma("imx35-sdma", MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata);
1003bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhao	/* i.mx25 has the i.mx31 type audmux */
1013bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhao	platform_device_register_simple("imx31-audmux", 0, imx25_audmux_res,
1023bc34a6143359d2bf19a5e79b9017aeffc6660adRichard Zhao					ARRAY_SIZE(imx25_audmux_res));
103b78d8e59a6f611e229fab8ec3014c58eba975000Shawn Guo}
104