xref: /openbmc/linux/arch/arm/mach-ux500/cpu-db8500.c (revision 7b8ddb06)
1cb165c52SRabin Vincent /*
2cb165c52SRabin Vincent  * Copyright (C) 2008-2009 ST-Ericsson
3cb165c52SRabin Vincent  *
4cb165c52SRabin Vincent  * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
5cb165c52SRabin Vincent  *
6cb165c52SRabin Vincent  * This program is free software; you can redistribute it and/or modify
7cb165c52SRabin Vincent  * it under the terms of the GNU General Public License version 2, as
8cb165c52SRabin Vincent  * published by the Free Software Foundation.
9cb165c52SRabin Vincent  *
10cb165c52SRabin Vincent  */
11cb165c52SRabin Vincent #include <linux/types.h>
12cb165c52SRabin Vincent #include <linux/init.h>
13cb165c52SRabin Vincent #include <linux/device.h>
14cb165c52SRabin Vincent #include <linux/amba/bus.h>
15cb165c52SRabin Vincent #include <linux/irq.h>
16cb165c52SRabin Vincent #include <linux/gpio.h>
17cb165c52SRabin Vincent #include <linux/platform_device.h>
18cb165c52SRabin Vincent #include <linux/io.h>
19cb165c52SRabin Vincent 
20cb165c52SRabin Vincent #include <asm/mach/map.h>
21cb165c52SRabin Vincent #include <mach/hardware.h>
22cb165c52SRabin Vincent #include <mach/setup.h>
23cb165c52SRabin Vincent #include <mach/devices.h>
24cb165c52SRabin Vincent 
25cb165c52SRabin Vincent static struct platform_device *platform_devs[] __initdata = {
26cb165c52SRabin Vincent 	&u8500_gpio_devs[0],
27cb165c52SRabin Vincent 	&u8500_gpio_devs[1],
28cb165c52SRabin Vincent 	&u8500_gpio_devs[2],
29cb165c52SRabin Vincent 	&u8500_gpio_devs[3],
30cb165c52SRabin Vincent 	&u8500_gpio_devs[4],
31cb165c52SRabin Vincent 	&u8500_gpio_devs[5],
32cb165c52SRabin Vincent 	&u8500_gpio_devs[6],
33cb165c52SRabin Vincent 	&u8500_gpio_devs[7],
34cb165c52SRabin Vincent 	&u8500_gpio_devs[8],
357b8ddb06SLinus Walleij 	&u8500_dma40_device,
36cb165c52SRabin Vincent };
37cb165c52SRabin Vincent 
38cb165c52SRabin Vincent /* minimum static i/o mapping required to boot U8500 platforms */
39cb165c52SRabin Vincent static struct map_desc u8500_io_desc[] __initdata = {
40cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K),
41cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_GPIO0_BASE, SZ_4K),
42cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_GPIO1_BASE, SZ_4K),
43cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_GPIO2_BASE, SZ_4K),
44cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_GPIO3_BASE, SZ_4K),
45cb165c52SRabin Vincent };
46cb165c52SRabin Vincent 
47cb165c52SRabin Vincent static struct map_desc u8500ed_io_desc[] __initdata = {
48cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_MTU0_BASE_ED, SZ_4K),
49cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_CLKRST7_BASE_ED, SZ_8K),
50cb165c52SRabin Vincent };
51cb165c52SRabin Vincent 
52cb165c52SRabin Vincent static struct map_desc u8500v1_io_desc[] __initdata = {
53cb165c52SRabin Vincent 	__IO_DEV_DESC(U8500_MTU0_BASE, SZ_4K),
54cb165c52SRabin Vincent };
55cb165c52SRabin Vincent 
56cb165c52SRabin Vincent void __init u8500_map_io(void)
57cb165c52SRabin Vincent {
58cb165c52SRabin Vincent 	ux500_map_io();
59cb165c52SRabin Vincent 
60cb165c52SRabin Vincent 	iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc));
61cb165c52SRabin Vincent 
62cb165c52SRabin Vincent 	if (cpu_is_u8500ed())
63cb165c52SRabin Vincent 		iotable_init(u8500ed_io_desc, ARRAY_SIZE(u8500ed_io_desc));
64cb165c52SRabin Vincent 	else
65cb165c52SRabin Vincent 		iotable_init(u8500v1_io_desc, ARRAY_SIZE(u8500v1_io_desc));
66cb165c52SRabin Vincent }
67cb165c52SRabin Vincent 
68cb165c52SRabin Vincent /*
69cb165c52SRabin Vincent  * This function is called from the board init
70cb165c52SRabin Vincent  */
71cb165c52SRabin Vincent void __init u8500_init_devices(void)
72cb165c52SRabin Vincent {
73cb165c52SRabin Vincent 	ux500_init_devices();
74cb165c52SRabin Vincent 
757b8ddb06SLinus Walleij 	if (cpu_is_u8500ed())
767b8ddb06SLinus Walleij 		dma40_u8500ed_fixup();
777b8ddb06SLinus Walleij 
78cb165c52SRabin Vincent 	/* Register the platform devices */
79cb165c52SRabin Vincent 	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
80cb165c52SRabin Vincent 
81cb165c52SRabin Vincent 	return ;
82cb165c52SRabin Vincent }
83