Re: imx6 emmc issue

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

 



Hi Ed,

On Thu, Nov 21, 2013 at 12:06 AM, Ed Sutter
<ed.sutter@xxxxxxxxxxxxxxxxxx> wrote:
> Dong,
> Hello, I am currently working on an Freescale iMX6 SABRE Board platform
> http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREBRD
>
> I'm trying to run with mainline kernel/uboot/buildroot just to be a bit more
> up-to-date than the LTIB distribution.  I am trying to setup a ROOTFS
> directly
> on the eMMC device.  Referring to this thread on the freescale forum:
>
> https://community.freescale.com/message/363870?et=watches.email.thread#363870
>
> I'm working with linux-3.12 and patch-v3.12-next-20131119 and I've applied
> these
> additional patches: http://comments.gmane.org/gmane.linux.kernel.mmc/23339
>
> I am able to access the emmc device from linux when using fdisk; however,
> when I attempt to run "mkfs.ext3 /dev/mmcblk0p1" the "Discarding device
> blocks"
> step takes over an hour (80 minutes last time I tried it).
>
> Fabio Estevam (from freescale) suggested I report this to you.
> Are you aware of this issue?  Are you aware of anyone that's actually tried
> to do mkfs.ext3 on emmc with a recent kernel version for this board/SOC?
>

Yes, i know about this issue.
It seems to be caused by eMMC discard feature.
root@imx6qdlsolo:/sys/block/mmcblk1/queue# cat discard_max_bytes
512
root@imx6qdlsolo:/sys/block/mmcblk1/queue# cat discard_zeroes_data
1
root@imx6qdlsolo:/sys/block/mmcblk1/queue# cat discard_granularity
0

The discard_max_bytes is to small.
When we do mkfs.ext3 it will ease the whole eMMC card with one block each time
which will cause huge time and looks like it hanged.

>From the command arg in CMD35 and CMD36, they means the erase range,
from and to.
It only eases one block one time (see log at last).

I still do not have time to check this issue detailedly, but quick
looking the code, it seems the
discard_max_bytes calculation is related to mmc->max_discard_to which
is based on
host->timeout_clk as

if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)
        host->timeout_clk = mmc->f_max / 1000;
mmc->max_discard_to = (1 << 27) / host->timeout_clk;

For uSDHC, and f_max is 198Mhz and then the max_discard_to will be
small, only 677 ms.

Currently i'm not sure if this is a common code issue or host driver issue.
Will look into it later when i've time.

If anyone else know about this issue, please let us know.

BTW, a quick workaround for this issue is do not use discard feature
for eMMC devices by:
mkfs.ext3 -E nodiscard, then it becomes very quick.

root@imx6qdlsolo:~# mkfs.ext3 -E nodiscard
/dev/mmcblk1p1/dev/mmcblk1p1/dev/mmcblk1p1
mke2fs 1.42.8 (20-Jun-2013)
mmc2: starting CMD35 arg 00000800 flags 00000095
sdhci-esdhc-imx 219c000.usdhc: desired SD clock: 52000000, actual: 49500000
sdhci-esdhc-imx 219c000.usdhc: change pinctrl state for uhs 7
sdhci-esdhc-imx 219c000.usdhc: desired SD clock: 52000000, actual: 49500000
sdhci [sdhci_irq()]: *** mmc2 got interrupt: 0x00000001
mmc2: req done (CMD35): 0: 00000900 00000000 00000000 00000000
mmc2: starting CMD36 arg 00000800 flags 00000095
sdhci [sdhci_irq()]: *** mmc2 got interrupt: 0x00000001
mmc2: req done (CMD36): 0: 00000900 00000000 00000000 00000000
mmc2: starting CMD38 arg 00000001 flags 0000049d
sdhci [sdhci_irq()]: *** mmc2 got interrupt: 0x00000001
mmc2: req done (CMD38): 0: 00000800 00000000 00000000 00000000
mmc2: starting CMD13 arg 00010000 flags 00000015
sdhci [sdhci_irq()]: *** mmc2 got interrupt: 0x00000001
mmc2: req done (CMD13): 0: 00000900 00000000 00000000 00000000
................

Regards
Dong Aisheng

> Thanks in advance,
> Ed Sutter
> --
> 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
--
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