Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
[pandora-kernel.git] / arch / arm / plat-mxc / include / mach / system.h
1 /*
2  *  Copyright (C) 1999 ARM Limited
3  *  Copyright (C) 2000 Deep Blue Solutions Ltd
4  *  Copyright 2004-2008 Freescale Semiconductor, Inc. All Rights Reserved.
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 as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  */
16
17 #ifndef __ASM_ARCH_MXC_SYSTEM_H__
18 #define __ASM_ARCH_MXC_SYSTEM_H__
19
20 #include <mach/hardware.h>
21 #include <mach/common.h>
22
23 extern void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode);
24
25 static inline void arch_idle(void)
26 {
27 #ifdef CONFIG_ARCH_MXC91231
28         if (cpu_is_mxc91231()) {
29                 /* Need this to set DSM low-power mode */
30                 mxc91231_prepare_idle();
31         }
32 #endif
33         /* fix i.MX31 errata TLSbo65953 and i.MX35 errata ENGcm09472 */
34         if (cpu_is_mx31() || cpu_is_mx35()) {
35                 unsigned long reg = 0;
36                 __asm__ __volatile__(
37                         /* disable I and D cache */
38                         "mrc p15, 0, %0, c1, c0, 0\n"
39                         "bic %0, %0, #0x00001000\n"
40                         "bic %0, %0, #0x00000004\n"
41                         "mcr p15, 0, %0, c1, c0, 0\n"
42                         /* invalidate I cache */
43                         "mov %0, #0\n"
44                         "mcr p15, 0, %0, c7, c5, 0\n"
45                         /* clear and invalidate D cache */
46                         "mov %0, #0\n"
47                         "mcr p15, 0, %0, c7, c14, 0\n"
48                         /* WFI */
49                         "mov %0, #0\n"
50                         "mcr p15, 0, %0, c7, c0, 4\n"
51                         "nop\n" "nop\n" "nop\n" "nop\n"
52                         "nop\n" "nop\n" "nop\n"
53                         /* enable I and D cache */
54                         "mrc p15, 0, %0, c1, c0, 0\n"
55                         "orr %0, %0, #0x00001000\n"
56                         "orr %0, %0, #0x00000004\n"
57                         "mcr p15, 0, %0, c1, c0, 0\n"
58                         : "=r" (reg));
59         } else if (cpu_is_mx51())
60                 mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
61         else
62                 cpu_do_idle();
63 }
64
65 void arch_reset(char mode, const char *cmd);
66
67 #endif /* __ASM_ARCH_MXC_SYSTEM_H__ */