1
0
Fork 0

sh: Tidy up various clear_page()/copy_page() definitions.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
hifive-unleashed-5.1
Paul Mundt 2007-11-20 16:51:28 +09:00
parent bcb28e42be
commit 379a95d1d2
6 changed files with 36 additions and 61 deletions

View File

@ -25,8 +25,8 @@
.little
.balign 8
.global sh64_page_clear
sh64_page_clear:
.global clear_page
clear_page:
pta/l 1f, tr1
pta/l 2f, tr2
ptabs/l r18, tr0

View File

@ -10,8 +10,8 @@
of SH5-101 cut2 eval chip with Cayman board DDR memory.
Parameters:
r2 : source effective address (start of page)
r3 : destination effective address (start of page)
r2 : destination effective address (start of page)
r3 : source effective address (start of page)
Always copies 4096 bytes.
@ -27,10 +27,10 @@
.little
.balign 8
.global sh64_page_copy
sh64_page_copy:
.global copy_page
copy_page:
/* Copy 4096 bytes worth of data from r2 to r3.
/* Copy 4096 bytes worth of data from r3 to r2.
Do prefetches 4 lines ahead.
Do alloco 2 lines ahead */
@ -41,21 +41,21 @@ sh64_page_copy:
#if 0
/* TAKum03020 */
ld.q r2, 0x00, r63
ld.q r2, 0x20, r63
ld.q r2, 0x40, r63
ld.q r2, 0x60, r63
ld.q r3, 0x00, r63
ld.q r3, 0x20, r63
ld.q r3, 0x40, r63
ld.q r3, 0x60, r63
#endif
alloco r3, 0x00
alloco r2, 0x00
synco ! TAKum03020
alloco r3, 0x20
alloco r2, 0x20
synco ! TAKum03020
movi 3968, r6
add r3, r6, r6
add r2, r6, r6
addi r6, 64, r7
addi r7, 64, r8
sub r2, r3, r60
sub r3, r2, r60
addi r60, 8, r61
addi r61, 8, r62
addi r62, 8, r23
@ -67,25 +67,23 @@ sh64_page_copy:
1:
#if 0
/* TAKum03020 */
bge/u r3, r6, tr2 ! skip prefetch for last 4 lines
ldx.q r3, r22, r63 ! prefetch 4 lines hence
bge/u r2, r6, tr2 ! skip prefetch for last 4 lines
ldx.q r2, r22, r63 ! prefetch 4 lines hence
#endif
2:
bge/u r3, r7, tr3 ! skip alloco for last 2 lines
alloco r3, 0x40 ! alloc destination line 2 lines ahead
bge/u r2, r7, tr3 ! skip alloco for last 2 lines
alloco r2, 0x40 ! alloc destination line 2 lines ahead
synco ! TAKum03020
3:
ldx.q r3, r60, r36
ldx.q r3, r61, r37
ldx.q r3, r62, r38
ldx.q r3, r23, r39
st.q r3, 0, r36
st.q r3, 8, r37
st.q r3, 16, r38
st.q r3, 24, r39
addi r3, 32, r3
bgt/l r8, r3, tr1
ldx.q r2, r60, r36
ldx.q r2, r61, r37
ldx.q r2, r62, r38
ldx.q r2, r23, r39
st.q r2, 0, r36
st.q r2, 8, r37
st.q r2, 16, r38
st.q r2, 24, r39
addi r2, 32, r2
bgt/l r8, r2, tr1
blink tr0, r63 ! return

View File

@ -9,11 +9,11 @@
#include <asm/page.h>
/*
* copy_page_slow
* copy_page
* @to: P1 address
* @from: P1 address
*
* void copy_page_slow(void *to, void *from)
* void copy_page(void *to, void *from)
*/
/*
@ -23,7 +23,7 @@
* r10 --- to
* r11 --- from
*/
ENTRY(copy_page_slow)
ENTRY(copy_page)
mov.l r8,@-r15
mov.l r10,@-r15
mov.l r11,@-r15

View File

@ -24,9 +24,6 @@
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
pgd_t swapper_pg_dir[PTRS_PER_PGD];
void (*copy_page)(void *from, void *to);
void (*clear_page)(void *to);
void show_mem(void)
{
int total = 0, reserved = 0, free = 0;
@ -203,18 +200,6 @@ void __init mem_init(void)
memset(empty_zero_page, 0, PAGE_SIZE);
__flush_wback_region(empty_zero_page, PAGE_SIZE);
/*
* Setup wrappers for copy/clear_page(), these will get overridden
* later in the boot process if a better method is available.
*/
#ifdef CONFIG_MMU
copy_page = copy_page_slow;
clear_page = clear_page_slow;
#else
copy_page = copy_page_nommu;
clear_page = clear_page_nommu;
#endif
after_bootmem = 1;
codesize = (unsigned long) &_etext - (unsigned long) &_text;

View File

@ -14,12 +14,12 @@
#include <linux/string.h>
#include <asm/page.h>
void copy_page_nommu(void *to, void *from)
void copy_page(void *to, void *from)
{
memcpy(to, from, PAGE_SIZE);
}
void clear_page_nommu(void *to)
void clear_page(void *to)
{
memset(to, 0, PAGE_SIZE);
}

View File

@ -55,20 +55,12 @@
#ifndef __ASSEMBLY__
extern void (*clear_page)(void *to);
extern void (*copy_page)(void *to, void *from);
extern unsigned long shm_align_mask;
extern unsigned long max_low_pfn, min_low_pfn;
extern unsigned long memory_start, memory_end;
#ifdef CONFIG_MMU
extern void clear_page_slow(void *to);
extern void copy_page_slow(void *to, void *from);
#else
extern void clear_page_nommu(void *to);
extern void copy_page_nommu(void *to, void *from);
#endif
extern void clear_page(void *to);
extern void copy_page(void *to, void *from);
#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \
(defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB))