sh: Tidy up various clear_page()/copy_page() definitions.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
@@ -25,8 +25,8 @@
|
|||||||
.little
|
.little
|
||||||
|
|
||||||
.balign 8
|
.balign 8
|
||||||
.global sh64_page_clear
|
.global clear_page
|
||||||
sh64_page_clear:
|
clear_page:
|
||||||
pta/l 1f, tr1
|
pta/l 1f, tr1
|
||||||
pta/l 2f, tr2
|
pta/l 2f, tr2
|
||||||
ptabs/l r18, tr0
|
ptabs/l r18, tr0
|
||||||
|
@@ -10,8 +10,8 @@
|
|||||||
of SH5-101 cut2 eval chip with Cayman board DDR memory.
|
of SH5-101 cut2 eval chip with Cayman board DDR memory.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
r2 : source effective address (start of page)
|
r2 : destination effective address (start of page)
|
||||||
r3 : destination effective address (start of page)
|
r3 : source effective address (start of page)
|
||||||
|
|
||||||
Always copies 4096 bytes.
|
Always copies 4096 bytes.
|
||||||
|
|
||||||
@@ -27,10 +27,10 @@
|
|||||||
.little
|
.little
|
||||||
|
|
||||||
.balign 8
|
.balign 8
|
||||||
.global sh64_page_copy
|
.global copy_page
|
||||||
sh64_page_copy:
|
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 prefetches 4 lines ahead.
|
||||||
Do alloco 2 lines ahead */
|
Do alloco 2 lines ahead */
|
||||||
|
|
||||||
@@ -41,21 +41,21 @@ sh64_page_copy:
|
|||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* TAKum03020 */
|
/* TAKum03020 */
|
||||||
ld.q r2, 0x00, r63
|
ld.q r3, 0x00, r63
|
||||||
ld.q r2, 0x20, r63
|
ld.q r3, 0x20, r63
|
||||||
ld.q r2, 0x40, r63
|
ld.q r3, 0x40, r63
|
||||||
ld.q r2, 0x60, r63
|
ld.q r3, 0x60, r63
|
||||||
#endif
|
#endif
|
||||||
alloco r3, 0x00
|
alloco r2, 0x00
|
||||||
synco ! TAKum03020
|
synco ! TAKum03020
|
||||||
alloco r3, 0x20
|
alloco r2, 0x20
|
||||||
synco ! TAKum03020
|
synco ! TAKum03020
|
||||||
|
|
||||||
movi 3968, r6
|
movi 3968, r6
|
||||||
add r3, r6, r6
|
add r2, r6, r6
|
||||||
addi r6, 64, r7
|
addi r6, 64, r7
|
||||||
addi r7, 64, r8
|
addi r7, 64, r8
|
||||||
sub r2, r3, r60
|
sub r3, r2, r60
|
||||||
addi r60, 8, r61
|
addi r60, 8, r61
|
||||||
addi r61, 8, r62
|
addi r61, 8, r62
|
||||||
addi r62, 8, r23
|
addi r62, 8, r23
|
||||||
@@ -67,25 +67,23 @@ sh64_page_copy:
|
|||||||
1:
|
1:
|
||||||
#if 0
|
#if 0
|
||||||
/* TAKum03020 */
|
/* TAKum03020 */
|
||||||
bge/u r3, r6, tr2 ! skip prefetch for last 4 lines
|
bge/u r2, r6, tr2 ! skip prefetch for last 4 lines
|
||||||
ldx.q r3, r22, r63 ! prefetch 4 lines hence
|
ldx.q r2, r22, r63 ! prefetch 4 lines hence
|
||||||
#endif
|
#endif
|
||||||
2:
|
2:
|
||||||
bge/u r3, r7, tr3 ! skip alloco for last 2 lines
|
bge/u r2, r7, tr3 ! skip alloco for last 2 lines
|
||||||
alloco r3, 0x40 ! alloc destination line 2 lines ahead
|
alloco r2, 0x40 ! alloc destination line 2 lines ahead
|
||||||
synco ! TAKum03020
|
synco ! TAKum03020
|
||||||
3:
|
3:
|
||||||
ldx.q r3, r60, r36
|
ldx.q r2, r60, r36
|
||||||
ldx.q r3, r61, r37
|
ldx.q r2, r61, r37
|
||||||
ldx.q r3, r62, r38
|
ldx.q r2, r62, r38
|
||||||
ldx.q r3, r23, r39
|
ldx.q r2, r23, r39
|
||||||
st.q r3, 0, r36
|
st.q r2, 0, r36
|
||||||
st.q r3, 8, r37
|
st.q r2, 8, r37
|
||||||
st.q r3, 16, r38
|
st.q r2, 16, r38
|
||||||
st.q r3, 24, r39
|
st.q r2, 24, r39
|
||||||
addi r3, 32, r3
|
addi r2, 32, r2
|
||||||
bgt/l r8, r3, tr1
|
bgt/l r8, r2, tr1
|
||||||
|
|
||||||
blink tr0, r63 ! return
|
blink tr0, r63 ! return
|
||||||
|
|
||||||
|
|
||||||
|
@@ -9,11 +9,11 @@
|
|||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* copy_page_slow
|
* copy_page
|
||||||
* @to: P1 address
|
* @to: P1 address
|
||||||
* @from: 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
|
* r10 --- to
|
||||||
* r11 --- from
|
* r11 --- from
|
||||||
*/
|
*/
|
||||||
ENTRY(copy_page_slow)
|
ENTRY(copy_page)
|
||||||
mov.l r8,@-r15
|
mov.l r8,@-r15
|
||||||
mov.l r10,@-r15
|
mov.l r10,@-r15
|
||||||
mov.l r11,@-r15
|
mov.l r11,@-r15
|
||||||
|
@@ -24,9 +24,6 @@
|
|||||||
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
|
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
|
||||||
pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||||
|
|
||||||
void (*copy_page)(void *from, void *to);
|
|
||||||
void (*clear_page)(void *to);
|
|
||||||
|
|
||||||
void show_mem(void)
|
void show_mem(void)
|
||||||
{
|
{
|
||||||
int total = 0, reserved = 0, free = 0;
|
int total = 0, reserved = 0, free = 0;
|
||||||
@@ -203,18 +200,6 @@ void __init mem_init(void)
|
|||||||
memset(empty_zero_page, 0, PAGE_SIZE);
|
memset(empty_zero_page, 0, PAGE_SIZE);
|
||||||
__flush_wback_region(empty_zero_page, 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;
|
after_bootmem = 1;
|
||||||
|
|
||||||
codesize = (unsigned long) &_etext - (unsigned long) &_text;
|
codesize = (unsigned long) &_etext - (unsigned long) &_text;
|
||||||
|
@@ -14,12 +14,12 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <asm/page.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);
|
memcpy(to, from, PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_page_nommu(void *to)
|
void clear_page(void *to)
|
||||||
{
|
{
|
||||||
memset(to, 0, PAGE_SIZE);
|
memset(to, 0, PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
@@ -55,20 +55,12 @@
|
|||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#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 shm_align_mask;
|
||||||
extern unsigned long max_low_pfn, min_low_pfn;
|
extern unsigned long max_low_pfn, min_low_pfn;
|
||||||
extern unsigned long memory_start, memory_end;
|
extern unsigned long memory_start, memory_end;
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
extern void clear_page(void *to);
|
||||||
extern void clear_page_slow(void *to);
|
extern void copy_page(void *to, void *from);
|
||||||
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
|
|
||||||
|
|
||||||
#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \
|
#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \
|
||||||
(defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB))
|
(defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB))
|
||||||
|
Reference in New Issue
Block a user