diff options
| author | Olof Johansson <olof@lixom.net> | 2013-02-12 15:31:57 -0800 | 
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2013-02-12 15:31:57 -0800 | 
| commit | 02ea21331e6e516b30eff563b98c742e9cadb373 (patch) | |
| tree | db4c66a3f61d70efc5af0415a8af7c935ddac9f0 /arch/arm/mach-omap2 | |
| parent | 836dc9e3fbbab0c30aa6e664417225f5c1fb1c39 (diff) | |
| parent | 5af044f472501c8e9bd6bb274fb3d71d07a038cd (diff) | |
| download | olio-linux-3.10-02ea21331e6e516b30eff563b98c742e9cadb373.tar.xz olio-linux-3.10-02ea21331e6e516b30eff563b98c742e9cadb373.zip  | |
Merge tag 'omap-for-v3.9/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into late/omap
From Tony Lindgren:
am33xx specific updates for restart and revision detection.
Also get rid of OMAP_32K_TIMER_HZ as that no longer is needed.
* tag 'omap-for-v3.9/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ARM: OMAP2: AM33XX: id: Add support for AM335x PG2.0
  ARM: OMAP2+: Get rid of custom OMAP_32K_TIMER_HZ
  ARM: OMAP2+: AM33xx: Add SoC specific restart hook
Diffstat (limited to 'arch/arm/mach-omap2')
| -rw-r--r-- | arch/arm/mach-omap2/Makefile | 1 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/am33xx-restart.c | 34 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-generic.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/common.h | 8 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/id.c | 14 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/soc.h | 1 | 
6 files changed, 57 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 947cafe65ae..d1156cfa974 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -53,6 +53,7 @@ AFLAGS_sram34xx.o			:=-Wa,-march=armv7-a  # Restart code (OMAP4/5 currently in omap4-common.c)  obj-$(CONFIG_SOC_OMAP2420)		+= omap2-restart.o  obj-$(CONFIG_SOC_OMAP2430)		+= omap2-restart.o +obj-$(CONFIG_SOC_AM33XX)		+= am33xx-restart.o  obj-$(CONFIG_ARCH_OMAP3)		+= omap3-restart.o  # Pin multiplexing diff --git a/arch/arm/mach-omap2/am33xx-restart.c b/arch/arm/mach-omap2/am33xx-restart.c new file mode 100644 index 00000000000..88e4fa8af03 --- /dev/null +++ b/arch/arm/mach-omap2/am33xx-restart.c @@ -0,0 +1,34 @@ +/* + * am33xx-restart.c - Code common to all AM33xx machines. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/kernel.h> + +#include "common.h" +#include "prm-regbits-33xx.h" +#include "prm33xx.h" + +/** + * am3xx_restart - trigger a software restart of the SoC + * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c + * @cmd: passed from the userspace program rebooting the system (if provided) + * + * Resets the SoC.  For @cmd, see the 'reboot' syscall in + * kernel/sys.c.  No return value. + */ +void am33xx_restart(char mode, const char *cmd) +{ +	/* TODO: Handle mode and cmd if necessary */ + +	am33xx_prm_rmw_reg_bits(AM33XX_GLOBAL_WARM_SW_RST_MASK, +				AM33XX_GLOBAL_WARM_SW_RST_MASK, +				AM33XX_PRM_DEVICE_MOD, +				AM33XX_PRM_RSTCTRL_OFFSET); + +	/* OCP barrier */ +	(void)am33xx_prm_read_reg(AM33XX_PRM_DEVICE_MOD, +				  AM33XX_PRM_RSTCTRL_OFFSET); +} diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 53cb380b787..fac00f0960b 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c @@ -141,6 +141,7 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")  	.init_machine	= omap_generic_init,  	.timer		= &omap3_am33xx_timer,  	.dt_compat	= am33xx_boards_compat, +	.restart	= am33xx_restart,  MACHINE_END  #endif diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 948bcaa82eb..0c3a991a240 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -119,6 +119,14 @@ static inline void omap2xxx_restart(char mode, const char *cmd)  }  #endif +#ifdef CONFIG_SOC_AM33XX +void am33xx_restart(char mode, const char *cmd); +#else +static inline void am33xx_restart(char mode, const char *cmd) +{ +} +#endif +  #ifdef CONFIG_ARCH_OMAP3  void omap3xxx_restart(char mode, const char *cmd);  #else diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 45cc7ed4dd5..8a68f1ec66b 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -399,8 +399,18 @@ void __init omap3xxx_check_revision(void)  		}  		break;  	case 0xb944: -		omap_revision = AM335X_REV_ES1_0; -		cpu_rev = "1.0"; +		switch (rev) { +		case 0: +			omap_revision = AM335X_REV_ES1_0; +			cpu_rev = "1.0"; +			break; +		case 1: +		/* FALLTHROUGH */ +		default: +			omap_revision = AM335X_REV_ES2_0; +			cpu_rev = "2.0"; +			break; +		}  		break;  	case 0xb8f2:  		switch (rev) { diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index f31d90774de..15e959111e2 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h @@ -387,6 +387,7 @@ IS_OMAP_TYPE(3430, 0x3430)  #define AM335X_CLASS		0x33500033  #define AM335X_REV_ES1_0	AM335X_CLASS +#define AM335X_REV_ES2_0	(AM335X_CLASS | (0x1 << 8))  #define OMAP443X_CLASS		0x44300044  #define OMAP4430_REV_ES1_0	(OMAP443X_CLASS | (0x10 << 8))  |