18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright 2012 Sascha Hauer, Pengutronix 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/init.h> 78c2ecf20Sopenharmony_ci#include <linux/irq.h> 88c2ecf20Sopenharmony_ci#include <linux/of_address.h> 98c2ecf20Sopenharmony_ci#include <linux/of_irq.h> 108c2ecf20Sopenharmony_ci#include <linux/of_platform.h> 118c2ecf20Sopenharmony_ci#include <linux/mm.h> 128c2ecf20Sopenharmony_ci#include <asm/mach/arch.h> 138c2ecf20Sopenharmony_ci#include <asm/mach/map.h> 148c2ecf20Sopenharmony_ci#include <asm/mach/time.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include "common.h" 178c2ecf20Sopenharmony_ci#include "hardware.h" 188c2ecf20Sopenharmony_ci#include "mx27.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci/* MX27 memory map definition */ 218c2ecf20Sopenharmony_cistatic struct map_desc imx27_io_desc[] __initdata = { 228c2ecf20Sopenharmony_ci /* 238c2ecf20Sopenharmony_ci * this fixed mapping covers: 248c2ecf20Sopenharmony_ci * - AIPI1 258c2ecf20Sopenharmony_ci * - AIPI2 268c2ecf20Sopenharmony_ci * - AITC 278c2ecf20Sopenharmony_ci * - ROM Patch 288c2ecf20Sopenharmony_ci * - and some reserved space 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_ci imx_map_entry(MX27, AIPI, MT_DEVICE), 318c2ecf20Sopenharmony_ci /* 328c2ecf20Sopenharmony_ci * this fixed mapping covers: 338c2ecf20Sopenharmony_ci * - CSI 348c2ecf20Sopenharmony_ci * - ATA 358c2ecf20Sopenharmony_ci */ 368c2ecf20Sopenharmony_ci imx_map_entry(MX27, SAHB1, MT_DEVICE), 378c2ecf20Sopenharmony_ci /* 388c2ecf20Sopenharmony_ci * this fixed mapping covers: 398c2ecf20Sopenharmony_ci * - EMI 408c2ecf20Sopenharmony_ci */ 418c2ecf20Sopenharmony_ci imx_map_entry(MX27, X_MEMC, MT_DEVICE), 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci/* 458c2ecf20Sopenharmony_ci * Initialize the memory map. It is called during the 468c2ecf20Sopenharmony_ci * system startup to create static physical to virtual 478c2ecf20Sopenharmony_ci * memory map for the IO modules. 488c2ecf20Sopenharmony_ci */ 498c2ecf20Sopenharmony_cistatic void __init mx27_map_io(void) 508c2ecf20Sopenharmony_ci{ 518c2ecf20Sopenharmony_ci iotable_init(imx27_io_desc, ARRAY_SIZE(imx27_io_desc)); 528c2ecf20Sopenharmony_ci} 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistatic void __init imx27_init_early(void) 558c2ecf20Sopenharmony_ci{ 568c2ecf20Sopenharmony_ci mxc_set_cpu_type(MXC_CPU_MX27); 578c2ecf20Sopenharmony_ci} 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cistatic void __init mx27_init_irq(void) 608c2ecf20Sopenharmony_ci{ 618c2ecf20Sopenharmony_ci void __iomem *avic_base; 628c2ecf20Sopenharmony_ci struct device_node *np; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci np = of_find_compatible_node(NULL, NULL, "fsl,avic"); 658c2ecf20Sopenharmony_ci avic_base = of_iomap(np, 0); 668c2ecf20Sopenharmony_ci BUG_ON(!avic_base); 678c2ecf20Sopenharmony_ci mxc_init_irq(avic_base); 688c2ecf20Sopenharmony_ci} 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_cistatic const char * const imx27_dt_board_compat[] __initconst = { 718c2ecf20Sopenharmony_ci "fsl,imx27", 728c2ecf20Sopenharmony_ci NULL 738c2ecf20Sopenharmony_ci}; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ciDT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)") 768c2ecf20Sopenharmony_ci .map_io = mx27_map_io, 778c2ecf20Sopenharmony_ci .init_early = imx27_init_early, 788c2ecf20Sopenharmony_ci .init_irq = mx27_init_irq, 798c2ecf20Sopenharmony_ci .init_late = imx27_pm_init, 808c2ecf20Sopenharmony_ci .dt_compat = imx27_dt_board_compat, 818c2ecf20Sopenharmony_ciMACHINE_END 82