FL2440开发板的U-boot-2010.09版本移植(五)支持DM9000网卡和板级相关LED等配置

时间:2021-10-31 09:38:06

一、在board/fl2440/fl2440.c 中对GPIO和PLL的配置进行修改
(1)修改GPIO和PLL的配置(36行附近)为:

[cpp]  view plain copy
  1. #if FCLK_SPEED==0       /* Fout = 203MHz, Fin = 12MHz for Audio */  
  2. #define M_MDIV  0xC3  
  3. #define M_PDIV  0x4  
  4. #define M_SDIV  0x1  
  5. #elif FCLK_SPEED==1       
  6.   
  7. #if defined(CONFIG_S3C2410)     /* Fout = 202.8MHz */  
  8. #define M_MDIV  0xA1  
  9. #define M_PDIV  0x3  
  10. #define M_SDIV  0x1  
  11. #endif  
  12.   
  13. #if defined(CONFIG_S3C2440)     /* Fout = 405MHZ */  
  14. #define M_MDIV 0x7f  
  15. #define M_PDIV 0x2  
  16. #define M_SDIV 0x1  
  17. #endif  
  18. #endif  
  19.   
  20. #define USB_CLOCK 1  
  21.   
  22. #if USB_CLOCK==0  
  23. #define U_M_MDIV    0xA1  
  24. #define U_M_PDIV    0x3  
  25. #define U_M_SDIV    0x1  
  26. #elif USB_CLOCK==1  
  27.   
  28. #if defined(CONFIG_S3C2410)  
  29. #define U_M_MDIV    0x48  
  30. #define U_M_PDIV    0x3  
  31. #define U_M_SDIV    0x2  
  32. #endif  
  33.   
  34. #if defined(CONFIG_S3C2440)/*见S3C2440数据手册P227*/  
  35. #define U_M_MDIV    0x38  
  36. #define U_M_PDIV    0x2  
  37. #define U_M_SDIV    0x2  
  38. #endif  
  39. #endif  

(2)修改board_init函数中的LED和蜂鸣器的GPIO寄存器配置:

[cpp]  view plain copy
  1. #if defined(CONFIG_S3C2440)  
  2.        gpio->GPBCON = 0x001dd7fc;//初始化相应的GPB 口为输出口,为显示LED作准备,之前忘了改导致灯不亮  
  3. #else  
  4.         gpio->GPBCON = 0x00044555;  
  5. #endif  
  6.     
  7. ……  
  8.           gpio->GPCCON =  0xAAAA56A9;  
  9.         gpio->GPCUP = 0xFFFFFFFF;  
  10. ……   
  11.   
  12.   
  13.   
  14.   
  15.   
  16.         gpio->GPDUP = 0xFFFFFFFF;  

 (3)为引导linux 内核,修改开发板的类型代码

#if defined(CONFIG_S3C2410)
 /* arch number of SMDK2410-Board */
 gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
#endif
#if defined(CONFIG_S3C2440)
 /* arch number of fl2440-Board */
 gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
#endif

(4)为使int board_init (void)设置完成后,为了测试Uboot第二阶段工作完成,我加入了LED灯亮起显示,在int board_init (void)的最后添加:

[cpp]  view plain copy
  1.         icache_enable();  
  2.         dcache_enable();  
  3. #if defined(CONFIG_FL2440)  
  4.         gpio->GPBDAT = ((1<<5) | (1<<6) | (1<<8) | (1<<10));//使LED全部熄灭  
  5.         gpio->GPBDAT &= 0xffe;  /*添加关闭蜂鸣器语句*/  
  6.         gpio->GPBDAT = ~(3<<5);          
  7. #endif  
  8.         return 0;  

二、添加DM9000网卡的支持

(5)在board/fl2440/fl2440.c 中board_eth_init函数添加对dm9000的支持

[cpp]  view plain copy
  1. #ifdef CONFIG_CMD_NET  
  2. int board_eth_init(bd_t *bis)  
  3. {  
  4.     int rc = 0;  
  5. #ifdef CONFIG_CS8900  
  6.     rc = cs8900_initialize(0, CONFIG_CS8900_BASE);  
  7. #endif  
  8.   
  9. #ifdef CONFIG_DRIVER_DM9000  
  10.     rc = dm9000_initialize(bis);  
  11. #endif  
  12.     return rc;  
  13. }  
  14. #endif  


(6)然后修改include/configs/fl2440.h文件中关于网卡的宏定义,将原来的:

[cpp]  view plain copy
  1. #define CONFIG_NET_MULTI  
  2. #define CONFIG_CS8900       /* we have a CS8900 on-board */  
  3. #define CONFIG_CS8900_BASE  0x19000300  
  4. #define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */  

修改为:

[cpp]  view plain copy
  1. #define CONFIG_NET_MULTI                 1  
  2. #define CONFIG_DRIVER_DM9000             1  
  3. #define CONFIG_DM9000_USE_16BIT          1  
  4. #define CONFIG_DM9000_BASE               0x20000300  
  5. #define DM9000_IO                        CONFIG_DM9000_BASE  
  6. #define DM9000_DATA                      (CONFIG_DM9000_BASE + 4)  
  7. #define CONFIG_DM9000_NO_SROM            1 //防止dm9000去从srom中读取物理地址信息  

并在98行附近添加

[cpp]  view plain copy
  1. #define CONFIG_CMD_DHCP  
  2. #define CONFIG_CMD_PING   /*****add by yanghao*****/  
  3. #define CONFIG_CMD_NET    /*add by yanghao*/  

并将104行附近

[cpp]  view plain copy
  1. /*#define CONFIG_ETHADDR    08:00:3e:26:0a:5b */  
  2. #define CONFIG_NETMASK          255.255.255.0  
  3. #define CONFIG_IPADDR       10.0.0.110  
  4. #define CONFIG_SERVERIP     10.0.0.1  

修改为:

[cpp]  view plain copy
  1. #define CONFIG_ETHADDR  08:00:3e:26:0a:5b   
  2. #define CONFIG_NETMASK          255.255.255.0  
  3. #define CONFIG_IPADDR       192.168.1.4  
  4. #define CONFIG_SERVERIP     192.168.1.1  

这里是修改开发板的IP地址和主机地址,需要将主机地址修改成“192.168.1.1” (进行与主机NFS、tftp等网络通信时)

 (7)打开driver/net/dm9000x.c文件,修改函数dm9000_halt,防止uboot在ping通主机后又马上断开连接的问题

[cpp]  view plain copy
    1. static void dm9000_halt(struct eth_device *netdev)  
    2. {  
    3.     DM9000_DBG("%s\n", __func__);  
    4. #if 0    //为了防止dm9000建立连接后又马上断开的情况  
    5.     /* RESET devie */  
    6.     phy_write(0, 0x8000);   /* PHY RESET */  
    7.     DM9000_iow(DM9000_GPR, 0x01);   /* Power-Down PHY */  
    8.     DM9000_iow(DM9000_IMR, 0x80);   /* Disable all interrupt */  
    9.     DM9000_iow(DM9000_RCR, 0x00);   /* Disable RX */  
    10. #endif  
    11. }  

source http://blog.csdn.net/yanghao23/article/details/7693435