xref: /openbmc/linux/arch/sh/boards/mach-ecovec24/setup.c (revision b7056bc1943ec85084450e2f105650f837ae5cfc)
14138b740SKuninori Morimoto /*
24138b740SKuninori Morimoto  * Copyright (C) 2009 Renesas Solutions Corp.
34138b740SKuninori Morimoto  *
44138b740SKuninori Morimoto  * Kuninori Morimoto <morimoto.kuninori@renesas.com>
54138b740SKuninori Morimoto  *
64138b740SKuninori Morimoto  * This file is subject to the terms and conditions of the GNU General Public
74138b740SKuninori Morimoto  * License.  See the file "COPYING" in the main directory of this archive
84138b740SKuninori Morimoto  * for more details.
94138b740SKuninori Morimoto  */
104138b740SKuninori Morimoto 
114138b740SKuninori Morimoto #include <linux/init.h>
124138b740SKuninori Morimoto #include <linux/device.h>
134138b740SKuninori Morimoto #include <linux/platform_device.h>
144138b740SKuninori Morimoto #include <linux/mtd/physmap.h>
154138b740SKuninori Morimoto #include <linux/gpio.h>
164138b740SKuninori Morimoto #include <linux/interrupt.h>
174138b740SKuninori Morimoto #include <asm/io.h>
184138b740SKuninori Morimoto #include <asm/heartbeat.h>
194138b740SKuninori Morimoto #include <cpu/sh7724.h>
204138b740SKuninori Morimoto 
214138b740SKuninori Morimoto /*
22*b7056bc1SKuninori Morimoto  *  Address      Interface        BusWidth
23*b7056bc1SKuninori Morimoto  *-----------------------------------------
24*b7056bc1SKuninori Morimoto  *  0x0000_0000  uboot            16bit
25*b7056bc1SKuninori Morimoto  *  0x0004_0000  Linux romImage   16bit
26*b7056bc1SKuninori Morimoto  *  0x0014_0000  MTD for Linux    16bit
27*b7056bc1SKuninori Morimoto  *  0x0400_0000  Internal I/O     16/32bit
28*b7056bc1SKuninori Morimoto  *  0x0800_0000  DRAM             32bit
29*b7056bc1SKuninori Morimoto  *  0x1800_0000  MFI              16bit
304138b740SKuninori Morimoto  */
314138b740SKuninori Morimoto 
324138b740SKuninori Morimoto /* Heartbeat */
334138b740SKuninori Morimoto static unsigned char led_pos[] = { 0, 1, 2, 3 };
344138b740SKuninori Morimoto static struct heartbeat_data heartbeat_data = {
354138b740SKuninori Morimoto 	.regsize = 8,
364138b740SKuninori Morimoto 	.nr_bits = 4,
374138b740SKuninori Morimoto 	.bit_pos = led_pos,
384138b740SKuninori Morimoto };
394138b740SKuninori Morimoto 
404138b740SKuninori Morimoto static struct resource heartbeat_resources[] = {
414138b740SKuninori Morimoto 	[0] = {
424138b740SKuninori Morimoto 		.start  = 0xA405012C, /* PTG */
434138b740SKuninori Morimoto 		.end    = 0xA405012E - 1,
444138b740SKuninori Morimoto 		.flags  = IORESOURCE_MEM,
454138b740SKuninori Morimoto 	},
464138b740SKuninori Morimoto };
474138b740SKuninori Morimoto 
484138b740SKuninori Morimoto static struct platform_device heartbeat_device = {
494138b740SKuninori Morimoto 	.name           = "heartbeat",
504138b740SKuninori Morimoto 	.id             = -1,
514138b740SKuninori Morimoto 	.dev = {
524138b740SKuninori Morimoto 		.platform_data = &heartbeat_data,
534138b740SKuninori Morimoto 	},
544138b740SKuninori Morimoto 	.num_resources  = ARRAY_SIZE(heartbeat_resources),
554138b740SKuninori Morimoto 	.resource       = heartbeat_resources,
564138b740SKuninori Morimoto };
574138b740SKuninori Morimoto 
584138b740SKuninori Morimoto /* MTD */
594138b740SKuninori Morimoto static struct mtd_partition nor_flash_partitions[] = {
604138b740SKuninori Morimoto 	{
61*b7056bc1SKuninori Morimoto 		.name = "boot loader",
624138b740SKuninori Morimoto 		.offset = 0,
63*b7056bc1SKuninori Morimoto 		.size = (5 * 1024 * 1024),
644138b740SKuninori Morimoto 		.mask_flags = MTD_CAP_ROM,
654138b740SKuninori Morimoto 	}, {
664138b740SKuninori Morimoto 		.name = "free-area",
674138b740SKuninori Morimoto 		.offset = MTDPART_OFS_APPEND,
684138b740SKuninori Morimoto 		.size = MTDPART_SIZ_FULL,
694138b740SKuninori Morimoto 	},
704138b740SKuninori Morimoto };
714138b740SKuninori Morimoto 
724138b740SKuninori Morimoto static struct physmap_flash_data nor_flash_data = {
734138b740SKuninori Morimoto 	.width		= 2,
744138b740SKuninori Morimoto 	.parts		= nor_flash_partitions,
754138b740SKuninori Morimoto 	.nr_parts	= ARRAY_SIZE(nor_flash_partitions),
764138b740SKuninori Morimoto };
774138b740SKuninori Morimoto 
784138b740SKuninori Morimoto static struct resource nor_flash_resources[] = {
794138b740SKuninori Morimoto 	[0] = {
804138b740SKuninori Morimoto 		.name	= "NOR Flash",
814138b740SKuninori Morimoto 		.start	= 0x00000000,
824138b740SKuninori Morimoto 		.end	= 0x03ffffff,
834138b740SKuninori Morimoto 		.flags	= IORESOURCE_MEM,
844138b740SKuninori Morimoto 	}
854138b740SKuninori Morimoto };
864138b740SKuninori Morimoto 
874138b740SKuninori Morimoto static struct platform_device nor_flash_device = {
884138b740SKuninori Morimoto 	.name		= "physmap-flash",
894138b740SKuninori Morimoto 	.resource	= nor_flash_resources,
904138b740SKuninori Morimoto 	.num_resources	= ARRAY_SIZE(nor_flash_resources),
914138b740SKuninori Morimoto 	.dev		= {
924138b740SKuninori Morimoto 		.platform_data = &nor_flash_data,
934138b740SKuninori Morimoto 	},
944138b740SKuninori Morimoto };
954138b740SKuninori Morimoto 
964138b740SKuninori Morimoto static struct platform_device *ecovec_devices[] __initdata = {
974138b740SKuninori Morimoto 	&heartbeat_device,
984138b740SKuninori Morimoto 	&nor_flash_device,
994138b740SKuninori Morimoto };
1004138b740SKuninori Morimoto 
1014138b740SKuninori Morimoto static int __init devices_setup(void)
1024138b740SKuninori Morimoto {
1034138b740SKuninori Morimoto 	/* enable SCIFA0 */
1044138b740SKuninori Morimoto 	gpio_request(GPIO_FN_SCIF0_TXD, NULL);
1054138b740SKuninori Morimoto 	gpio_request(GPIO_FN_SCIF0_RXD, NULL);
1064138b740SKuninori Morimoto 
1074138b740SKuninori Morimoto 	/* enable debug LED */
1084138b740SKuninori Morimoto 	gpio_request(GPIO_PTG0, NULL);
1094138b740SKuninori Morimoto 	gpio_request(GPIO_PTG1, NULL);
1104138b740SKuninori Morimoto 	gpio_request(GPIO_PTG2, NULL);
1114138b740SKuninori Morimoto 	gpio_request(GPIO_PTG3, NULL);
112*b7056bc1SKuninori Morimoto 	gpio_direction_output(GPIO_PTG0, 0);
113*b7056bc1SKuninori Morimoto 	gpio_direction_output(GPIO_PTG1, 0);
114*b7056bc1SKuninori Morimoto 	gpio_direction_output(GPIO_PTG2, 0);
115*b7056bc1SKuninori Morimoto 	gpio_direction_output(GPIO_PTG3, 0);
1164138b740SKuninori Morimoto 
1174138b740SKuninori Morimoto 	return platform_add_devices(ecovec_devices,
1184138b740SKuninori Morimoto 				    ARRAY_SIZE(ecovec_devices));
1194138b740SKuninori Morimoto }
1204138b740SKuninori Morimoto device_initcall(devices_setup);
1214138b740SKuninori Morimoto 
1224138b740SKuninori Morimoto static struct sh_machine_vector mv_ecovec __initmv = {
1234138b740SKuninori Morimoto 	.mv_name	= "R0P7724 (EcoVec)",
1244138b740SKuninori Morimoto };
125