diff options
| author | Ben Dooks <ben-linux@fluff.org> | 2005-06-23 21:56:47 +0100 | 
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-06-23 21:56:47 +0100 | 
| commit | d97a666f36cf051e1b1c60505be3d6e9b51f785f (patch) | |
| tree | 2a4c9fda11b55f86354566f8a1253eb62cb7b86a | |
| parent | d9dc58049d3ed5c63c1a6ac82c217558b4ec623a (diff) | |
[PATCH] ARM: 2729/1: DM9000 platform support for S3C2410 machines (BAST, VR1000)
Patch from Ben Dooks
Add platform_device information for DM9000 chip(s) on the
Simtec BAST and the VR1000 board.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
| -rw-r--r-- | arch/arm/mach-s3c2410/mach-bast.c | 49 | ||||
| -rw-r--r-- | arch/arm/mach-s3c2410/mach-vr1000.c | 77 | 
2 files changed, 117 insertions, 9 deletions
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 3bb97eb6e693..f3e970039b65 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c @@ -26,6 +26,7 @@   *     03-Mar-2005 BJD  Ensured that bast-cpld.h is included   *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA   *     14-Mar-2006 BJD  Updated for __iomem changes + *     22-Jun-2006 BJD  Added DM9000 platform information  */  #include <linux/kernel.h> @@ -35,6 +36,7 @@  #include <linux/timer.h>  #include <linux/init.h>  #include <linux/device.h> +#include <linux/dm9000.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> @@ -53,6 +55,7 @@  #include <asm/arch/regs-serial.h>  #include <asm/arch/regs-gpio.h>  #include <asm/arch/regs-mem.h> +#include <asm/arch/regs-lcd.h>  #include <asm/arch/nand.h>  #include <linux/mtd/mtd.h> @@ -112,7 +115,6 @@ static struct map_desc bast_iodesc[] __initdata = {    { VA_C2(BAST_VA_ISAMEM),  PA_CS2(BAST_PA_ISAMEM),   SZ_16M, MT_DEVICE },    { VA_C2(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET),  SZ_1M,  MT_DEVICE },    { VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO),  SZ_1M,  MT_DEVICE }, -  { VA_C2(BAST_VA_DM9000),  PA_CS2(BAST_PA_DM9000),   SZ_1M,  MT_DEVICE },    { VA_C2(BAST_VA_IDEPRI),  PA_CS3(BAST_PA_IDEPRI),   SZ_1M,  MT_DEVICE },    { VA_C2(BAST_VA_IDESEC),  PA_CS3(BAST_PA_IDESEC),   SZ_1M,  MT_DEVICE },    { VA_C2(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, @@ -123,7 +125,6 @@ static struct map_desc bast_iodesc[] __initdata = {    { VA_C3(BAST_VA_ISAMEM),  PA_CS3(BAST_PA_ISAMEM),   SZ_16M, MT_DEVICE },    { VA_C3(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET),  SZ_1M,  MT_DEVICE },    { VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO),  SZ_1M,  MT_DEVICE }, -  { VA_C3(BAST_VA_DM9000),  PA_CS3(BAST_PA_DM9000),   SZ_1M,  MT_DEVICE },    { VA_C3(BAST_VA_IDEPRI),  PA_CS3(BAST_PA_IDEPRI),   SZ_1M,  MT_DEVICE },    { VA_C3(BAST_VA_IDESEC),  PA_CS3(BAST_PA_IDESEC),   SZ_1M,  MT_DEVICE },    { VA_C3(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, @@ -134,7 +135,6 @@ static struct map_desc bast_iodesc[] __initdata = {    { VA_C4(BAST_VA_ISAMEM),  PA_CS4(BAST_PA_ISAMEM),   SZ_16M, MT_DEVICE },    { VA_C4(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET),  SZ_1M,  MT_DEVICE },    { VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO),  SZ_1M,  MT_DEVICE }, -  { VA_C4(BAST_VA_DM9000),  PA_CS4(BAST_PA_DM9000),   SZ_1M,  MT_DEVICE },    { VA_C4(BAST_VA_IDEPRI),  PA_CS5(BAST_PA_IDEPRI),   SZ_1M,  MT_DEVICE },    { VA_C4(BAST_VA_IDESEC),  PA_CS5(BAST_PA_IDESEC),   SZ_1M,  MT_DEVICE },    { VA_C4(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, @@ -145,7 +145,6 @@ static struct map_desc bast_iodesc[] __initdata = {    { VA_C5(BAST_VA_ISAMEM),  PA_CS5(BAST_PA_ISAMEM),   SZ_16M, MT_DEVICE },    { VA_C5(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET),  SZ_1M,  MT_DEVICE },    { VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO),  SZ_1M,  MT_DEVICE }, -  { VA_C5(BAST_VA_DM9000),  PA_CS5(BAST_PA_DM9000),   SZ_1M,  MT_DEVICE },    { VA_C5(BAST_VA_IDEPRI),  PA_CS5(BAST_PA_IDEPRI),   SZ_1M,  MT_DEVICE },    { VA_C5(BAST_VA_IDESEC),  PA_CS5(BAST_PA_IDESEC),   SZ_1M,  MT_DEVICE },    { VA_C5(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, @@ -313,6 +312,45 @@ static struct s3c2410_platform_nand bast_nand_info = {  	.select_chip	= bast_nand_select,  }; +/* DM9000 */ + +static struct resource bast_dm9k_resource[] = { +	[0] = { +		.start = S3C2410_CS5 + BAST_PA_DM9000, +		.end   = S3C2410_CS5 + BAST_PA_DM9000 + 3, +		.flags = IORESOURCE_MEM +	}, +	[1] = { +		.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40, +		.end   = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f, +		.flags = IORESOURCE_MEM +	}, +	[2] = { +		.start = IRQ_DM9000, +		.end   = IRQ_DM9000, +		.flags = IORESOURCE_IRQ +	} + +}; + +/* for the moment we limit ourselves to 16bit IO until some + * better IO routines can be written and tested +*/ + +struct dm9000_plat_data bast_dm9k_platdata = { +	.flags		= DM9000_PLATF_16BITONLY +}; + +static struct platform_device bast_device_dm9k = { +	.name		= "dm9000", +	.id		= 0, +	.num_resources	= ARRAY_SIZE(bast_dm9k_resource), +	.resource	= bast_dm9k_resource, +	.dev		= { +		.platform_data = &bast_dm9k_platdata, +	} +}; +  /* Standard BAST devices */ @@ -324,7 +362,8 @@ static struct platform_device *bast_devices[] __initdata = {  	&s3c_device_iis,   	&s3c_device_rtc,  	&s3c_device_nand, -	&bast_device_nor +	&bast_device_nor, +	&bast_device_dm9k,  };  static struct clk *bast_clocks[] = { diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c index 5512146b1ce4..76be074944a0 100644 --- a/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/arch/arm/mach-s3c2410/mach-vr1000.c @@ -27,6 +27,7 @@   *     10-Feb-2005 BJD  Added power-off capability   *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA   *     14-Mar-2006 BJD  void __iomem fixes + *     22-Jun-2006 BJD  Added DM9000 platform information  */  #include <linux/kernel.h> @@ -35,6 +36,7 @@  #include <linux/list.h>  #include <linux/timer.h>  #include <linux/init.h> +#include <linux/dm9000.h>  #include <linux/serial.h>  #include <linux/tty.h> @@ -98,28 +100,24 @@ static struct map_desc vr1000_iodesc[] __initdata = {     * are only 8bit */    /* slow, byte */ -  { VA_C2(VR1000_VA_DM9000),  PA_CS2(VR1000_PA_DM9000),	  SZ_1M,  MT_DEVICE },    { VA_C2(VR1000_VA_IDEPRI),  PA_CS3(VR1000_PA_IDEPRI),	  SZ_1M,  MT_DEVICE },    { VA_C2(VR1000_VA_IDESEC),  PA_CS3(VR1000_PA_IDESEC),	  SZ_1M,  MT_DEVICE },    { VA_C2(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },    { VA_C2(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },    /* slow, word */ -  { VA_C3(VR1000_VA_DM9000),  PA_CS3(VR1000_PA_DM9000),	  SZ_1M,  MT_DEVICE },    { VA_C3(VR1000_VA_IDEPRI),  PA_CS3(VR1000_PA_IDEPRI),	  SZ_1M,  MT_DEVICE },    { VA_C3(VR1000_VA_IDESEC),  PA_CS3(VR1000_PA_IDESEC),	  SZ_1M,  MT_DEVICE },    { VA_C3(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },    { VA_C3(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },    /* fast, byte */ -  { VA_C4(VR1000_VA_DM9000),  PA_CS4(VR1000_PA_DM9000),	  SZ_1M,  MT_DEVICE },    { VA_C4(VR1000_VA_IDEPRI),  PA_CS5(VR1000_PA_IDEPRI),	  SZ_1M,  MT_DEVICE },    { VA_C4(VR1000_VA_IDESEC),  PA_CS5(VR1000_PA_IDESEC),	  SZ_1M,  MT_DEVICE },    { VA_C4(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },    { VA_C4(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },    /* fast, word */ -  { VA_C5(VR1000_VA_DM9000),  PA_CS5(VR1000_PA_DM9000),	  SZ_1M,  MT_DEVICE },    { VA_C5(VR1000_VA_IDEPRI),  PA_CS5(VR1000_PA_IDEPRI),	  SZ_1M,  MT_DEVICE },    { VA_C5(VR1000_VA_IDESEC),  PA_CS5(VR1000_PA_IDESEC),	  SZ_1M,  MT_DEVICE },    { VA_C5(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, @@ -246,6 +244,74 @@ static struct platform_device vr1000_nor = {  	.resource	= vr1000_nor_resource,  }; +/* DM9000 ethernet devices */ + +static struct resource vr1000_dm9k0_resource[] = { +	[0] = { +		.start = S3C2410_CS5 + VR1000_PA_DM9000, +		.end   = S3C2410_CS5 + VR1000_PA_DM9000 + 3, +		.flags = IORESOURCE_MEM +	}, +	[1] = { +		.start = S3C2410_CS5 + VR1000_PA_DM9000 + 0x40, +		.end   = S3C2410_CS5 + VR1000_PA_DM9000 + 0x7f, +		.flags = IORESOURCE_MEM +	}, +	[2] = { +		.start = IRQ_VR1000_DM9000A, +		.end   = IRQ_VR1000_DM9000A, +		.flags = IORESOURCE_IRQ +	} + +}; + +static struct resource vr1000_dm9k1_resource[] = { +	[0] = { +		.start = S3C2410_CS5 + VR1000_PA_DM9000 + 0x80, +		.end   = S3C2410_CS5 + VR1000_PA_DM9000 + 0x83, +		.flags = IORESOURCE_MEM +	}, +	[1] = { +		.start = S3C2410_CS5 + VR1000_PA_DM9000 + 0xC0, +		.end   = S3C2410_CS5 + VR1000_PA_DM9000 + 0xFF, +		.flags = IORESOURCE_MEM +	}, +	[2] = { +		.start = IRQ_VR1000_DM9000N, +		.end   = IRQ_VR1000_DM9000N, +		.flags = IORESOURCE_IRQ +	} +}; + +/* for the moment we limit ourselves to 16bit IO until some + * better IO routines can be written and tested +*/ + +struct dm9000_plat_data vr1000_dm9k_platdata = { +	.flags		= DM9000_PLATF_16BITONLY, +}; + +static struct platform_device vr1000_dm9k0 = { +	.name		= "dm9000", +	.id		= 0, +	.num_resources	= ARRAY_SIZE(vr1000_dm9k0_resource), +	.resource	= vr1000_dm9k0_resource, +	.dev		= { +		.platform_data = &vr1000_dm9k_platdata, +	} +}; + +static struct platform_device vr1000_dm9k1 = { +	.name		= "dm9000", +	.id		= 1, +	.num_resources	= ARRAY_SIZE(vr1000_dm9k1_resource), +	.resource	= vr1000_dm9k1_resource, +	.dev		= { +		.platform_data = &vr1000_dm9k_platdata, +	} +}; + +/* devices for this board */  static struct platform_device *vr1000_devices[] __initdata = {  	&s3c_device_usb, @@ -253,8 +319,11 @@ static struct platform_device *vr1000_devices[] __initdata = {  	&s3c_device_wdt,  	&s3c_device_i2c,  	&s3c_device_iis, +	&s3c_device_adc,  	&serial_device,  	&vr1000_nor, +	&vr1000_dm9k0, +	&vr1000_dm9k1  };  static struct clk *vr1000_clocks[] = {  | 
