| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  | /* arch/arm/mach-s3c2410/include/mach/system.h
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2006-12-17 19:59:20 +01:00
										 |  |  |  * Copyright (c) 2003 Simtec Electronics | 
					
						
							|  |  |  |  *	Ben Dooks <ben@simtec.co.uk> | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * S3C2410 - System function defines and includes | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							| 
									
										
										
										
											2006-09-09 19:44:57 +01:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-06 12:10:45 +01:00
										 |  |  | #include <linux/io.h>
 | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  | #include <mach/hardware.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  | #include <mach/map.h>
 | 
					
						
							|  |  |  | #include <mach/idle.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  | #include <mach/regs-clock.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | void (*s3c24xx_idle)(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void s3c24xx_default_idle(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	unsigned long tmp; | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* idle the system by using the idle mode which will wait for an
 | 
					
						
							|  |  |  | 	 * interrupt to happen before restarting the system. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Warning: going into idle state upsets jtag scanning */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-12 20:42:52 +01:00
										 |  |  | 	__raw_writel(__raw_readl(S3C2410_CLKCON) | S3C2410_CLKCON_IDLE, | 
					
						
							|  |  |  | 		     S3C2410_CLKCON); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* the samsung port seems to do a loop and then unset idle.. */ | 
					
						
							|  |  |  | 	for (i = 0; i < 50; i++) { | 
					
						
							| 
									
										
										
										
											2007-02-12 20:42:52 +01:00
										 |  |  | 		tmp += __raw_readl(S3C2410_CLKCON); /* ensure loop not optimised out */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* this bit is not cleared on re-start... */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-12 20:42:52 +01:00
										 |  |  | 	__raw_writel(__raw_readl(S3C2410_CLKCON) & ~S3C2410_CLKCON_IDLE, | 
					
						
							|  |  |  | 		     S3C2410_CLKCON); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void arch_idle(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (s3c24xx_idle != NULL) | 
					
						
							|  |  |  | 		(s3c24xx_idle)(); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		s3c24xx_default_idle(); | 
					
						
							|  |  |  | } |