Skip to content
  • Vincent Yang's avatar
    mmc: core: hold SD Clock before CMD11 during Signal · c6eb5880
    Vincent Yang authored
    
    
    Voltage Switch Procedure
    
    This patch is to fix an issue found on mb86s7x platforms.
    
    [symptom]
    There are some UHS-1 SD memory cards sometimes cannot be detected correctly,
    e.g., Transcend 600x SDXC 64GB UHS-1 memory card.
    During Signal Voltage Switch Procedure, failure to switch is indicated
    by the card holding DAT[3:0] low.
    
    [analysis]
    According to SD Host Controller Simplified Specification Version 3.00
    chapter 3.6.1, the Signal Voltage Switch Procedure should be:
    (1) Check S18A; (2) Issue CMD11; (3) Check CMD 11 response;
    (4) Stop providing SD clock; (5) Check DAT[3:0] should be 0000b;
    (6) Set 1.8V Signal Enable; (7) Wait 5ms; (8) Check 1.8V Signal Enable;
    (9) Provide SD Clock; (10) Wait 1ms; (11) Check DAT[3:0] should be 1111b;
    (12) error handling
    
    With CONFIG_MMC_CLKGATE=y, sometimes there is one more gating/un-gating
    SD clock between (2) and (3). In this case, some UHS-1 SD cards will hold
    DAT[3:0] 0000b at (11) and thus fails Signal Voltage Switch Procedure.
    
    [solution]
    By mmc_host_clk_hold() before CMD11, the additional gating/un-gating
    SD clock between (2) and (3) can be prevented and thus no failure at (11).
    It has been verified with many UHS-1 SD cards on mb86s7x platforms and
    works correctly.
    
    Signed-off-by: default avatarVincent Yang <Vincent.Yang@tw.fujitsu.com>
    Reviewed-by: default avatarJohan Rudholm <jrudholm@gmail.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    c6eb5880