From 29380905565655bb797bf670a173bddb8e641da6 Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Fri, 3 Jun 2016 18:31:19 +0200 Subject: ARM: imx6: disable deeper idle states when FEC is active w/o HW workaround The i.MX6 Q/DL has an erratum (ERR006687) that prevents the FEC from waking the CPUs when they are in wait(unclocked) state. As the hardware workaround isn't applicable to all boards, disable the deeper idle state when the workaround isn't present and the FEC is in use. This allows to safely run a kernel with CPUidle enabled on all i.MX6 boards. Signed-off-by: Lucas Stach Acked-by: David S. Miller (for network changes) Signed-off-by: Shawn Guo --- include/soc/imx/cpuidle.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 include/soc/imx/cpuidle.h (limited to 'include/soc') diff --git a/include/soc/imx/cpuidle.h b/include/soc/imx/cpuidle.h new file mode 100644 index 000000000000..986a4823bce1 --- /dev/null +++ b/include/soc/imx/cpuidle.h @@ -0,0 +1,25 @@ +/* + * Copyright 2016 Pengutronix, + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#ifndef __SOC_IMX_CPUIDLE_H__ +#define __SOC_IMX_CPUIDLE_H__ + +#if defined(CONFIG_CPU_IDLE) && defined(CONFIG_SOC_IMX6Q) +void imx6q_cpuidle_fec_irqs_used(void); +void imx6q_cpuidle_fec_irqs_unused(void); +#else +void imx6q_cpuidle_fec_irqs_used(void) { } +void imx6q_cpuidle_fec_irqs_unused(void) { } +#endif + +#endif /* __SOC_IMX_CPUIDLE_H__ */ -- cgit From 4dbc39e98b57a7f67c739b04f12d9829fe659bfa Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Fri, 17 Jun 2016 15:51:41 +0100 Subject: ARM: imx6: fix static declaration in include/soc/imx/cpuidle.h If both CONFIG_CPU_IDLE or CONFIG_SOC_IMX6Q are not set then the imx6q_cpuidle_fec_irqs_used() and other functions should be marked static inline to avoid the following warnings whilst building drivers/net/ethernet/freescale: include/soc/imx/cpuidle.h:21:6: warning: symbol 'imx6q_cpuidle_fec_irqs_used' was not declared. Should it be static? include/soc/imx/cpuidle.h:22:6: warning: symbol 'imx6q_cpuidle_fec_irqs_unused' was not declared. Should it be static? Signed-off-by: Ben Dooks Signed-off-by: Shawn Guo --- include/soc/imx/cpuidle.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/soc') diff --git a/include/soc/imx/cpuidle.h b/include/soc/imx/cpuidle.h index 986a4823bce1..8e7743d3b34d 100644 --- a/include/soc/imx/cpuidle.h +++ b/include/soc/imx/cpuidle.h @@ -18,8 +18,8 @@ void imx6q_cpuidle_fec_irqs_used(void); void imx6q_cpuidle_fec_irqs_unused(void); #else -void imx6q_cpuidle_fec_irqs_used(void) { } -void imx6q_cpuidle_fec_irqs_unused(void) { } +static inline void imx6q_cpuidle_fec_irqs_used(void) { } +static inline void imx6q_cpuidle_fec_irqs_unused(void) { } #endif #endif /* __SOC_IMX_CPUIDLE_H__ */ -- cgit