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 4:58 PM
> To: Dong, Chuanxiao
> Cc: linux-mmc@xxxxxxxxxxxxxxx; Gao, Yunpeng
> Subject: Re: mmc_core: question on mmc_do_erase function
> 
> On 13/10/10 11:35, Dong, Chuanxiao wrote:
> >> -----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?
> 
> The block driver currently sets max_discard_sectors to UINT_MAX i.e.
> unlimited.  This could instead be based on a value from the driver
> in the same way that max_sectors is.  Refer to mmc_init_queue()
> in card/queue.c
OK, thanks for your help, Adrian.

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