RE: mmc_core: question on mmc_do_erase function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Adrian Hunter [mailto:adrian.hunter@xxxxxxxxx]
> Sent: Wednesday, October 13, 2010 3:56 PM
> To: Dong, Chuanxiao
> Cc: linux-mmc@xxxxxxxxxxxxxxx; Gao, Yunpeng
> Subject: Re: mmc_core: question on mmc_do_erase function
> 
> On 12/10/10 16:11, Dong, Chuanxiao wrote:
> > Hi adrian
> >
> > I got some questions about MMC driver erase function. Help you can
> > give me some suggestion. My host controller is a kind of SDHCI host
> > controller. And testing below code by using HD micro SD card.
> > +	memset(&cmd, 0, sizeof(struct mmc_command));
> > +	cmd.opcode = MMC_ERASE;
> > +	cmd.arg = arg;
> > +	cmd.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
> > +	mmc_set_erase_timeout(card,&cmd, arg, qty);
> > +	err = mmc_wait_for_cmd(card->host,&cmd, 0);
> > +	if (err) {
> > +		printk(KERN_ERR "mmc_erase: erase error %d, status %#x\n",
> > +		       err, cmd.resp[0]);
> > +		err = -EIO;
> > +		goto out;
> > +	}
> > As MMC 4.4 standard said, CMD38 need R1B response. So when SDHCI host
> > controller got a SDHCI_INT_RESPONSE interrupt, driver will ignore
> > this and keep on waiting for a SDHCI_INT_DATA_END interrupt to finish
> > MMC_ERASE command. Then I got problems....My host controller will got
> > a DATA_TIMEOUT interrupt if host controller cannot generate any
> > interrupt during its waiting time, unfortunately the max waiting time
> > for my SDHCI host controller is 5s.
> 
> I don't know SDHCI.  Can you disable the timeout altogether and use a
> timer?
> 
OK, thanks. If hardware can disable the timeout interrupt, I will try use a timer. But if the host controllers cannot disable the their timeout interrupt, what should they do?

> > So if any ERASE operation need
> > more than 5s seconds to finish, my controller will not finish the
> > ERASE operation and only generate a DATA_TIMEOUT interrupt. The ERASE
> > will be failed. Another, MMC driver also has a 10s timer to keep
> > watch over the interrupt, if ERASE operation need more than 10s to
> > finish, this timer also can report a TIMEOUT error. I think
> > cmd->erase_timeout can help to set the timer expires, but how to deal
> > with this issue for SDHCI host controller? How about split ERASE
> > groups to be smaller ones?
> 
> Where is the erase coming from?  A file system?  The discard ioctl?
Erase command comes from the discard ioctl.

> It is possible to set a maximum size for the discard but it pays
> no attention to alignment, so you can get very sub-optimal erases.

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux