modify for dm9000
author刘益星 <lyx@rock-chips.com>
Wed, 12 May 2010 15:14:07 +0000 (15:14 +0000)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jun 2010 05:34:51 +0000 (13:34 +0800)
arch/arm/mach-rk2818/board-midsdk.c
arch/arm/mach-rk2818/devices.c
arch/arm/mach-rk2818/devices.h
arch/arm/mach-rk2818/include/mach/rk2818_iomap.h
drivers/net/dm9000.c

index f8bd720a88f887a6ef594b3d0a9c6fa3bd2699a0..b83ae59c014fa4f5b92013f444c2dee38d04a1b9 100644 (file)
@@ -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,
 };
 
index 8542c54acee1f8abaaccfb20aeedfdb027bf96f4..7a61c1cb659f97729d25debcdafef7c4769bcdd8 100644 (file)
@@ -24,6 +24,9 @@
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
 
+#include <linux/dm9000.h>
+#include <mach/gpio.h>
+
 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,
+       }
+};
index 0b4458115a0fc4011e53d062a371d0d9a3cc0045..0ef2452a3ca8d135e1656b07f42ec848bdd8e212 100644 (file)
@@ -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
index 0ad0a3bcdfaa4c319fc2dd08889ea1ff29103873..ab4d3803968198daa395d15a13c94f4660713072 100644 (file)
@@ -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
index 31b8bef49d2e1a15323634f29b72b8453815b0e8..da2b18ba41e83c914525cc74e320c33a71d668ad 100644 (file)
@@ -37,6 +37,7 @@
 #include <asm/delay.h>
 #include <asm/irq.h>
 #include <asm/io.h>
+#include <mach/gpio.h>
 
 #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);