diff options
author | Jerome Brunet <jbrunet@baylibre.com> | 2020-03-05 12:12:36 +0100 |
---|---|---|
committer | Neil Armstrong <narmstrong@baylibre.com> | 2020-04-06 09:56:35 +0200 |
commit | 0392416fb1f2d8ff91ca6ec0471fc891445406e5 (patch) | |
tree | fe377f696c2eb0b793a850068ca36f53972bf5a8 /drivers/mmc/meson_gx_mmc.c | |
parent | 423aabc43613b58d7b91a28a94791ab937afcd90 (diff) | |
download | u-boot-0392416fb1f2d8ff91ca6ec0471fc891445406e5.zip u-boot-0392416fb1f2d8ff91ca6ec0471fc891445406e5.tar.gz u-boot-0392416fb1f2d8ff91ca6ec0471fc891445406e5.tar.bz2 |
mmc: meson-gx: enable input clocks
Until now, the mmc clock was left in a good enough state by the ROM
code to be used by the controller. However on some SoC, if the ROM
code finds a bootloader on USB or SPI, it might leave the MMC clock
in state the controller cannot work with.
Enable the input clocks provided to the mmc controller. While the
u-boot mmc controller driver is not doing fancy settings like the Linux,
it at least needs to make these clocks are running.
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Reviewed-by: Anand Moon <linux.amoon@gmail.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Diffstat (limited to 'drivers/mmc/meson_gx_mmc.c')
-rw-r--r-- | drivers/mmc/meson_gx_mmc.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/mmc/meson_gx_mmc.c b/drivers/mmc/meson_gx_mmc.c index b5f5122..86c1a71 100644 --- a/drivers/mmc/meson_gx_mmc.c +++ b/drivers/mmc/meson_gx_mmc.c @@ -4,6 +4,7 @@ */ #include <common.h> +#include <clk.h> #include <cpu_func.h> #include <dm.h> #include <fdtdec.h> @@ -241,12 +242,23 @@ static int meson_mmc_probe(struct udevice *dev) struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); struct mmc *mmc = &pdata->mmc; struct mmc_config *cfg = &pdata->cfg; + struct clk_bulk clocks; uint32_t val; + int ret; + #ifdef CONFIG_PWRSEQ struct udevice *pwr_dev; - int ret; #endif + /* Enable the clocks feeding the MMC controller */ + ret = clk_get_bulk(dev, &clocks); + if (ret) + return ret; + + ret = clk_enable_bulk(&clocks); + if (ret) + return ret; + cfg->voltages = MMC_VDD_33_34 | MMC_VDD_32_33 | MMC_VDD_31_32 | MMC_VDD_165_195; cfg->host_caps = MMC_MODE_8BIT | MMC_MODE_4BIT | |