1*d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 21da177e4SLinus Torvalds/* 31da177e4SLinus Torvalds * linux/arch/arm/lib/copypage.S 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * Copyright (C) 1995-1999 Russell King 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * ASM optimised string functions 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds#include <linux/linkage.h> 101da177e4SLinus Torvalds#include <asm/assembler.h> 11e6ae744dSSam Ravnborg#include <asm/asm-offsets.h> 12dca230f0SKirill A. Shutemov#include <asm/cache.h> 131da177e4SLinus Torvalds 14dca230f0SKirill A. Shutemov#define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 )) 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds .text 171da177e4SLinus Torvalds .align 5 181da177e4SLinus Torvalds/* 191da177e4SLinus Torvalds * StrongARM optimised copy_page routine 201da177e4SLinus Torvalds * now 1.78bytes/cycle, was 1.60 bytes/cycle (50MHz bus -> 89MB/s) 211da177e4SLinus Torvalds * Note that we probably achieve closer to the 100MB/s target with 221da177e4SLinus Torvalds * the core clock switching. 231da177e4SLinus Torvalds */ 241da177e4SLinus TorvaldsENTRY(copy_page) 251da177e4SLinus Torvalds stmfd sp!, {r4, lr} @ 2 261da177e4SLinus Torvalds PLD( pld [r1, #0] ) 27dca230f0SKirill A. Shutemov PLD( pld [r1, #L1_CACHE_BYTES] ) 281da177e4SLinus Torvalds mov r2, #COPY_COUNT @ 1 291da177e4SLinus Torvalds ldmia r1!, {r3, r4, ip, lr} @ 4+1 30dca230f0SKirill A. Shutemov1: PLD( pld [r1, #2 * L1_CACHE_BYTES]) 31dca230f0SKirill A. Shutemov PLD( pld [r1, #3 * L1_CACHE_BYTES]) 32dca230f0SKirill A. Shutemov2: 33dca230f0SKirill A. Shutemov .rept (2 * L1_CACHE_BYTES / 16 - 1) 341da177e4SLinus Torvalds stmia r0!, {r3, r4, ip, lr} @ 4 351da177e4SLinus Torvalds ldmia r1!, {r3, r4, ip, lr} @ 4 36dca230f0SKirill A. Shutemov .endr 371da177e4SLinus Torvalds subs r2, r2, #1 @ 1 381da177e4SLinus Torvalds stmia r0!, {r3, r4, ip, lr} @ 4 39e44fc388SStefan Agner ldmiagt r1!, {r3, r4, ip, lr} @ 4 401da177e4SLinus Torvalds bgt 1b @ 1 41e44fc388SStefan Agner PLD( ldmiaeq r1!, {r3, r4, ip, lr} ) 421da177e4SLinus Torvalds PLD( beq 2b ) 431b93a717SRussell King ldmfd sp!, {r4, pc} @ 3 4493ed3970SCatalin MarinasENDPROC(copy_page) 45