커널 3.4 에 릴리즈된 주요 내용중 아키텍쳐에 의존적인 패치중에 암에 관련된 내용입니다. 

   원문은 아래와 같습니다.

   

    S3C64XX: Add basic cpuidle driver (commit)

   

   s3c64xx 에서 cpuidle 에 대한 지원이 추가되었다, 라는 건데요.

   

   커널쪽에서 이 부분에 대한 통합된 드라이버 형태를 갖고 있습니다. 

   

119 /****************************

120  * CPUIDLE DRIVER INTERFACE *

121  ****************************/

122 

123 struct cpuidle_driver {

124     const char      *name;

125     struct module       *owner;

126 

127     unsigned int        power_specified:1;

128     /* set to 1 to use the core cpuidle time keeping (for all states). */

129     unsigned int        en_core_tk_irqen:1;

130     struct cpuidle_state    states[CPUIDLE_STATE_MAX];

131     int         state_count;

132     int         safe_state_index;

133 };


모습은 위와 같구요.   struct cpuidle_state  자료 구조 안에 진입하는 enter 함수가 선언됩니다.

s3c64xx 에서는 아이들 진입시 PWRCFG 레지스터에서 WFI 에 대햇서만 마스크를 살려주고 cpu_do_idle 를 호출합니다.

이 함수는 아키텍쳐 함수로 이어지는 데요.

armv6 와 armv7 은 다른 모습을 갖고 있습니다.

armv6 에서는 코프로세서에 통해서 해당 기능이 구현되는데 반하여

armv7 에서는 직접 해당 명령어가 있습니다. wfi 명령이죠.

armv7 에서는    dsb, wfi 를 통해서 간단히 해결합니다.

참고로 wfi 는 wait for interrupt 의 약자인데 쉽게 얘기하면 cpu 가 저전력 모드로 진입해서 

인터럽트가 발생할 때까지 기다린다는 것입니다.

간단하죠?

전체 원문은 아래 링크를 참조하세요

http://kernelnewbies.org/LinuxChanges