红联Linux门户
Linux帮助

Linux下FL2440 2.6.28 SD卡驱动BUG解决

发布时间:2015-02-13 21:52:23来源:linux网站作者:linux人

FL2440的2.6.28的内核,SD卡驱动默认是有问题的,在linux-2.6.28.7\drivers\mmc\host目录的s3cmci.c文件的do_pio_write函数中做如下修改:


static void do_pio_write(struct s3cmci_host *host)
{
void __iomem *to_ptr;
int res;
u32 fifo;
u32 *ptr;
to_ptr = host->base + host->sdidata;
//while ((fifo = fifo_free(host)))
while ((fifo = fifo_free(host))>3) //lqm changed from feiling FAE.11-01-19
{
if (!host->pio_bytes) 
{
res = get_data_buffer(host, &host->pio_bytes,&host->pio_ptr);
if (res)
{  
dbg(host, dbg_pio,"pio_write(): complete (no more data).\n");
host->pio_active =XFER_NONE;
return; 
}
dbg(host, dbg_pio,"pio_write(): new source: [%i]@[%p]\n",host->pio_bytes,

host->pio_ptr);
}
/* If we have reached the end of the block, we have to 
* write exactly the remaining number of bytes.  If we
* in the middle of the block, we have to write full
* words, so round down to an even multiple of 4. */
if (fifo >=host->pio_bytes)
fifo = host->pio_bytes;
else
fifo -= fifo & 3;
host->pio_bytes -= fifo;
host->pio_count += fifo;
fifo = (fifo + 3) >> 2;
ptr = host->pio_ptr;
while (fifo--)
writel(*ptr++, to_ptr);
host->pio_ptr = ptr;
}
enable_imask(host, S3C2410_SDIIMSK_TXFIFOHALF);
}


经测试,1G,2G的SD卡可稳定运行。