From 26bd381d94f7be1d7e8e5556032f09bd1a84fd92 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=88=98=E7=9B=8A=E6=98=9F?= Date: Wed, 12 May 2010 15:14:07 +0000 Subject: [PATCH] modify for dm9000 --- arch/arm/mach-rk2818/board-midsdk.c | 10 ++++- arch/arm/mach-rk2818/devices.c | 41 +++++++++++++++++++ arch/arm/mach-rk2818/devices.h | 1 + .../mach-rk2818/include/mach/rk2818_iomap.h | 3 +- drivers/net/dm9000.c | 16 ++++++-- 5 files changed, 66 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-rk2818/board-midsdk.c b/arch/arm/mach-rk2818/board-midsdk.c index f8bd720a88f8..b83ae59c014f 100644 --- a/arch/arm/mach-rk2818/board-midsdk.c +++ b/arch/arm/mach-rk2818/board-midsdk.c @@ -110,7 +110,14 @@ static struct map_desc rk2818_io_desc[] __initdata = { .length = RK2818_INTC_SIZE, .type = MT_DEVICE }, - + + { + .virtual = RK2818_NANDC_BASE, + .pfn = __phys_to_pfn(RK2818_NANDC_PHYS), + .length = RK2818_NANDC_SIZE, + .type = MT_DEVICE + }, + { .virtual = RK2818_SDRAMC_BASE, .pfn = __phys_to_pfn(RK2818_SDRAMC_PHYS), @@ -278,6 +285,7 @@ static struct spi_board_info board_spi_devices[] = { static struct platform_device *devices[] __initdata = { &rk2818_device_uart1, + &rk2818_device_dm9k, &rk2818_device_spim, }; diff --git a/arch/arm/mach-rk2818/devices.c b/arch/arm/mach-rk2818/devices.c index 8542c54acee1..7a61c1cb659f 100644 --- a/arch/arm/mach-rk2818/devices.c +++ b/arch/arm/mach-rk2818/devices.c @@ -24,6 +24,9 @@ #include #include +#include +#include + static struct resource resources_i2c0[] = { { .start = IRQ_NR_I2C0, @@ -157,3 +160,41 @@ struct platform_device rk2818_device_spim = { .resource = resources_spim, }; +//net device +/* DM9000 */ +static struct resource dm9k_resource[] = { + [0] = { + .start = RK2818_NANDC_PHYS + 0x800 + 1*0x100, //nand_cs1 + .end = RK2818_NANDC_PHYS + 0x800 + 1*0x100 + 3, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = RK2818_NANDC_PHYS + (0x800+1*0x100)+ 0x4, + .end = RK2818_NANDC_PHYS + (0x800+1*0x100)+ 0x4 + 3, + .flags = IORESOURCE_MEM, + }, + [2] = { + .start = RK2818_PIN_PE2,//use pe2 as interrupt + .end = RK2818_PIN_PE2, + .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, + } + +}; + +/* for the moment we limit ourselves to 8bit IO until some + * better IO routines can be written and tested +*/ + +static struct dm9000_plat_data dm9k_platdata = { + .flags = DM9000_PLATF_8BITONLY, +}; + +struct platform_device rk2818_device_dm9k = { + .name = "dm9000", + .id = 0, + .num_resources = ARRAY_SIZE(dm9k_resource), + .resource = dm9k_resource, + .dev = { + .platform_data = &dm9k_platdata, + } +}; diff --git a/arch/arm/mach-rk2818/devices.h b/arch/arm/mach-rk2818/devices.h index 0b4458115a0f..0ef2452a3ca8 100644 --- a/arch/arm/mach-rk2818/devices.h +++ b/arch/arm/mach-rk2818/devices.h @@ -23,5 +23,6 @@ extern struct platform_device rk2818_device_uart3; extern struct platform_device rk2818_device_spim; extern struct platform_device rk2818_device_i2c0; extern struct platform_device rk2818_device_i2c1; +extern struct platform_device rk2818_device_dm9k; #endif diff --git a/arch/arm/mach-rk2818/include/mach/rk2818_iomap.h b/arch/arm/mach-rk2818/include/mach/rk2818_iomap.h index 0ad0a3bcdfaa..ab4d38039681 100644 --- a/arch/arm/mach-rk2818/include/mach/rk2818_iomap.h +++ b/arch/arm/mach-rk2818/include/mach/rk2818_iomap.h @@ -89,8 +89,9 @@ #define RK2818_SDMMC0_PHYS 0x100AC000 #define RK2818_SDMMC0_SIZE SZ_8K +#define RK2818_NANDC_BASE 0xFF0AE000 #define RK2818_NANDC_PHYS 0x100AE000 -#define RK2818_NANDC_SIZE SZ_16K +#define RK2818_NANDC_SIZE SZ_8K #define RK2818_SDRAMC_BASE 0xFF0B0000 #define RK2818_SDRAMC_PHYS 0x100B0000 diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index 31b8bef49d2e..da2b18ba41e8 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c @@ -37,6 +37,7 @@ #include #include #include +#include #include "dm9000.h" @@ -132,7 +133,7 @@ typedef struct board_info { } board_info_t; /* debug code */ - +#define DEBUG_LEVEL 4 #define dm9000_dbg(db, lev, msg...) do { \ if ((lev) < CONFIG_DM9000_DEBUGLEVEL && \ (lev) < db->debug_level) { \ @@ -824,8 +825,10 @@ dm9000_start_xmit(struct sk_buff *skb, struct net_device *dev) dm9000_dbg(db, 3, "%s:\n", __func__); - if (db->tx_pkt_cnt > 1) + if (db->tx_pkt_cnt > 1) { + dev_dbg(db->dev, "netdev tx busy\n"); return NETDEV_TX_BUSY; + } spin_lock_irqsave(&db->lock, flags); @@ -1283,6 +1286,8 @@ dm9000_probe(struct platform_device *pdev) db->dev = &pdev->dev; db->ndev = ndev; + //db->debug_level = 5;//add by liuyx@20100511 + spin_lock_init(&db->lock); mutex_init(&db->addr_lock); @@ -1337,8 +1342,13 @@ dm9000_probe(struct platform_device *pdev) /* fill in parameters for net-dev structure */ ndev->base_addr = (unsigned long)db->io_addr; - ndev->irq = db->irq_res->start; + #if 0 + ndev->irq = db->irq_res->start; + #else//modify by liuyx@20100510 + ndev->irq = gpio_to_irq(db->irq_res->start); + #endif + /* ensure at least we have a default set of IO routines */ dm9000_set_io(db, iosize); -- 2.34.1