mini2440使用linux 3.0内核,默认总线时序过快造成网络数据错误率高的问题

因需要测试CAN,2.6内核没有包含MCP251x的驱动。

把3.0的驱动移植到2.6中改动比较多,索性直接使用3.0的内核。

linux官方已直接支持mini2440,使用默认的配置编译就可以工作。

但发现网络性能很差,抓包发现数据经常有错误。

 

考虑到使用原来的程序网络都正常,怀疑是因为总线速率过快的原因。

对比友善之臂发布的2.6.32的dm9000的驱动,发现里面有添加时序配置的部分。

把这部分添加到3.0内核的dm9000驱动中,问题解决。

 

代码片段:

#if defined(CONFIG_ARCH_S3C2410)
#include <mach/regs-mem.h>
#endif

static int __init
dm9000_init(void)
{
#if defined(CONFIG_ARCH_S3C2410)
    unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
    unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
    *((volatile unsigned int *)S3C2410_BWSCON) =
            (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
    *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif

 

posted on 2012-11-23 02:50  aozima  阅读(678)  评论(0)    收藏  举报

导航