diff options
author | Dave Gerlach <d-gerlach@ti.com> | 2021-04-23 11:27:37 -0500 |
---|---|---|
committer | Lokesh Vutla <lokeshvutla@ti.com> | 2021-05-12 16:27:57 +0530 |
commit | f4686c3d5b96dfdc5d6687845f1c7505fa26bca8 (patch) | |
tree | 9a576170730e6519932db15d5ddc9657d7246c87 /arch/arm | |
parent | d2edabfa8de56460bfe1641f019d793c6d685a14 (diff) | |
download | u-boot-f4686c3d5b96dfdc5d6687845f1c7505fa26bca8.zip u-boot-f4686c3d5b96dfdc5d6687845f1c7505fa26bca8.tar.gz u-boot-f4686c3d5b96dfdc5d6687845f1c7505fa26bca8.tar.bz2 |
arm: mach-k3: am642: Use mmc start and stop callbacks
To avoid any glitches on MMC clock line, make use of pm per and post
callbacks when loading sysfw.
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-k3/am642_init.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/arch/arm/mach-k3/am642_init.c b/arch/arm/mach-k3/am642_init.c index b2c3774..d09fc59 100644 --- a/arch/arm/mach-k3/am642_init.c +++ b/arch/arm/mach-k3/am642_init.c @@ -19,6 +19,7 @@ #include <dm.h> #include <dm/uclass-internal.h> #include <dm/pinctrl.h> +#include <mmc.h> #if defined(CONFIG_SPL_BUILD) @@ -51,6 +52,36 @@ static void store_boot_info_from_rom(void) sizeof(struct rom_extended_boot_data)); } +#if defined(CONFIG_K3_LOAD_SYSFW) && CONFIG_IS_ENABLED(DM_MMC) +void k3_mmc_stop_clock(void) +{ + if (spl_boot_device() == BOOT_DEVICE_MMC1) { + struct mmc *mmc = find_mmc_device(0); + + if (!mmc) + return; + + mmc->saved_clock = mmc->clock; + mmc_set_clock(mmc, 0, true); + } +} + +void k3_mmc_restart_clock(void) +{ + if (spl_boot_device() == BOOT_DEVICE_MMC1) { + struct mmc *mmc = find_mmc_device(0); + + if (!mmc) + return; + + mmc_set_clock(mmc, mmc->saved_clock, false); + } +} +#else +void k3_mmc_stop_clock(void) {} +void k3_mmc_restart_clock(void) {} +#endif + void board_init_f(ulong dummy) { #if defined(CONFIG_K3_LOAD_SYSFW) @@ -94,7 +125,8 @@ void board_init_f(ulong dummy) * system firmware and if so, will only perform needed config * and not attempt to load firmware again. */ - k3_sysfw_loader(is_rom_loaded_sysfw(&bootdata), NULL, NULL); + k3_sysfw_loader(is_rom_loaded_sysfw(&bootdata), k3_mmc_stop_clock, + k3_mmc_restart_clock); #endif /* Output System Firmware version info */ |