Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
[sfrench/cifs-2.6.git] / arch / powerpc / kernel / vdso64 / cacheflush.S
1 /*
2  * vDSO provided cache flush routines
3  *
4  * Copyright (C) 2004 Benjamin Herrenschmuidt (benh@kernel.crashing.org),
5  *                    IBM Corp.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version
10  * 2 of the License, or (at your option) any later version.
11  */
12 #include <linux/config.h>
13 #include <asm/processor.h>
14 #include <asm/ppc_asm.h>
15 #include <asm/vdso.h>
16 #include <asm/asm-offsets.h>
17
18         .text
19
20 /*
21  * Default "generic" version of __kernel_sync_dicache.
22  *
23  * void __kernel_sync_dicache(unsigned long start, unsigned long end)
24  *
25  * Flushes the data cache & invalidate the instruction cache for the
26  * provided range [start, end[
27  *
28  * Note: all CPUs supported by this kernel have a 128 bytes cache
29  * line size so we don't have to peek that info from the datapage
30  */
31 V_FUNCTION_BEGIN(__kernel_sync_dicache)
32   .cfi_startproc
33         li      r5,127
34         andc    r6,r3,r5                /* round low to line bdy */
35         subf    r8,r6,r4                /* compute length */
36         add     r8,r8,r5                /* ensure we get enough */
37         srwi.   r8,r8,7                 /* compute line count */
38         crclr   cr0*4+so
39         beqlr                           /* nothing to do? */
40         mtctr   r8
41         mr      r3,r6
42 1:      dcbst   0,r3
43         addi    r3,r3,128
44         bdnz    1b
45         sync
46         mtctr   r8
47 1:      icbi    0,r6
48         addi    r6,r6,128
49         bdnz    1b
50         isync
51         li      r3,0
52         blr
53   .cfi_endproc
54 V_FUNCTION_END(__kernel_sync_dicache)
55
56
57 /*
58  * POWER5 version of __kernel_sync_dicache
59  */
60 V_FUNCTION_BEGIN(__kernel_sync_dicache_p5)
61   .cfi_startproc
62         crclr   cr0*4+so
63         sync
64         isync
65         li      r3,0
66         blr
67   .cfi_endproc
68 V_FUNCTION_END(__kernel_sync_dicache_p5)