diff options
Diffstat (limited to 'arch/arm/mach-tegra/sleep.S')
-rw-r--r-- | arch/arm/mach-tegra/sleep.S | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/sleep.S b/arch/arm/mach-tegra/sleep.S index 08e9481c049..91548a77dd9 100644 --- a/arch/arm/mach-tegra/sleep.S +++ b/arch/arm/mach-tegra/sleep.S | |||
@@ -25,9 +25,38 @@ | |||
25 | #include <linux/linkage.h> | 25 | #include <linux/linkage.h> |
26 | 26 | ||
27 | #include <asm/assembler.h> | 27 | #include <asm/assembler.h> |
28 | #include <asm/cp15.h> | ||
28 | 29 | ||
29 | #include "iomap.h" | 30 | #include "iomap.h" |
30 | 31 | ||
31 | #include "flowctrl.h" | 32 | #include "flowctrl.h" |
32 | #include "sleep.h" | 33 | #include "sleep.h" |
33 | 34 | ||
35 | #ifdef CONFIG_PM_SLEEP | ||
36 | /* | ||
37 | * tegra_disable_clean_inv_dcache | ||
38 | * | ||
39 | * disable, clean & invalidate the D-cache | ||
40 | * | ||
41 | * Corrupted registers: r1-r3, r6, r8, r9-r11 | ||
42 | */ | ||
43 | ENTRY(tegra_disable_clean_inv_dcache) | ||
44 | stmfd sp!, {r0, r4-r5, r7, r9-r11, lr} | ||
45 | dmb @ ensure ordering | ||
46 | |||
47 | /* Disable the D-cache */ | ||
48 | mrc p15, 0, r2, c1, c0, 0 | ||
49 | bic r2, r2, #CR_C | ||
50 | mcr p15, 0, r2, c1, c0, 0 | ||
51 | isb | ||
52 | |||
53 | /* Flush the D-cache */ | ||
54 | bl v7_flush_dcache_louis | ||
55 | |||
56 | /* Trun off coherency */ | ||
57 | exit_smp r4, r5 | ||
58 | |||
59 | ldmfd sp!, {r0, r4-r5, r7, r9-r11, pc} | ||
60 | ENDPROC(tegra_disable_clean_inv_dcache) | ||
61 | |||
62 | #endif | ||