linux IDE驱动问题

wdw1600 2009-08-27 07:38:51
先谢谢大家帮忙!!!
版本2.6.21
系统能识别IDE硬盘但是在add_device的时候报错,芯片是6410

int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif))
{
probe_hwif(hwif);

if (fixup)
fixup(hwif);

if (!hwif_init(hwif)) {
printk(KERN_INFO "%s: failed to initialize IDE interface\n",
hwif->name);
return -1;
}

if (hwif->present) {
u16 unit = 0;
int ret;

for (unit = 0; unit < MAX_DRIVES; ++unit) {
ide_drive_t *drive = &hwif->drives[unit];
/* For now don't attach absent drives, we may
want them on default or a new "empty" class
for hotplug reprobing ? */
if (drive->present) {
ret = device_register(&drive->gendev);//这里进去就没出来
if (ret < 0)
printk(KERN_WARNING "IDE: %s: "
"device_register error: %d\n",
__FUNCTION__, ret);
}
}
}
return 0;
}


还有个疑问就是上面device_register(&drive->gendev);这里的参数drive->gendev初始化的地方没找到

int device_register(struct device *dev)
{
device_initialize(dev);
return device_add(dev);//就是在这里面进入了死循环
}




打印信息如下:
##### s3c_ide_build_dmatable

##### s3c_ide_build_sglist

##### hwif->sg_nents 1

data: 5582f000 00001000

total size: 00001000, 1

rw: 5582f000 00001000

temp2: 00000058

wait_for_dev_ready: 0

2:S3C_ATA_CFG = 0x00000388

$WDWDBG$: set_trans_command founcation

00000000, 00000003

left: 00000ffe, 00001000

hdb: IRQ lost

hdb: lost interrupt

##### s3c_ide_dma_end

left: 00000ffe, 00001000

$WDWDBG$: s3c_ide_dma_end function

S3C_ATA_FIFO_STATUS: 10120000

S3C_ATA_FIFO_STATUS: 10120000

S3C_ATA_FIFO_STATUS: 10120000

。。。。。。。。。
后面就一直打印这个,我看了代码,是6410的FIFO状态寄存器高三位不为0就一直检测。知道为0
我曾试过在s3c_ide_probe()函数开始的地方初始化那个寄存器,但是那样后就不认识IDE了
...全文
117 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShowMan 2009-08-29
  • 打赏
  • 举报
回复
太具体了,帮不到忙了。
morris88 2009-08-29
  • 打赏
  • 举报
回复
这个针对具体的6410芯片的驱动,估计大多数人都没有接触过,我也一样没用过
  • 打赏
  • 举报
回复
帮顶。
wdw1600 2009-08-28
  • 打赏
  • 举报
回复
没人知道吗?

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧