summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2017-03-06 17:44:22 -0800
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-12-21 14:27:40 +0100
commit144d67fec5e59f72caec04153e15d937ec42f276 (patch)
tree2799ab1c81b1cd5f02c64615b7cf4ef96adeb8f2 /arch
parenta29d55dfece13af38b8f14c554e37279b0e6bbfd (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)
Diffstat (limited to 'arch')
-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 353795cec5f4..1b0df6b3e392 100644
--- a/arch/arm/mach-imx/busfreq-imx.c
+++ b/arch/arm/mach-imx/busfreq-imx.c
@@ -1302,16 +1302,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 b38a54e2b280..e8fd22bc2b15 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;