| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  |  *  arch/arm/mach-ebsa110/include/mach/system.h | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  *  Copyright (C) 1996-2000 Russell King. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef __ASM_ARCH_SYSTEM_H
 | 
					
						
							|  |  |  | #define __ASM_ARCH_SYSTEM_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * EBSA110 idling methodology: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * We can not execute the "wait for interrupt" instruction since that | 
					
						
							|  |  |  |  * will stop our MCLK signal (which provides the clock for the glue | 
					
						
							|  |  |  |  * logic, and therefore the timer interrupt). | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Instead, we spin, polling the IRQ_STAT register for the occurrence | 
					
						
							|  |  |  |  * of any interrupt with core clock down to the memory clock. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void arch_idle(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	const char *irq_stat = (char *)0xff000000; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* disable clock switching */ | 
					
						
							|  |  |  | 	asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* wait for an interrupt to occur */ | 
					
						
							|  |  |  | 	while (!*irq_stat); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* enable clock switching */ | 
					
						
							|  |  |  | 	asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-19 16:20:24 +00:00
										 |  |  | #define arch_reset(mode, cmd)	cpu_reset(0x80000000)
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif
 |