1f27bb139SMarc Zyngier/* 2f27bb139SMarc Zyngier * Copyright (C) 2012 ARM Ltd. 3f27bb139SMarc Zyngier * 4f27bb139SMarc Zyngier * This program is free software; you can redistribute it and/or modify 5f27bb139SMarc Zyngier * it under the terms of the GNU General Public License version 2 as 6f27bb139SMarc Zyngier * published by the Free Software Foundation. 7f27bb139SMarc Zyngier * 8f27bb139SMarc Zyngier * This program is distributed in the hope that it will be useful, 9f27bb139SMarc Zyngier * but WITHOUT ANY WARRANTY; without even the implied warranty of 10f27bb139SMarc Zyngier * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11f27bb139SMarc Zyngier * GNU General Public License for more details. 12f27bb139SMarc Zyngier * 13f27bb139SMarc Zyngier * You should have received a copy of the GNU General Public License 14f27bb139SMarc Zyngier * along with this program. If not, see <http://www.gnu.org/licenses/>. 15f27bb139SMarc Zyngier */ 16f27bb139SMarc Zyngier 17f27bb139SMarc Zyngier#include <linux/linkage.h> 18f27bb139SMarc Zyngier#include <linux/const.h> 19f27bb139SMarc Zyngier#include <asm/assembler.h> 20f27bb139SMarc Zyngier#include <asm/page.h> 21f27bb139SMarc Zyngier 22f27bb139SMarc Zyngier/* 23f27bb139SMarc Zyngier * Copy a page from src to dest (both are page aligned) 24f27bb139SMarc Zyngier * 25f27bb139SMarc Zyngier * Parameters: 26f27bb139SMarc Zyngier * x0 - dest 27f27bb139SMarc Zyngier * x1 - src 28f27bb139SMarc Zyngier */ 29f27bb139SMarc ZyngierENTRY(copy_page) 30223e23e8SWill Deacon ldp x2, x3, [x1] 31f27bb139SMarc Zyngier ldp x4, x5, [x1, #16] 32f27bb139SMarc Zyngier ldp x6, x7, [x1, #32] 33f27bb139SMarc Zyngier ldp x8, x9, [x1, #48] 34223e23e8SWill Deacon ldp x10, x11, [x1, #64] 35223e23e8SWill Deacon ldp x12, x13, [x1, #80] 36223e23e8SWill Deacon ldp x14, x15, [x1, #96] 37223e23e8SWill Deacon ldp x16, x17, [x1, #112] 38223e23e8SWill Deacon 39223e23e8SWill Deacon mov x18, #(PAGE_SIZE - 128) 40223e23e8SWill Deacon add x1, x1, #128 41223e23e8SWill Deacon1: 42223e23e8SWill Deacon subs x18, x18, #128 43223e23e8SWill Deacon 44223e23e8SWill Deacon stnp x2, x3, [x0] 45223e23e8SWill Deacon ldp x2, x3, [x1] 46223e23e8SWill Deacon stnp x4, x5, [x0, #16] 47223e23e8SWill Deacon ldp x4, x5, [x1, #16] 48223e23e8SWill Deacon stnp x6, x7, [x0, #32] 49223e23e8SWill Deacon ldp x6, x7, [x1, #32] 50223e23e8SWill Deacon stnp x8, x9, [x0, #48] 51223e23e8SWill Deacon ldp x8, x9, [x1, #48] 52223e23e8SWill Deacon stnp x10, x11, [x0, #64] 53223e23e8SWill Deacon ldp x10, x11, [x1, #64] 54223e23e8SWill Deacon stnp x12, x13, [x0, #80] 55223e23e8SWill Deacon ldp x12, x13, [x1, #80] 56223e23e8SWill Deacon stnp x14, x15, [x0, #96] 57223e23e8SWill Deacon ldp x14, x15, [x1, #96] 58223e23e8SWill Deacon stnp x16, x17, [x0, #112] 59223e23e8SWill Deacon ldp x16, x17, [x1, #112] 60223e23e8SWill Deacon 61223e23e8SWill Deacon add x0, x0, #128 62223e23e8SWill Deacon add x1, x1, #128 63223e23e8SWill Deacon 64223e23e8SWill Deacon b.gt 1b 65223e23e8SWill Deacon 66f27bb139SMarc Zyngier stnp x2, x3, [x0] 67f27bb139SMarc Zyngier stnp x4, x5, [x0, #16] 68f27bb139SMarc Zyngier stnp x6, x7, [x0, #32] 69f27bb139SMarc Zyngier stnp x8, x9, [x0, #48] 70223e23e8SWill Deacon stnp x10, x11, [x0, #64] 71223e23e8SWill Deacon stnp x12, x13, [x0, #80] 72223e23e8SWill Deacon stnp x14, x15, [x0, #96] 73223e23e8SWill Deacon stnp x16, x17, [x0, #112] 74223e23e8SWill Deacon 75f27bb139SMarc Zyngier ret 76f27bb139SMarc ZyngierENDPROC(copy_page) 77