xref: /openbmc/linux/arch/sh/boards/mach-ecovec24/setup.c (revision 4138b74066cc33ede31bfd6cb2b7a5e685cfd327)
1*4138b740SKuninori Morimoto /*
2*4138b740SKuninori Morimoto  * Copyright (C) 2009 Renesas Solutions Corp.
3*4138b740SKuninori Morimoto  *
4*4138b740SKuninori Morimoto  * Kuninori Morimoto <morimoto.kuninori@renesas.com>
5*4138b740SKuninori Morimoto  *
6*4138b740SKuninori Morimoto  * This file is subject to the terms and conditions of the GNU General Public
7*4138b740SKuninori Morimoto  * License.  See the file "COPYING" in the main directory of this archive
8*4138b740SKuninori Morimoto  * for more details.
9*4138b740SKuninori Morimoto  */
10*4138b740SKuninori Morimoto 
11*4138b740SKuninori Morimoto #include <linux/init.h>
12*4138b740SKuninori Morimoto #include <linux/device.h>
13*4138b740SKuninori Morimoto #include <linux/platform_device.h>
14*4138b740SKuninori Morimoto #include <linux/mtd/physmap.h>
15*4138b740SKuninori Morimoto #include <linux/gpio.h>
16*4138b740SKuninori Morimoto #include <linux/interrupt.h>
17*4138b740SKuninori Morimoto #include <asm/io.h>
18*4138b740SKuninori Morimoto #include <asm/heartbeat.h>
19*4138b740SKuninori Morimoto #include <cpu/sh7724.h>
20*4138b740SKuninori Morimoto 
21*4138b740SKuninori Morimoto /*
22*4138b740SKuninori Morimoto  * Area   Address                    Interface     size  BusWidth
23*4138b740SKuninori Morimoto  * 0      0x0000_0000 ~ 0x03FF_FFFF  FROM          64MB  16bit
24*4138b740SKuninori Morimoto  * 1      0x0400_0000 ~ 0x07FF_FFFF  Internal I/O  64MB  16/32bit
25*4138b740SKuninori Morimoto  * 2      0x0800_0000 ~ 0x0BFF_FFFF  DRAM 2        64MB  32bit
26*4138b740SKuninori Morimoto  * 3      0x0C00_0000 ~ 0x0FFF_FFFF  DRAM 3        64MB  32bit
27*4138b740SKuninori Morimoto  * 4      0x1000_0000 ~ 0x13FF_FFFF  DRAM 4        64MB  32bit
28*4138b740SKuninori Morimoto  * 5      0x1400_0000 ~ 0x17FF_FFFF  DRAM 5        64MB  32bit
29*4138b740SKuninori Morimoto  * 6      0x1800_0000 ~ 0x1BFF_FFFF  MFI           64MB  16bit
30*4138b740SKuninori Morimoto  */
31*4138b740SKuninori Morimoto 
32*4138b740SKuninori Morimoto /* Heartbeat */
33*4138b740SKuninori Morimoto static unsigned char led_pos[] = { 0, 1, 2, 3 };
34*4138b740SKuninori Morimoto static struct heartbeat_data heartbeat_data = {
35*4138b740SKuninori Morimoto 	.regsize = 8,
36*4138b740SKuninori Morimoto 	.nr_bits = 4,
37*4138b740SKuninori Morimoto 	.bit_pos = led_pos,
38*4138b740SKuninori Morimoto };
39*4138b740SKuninori Morimoto 
40*4138b740SKuninori Morimoto static struct resource heartbeat_resources[] = {
41*4138b740SKuninori Morimoto 	[0] = {
42*4138b740SKuninori Morimoto 		.start  = 0xA405012C, /* PTG */
43*4138b740SKuninori Morimoto 		.end    = 0xA405012E - 1,
44*4138b740SKuninori Morimoto 		.flags  = IORESOURCE_MEM,
45*4138b740SKuninori Morimoto 	},
46*4138b740SKuninori Morimoto };
47*4138b740SKuninori Morimoto 
48*4138b740SKuninori Morimoto static struct platform_device heartbeat_device = {
49*4138b740SKuninori Morimoto 	.name           = "heartbeat",
50*4138b740SKuninori Morimoto 	.id             = -1,
51*4138b740SKuninori Morimoto 	.dev = {
52*4138b740SKuninori Morimoto 		.platform_data = &heartbeat_data,
53*4138b740SKuninori Morimoto 	},
54*4138b740SKuninori Morimoto 	.num_resources  = ARRAY_SIZE(heartbeat_resources),
55*4138b740SKuninori Morimoto 	.resource       = heartbeat_resources,
56*4138b740SKuninori Morimoto };
57*4138b740SKuninori Morimoto 
58*4138b740SKuninori Morimoto /* MTD */
59*4138b740SKuninori Morimoto static struct mtd_partition nor_flash_partitions[] = {
60*4138b740SKuninori Morimoto 	{
61*4138b740SKuninori Morimoto 		.name = "uboot",
62*4138b740SKuninori Morimoto 		.offset = 0,
63*4138b740SKuninori Morimoto 		.size = (256 * 1024),
64*4138b740SKuninori Morimoto 		.mask_flags = MTD_CAP_ROM,
65*4138b740SKuninori Morimoto 	}, {
66*4138b740SKuninori Morimoto 		.name = "kernel",
67*4138b740SKuninori Morimoto 		.offset = MTDPART_OFS_APPEND,
68*4138b740SKuninori Morimoto 		.size = (2 * 1024 * 1024),
69*4138b740SKuninori Morimoto 	}, {
70*4138b740SKuninori Morimoto 		.name = "free-area",
71*4138b740SKuninori Morimoto 		.offset = MTDPART_OFS_APPEND,
72*4138b740SKuninori Morimoto 		.size = MTDPART_SIZ_FULL,
73*4138b740SKuninori Morimoto 	},
74*4138b740SKuninori Morimoto };
75*4138b740SKuninori Morimoto 
76*4138b740SKuninori Morimoto static struct physmap_flash_data nor_flash_data = {
77*4138b740SKuninori Morimoto 	.width		= 2,
78*4138b740SKuninori Morimoto 	.parts		= nor_flash_partitions,
79*4138b740SKuninori Morimoto 	.nr_parts	= ARRAY_SIZE(nor_flash_partitions),
80*4138b740SKuninori Morimoto };
81*4138b740SKuninori Morimoto 
82*4138b740SKuninori Morimoto static struct resource nor_flash_resources[] = {
83*4138b740SKuninori Morimoto 	[0] = {
84*4138b740SKuninori Morimoto 		.name	= "NOR Flash",
85*4138b740SKuninori Morimoto 		.start	= 0x00000000,
86*4138b740SKuninori Morimoto 		.end	= 0x03ffffff,
87*4138b740SKuninori Morimoto 		.flags	= IORESOURCE_MEM,
88*4138b740SKuninori Morimoto 	}
89*4138b740SKuninori Morimoto };
90*4138b740SKuninori Morimoto 
91*4138b740SKuninori Morimoto static struct platform_device nor_flash_device = {
92*4138b740SKuninori Morimoto 	.name		= "physmap-flash",
93*4138b740SKuninori Morimoto 	.resource	= nor_flash_resources,
94*4138b740SKuninori Morimoto 	.num_resources	= ARRAY_SIZE(nor_flash_resources),
95*4138b740SKuninori Morimoto 	.dev		= {
96*4138b740SKuninori Morimoto 		.platform_data = &nor_flash_data,
97*4138b740SKuninori Morimoto 	},
98*4138b740SKuninori Morimoto };
99*4138b740SKuninori Morimoto 
100*4138b740SKuninori Morimoto static struct platform_device *ecovec_devices[] __initdata = {
101*4138b740SKuninori Morimoto 	&heartbeat_device,
102*4138b740SKuninori Morimoto 	&nor_flash_device,
103*4138b740SKuninori Morimoto };
104*4138b740SKuninori Morimoto 
105*4138b740SKuninori Morimoto static int __init devices_setup(void)
106*4138b740SKuninori Morimoto {
107*4138b740SKuninori Morimoto 	/* enable SCIFA0 */
108*4138b740SKuninori Morimoto 	gpio_request(GPIO_FN_SCIF0_TXD, NULL);
109*4138b740SKuninori Morimoto 	gpio_request(GPIO_FN_SCIF0_RXD, NULL);
110*4138b740SKuninori Morimoto 	gpio_request(GPIO_FN_SCIF0_SCK, NULL);
111*4138b740SKuninori Morimoto 
112*4138b740SKuninori Morimoto 	/* enable debug LED */
113*4138b740SKuninori Morimoto 	gpio_request(GPIO_PTG0, NULL);
114*4138b740SKuninori Morimoto 	gpio_request(GPIO_PTG1, NULL);
115*4138b740SKuninori Morimoto 	gpio_request(GPIO_PTG2, NULL);
116*4138b740SKuninori Morimoto 	gpio_request(GPIO_PTG3, NULL);
117*4138b740SKuninori Morimoto 	gpio_direction_output(GPIO_PTT0, 0);
118*4138b740SKuninori Morimoto 	gpio_direction_output(GPIO_PTT1, 0);
119*4138b740SKuninori Morimoto 	gpio_direction_output(GPIO_PTT2, 0);
120*4138b740SKuninori Morimoto 	gpio_direction_output(GPIO_PTT3, 0);
121*4138b740SKuninori Morimoto 
122*4138b740SKuninori Morimoto 	return platform_add_devices(ecovec_devices,
123*4138b740SKuninori Morimoto 				    ARRAY_SIZE(ecovec_devices));
124*4138b740SKuninori Morimoto }
125*4138b740SKuninori Morimoto device_initcall(devices_setup);
126*4138b740SKuninori Morimoto 
127*4138b740SKuninori Morimoto static struct sh_machine_vector mv_ecovec __initmv = {
128*4138b740SKuninori Morimoto 	.mv_name	= "R0P7724 (EcoVec)",
129*4138b740SKuninori Morimoto };
130