| /* | 
 |  *  linux/include/asm-arm/arch-ebsa110/system.h | 
 |  * | 
 |  *  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"); | 
 | } | 
 |  | 
 | #define arch_reset(mode)	cpu_reset(0x80000000) | 
 |  | 
 | #endif |