sh: Optimized cache handling for SH-4/SH-4A caches.
This reworks some of the SH-4 cache handling code to more easily accomodate newer-style caches (particularly for the > direct-mapped case), as well as optimizing some of the old code. Signed-off-by: Richard Curnow <richard.curnow@st.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Bu işleme şunda yer alıyor:

işlemeyi yapan:
Paul Mundt

ebeveyn
fdfc74f9fc
işleme
b638d0b921
@@ -193,102 +193,5 @@ ENTRY(__clear_user_page)
|
||||
nop
|
||||
.L4096: .word 4096
|
||||
|
||||
ENTRY(__flush_cache_4096)
|
||||
mov.l 1f,r3
|
||||
add r6,r3
|
||||
mov r4,r0
|
||||
mov #64,r2
|
||||
shll r2
|
||||
mov #64,r6
|
||||
jmp @r3
|
||||
mov #96,r7
|
||||
.align 2
|
||||
1: .long 2f
|
||||
2:
|
||||
.rept 32
|
||||
mov.l r5,@r0
|
||||
mov.l r5,@(32,r0)
|
||||
mov.l r5,@(r0,r6)
|
||||
mov.l r5,@(r0,r7)
|
||||
add r2,r5
|
||||
add r2,r0
|
||||
.endr
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
rts
|
||||
nop
|
||||
|
||||
ENTRY(__flush_dcache_all)
|
||||
mov.l 2f,r0
|
||||
mov.l 3f,r4
|
||||
and r0,r4 ! r4 = (unsigned long)&empty_zero_page[0] & ~0xffffc000
|
||||
stc sr,r1 ! save SR
|
||||
mov.l 4f,r2
|
||||
or r1,r2
|
||||
mov #32,r3
|
||||
shll2 r3
|
||||
1:
|
||||
ldc r2,sr ! set BL bit
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
add #32,r4
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
add #32,r4
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
add #32,r4
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
ldc r1,sr ! restore SR
|
||||
dt r3
|
||||
bf/s 1b
|
||||
add #32,r4
|
||||
|
||||
rts
|
||||
nop
|
||||
.align 2
|
||||
2: .long 0xffffc000
|
||||
3: .long empty_zero_page
|
||||
4: .long 0x10000000 ! BL bit
|
||||
|
||||
/* __flush_cache_4096_all(unsigned long addr) */
|
||||
ENTRY(__flush_cache_4096_all)
|
||||
mov.l 2f,r0
|
||||
mov.l 3f,r2
|
||||
and r0,r2
|
||||
or r2,r4 ! r4 = addr | (unsigned long)&empty_zero_page[0] & ~0x3fff
|
||||
stc sr,r1 ! save SR
|
||||
mov.l 4f,r2
|
||||
or r1,r2
|
||||
mov #32,r3
|
||||
1:
|
||||
ldc r2,sr ! set BL bit
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
add #32,r4
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
add #32,r4
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
add #32,r4
|
||||
movca.l r0,@r4
|
||||
ocbi @r4
|
||||
ldc r1,sr ! restore SR
|
||||
dt r3
|
||||
bf/s 1b
|
||||
add #32,r4
|
||||
|
||||
rts
|
||||
nop
|
||||
.align 2
|
||||
2: .long 0xffffc000
|
||||
3: .long empty_zero_page
|
||||
4: .long 0x10000000 ! BL bit
|
||||
#endif
|
||||
|
||||
|
Yeni konuda referans
Bir kullanıcı engelle