关于S3C6400 DM9000a 驱动



平台:S3C6400

Ethernet :DM9000a

由于是A公司的BSP,改了网卡的片选,发现可以找到ID,但是就是ping失败。厂家的帮忙 ,加上了一些debug信息,最后发现应该是SROM的设置不对,发的数据高位都没有了。A公司开发板用的是片选1,在u-boot初始化的时候,调用了一个CS8900的初始化文件,里面设置了SROM的相关设置,由于只是改了DM9000_BASE为片选4,可以发现ID,但是SROM的band width没有改,用的是8位。
S3C6400设置bank 1 的工作模式是
SROM_BW_REG &= ~(0xf << 4);是针对bank 1;
我们用的是bank 4:
        SROM_BW_REG &= ~(0xf << 16);
        SROM_BW_REG |= (1<<16);
这样子就对了,将bank4设置为16位。

每一個片選可以分別設置其 IO 讀寫的動作時間!以符合不同設備所需要的 IO 時間.由于A公司是借助于CS8900的一个接口来操作DM9000,所以要调IO时间。考虑到DM9000比cs8900速度快,要根据具体情况来调整IO时间,优化性能。

另外说一下linux 自带的dm9000驱动。经过与代理商的工程师沟通,发现自带的dm9000是有缺陷的,最大的问题是中断,电平中断和沿中断的处理。需要修改驱动,主要修改:

(1) 接收的流程處理
(2) 發送的流程處理
(3) 中斷的流程處理
(4) time out 的流程處理
(5) eeprom 及 phy 的讀寫處理


自带的dm9000x主要缺陷在下面:


(1) dm9000_rx中:
ior(db, DM9000_MRCMDX); /* Dummy read */

/* Get most updated data */
rxbyte = readb(db->io_data);

/* Status check: this byte must be 0 or 1 */
if (rxbyte > DM9000_PKT_RDY) {
printk("status check failed: %d/n", rxbyte);
iow(db, DM9000_RCR, 0x00); /* Stop Device */
iow(db, DM9000_ISR, IMR_PAR); /* Stop INT request */
return;
若是指針出錯rxbyte 會永大於 1
這樣系統就停了,完全無法回復!

這樣的系統是不合格的!
因為要有防錯回復的問題!
2)
dm9000_tx_done

int tx_status = ior(db, DM9000_NSR); /* Got TX status */

if (tx_status & (NSR_TX2END | NSR_TX1END)) {

NSR 這一個寄存器讀取後,會被清除為 0
發送就會卡住了!無法再繼續下去了
(3)
dm9000_interrupt

/* Received the coming packet */
if (int_status & ISR_PRS)
dm9000_rx(dev);

/* Trnasmit Interrupt check */
if (int_status & ISR_PTS)
dm9000_tx_done(dev, db);

這一邊流程不好!
有時會導致發包超時
(4)
dm9000_tx_done

dev->trans_start = jiffies;
若是沒有封包發出時!
並沒有清除!
故會造成若是一段時間沒有發包之後,網卡一定會被復位!
若是此時版子在做 UDP 的流媒體下載!
就會出錯
(5)
mdelay(8); /* according to the datasheet 200us should be enough,
but it doesn't work */
iow(db, DM9000_EPCR, 0x0);
return (ior(db, DM9000_EPDRL) + (ior(db, DM9000_EPDRH) << 8));

流程不好

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值