1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
| /* SPDX-License-Identifier: GPL-2.0-or-later */
| /*
| * Copyright (C) 2008 Mark Nelson, IBM Corp.
| */
| #include <asm/page.h>
| #include <asm/processor.h>
| #include <asm/ppc_asm.h>
| #include <asm/asm-offsets.h>
| #include <asm/export.h>
| #include <asm/feature-fixups.h>
|
| .section ".toc","aw"
| PPC64_CACHES:
| .tc ppc64_caches[TC],ppc64_caches
| .section ".text"
|
| _GLOBAL_TOC(copy_page)
| BEGIN_FTR_SECTION
| lis r5,PAGE_SIZE@h
| FTR_SECTION_ELSE
| #ifdef CONFIG_PPC_BOOK3S_64
| b copypage_power7
| #endif
| ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
| ori r5,r5,PAGE_SIZE@l
| BEGIN_FTR_SECTION
| ld r10,PPC64_CACHES@toc(r2)
| lwz r11,DCACHEL1LOGBLOCKSIZE(r10) /* log2 of cache block size */
| lwz r12,DCACHEL1BLOCKSIZE(r10) /* get cache block size */
| li r9,0
| srd r8,r5,r11
|
| mtctr r8
| .Lsetup:
| dcbt r9,r4
| dcbz r9,r3
| add r9,r9,r12
| bdnz .Lsetup
| END_FTR_SECTION_IFSET(CPU_FTR_CP_USE_DCBTZ)
| addi r3,r3,-8
| srdi r8,r5,7 /* page is copied in 128 byte strides */
| addi r8,r8,-1 /* one stride copied outside loop */
|
| mtctr r8
|
| ld r5,0(r4)
| ld r6,8(r4)
| ld r7,16(r4)
| ldu r8,24(r4)
| 1: std r5,8(r3)
| std r6,16(r3)
| ld r9,8(r4)
| ld r10,16(r4)
| std r7,24(r3)
| std r8,32(r3)
| ld r11,24(r4)
| ld r12,32(r4)
| std r9,40(r3)
| std r10,48(r3)
| ld r5,40(r4)
| ld r6,48(r4)
| std r11,56(r3)
| std r12,64(r3)
| ld r7,56(r4)
| ld r8,64(r4)
| std r5,72(r3)
| std r6,80(r3)
| ld r9,72(r4)
| ld r10,80(r4)
| std r7,88(r3)
| std r8,96(r3)
| ld r11,88(r4)
| ld r12,96(r4)
| std r9,104(r3)
| std r10,112(r3)
| ld r5,104(r4)
| ld r6,112(r4)
| std r11,120(r3)
| stdu r12,128(r3)
| ld r7,120(r4)
| ldu r8,128(r4)
| bdnz 1b
|
| std r5,8(r3)
| std r6,16(r3)
| ld r9,8(r4)
| ld r10,16(r4)
| std r7,24(r3)
| std r8,32(r3)
| ld r11,24(r4)
| ld r12,32(r4)
| std r9,40(r3)
| std r10,48(r3)
| ld r5,40(r4)
| ld r6,48(r4)
| std r11,56(r3)
| std r12,64(r3)
| ld r7,56(r4)
| ld r8,64(r4)
| std r5,72(r3)
| std r6,80(r3)
| ld r9,72(r4)
| ld r10,80(r4)
| std r7,88(r3)
| std r8,96(r3)
| ld r11,88(r4)
| ld r12,96(r4)
| std r9,104(r3)
| std r10,112(r3)
| std r11,120(r3)
| std r12,128(r3)
| blr
| EXPORT_SYMBOL(copy_page)
|
|