1/* 2 * arch/arm/mach-ebsa110/include/mach/system.h 3 * 4 * Copyright (C) 1996-2000 Russell King. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10#ifndef __ASM_ARCH_SYSTEM_H 11#define __ASM_ARCH_SYSTEM_H 12 13/* 14 * EBSA110 idling methodology: 15 * 16 * We can not execute the "wait for interrupt" instruction since that 17 * will stop our MCLK signal (which provides the clock for the glue 18 * logic, and therefore the timer interrupt). 19 * 20 * Instead, we spin, polling the IRQ_STAT register for the occurrence 21 * of any interrupt with core clock down to the memory clock. 22 */ 23static inline void arch_idle(void) 24{ 25 const char *irq_stat = (char *)0xff000000; 26 27 /* disable clock switching */ 28 asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc"); 29 30 /* wait for an interrupt to occur */ 31 while (!*irq_stat); 32 33 /* enable clock switching */ 34 asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); 35} 36 37#define arch_reset(mode, cmd) cpu_reset(0x80000000) 38 39#endif 40