-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ARM] copypage: convert assembly files to C
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Russell King
authored and
Russell King
committed
Nov 27, 2008
1 parent
487ff32
commit d73e60b
Showing
10 changed files
with
431 additions
and
411 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
/* | ||
* linux/arch/arm/mm/copypage-feroceon.S | ||
* | ||
* Copyright (C) 2008 Marvell Semiconductors | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This handles copy_user_page and clear_user_page on Feroceon | ||
* more optimally than the generic implementations. | ||
*/ | ||
#include <linux/init.h> | ||
|
||
#include <asm/page.h> | ||
|
||
void __attribute__((naked)) | ||
feroceon_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) | ||
{ | ||
asm("\ | ||
stmfd sp!, {r4-r9, lr} \n\ | ||
mov ip, %0 \n\ | ||
1: mov lr, r1 \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
pld [lr, #32] \n\ | ||
pld [lr, #64] \n\ | ||
pld [lr, #96] \n\ | ||
pld [lr, #128] \n\ | ||
pld [lr, #160] \n\ | ||
pld [lr, #192] \n\ | ||
pld [lr, #224] \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
ldmia r1!, {r2 - r9} \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
stmia r0, {r2 - r9} \n\ | ||
subs ip, ip, #(32 * 8) \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
bne 1b \n\ | ||
mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\ | ||
ldmfd sp!, {r4-r9, pc}" | ||
: | ||
: "I" (PAGE_SIZE)); | ||
} | ||
|
||
void __attribute__((naked)) | ||
feroceon_clear_user_page(void *kaddr, unsigned long vaddr) | ||
{ | ||
asm("\ | ||
stmfd sp!, {r4-r7, lr} \n\ | ||
mov r1, %0 \n\ | ||
mov r2, #0 \n\ | ||
mov r3, #0 \n\ | ||
mov r4, #0 \n\ | ||
mov r5, #0 \n\ | ||
mov r6, #0 \n\ | ||
mov r7, #0 \n\ | ||
mov ip, #0 \n\ | ||
mov lr, #0 \n\ | ||
1: stmia r0, {r2-r7, ip, lr} \n\ | ||
subs r1, r1, #1 \n\ | ||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line\n\ | ||
add r0, r0, #32 \n\ | ||
bne 1b \n\ | ||
mcr p15, 0, r1, c7, c10, 4 @ drain WB\n\ | ||
ldmfd sp!, {r4-r7, pc}" | ||
: | ||
: "I" (PAGE_SIZE / 32)); | ||
} | ||
|
||
struct cpu_user_fns feroceon_user_fns __initdata = { | ||
.cpu_clear_user_page = feroceon_clear_user_page, | ||
.cpu_copy_user_page = feroceon_copy_user_page, | ||
}; | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* linux/arch/arm/mm/copypage-v3.c | ||
* | ||
* Copyright (C) 1995-1999 Russell King | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#include <linux/init.h> | ||
|
||
#include <asm/page.h> | ||
|
||
/* | ||
* ARMv3 optimised copy_user_page | ||
* | ||
* FIXME: do we need to handle cache stuff... | ||
*/ | ||
void __attribute__((naked)) | ||
v3_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) | ||
{ | ||
asm("\n\ | ||
stmfd sp!, {r4, lr} @ 2\n\ | ||
mov r2, %2 @ 1\n\ | ||
ldmia %0!, {r3, r4, ip, lr} @ 4+1\n\ | ||
1: stmia %1!, {r3, r4, ip, lr} @ 4\n\ | ||
ldmia %0!, {r3, r4, ip, lr} @ 4+1\n\ | ||
stmia %1!, {r3, r4, ip, lr} @ 4\n\ | ||
ldmia %0!, {r3, r4, ip, lr} @ 4+1\n\ | ||
stmia %1!, {r3, r4, ip, lr} @ 4\n\ | ||
ldmia %0!, {r3, r4, ip, lr} @ 4\n\ | ||
subs r2, r2, #1 @ 1\n\ | ||
stmia %1!, {r3, r4, ip, lr} @ 4\n\ | ||
ldmneia %0!, {r3, r4, ip, lr} @ 4\n\ | ||
bne 1b @ 1\n\ | ||
ldmfd sp!, {r4, pc} @ 3" | ||
: | ||
: "r" (kfrom), "r" (kto), "I" (PAGE_SIZE / 64)); | ||
} | ||
|
||
/* | ||
* ARMv3 optimised clear_user_page | ||
* | ||
* FIXME: do we need to handle cache stuff... | ||
*/ | ||
void __attribute__((naked)) v3_clear_user_page(void *kaddr, unsigned long vaddr) | ||
{ | ||
asm("\n\ | ||
str lr, [sp, #-4]!\n\ | ||
mov r1, %1 @ 1\n\ | ||
mov r2, #0 @ 1\n\ | ||
mov r3, #0 @ 1\n\ | ||
mov ip, #0 @ 1\n\ | ||
mov lr, #0 @ 1\n\ | ||
1: stmia %0!, {r2, r3, ip, lr} @ 4\n\ | ||
stmia %0!, {r2, r3, ip, lr} @ 4\n\ | ||
stmia %0!, {r2, r3, ip, lr} @ 4\n\ | ||
stmia %0!, {r2, r3, ip, lr} @ 4\n\ | ||
subs r1, r1, #1 @ 1\n\ | ||
bne 1b @ 1\n\ | ||
ldr pc, [sp], #4" | ||
: | ||
: "r" (kaddr), "I" (PAGE_SIZE / 64)); | ||
} | ||
|
||
struct cpu_user_fns v3_user_fns __initdata = { | ||
.cpu_clear_user_page = v3_clear_user_page, | ||
.cpu_copy_user_page = v3_copy_user_page, | ||
}; |
Oops, something went wrong.