x210項目重新回顧之六uboot_2013.10之網卡移植

源代碼https://github.com/jimingkang/news5pv210/tree/master/u-boot-2013.10

參考 https://github.com/jimingkang/news5pv210/tree/master/aston_u-boot-2013.10

A)改動文件:

modified:   u-boot-2013.10/include/configs/s5p_goni.h
modified:   u-boot-2013.10/board/samsung/goni/goni.c
modified:   u-boot-2013.10/net/eth.c

1)s5p_goni.h中添加net相關配置:

//#define CONFIG_CMD_NET                        // 添加網絡支持 ,這裏不需要,因爲在config_default_cmd.h中已經有了
#define CONFIG_CMD_PING                         // 添加ping命令支持
#define DM9000_16BIT_DATA
#define CONFIG_DRIVER_DM9000    1
#ifdef CONFIG_DRIVER_DM9000
//#define CONFIG_DM9000_BASE            (0xA8000000)
#define CONFIG_DM9000_BASE              (0x88000300)
#define DM9000_IO                       (CONFIG_DM9000_BASE)
#if defined(DM9000_16BIT_DATA)
//#define DM9000_DATA                   (CONFIG_DM9000_BASE+2)
#define DM9000_DATA                     (CONFIG_DM9000_BASE+4)
#else
#define DM9000_DATA                     (CONFIG_DM9000_BASE+1)
#endif
#endif

//jimmy comment #undef CONFIG_CMD_NET       //記得把這行註釋

2)goni.c

static void dm9000_pre_init(void)
{
    unsigned int tmp;

#if defined(DM9000_16BIT_DATA)
//    SROM_BW_REG &= ~(0xf << 20);
//    SROM_BW_REG |= (0<<23) | (0<<22) | (0<<21) | (1<<20);
    SROM_BW_REG &= ~(0xf << 4);
    SROM_BW_REG |= (1<<7) | (1<<6) | (1<<5) | (1<<4);

#else    
    SROM_BW_REG &= ~(0xf << 20);
    SROM_BW_REG |= (0<<19) | (0<<18) | (0<<16);
#endif
//    SROM_BC5_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));
    SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));

    tmp = MP01CON_REG;
//    tmp &=~(0xf<<20);
//    tmp |=(2<<20);
    tmp &=~(0xf<<4);
    tmp |=(2<<4);

    MP01CON_REG = tmp;
}

int board_init(void)    
{
    /* Set Initial global variables */
    s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE;

    gd->bd->bi_arch_number = MACH_TYPE_SMDKV210;        // 在這裏更改
    gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;

// 添加網卡初始化
#ifdef CONFIG_DRIVER_DM9000
    dm9000_pre_init();
#endif

    return 0;
}

3) eth.c

extern int dm9000_initialize(bd_t *bis);
// 自己定義一個board_eth_init函數,做網卡驅動添加工作
static int board_eth_init(bd_t *bis)
{
        return dm9000_initialize(bis);  //設置eth_device
註銷下面一行,否則編譯不過

//int board_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));

 

B)燒寫啓動

》./sd_fusing.sh /dev/sdb

uboot輸出

---------------------------------------------------------

Goni # ping 131.128.52.96
dm9000 i/o: 0x88000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
Using dm9000 device
host 131.128.52.96 is alive
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章