diff --git a/drivers/memory/tegra/tegra186-emc.c b/drivers/memory/tegra/tegra186-emc.c index 03ebab6fbe68..44c459666e08 100644 --- a/drivers/memory/tegra/tegra186-emc.c +++ b/drivers/memory/tegra/tegra186-emc.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "mc.h" @@ -196,12 +197,15 @@ static int tegra186_emc_get_emc_dvfs_latency(struct tegra186_emc *emc) if (emc->dvfs[i].rate > emc->debugfs.max_rate) emc->debugfs.max_rate = emc->dvfs[i].rate; + dev_pm_opp_add(emc->dev, emc->dvfs[i].rate, 0); + dev_dbg(emc->dev, " %2u: %lu Hz -> %lu us\n", i, emc->dvfs[i].rate, emc->dvfs[i].latency); } err = clk_set_rate_range(emc->clk, emc->debugfs.min_rate, emc->debugfs.max_rate); if (err < 0) { + dev_pm_opp_remove_all_dynamic(emc->dev); dev_err(emc->dev, "failed to set rate range [%lu-%lu] for %pC\n", emc->debugfs.min_rate, emc->debugfs.max_rate, emc->clk); return err; @@ -385,6 +389,8 @@ static void tegra186_emc_remove(struct platform_device *pdev) debugfs_remove_recursive(emc->debugfs.root); + dev_pm_opp_remove_all_dynamic(emc->dev); + mc->bpmp = NULL; tegra_bpmp_put(emc->bpmp); }