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