> Subject: [PATCH v2] mmc: add option to skip eMMC deinit on OS
> handoff

Please update your outlook settings. I not able to directly apply your patch
using patchwork.

I will manually apply this patch. Please update your settings.

Regards
Peng

>
> When U-Boot hands off to the OS, mmc_deinit() renegotiates the bus
> down out of HS200/HS400 by issuing CMD6 switches, then changes
> the clock; see commit fceea9926804 ("mmc: Downgrade SD/MMC
> from
> UHS/HS200/HS400 modes before boot") for the original motivation.
> For eMMC this downgrade is unnecessary when the OS re-initialises the
> device itself: CMD0 returns the protocol state machine to Idle, and the
> OS renegotiates from scratch regardless of the mode U-Boot left the
> device in.
>
> Add a Kconfig option, MMC_SKIP_EMMC_DEINIT, to skip this
> downgrade for eMMC devices.  SD cards are always deinitialized,
> keeping the conservative default behaviour.
>
> This removes unnecessary CMD6 switches and clock changes from the
> OS-handoff path, which matters on fast-boot / automotive platforms.
>
> Signed-off-by: Minwoo Park <[email protected]>
> ---
> Changes in v2:
> - drop "retuning" from the description; the downgrade path selects a
>   mode that does not require tuning
> - describe CMD0 as a protocol state machine reset, not a hardware
> reset
> - reference commit fceea9926804 for the original motivation
> - drop the incorrect 1.8V/CMD0 rationale for SD; SD simply keeps the
>   conservative default behaviour
> - rename MMC_SKIP_DEINIT to MMC_SKIP_EMMC_DEINIT
> - add MMC_HS400_ES_SUPPORT to the dependencies
> - clarify in the Kconfig help when it is safe to say Y
>
>  drivers/mmc/Kconfig | 24 ++++++++++++++++++++++++
>  drivers/mmc/mmc.c   |  3 +++
>  2 files changed, 27 insertions(+)
>
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index
> 6c513328de2..4697d76276f 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -226,6 +226,30 @@ config SPL_MMC_HS200_SUPPORT
>           The HS200 mode is support by some eMMC. The bus frequency is
> up to
>           200MHz. This mode requires tuning the IO.
>
> +config MMC_SKIP_EMMC_DEINIT
> +       bool "Skip eMMC deinit on OS handoff"
> +       depends on MMC_HS200_SUPPORT || MMC_HS400_SUPPORT
> || MMC_HS400_ES_SUPPORT
> +       help
> +         When U-Boot hands off to the OS, the MMC subsystem normally
> +         renegotiates the bus down out of HS200/HS400 by issuing
> CMD6
> +         switches, then changes the clock.  For eMMC this downgrade is
> +         unnecessary when the OS re-initialises the device itself: CMD0
> +         returns the protocol state machine to Idle, and the OS
> +         renegotiates from scratch regardless of the mode U-Boot left
> +         the device in.
> +
> +         Enabling this option skips the deinit for eMMC devices only.
> +         SD cards are always deinitialized, keeping the conservative
> +         default behaviour.
> +
> +         This removes unnecessary CMD6 switches and clock changes
> from
> +         the OS-handoff path, which matters on fast-boot / automotive
> +         platforms.
> +
> +         Say Y only if the OS re-initialises the eMMC from scratch and
> +         can hardware-reset the device (RST_n) or power-cycle it in
> +         case of trouble.  If unsure, say N.
> +
>  config MMC_VERBOSE
>         bool "Output more information about the MMC"
>         default y
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index
> 2e565560656..bd524c7b573 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -3184,6 +3184,9 @@ int mmc_deinit(struct mmc *mmc)
>
>                 return sd_select_mode_and_width(mmc, caps_filtered);
>         } else {
> +               if (CONFIG_IS_ENABLED(MMC_SKIP_EMMC_DEINIT))
> +                       return 0;
> +
>                 caps_filtered = mmc->card_caps &
>                         ~(MMC_CAP(MMC_HS_200) | MMC_CAP(MMC_HS_400)
> | MMC_CAP(MMC_HS_400_ES));
>
>
> base-commit: ece349ade2973e220f524ce59e59711cc919263f
> --
> 2.25.1
> This email and any attachments to it may be confidential and are
> intended solely for the use of the individual to whom it is addressed.
> Any views or opinions expressed are solely those of the author and do
> not necessarily represent those of Telechips Inc. If you are not the
> intended recipient of this email, you must neither take any action
> based upon its contents nor copy or show it to anyone. Please notify
> the sender immediately by email if you have received this email by
> mistake and delete this email from your system. Please consider the
> environment before printing this email.

NXP Confidential

Reply via email to