diff options
| author | Olof Johansson <olof@lixom.net> | 2012-06-07 11:48:02 -0700 | 
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2012-06-07 11:48:09 -0700 | 
| commit | a5ffdb31a00c2560aa668c83c64d1d8e354a02da (patch) | |
| tree | cb403e0f6c799686adfd98f5b39bb1570dc82cdb | |
| parent | 97114f3982630d35a8a6367244f185a1c3277ad5 (diff) | |
| parent | 602bf40971d7f9a1ec0b7ba2b7e6427849828651 (diff) | |
| download | olio-linux-3.10-a5ffdb31a00c2560aa668c83c64d1d8e354a02da.tar.xz olio-linux-3.10-a5ffdb31a00c2560aa668c83c64d1d8e354a02da.zip  | |
Merge branch 'imx/fixes-for-3.5' of git://git.linaro.org/people/shawnguo/linux-2.6 into fixes
* 'imx/fixes-for-3.5' of git://git.linaro.org/people/shawnguo/linux-2.6:
  ARM: imx6: exit coherency when shutting down a cpu
  ARM: mx51: Add pinctrl_provide_dummies()
  ARM: mx31: Add pinctrl_provide_dummies()
Signed-off-by: Olof Johansson <olof@lixom.net>
| -rw-r--r-- | arch/arm/mach-imx/hotplug.c | 42 | ||||
| -rw-r--r-- | arch/arm/mach-imx/mm-imx3.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-imx/mm-imx5.c | 2 | 
3 files changed, 45 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index 89493abd497..20ed2d56c1a 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c @@ -12,6 +12,7 @@  #include <linux/errno.h>  #include <asm/cacheflush.h> +#include <asm/cp15.h>  #include <mach/common.h>  int platform_cpu_kill(unsigned int cpu) @@ -19,6 +20,44 @@ int platform_cpu_kill(unsigned int cpu)  	return 1;  } +static inline void cpu_enter_lowpower(void) +{ +	unsigned int v; + +	flush_cache_all(); +	asm volatile( +		"mcr	p15, 0, %1, c7, c5, 0\n" +	"	mcr	p15, 0, %1, c7, c10, 4\n" +	/* +	 * Turn off coherency +	 */ +	"	mrc	p15, 0, %0, c1, c0, 1\n" +	"	bic	%0, %0, %3\n" +	"	mcr	p15, 0, %0, c1, c0, 1\n" +	"	mrc	p15, 0, %0, c1, c0, 0\n" +	"	bic	%0, %0, %2\n" +	"	mcr	p15, 0, %0, c1, c0, 0\n" +	  : "=&r" (v) +	  : "r" (0), "Ir" (CR_C), "Ir" (0x40) +	  : "cc"); +} + +static inline void cpu_leave_lowpower(void) +{ +	unsigned int v; + +	asm volatile( +		"mrc	p15, 0, %0, c1, c0, 0\n" +	"	orr	%0, %0, %1\n" +	"	mcr	p15, 0, %0, c1, c0, 0\n" +	"	mrc	p15, 0, %0, c1, c0, 1\n" +	"	orr	%0, %0, %2\n" +	"	mcr	p15, 0, %0, c1, c0, 1\n" +	  : "=&r" (v) +	  : "Ir" (CR_C), "Ir" (0x40) +	  : "cc"); +} +  /*   * platform-specific code to shutdown a CPU   * @@ -26,9 +65,10 @@ int platform_cpu_kill(unsigned int cpu)   */  void platform_cpu_die(unsigned int cpu)  { -	flush_cache_all(); +	cpu_enter_lowpower();  	imx_enable_cpu(cpu, false);  	cpu_do_idle(); +	cpu_leave_lowpower();  	/* We should never return from idle */  	panic("cpu %d unexpectedly exit from shutdown\n", cpu); diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index 967ed5b35a4..0b211f63981 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c @@ -179,6 +179,8 @@ void __init imx31_soc_init(void)  	mxc_register_gpio("imx31-gpio", 1, MX31_GPIO2_BASE_ADDR, SZ_16K, MX31_INT_GPIO2, 0);  	mxc_register_gpio("imx31-gpio", 2, MX31_GPIO3_BASE_ADDR, SZ_16K, MX31_INT_GPIO3, 0); +	pinctrl_provide_dummies(); +  	if (to_version == 1) {  		strncpy(imx31_sdma_pdata.fw_name, "sdma-imx31-to1.bin",  			strlen(imx31_sdma_pdata.fw_name)); diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c index feeee17da96..1d003053d56 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c @@ -202,6 +202,8 @@ void __init imx51_soc_init(void)  	mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_INT_GPIO3_LOW, MX51_INT_GPIO3_HIGH);  	mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_INT_GPIO4_LOW, MX51_INT_GPIO4_HIGH); +	pinctrl_provide_dummies(); +  	/* i.mx51 has the i.mx35 type sdma */  	imx_add_imx_sdma("imx35-sdma", MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata);  |