summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2017-03-06 17:44:22 -0800
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-12-24 01:27:28 +0100
commit7de605ad0a44ee62681b70ae7af75cc907dd8a97 (patch)
treef0a3e04b3e001c9cc48618e09046d086a0b428e3
parent7696e076a3f7616003e440389c6e86f0bb56a0e4 (diff)
ARM: imx: busfreq: initialize M4 frequency depending boot state
Set low frequency state in case M4 start with 24MHz. This makes sure that Linux is aware of the M4 state and makes sure the bus frequency is not accidentally increased during suspend (bus_freq_pm_notify). Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> (cherry picked from commit 70f901b01c4ac4dfe741f91b76967a433674a37d)
-rw-r--r--arch/arm/mach-imx/busfreq-imx.c15
-rw-r--r--arch/arm/mach-imx/common.h2
-rw-r--r--arch/arm/mach-imx/mu.c5
3 files changed, 14 insertions, 8 deletions
diff --git a/arch/arm/mach-imx/busfreq-imx.c b/arch/arm/mach-imx/busfreq-imx.c
index d637b47e306c..846bd7524bf6 100644
--- a/arch/arm/mach-imx/busfreq-imx.c
+++ b/arch/arm/mach-imx/busfreq-imx.c
@@ -1324,16 +1324,15 @@ static int busfreq_probe(struct platform_device *pdev)
err = init_mmdc_lpddr2_settings(pdev);
}
- if (cpu_is_imx6sx()) {
- /* if M4 is enabled and rate > 24MHz, add high bus count */
- if (imx_src_is_m4_enabled() &&
- (clk_get_rate(m4_clk) > LPAPM_CLK))
+ if ((cpu_is_imx6sx() || cpu_is_imx7d()) && imx_src_is_m4_enabled()) {
+ /* if M4 at rate > 24MHz, add high bus count */
+ if (clk_get_rate(m4_clk) > LPAPM_CLK)
high_bus_count++;
- }
+ else
+ imx_mu_set_m4_low_freq();
- if (cpu_is_imx7d() && imx_src_is_m4_enabled()) {
- high_bus_count++;
- imx_mu_lpm_ready(true);
+ if (cpu_is_imx7d())
+ imx_mu_lpm_ready(true);
}
if (err) {
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index 17cde76138b4..ccb69693e307 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -85,8 +85,10 @@ bool imx_mu_is_m4_in_stop(void);
void imx_mu_set_m4_run_mode(void);
#ifdef CONFIG_HAVE_IMX_MU
int imx_mu_lpm_ready(bool ready);
+void imx_mu_set_m4_low_freq(void);
#else
static inline int imx_mu_lpm_ready(bool ready) { return 0; }
+static inline void imx_mu_set_m4_low_freq(void) { }
#endif
enum mxc_cpu_pwr_mode {
diff --git a/arch/arm/mach-imx/mu.c b/arch/arm/mach-imx/mu.c
index 4ab7ef2f9d62..29d952409cf3 100644
--- a/arch/arm/mach-imx/mu.c
+++ b/arch/arm/mach-imx/mu.c
@@ -70,6 +70,11 @@ void imx_mu_set_m4_run_mode(void)
m4_in_stop = false;
}
+void imx_mu_set_m4_low_freq(void)
+{
+ m4_freq_low = true;
+}
+
bool imx_mu_is_m4_in_stop(void)
{
return m4_in_stop;