Merge tag 'ext4_for_linus_stable' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-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 11
2ac7b016 12_GLOBAL_TOC(copy_page)
fde69282 13BEGIN_FTR_SECTION
d988f0e3 14 lis r5,PAGE_SIZE@h
fde69282 15FTR_SECTION_ELSE
15a3204d 16#ifdef CONFIG_PPC_BOOK3S_64
b1576fec 17 b copypage_power7
15a3204d 18#endif
fde69282 19ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
d988f0e3 20 ori r5,r5,PAGE_SIZE@l
7e3a68be
NP
21#ifdef CONFIG_PPC_KERNEL_PCREL
22 /*
23 * Hack for toolchain - prefixed instructions cause label difference to
24 * be non-constant even if 8 byte alignment is known, so they can not
25 * be put in FTR sections.
26 */
27 LOAD_REG_ADDR(r10, ppc64_caches)
28BEGIN_FTR_SECTION
29#else
57dda6ef 30BEGIN_FTR_SECTION
dab3b8f4 31 LOAD_REG_ADDR(r10, ppc64_caches)
7e3a68be 32#endif
bd067f83
BH
33 lwz r11,DCACHEL1LOGBLOCKSIZE(r10) /* log2 of cache block size */
34 lwz r12,DCACHEL1BLOCKSIZE(r10) /* get cache block size */
57dda6ef
MN
35 li r9,0
36 srd r8,r5,r11
37
38 mtctr r8
3cd980db 39.Lsetup:
57dda6ef
MN
40 dcbt r9,r4
41 dcbz r9,r3
42 add r9,r9,r12
3cd980db 43 bdnz .Lsetup
57dda6ef 44END_FTR_SECTION_IFSET(CPU_FTR_CP_USE_DCBTZ)
14cf11af 45 addi r3,r3,-8
57dda6ef
MN
46 srdi r8,r5,7 /* page is copied in 128 byte strides */
47 addi r8,r8,-1 /* one stride copied outside loop */
48
49 mtctr r8
50
51 ld r5,0(r4)
52 ld r6,8(r4)
53 ld r7,16(r4)
54 ldu r8,24(r4)
551: std r5,8(r3)
57dda6ef 56 std r6,16(r3)
63e6c5b8 57 ld r9,8(r4)
57dda6ef
MN
58 ld r10,16(r4)
59 std r7,24(r3)
57dda6ef 60 std r8,32(r3)
63e6c5b8 61 ld r11,24(r4)
57dda6ef
MN
62 ld r12,32(r4)
63 std r9,40(r3)
57dda6ef 64 std r10,48(r3)
63e6c5b8 65 ld r5,40(r4)
57dda6ef
MN
66 ld r6,48(r4)
67 std r11,56(r3)
57dda6ef 68 std r12,64(r3)
63e6c5b8 69 ld r7,56(r4)
57dda6ef
MN
70 ld r8,64(r4)
71 std r5,72(r3)
57dda6ef 72 std r6,80(r3)
63e6c5b8 73 ld r9,72(r4)
57dda6ef
MN
74 ld r10,80(r4)
75 std r7,88(r3)
57dda6ef 76 std r8,96(r3)
63e6c5b8 77 ld r11,88(r4)
57dda6ef
MN
78 ld r12,96(r4)
79 std r9,104(r3)
57dda6ef 80 std r10,112(r3)
63e6c5b8 81 ld r5,104(r4)
57dda6ef
MN
82 ld r6,112(r4)
83 std r11,120(r3)
57dda6ef 84 stdu r12,128(r3)
63e6c5b8 85 ld r7,120(r4)
57dda6ef 86 ldu r8,128(r4)
14cf11af 87 bdnz 1b
57dda6ef
MN
88
89 std r5,8(r3)
57dda6ef 90 std r6,16(r3)
63e6c5b8 91 ld r9,8(r4)
57dda6ef
MN
92 ld r10,16(r4)
93 std r7,24(r3)
57dda6ef 94 std r8,32(r3)
63e6c5b8 95 ld r11,24(r4)
57dda6ef
MN
96 ld r12,32(r4)
97 std r9,40(r3)
57dda6ef 98 std r10,48(r3)
63e6c5b8 99 ld r5,40(r4)
57dda6ef
MN
100 ld r6,48(r4)
101 std r11,56(r3)
57dda6ef 102 std r12,64(r3)
63e6c5b8 103 ld r7,56(r4)
57dda6ef
MN
104 ld r8,64(r4)
105 std r5,72(r3)
57dda6ef 106 std r6,80(r3)
63e6c5b8 107 ld r9,72(r4)
57dda6ef
MN
108 ld r10,80(r4)
109 std r7,88(r3)
57dda6ef 110 std r8,96(r3)
63e6c5b8 111 ld r11,88(r4)
57dda6ef
MN
112 ld r12,96(r4)
113 std r9,104(r3)
114 std r10,112(r3)
115 std r11,120(r3)
116 std r12,128(r3)
14cf11af 117 blr
9445aa1a 118EXPORT_SYMBOL(copy_page)