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