Problems after recent changes to meson-gx-mmc driver

Heiner Kallweit hkallweit1 at gmail.com
Sat Sep 9 13:20:59 PDT 2017


Am 09.09.2017 um 21:53 schrieb Heiner Kallweit:
> Am 09.09.2017 um 16:05 schrieb Jerome Brunet:
>> On Sat, 2017-09-09 at 15:14 +0200, Heiner Kallweit wrote:
>>> Hi Jerome,
>>>
>>> the recent changes, most likely one of the changes affecting the clock phase
>>> setting
>>> or tuning, break mmc on my system (Odroid C2 + Hardkernel 128GB eMMC card).
>>> "Next" kernel from Aug 25th works fine here. Hadn't time yet to bisect the
>>> issue.
>>>
>>> As additional info, that's what the eMMC DT config looks like here.
>>> The issue remains when switching to HS200.
>>>
>>> /* eMMC */
>>> &sd_emmc_c {
>>>         status = "okay";
>>>         pinctrl-0 = <&emmc_pins>;
>>>         pinctrl-names = "default";
>>>
>>>         bus-width = <8>;
>>>         cap-sd-highspeed;
>>>         max-frequency = <200000000>;
>>>         non-removable;
>>>         disable-wp;
>>>         cap-mmc-highspeed;
>>>         mmc-ddr-1_8v;
>>>         mmc-hs400-1_8v;
>>
>> This is not the setup in the upstream dts.
>>
>> >From what I see here, this emmc is using dual data rate modes.
>> So the most impacting change would be :
>>
>> mmc: meson-gx: fix dual data rate mode frequencies
>>
>> Before this patch the output frequency was actually half what was reported, so
>> in this case, I suspect you were only running at 100MHz before. At this
>> frequency, tuning on the emmc is a lot easier to achieve, if even necessary.
>>
>> I have tested a fair amount of mmc configuration but I don't have setup with
>> HS400, but I think the following issue may rise:
>>
>> * Generating 200MHz DDR output out of fdiv2 is not possible: this would require
>> 400Mhz input which cannot be done from 1GHz and a simple divider. You can either
>> get 500Mhz (250Mhz out) or 250MHz (125MHz out)
>>
>> * In HS400, If I remember correctly, tuning is done in HS200, then switch to
>> HS400 (bumping the input clock) May it require different phase setting ?
>>
>> * Running 200MHz on the PCB is very demanding. I have seen that when trying
>> SDR104. Amplitude and signal quality drops significantly between 100MHz and
>> 200Mhz. Are you sure the lines (including PCB, connectors, etc) are able to cope
>> with this and provide a good enough signal to the eMMC chip ?
>>
>> Bottom line is that this eMMC never really run HS400, at least not at the speed
>> you thought it did. To get the rate you had previously, simply change this:
>>
>>         max-frequency = <100000000>;
>>
>>
>>
> Thanks a lot for the comprehensive explanation.
> However switching to HS400/100MHz or HS200/200MHz doesn't fix it for me.
> I have to go back to HS200/100MHz to get a stable system again.
> So most likely it's not only about patch "fix dual data rate mode frequencies".
> 
I checked further and setting the tx clock phase back to 0 fixes the issue for me.
("mmc: meson-gx: change default tx phase" changes it from 0 to 270.)
But as you write 0 seems to break certain other systems.

> My combination of Odroid C2 and the 128GB eMMC card may be a little exotic
> as the card was twice the price of the board. I merely bought it to experiment
> with the (I think) most performant combination.
> 
>>>
>>>         mmc-pwrseq = <&emmc_pwrseq>;
>>>         vmmc-supply = <&vcc3v3>;
>>>         vqmmc-supply = <&vcc1v8>;
>>> };
>>>
>>> Kind regards,
>>> Heiner
>>>
>>>
>>> [    0.784729] mmcblk0: mmc0:0001 DJNB4R 116 GiB
>>> [    0.790226] mmcblk0boot0: mmc0:0001 DJNB4R partition 1 4.00 MiB
>>> [    0.794860] mmcblk0boot1: mmc0:0001 DJNB4R partition 2 4.00 MiB
>>> [    0.800723] mmcblk0rpmb: mmc0:0001 DJNB4R partition 3 4.00 MiB
>>> [    0.807012]  mmcblk0: p1
>>> [    0.815910] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    0.818973] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    0.826699] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    0.836784] mmcblk0: error -110 sending stop command
>>> [    0.916784] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    0.920069] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    0.930234] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    0.933718] print_req_error: I/O error, dev mmcblk0, sector 2048
>>> [    0.939669] Buffer I/O error on dev mmcblk0p1, logical block 0, lost sync
>>> page write
>>> [    0.949190] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode.
>>> Opts: (null)
>>> [    0.955397] VFS: Mounted root (ext4 filesystem) on device 179:1.
>>> [    0.963359] devtmpfs: mounted
>>> [    0.964411] Freeing unused kernel memory: 320K
>>> [    0.983379] mmcblk0: response CRC error sending SET_BLOCK_COUNT command,
>>> card status 0x900
>>> [    0.989571] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0x900
>>> [    1.093957] systemd[1]: System time before build time, advancing clock.
>>> [    1.159148] mmcblk0: response CRC error sending SET_BLOCK_COUNT command,
>>> card status 0x900
>>> [    1.193201] NET: Registered protocol family 10
>>> [    1.193750] Segment Routing with IPv6
>>> [    1.205032] systemd[1]: systemd 234 running in system mode. (+PAM -AUDIT
>>> -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP
>>> +LIBCRYP                                                                      
>>>                                                                       TSETUP
>>> +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN
>>> default-hierarchy=hybrid)
>>> [    1.220390] systemd[1]: Detected architecture arm64.
>>> [    1.244200] systemd[1]: Set hostname to <odroidc2>.
>>> [    1.370901] mmcblk0: response CRC error sending SET_BLOCK_COUNT command,
>>> card status 0x900
>>> [    1.378114] mmcblk0: response CRC error sending SET_BLOCK_COUNT command,
>>> card status 0x900
>>> [    1.397501] systemd[1]: Created slice User and Session Slice.
>>> [    1.415651] systemd[1]: Reached target Remote File Systems.
>>> [    1.432905] systemd[1]: Created slice System Slice.
>>> [    1.451645] systemd[1]: Reached target Slices.
>>> [    1.468022] systemd[1]: Created slice system-serial\x2dgetty.slice.
>>> [    1.483793] systemd[1]: Listening on udev Control Socket.
>>> [    1.502607] systemd[1]: Mounting Kernel Debug File System...
>>> [    1.830855] EXT4-fs (mmcblk0p1): re-mounted. Opts: data=ordered,discard
>>> [    2.077375] systemd-journald[644]: Received request to flush runtime
>>> journal from PID 1
>>> [    2.085030] systemd-journald[644]: File
>>> /var/log/journal/5d03187c26854bbe9eab8ea99e9291cb/system.journal corrupted or
>>> uncleanly                                                                     
>>>                                                                         shut
>>> down, renaming and replacing.
>>> [    2.096502] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.102475] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.110107] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.117608] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.125121] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.132627] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.140032] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.147511] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.155040] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.161860] print_req_error: I/O error, dev mmcblk0, sector 76224512
>>> [    2.168147] EXT4-fs warning (device mmcblk0p1): ext4_end_bio:322: I/O error
>>> 10 writing to inode 2359327 (offset 0 size 4096
>>> star                                                                          
>>>                                                                   ting block
>>> 9528065)
>>> [    2.181256] Buffer I/O error on device mmcblk0p1, logical block 9527808
>>> [    2.190050] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.196320] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.203573] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.211149] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.218616] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.226114] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.233593] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.241013] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.248513] mmcblk0: response CRC error sending r/w cmd command, card
>>> status 0xd00
>>> [    2.255350] print_req_error: I/O error, dev mmcblk0, sector 121899008
>>>
>>
>>
> 




More information about the linux-amlogic mailing list