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