1da2014a2SPaul Mundt /* 2da2014a2SPaul Mundt * arch/sh/boards/renesas/x3proto/setup.c 3da2014a2SPaul Mundt * 4da2014a2SPaul Mundt * Renesas SH-X3 Prototype Board Support. 5da2014a2SPaul Mundt * 6e77eb364SPaul Mundt * Copyright (C) 2007 - 2008 Paul Mundt 7da2014a2SPaul Mundt * 8da2014a2SPaul Mundt * This file is subject to the terms and conditions of the GNU General Public 9da2014a2SPaul Mundt * License. See the file "COPYING" in the main directory of this archive 10da2014a2SPaul Mundt * for more details. 11da2014a2SPaul Mundt */ 12da2014a2SPaul Mundt #include <linux/init.h> 13da2014a2SPaul Mundt #include <linux/platform_device.h> 14da2014a2SPaul Mundt #include <linux/kernel.h> 15da2014a2SPaul Mundt #include <linux/io.h> 16e77eb364SPaul Mundt #include <linux/smc91x.h> 17da2014a2SPaul Mundt #include <asm/ilsel.h> 18da2014a2SPaul Mundt 19da2014a2SPaul Mundt static struct resource heartbeat_resources[] = { 20da2014a2SPaul Mundt [0] = { 21da2014a2SPaul Mundt .start = 0xb8140020, 22da2014a2SPaul Mundt .end = 0xb8140020, 23da2014a2SPaul Mundt .flags = IORESOURCE_MEM, 24da2014a2SPaul Mundt }, 25da2014a2SPaul Mundt }; 26da2014a2SPaul Mundt 27da2014a2SPaul Mundt static struct platform_device heartbeat_device = { 28da2014a2SPaul Mundt .name = "heartbeat", 29da2014a2SPaul Mundt .id = -1, 30da2014a2SPaul Mundt .num_resources = ARRAY_SIZE(heartbeat_resources), 31da2014a2SPaul Mundt .resource = heartbeat_resources, 32da2014a2SPaul Mundt }; 33da2014a2SPaul Mundt 34e77eb364SPaul Mundt static struct smc91x_platdata smc91x_info = { 35e77eb364SPaul Mundt .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, 36e77eb364SPaul Mundt }; 37e77eb364SPaul Mundt 38da2014a2SPaul Mundt static struct resource smc91x_resources[] = { 39da2014a2SPaul Mundt [0] = { 40da2014a2SPaul Mundt .start = 0x18000300, 41da2014a2SPaul Mundt .end = 0x18000300 + 0x10 - 1, 42da2014a2SPaul Mundt .flags = IORESOURCE_MEM, 43da2014a2SPaul Mundt }, 44da2014a2SPaul Mundt [1] = { 45da2014a2SPaul Mundt /* Filled in by ilsel */ 46da2014a2SPaul Mundt .flags = IORESOURCE_IRQ, 47da2014a2SPaul Mundt }, 48da2014a2SPaul Mundt }; 49da2014a2SPaul Mundt 50da2014a2SPaul Mundt static struct platform_device smc91x_device = { 51da2014a2SPaul Mundt .name = "smc91x", 52da2014a2SPaul Mundt .id = -1, 53da2014a2SPaul Mundt .resource = smc91x_resources, 54da2014a2SPaul Mundt .num_resources = ARRAY_SIZE(smc91x_resources), 55e77eb364SPaul Mundt .dev = { 56e77eb364SPaul Mundt .platform_data = &smc91x_info, 57e77eb364SPaul Mundt }, 58da2014a2SPaul Mundt }; 59da2014a2SPaul Mundt 60da2014a2SPaul Mundt static struct resource r8a66597_usb_host_resources[] = { 61da2014a2SPaul Mundt [0] = { 62da2014a2SPaul Mundt .name = "r8a66597_hcd", 63da2014a2SPaul Mundt .start = 0x18040000, 64da2014a2SPaul Mundt .end = 0x18080000 - 1, 65da2014a2SPaul Mundt .flags = IORESOURCE_MEM, 66da2014a2SPaul Mundt }, 67da2014a2SPaul Mundt [1] = { 68da2014a2SPaul Mundt .name = "r8a66597_hcd", 69da2014a2SPaul Mundt /* Filled in by ilsel */ 70da2014a2SPaul Mundt .flags = IORESOURCE_IRQ, 71da2014a2SPaul Mundt }, 72da2014a2SPaul Mundt }; 73da2014a2SPaul Mundt 74da2014a2SPaul Mundt static struct platform_device r8a66597_usb_host_device = { 75da2014a2SPaul Mundt .name = "r8a66597_hcd", 76da2014a2SPaul Mundt .id = -1, 77da2014a2SPaul Mundt .dev = { 78da2014a2SPaul Mundt .dma_mask = NULL, /* don't use dma */ 79da2014a2SPaul Mundt .coherent_dma_mask = 0xffffffff, 80da2014a2SPaul Mundt }, 81da2014a2SPaul Mundt .num_resources = ARRAY_SIZE(r8a66597_usb_host_resources), 82da2014a2SPaul Mundt .resource = r8a66597_usb_host_resources, 83da2014a2SPaul Mundt }; 84da2014a2SPaul Mundt 85da2014a2SPaul Mundt static struct resource m66592_usb_peripheral_resources[] = { 86da2014a2SPaul Mundt [0] = { 87da2014a2SPaul Mundt .name = "m66592_udc", 88da2014a2SPaul Mundt .start = 0x18080000, 89da2014a2SPaul Mundt .end = 0x180c0000 - 1, 90da2014a2SPaul Mundt .flags = IORESOURCE_MEM, 91da2014a2SPaul Mundt }, 92da2014a2SPaul Mundt [1] = { 93da2014a2SPaul Mundt .name = "m66592_udc", 94da2014a2SPaul Mundt /* Filled in by ilsel */ 95da2014a2SPaul Mundt .flags = IORESOURCE_IRQ, 96da2014a2SPaul Mundt }, 97da2014a2SPaul Mundt }; 98da2014a2SPaul Mundt 99da2014a2SPaul Mundt static struct platform_device m66592_usb_peripheral_device = { 100da2014a2SPaul Mundt .name = "m66592_udc", 101da2014a2SPaul Mundt .id = -1, 102da2014a2SPaul Mundt .dev = { 103da2014a2SPaul Mundt .dma_mask = NULL, /* don't use dma */ 104da2014a2SPaul Mundt .coherent_dma_mask = 0xffffffff, 105da2014a2SPaul Mundt }, 106da2014a2SPaul Mundt .num_resources = ARRAY_SIZE(m66592_usb_peripheral_resources), 107da2014a2SPaul Mundt .resource = m66592_usb_peripheral_resources, 108da2014a2SPaul Mundt }; 109da2014a2SPaul Mundt 110da2014a2SPaul Mundt static struct platform_device *x3proto_devices[] __initdata = { 111da2014a2SPaul Mundt &heartbeat_device, 112da2014a2SPaul Mundt &smc91x_device, 113da2014a2SPaul Mundt &r8a66597_usb_host_device, 114da2014a2SPaul Mundt &m66592_usb_peripheral_device, 115da2014a2SPaul Mundt }; 116da2014a2SPaul Mundt 117da2014a2SPaul Mundt static int __init x3proto_devices_setup(void) 118da2014a2SPaul Mundt { 119da2014a2SPaul Mundt r8a66597_usb_host_resources[1].start = 120da2014a2SPaul Mundt r8a66597_usb_host_resources[1].end = ilsel_enable(ILSEL_USBH_I); 121da2014a2SPaul Mundt 122da2014a2SPaul Mundt m66592_usb_peripheral_resources[1].start = 123da2014a2SPaul Mundt m66592_usb_peripheral_resources[1].end = ilsel_enable(ILSEL_USBP_I); 124da2014a2SPaul Mundt 125da2014a2SPaul Mundt smc91x_resources[1].start = 126da2014a2SPaul Mundt smc91x_resources[1].end = ilsel_enable(ILSEL_LAN); 127da2014a2SPaul Mundt 128da2014a2SPaul Mundt return platform_add_devices(x3proto_devices, 129da2014a2SPaul Mundt ARRAY_SIZE(x3proto_devices)); 130da2014a2SPaul Mundt } 131da2014a2SPaul Mundt device_initcall(x3proto_devices_setup); 132da2014a2SPaul Mundt 133da2014a2SPaul Mundt static void __init x3proto_init_irq(void) 134da2014a2SPaul Mundt { 135da2014a2SPaul Mundt plat_irq_setup_pins(IRQ_MODE_IRL3210); 136da2014a2SPaul Mundt 137da2014a2SPaul Mundt /* Set ICR0.LVLMODE */ 138da2014a2SPaul Mundt ctrl_outl(ctrl_inl(0xfe410000) | (1 << 21), 0xfe410000); 139da2014a2SPaul Mundt } 140da2014a2SPaul Mundt 141da2014a2SPaul Mundt static struct sh_machine_vector mv_x3proto __initmv = { 142da2014a2SPaul Mundt .mv_name = "x3proto", 143da2014a2SPaul Mundt .mv_init_irq = x3proto_init_irq, 144da2014a2SPaul Mundt }; 145