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