[PATCH v3 0/4] rockchip: sdhci: Fix reinit and add HS400 Enhanced Strobe support
Simon Glass
sjg at chromium.org
Fri Jan 21 04:25:38 CET 2022
Hi Alper,
On Sun, 16 Jan 2022 at 13:18, Alper Nebi Yasak <alpernebiyasak at gmail.com> wrote:
>
> My rk3399-gru-kevin has some problems with the eMMC. The board can boot
> to U-Boot proper with the eMMC working at a low speed, but trying to
> reinitialize it with "mmc dev 0" or "mmc rescan" makes it unusable. If
> the HS400 mode is enabled, it times out while executing tuning and
> doesn't even start at a working state.
>
> To work around these errors, I had implemented support for the HS400
> Enhanced Strobe mode as the first version of this series. I have also
> managed the fix the issue above (related to power-cycling the eMMC PHY),
> which exposed another one with this series: reinitialization at lower
> speeds fail if the ES bit is set. Since fixing that needed changes to
> this series I decided to send the previous fix as part of this instead
> of as an independent patch.
>
> To test, I'm building with the following configs enabled:
>
> +CONFIG_MMC_SPEED_MODE_SET=y
> [...]
> CONFIG_MMC_PWRSEQ=y
> +CONFIG_MMC_IO_VOLTAGE=y
> +CONFIG_MMC_UHS_SUPPORT=y
> +CONFIG_MMC_HS400_ES_SUPPORT=y
> +CONFIG_MMC_HS400_SUPPORT=y
> CONFIG_MMC_DW=y
> CONFIG_MMC_DW_ROCKCHIP=y
> CONFIG_MMC_SDHCI=y
> +CONFIG_MMC_SDHCI_SDMA=y
> CONFIG_MMC_SDHCI_ROCKCHIP=y
>
> and running roughly:
>
> $ mmc rescan [0|1|3|10|11|12]
> $ mmc info
> $ mmc part
> $ load mmc 0:1 0xd0000000 256MiB.bin
> $ load mmc 0:1 0xd0000000 16MiB.bin
> $ load mmc 0:1 0xd0000000 8MiB.bin
>
> I used to test by loading different sizes from a very big file (~7GiB),
> but that's slower than reading fixed-size files for some reason I don't
> know. I thought loading full files would be a better test so I switched
> to those. Here's the differences in info and speeds I get with this:
>
> Mode | Bus Speed | Bus Width
> -----------------------+--------------+--------------
> MMC Legacy | 25000000 | 8-bit
> MMC High Speed (26MHz) | 26000000 | 8-bit
> MMC High Speed (52MHz) | 52000000 | 8-bit
> HS200 (200MHz) | 200000000 | 8-bit
> HS400 (200MHz) | 200000000 | 8-bit DDR
> HS400ES (200MHz) | 200000000 | 8-bit DDR
>
> Mode | 256 MiB Load | 16 MiB Load | 8 MiB Load
> -----------------------+--------------+--------------+--------------
> MMC Legacy | ~22.1 MiB/s | ~21.9 MiB/s | ~21.6 MiB/s
> MMC High Speed (26MHz) | ~22.1 MiB/s | ~21.9 MiB/s | ~21.6 MiB/s
> MMC High Speed (52MHz) | ~43.7 MiB/s | ~42.8 MiB/s | ~41.7 MiB/s
> HS200 (200MHz) | ~161.2 MiB/s | ~149.5 MiB/s | ~137.9 MiB/s
> HS400 (200MHz) | ~254.5 MiB/s | ~235.3 MiB/s | ~216.2 MiB/s
> HS400ES (200MHz) | ~254.7 MiB/s | ~238.8 MiB/s | ~216.2 MiB/s
>
> Hope I haven't missed anything. Enabling the configs above for each
> board is left to board maintainers as I can't test on those boards.
>
> As an aside, I want to further clean up this driver when I have the time
> (it's a weird combination of what could be three different drivers), but
> wanted to send this as it at least gets the driver to a working state.
>
> Changes in v3:
> - Set DWCMSHC_CARD_IS_EMMC bit in rk3568_emmc_phy_init()
>
> v2: https://patchwork.ozlabs.org/project/uboot/list/?series=280494
>
> Changes in v2:
> - Add patch to fix PHY power cycling at higher speeds
> - Unset ES bit in rk3399 set_control_reg() to fix a reinit issue
> - Don't use unnecessary & for function pointer in ops struct
> - Rename rk3399_set_enhanced_strobe -> rk3399_sdhci_set_enhanced_strobe
> - Rename rk3568_set_enhanced_strobe -> rk3568_sdhci_set_enhanced_strobe
> - Let set_enhanced_strobe() unset the ES bit if mode is not HS400_ES
> - Rewrote cover letter
>
> v1: https://patchwork.ozlabs.org/project/uboot/list/?series=269768
>
> Alper Nebi Yasak (4):
> mmc: sdhci: Add HS400 Enhanced Strobe support
> rockchip: sdhci: Fix RK3399 eMMC PHY power cycling
> rockchip: sdhci: Add HS400 Enhanced Strobe support for RK3399
> rockchip: sdhci: Add HS400 Enhanced Strobe support for RK3568
>
> drivers/mmc/rockchip_sdhci.c | 136 ++++++++++++++++++++++++++++++++---
> drivers/mmc/sdhci.c | 18 +++++
> include/sdhci.h | 1 +
> 3 files changed, 145 insertions(+), 10 deletions(-)
This looks great, but your 'kevin' patches do not seem to be applied
on master. What gives?
Regards,
Simon
More information about the U-Boot
mailing list