Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd
[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 static inline void arch_idle(void)
24 {
25 #ifdef CONFIG_ARCH_MXC91231
26         if (cpu_is_mxc91231()) {
27                 /* Need this to set DSM low-power mode */
28                 mxc91231_prepare_idle();
29         }
30 #endif
31         /* fix i.MX31 errata TLSbo65953 and i.MX35 errata ENGcm09472 */
32         if (cpu_is_mx31() || cpu_is_mx35()) {
33                 unsigned long reg = 0;
34                 __asm__ __volatile__(
35                         /* disable I and D cache */
36                         "mrc p15, 0, %0, c1, c0, 0\n"
37                         "bic %0, %0, #0x00001000\n"
38                         "bic %0, %0, #0x00000004\n"
39                         "mcr p15, 0, %0, c1, c0, 0\n"
40                         /* invalidate I cache */
41                         "mov %0, #0\n"
42                         "mcr p15, 0, %0, c7, c5, 0\n"
43                         /* clear and invalidate D cache */
44                         "mov %0, #0\n"
45                         "mcr p15, 0, %0, c7, c14, 0\n"
46                         /* WFI */
47                         "mov %0, #0\n"
48                         "mcr p15, 0, %0, c7, c0, 4\n"
49                         "nop\n" "nop\n" "nop\n" "nop\n"
50                         "nop\n" "nop\n" "nop\n"
51                         /* enable I and D cache */
52                         "mrc p15, 0, %0, c1, c0, 0\n"
53                         "orr %0, %0, #0x00001000\n"
54                         "orr %0, %0, #0x00000004\n"
55                         "mcr p15, 0, %0, c1, c0, 0\n"
56                         : "=r" (reg));
57         } else
58                 cpu_do_idle();
59 }
60
61 void arch_reset(char mode, const char *cmd);
62
63 #endif /* __ASM_ARCH_MXC_SYSTEM_H__ */