home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / mach-ebsa110 / include / mach / system.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.1 KB  |  40 lines

  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.  */
  23. static 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)    cpu_reset(0x80000000)
  38.  
  39. #endif
  40.