xref: /openbmc/linux/arch/sh/boards/board-edosk7760.c (revision 347cd34f)
13db91708SLuca Santini /*
23db91708SLuca Santini  * Renesas Europe EDOSK7760 Board Support
33db91708SLuca Santini  *
43db91708SLuca Santini  * Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd.
53db91708SLuca Santini  * Author: Luca Santini <luca.santini@spesonline.com>
63db91708SLuca Santini  *
73db91708SLuca Santini  * This program is free software; you can redistribute it and/or modify
83db91708SLuca Santini  * it under the terms of the GNU General Public License as published by
93db91708SLuca Santini  * the Free Software Foundation; either version 2 of the License, or
103db91708SLuca Santini  * (at your option) any later version.
113db91708SLuca Santini  *
123db91708SLuca Santini  * This program is distributed in the hope that it will be useful,
133db91708SLuca Santini  * but WITHOUT ANY WARRANTY; without even the implied warranty of
143db91708SLuca Santini  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
153db91708SLuca Santini  * GNU General Public License for more details.
163db91708SLuca Santini  *
173db91708SLuca Santini  * You should have received a copy of the GNU General Public License
183db91708SLuca Santini  * along with this program; if not, write to the Free Software
193db91708SLuca Santini  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
203db91708SLuca Santini  */
213db91708SLuca Santini #include <linux/init.h>
223db91708SLuca Santini #include <linux/types.h>
233db91708SLuca Santini #include <linux/platform_device.h>
243db91708SLuca Santini #include <linux/smc91x.h>
253db91708SLuca Santini #include <linux/interrupt.h>
263db91708SLuca Santini #include <linux/i2c.h>
274018ffcfSLuca Santini #include <linux/mtd/physmap.h>
283db91708SLuca Santini #include <asm/machvec.h>
293db91708SLuca Santini #include <asm/io.h>
303db91708SLuca Santini #include <asm/addrspace.h>
313db91708SLuca Santini #include <asm/delay.h>
323db91708SLuca Santini #include <asm/i2c-sh7760.h>
33347cd34fSLuca Santini #include <asm/sizes.h>
343db91708SLuca Santini 
353db91708SLuca Santini /* Bus state controller registers for CS4 area */
363db91708SLuca Santini #define BSC_CS4BCR	0xA4FD0010
373db91708SLuca Santini #define BSC_CS4WCR	0xA4FD0030
383db91708SLuca Santini 
393db91708SLuca Santini #define SMC_IOBASE	0xA2000000
403db91708SLuca Santini #define SMC_IO_OFFSET	0x300
413db91708SLuca Santini #define SMC_IOADDR	(SMC_IOBASE + SMC_IO_OFFSET)
423db91708SLuca Santini 
433db91708SLuca Santini #define ETHERNET_IRQ	5
443db91708SLuca Santini 
454018ffcfSLuca Santini /* NOR flash */
464018ffcfSLuca Santini static struct mtd_partition edosk7760_nor_flash_partitions[] = {
474018ffcfSLuca Santini 	{
484018ffcfSLuca Santini 		.name = "bootloader",
494018ffcfSLuca Santini 		.offset = 0,
50347cd34fSLuca Santini 		.size = SZ_256K,
514018ffcfSLuca Santini 		.mask_flags = MTD_WRITEABLE,	/* Read-only */
524018ffcfSLuca Santini 	}, {
534018ffcfSLuca Santini 		.name = "kernel",
544018ffcfSLuca Santini 		.offset = MTDPART_OFS_APPEND,
55347cd34fSLuca Santini 		.size = SZ_2M,
564018ffcfSLuca Santini 	}, {
574018ffcfSLuca Santini 		.name = "fs",
584018ffcfSLuca Santini 		.offset = MTDPART_OFS_APPEND,
59347cd34fSLuca Santini 		.size = SZ_26M,
604018ffcfSLuca Santini 	}, {
614018ffcfSLuca Santini 		.name = "other",
624018ffcfSLuca Santini 		.offset = MTDPART_OFS_APPEND,
634018ffcfSLuca Santini 		.size = MTDPART_SIZ_FULL,
644018ffcfSLuca Santini 	},
654018ffcfSLuca Santini };
664018ffcfSLuca Santini 
674018ffcfSLuca Santini static struct physmap_flash_data edosk7760_nor_flash_data = {
684018ffcfSLuca Santini 	.width		= 4,
694018ffcfSLuca Santini 	.parts		= edosk7760_nor_flash_partitions,
704018ffcfSLuca Santini 	.nr_parts	= ARRAY_SIZE(edosk7760_nor_flash_partitions),
714018ffcfSLuca Santini };
724018ffcfSLuca Santini 
734018ffcfSLuca Santini static struct resource edosk7760_nor_flash_resources[] = {
744018ffcfSLuca Santini 	[0] = {
754018ffcfSLuca Santini 		.name	= "NOR Flash",
764018ffcfSLuca Santini 		.start	= 0x00000000,
77347cd34fSLuca Santini 		.end	= 0x00000000 + SZ_32M - 1,
784018ffcfSLuca Santini 		.flags	= IORESOURCE_MEM,
794018ffcfSLuca Santini 	}
804018ffcfSLuca Santini };
814018ffcfSLuca Santini 
824018ffcfSLuca Santini static struct platform_device edosk7760_nor_flash_device = {
834018ffcfSLuca Santini 	.name		= "physmap-flash",
844018ffcfSLuca Santini 	.resource	= edosk7760_nor_flash_resources,
854018ffcfSLuca Santini 	.num_resources	= ARRAY_SIZE(edosk7760_nor_flash_resources),
864018ffcfSLuca Santini 	.dev		= {
874018ffcfSLuca Santini 		.platform_data = &edosk7760_nor_flash_data,
884018ffcfSLuca Santini 	},
894018ffcfSLuca Santini };
904018ffcfSLuca Santini 
913db91708SLuca Santini /* i2c initialization functions */
923db91708SLuca Santini static struct sh7760_i2c_platdata i2c_pd = {
933db91708SLuca Santini 	.speed_khz	= 400,
943db91708SLuca Santini };
953db91708SLuca Santini 
963db91708SLuca Santini static struct resource sh7760_i2c1_res[] = {
973db91708SLuca Santini 	{
983db91708SLuca Santini 		.start	= SH7760_I2C1_MMIO,
993db91708SLuca Santini 		.end	= SH7760_I2C1_MMIOEND,
1003db91708SLuca Santini 		.flags	= IORESOURCE_MEM,
1013db91708SLuca Santini 	},{
1023db91708SLuca Santini 		.start	= SH7760_I2C1_IRQ,
1033db91708SLuca Santini 		.end	= SH7760_I2C1_IRQ,
1043db91708SLuca Santini 		.flags	= IORESOURCE_IRQ,
1053db91708SLuca Santini 	},
1063db91708SLuca Santini };
1073db91708SLuca Santini 
1083db91708SLuca Santini static struct platform_device sh7760_i2c1_dev = {
1093db91708SLuca Santini 	.dev    = {
1103db91708SLuca Santini 		.platform_data	= &i2c_pd,
1113db91708SLuca Santini 	},
1123db91708SLuca Santini 
1133db91708SLuca Santini 	.name		= SH7760_I2C_DEVNAME,
1143db91708SLuca Santini 	.id		= 1,
1153db91708SLuca Santini 	.resource	= sh7760_i2c1_res,
1163db91708SLuca Santini 	.num_resources	= ARRAY_SIZE(sh7760_i2c1_res),
1173db91708SLuca Santini };
1183db91708SLuca Santini 
1193db91708SLuca Santini static struct resource sh7760_i2c0_res[] = {
1203db91708SLuca Santini 	{
1213db91708SLuca Santini 		.start	= SH7760_I2C0_MMIO,
1223db91708SLuca Santini 		.end	= SH7760_I2C0_MMIOEND,
1233db91708SLuca Santini 		.flags	= IORESOURCE_MEM,
1243db91708SLuca Santini 	}, {
1253db91708SLuca Santini 		.start	= SH7760_I2C0_IRQ,
1263db91708SLuca Santini 		.end	= SH7760_I2C0_IRQ,
1273db91708SLuca Santini 		.flags	= IORESOURCE_IRQ,
1283db91708SLuca Santini 	},
1293db91708SLuca Santini };
1303db91708SLuca Santini 
1313db91708SLuca Santini static struct platform_device sh7760_i2c0_dev = {
1323db91708SLuca Santini 	.dev    = {
1333db91708SLuca Santini 		.platform_data	= &i2c_pd,
1343db91708SLuca Santini 	},
1353db91708SLuca Santini 	.name		= SH7760_I2C_DEVNAME,
1363db91708SLuca Santini 	.id		= 0,
1373db91708SLuca Santini 	.resource	= sh7760_i2c0_res,
1383db91708SLuca Santini 	.num_resources	= ARRAY_SIZE(sh7760_i2c0_res),
1393db91708SLuca Santini };
1403db91708SLuca Santini 
1413db91708SLuca Santini /* eth initialization functions */
1423db91708SLuca Santini static struct smc91x_platdata smc91x_info = {
1433db91708SLuca Santini 	.flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL,
1443db91708SLuca Santini };
1453db91708SLuca Santini 
1463db91708SLuca Santini static struct resource smc91x_res[] = {
1473db91708SLuca Santini 	[0] = {
1483db91708SLuca Santini 		.start	= SMC_IOADDR,
149347cd34fSLuca Santini 		.end	= SMC_IOADDR + SZ_32 - 1,
1503db91708SLuca Santini 		.flags	= IORESOURCE_MEM,
1513db91708SLuca Santini 	},
1523db91708SLuca Santini 	[1] = {
1533db91708SLuca Santini 		.start	= ETHERNET_IRQ,
1543db91708SLuca Santini 		.end	= ETHERNET_IRQ,
1553db91708SLuca Santini 		.flags	= IORESOURCE_IRQ ,
1563db91708SLuca Santini 	}
1573db91708SLuca Santini };
1583db91708SLuca Santini 
1593db91708SLuca Santini static struct platform_device smc91x_dev = {
1603db91708SLuca Santini 	.name		= "smc91x",
1613db91708SLuca Santini 	.id		= -1,
1623db91708SLuca Santini 	.num_resources	= ARRAY_SIZE(smc91x_res),
1633db91708SLuca Santini 	.resource	= smc91x_res,
1643db91708SLuca Santini 
1653db91708SLuca Santini 	.dev	= {
1663db91708SLuca Santini 		.platform_data	= &smc91x_info,
1673db91708SLuca Santini 	},
1683db91708SLuca Santini };
1693db91708SLuca Santini 
1703db91708SLuca Santini /* platform init code */
1713db91708SLuca Santini static struct platform_device *edosk7760_devices[] __initdata = {
1724018ffcfSLuca Santini 	&smc91x_dev,
1734018ffcfSLuca Santini 	&edosk7760_nor_flash_device,
1743db91708SLuca Santini 	&sh7760_i2c0_dev,
1753db91708SLuca Santini 	&sh7760_i2c1_dev,
1763db91708SLuca Santini };
1773db91708SLuca Santini 
1783db91708SLuca Santini static int __init init_edosk7760_devices(void)
1793db91708SLuca Santini {
1803db91708SLuca Santini 	plat_irq_setup_pins(IRQ_MODE_IRQ);
1813db91708SLuca Santini 
1823db91708SLuca Santini 	return platform_add_devices(edosk7760_devices,
1833db91708SLuca Santini 				    ARRAY_SIZE(edosk7760_devices));
1843db91708SLuca Santini }
1853db91708SLuca Santini __initcall(init_edosk7760_devices);
1863db91708SLuca Santini 
1873db91708SLuca Santini /*
1883db91708SLuca Santini  * The Machine Vector
1893db91708SLuca Santini  */
1903db91708SLuca Santini struct sh_machine_vector mv_edosk7760 __initmv = {
1913db91708SLuca Santini 	.mv_name	= "EDOSK7760",
1923db91708SLuca Santini 	.mv_nr_irqs	= 128,
1933db91708SLuca Santini };
194