1 2 3#include <linux/linkage.h> 4#include <asm/assembler.h> 5 6ENTRY(arch_idle) 7#ifdef CONFIG_MSM7X00A_IDLE 8 mrc p15, 0, r1, c1, c0, 0 /* read current CR */ 9 bic r0, r1, #(1 << 2) /* clear dcache bit */ 10 bic r0, r0, #(1 << 12) /* clear icache bit */ 11 mcr p15, 0, r0, c1, c0, 0 /* disable d/i cache */ 12 13 mov r0, #0 /* prepare wfi value */ 14 mcr p15, 0, r0, c7, c10, 0 /* flush the cache */ 15 mcr p15, 0, r0, c7, c10, 4 /* memory barrier */ 16 mcr p15, 0, r0, c7, c0, 4 /* wait for interrupt */ 17 18 mcr p15, 0, r1, c1, c0, 0 /* restore d/i cache */ 19#endif 20 mov pc, lr 21