> -----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