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