Skip to content
  • Shawn Lin's avatar
    mmc: core: Don't try UHS-I mode if 4-bit mode isn't supported · d6743a8a
    Shawn Lin authored
    
    
    Per SD specification physical layer v4.0, section 3.9.4, it
    says "UHS-I supports only 4-bit mode. Host shall select 4-bit
    mode by ACMD6. However mmc_sd_init_uhs_card() still go ahead
    to initialize the cards anyway, whether card or host won't
    support 4-bit mode.
    
      This breaks the platforms which could support UHS-I mode but on
    some certain boards only support 1-bit mode with a UHS-I card inserted,
    as all the tuning process is broken due to this. Alternatively, we
    should check the return value from mmc_set_bus_width() to see if host
    could finish the request to switch the bus width on its side. But that
    needs more thing to do than this patch that just bails out early to try
    high speed mode if 4-bit mode isn't available for whatever reason. And
    this patch could also fix the same problem for sdio since R4_18V_PRESENT
    won't be set for ocr when mmc_sdio_init_card() finds mmc_host_uhs()
    is false.
    
      Note that this patch doesn't keep the checking of card->scr.sda_spec3
    and comparing card->scr.bus_widths with SD_SCR_BUS_WIDTH_4 within
    mmc_sd_init_uhs_card() since if the sd cards response with SD_ROCR_S18A,
    it definitely supports UHS-I mode, which implicitly means these checkings
    are always true.
    
    Signed-off-by: default avatarShawn Lin <shawn.lin@rock-chips.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    d6743a8a