Problems after recent changes to meson-gx-mmc driver
Heiner Kallweit
hkallweit1 at gmail.com
Sat Sep 9 12:53:10 PDT 2017
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".
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