68 lines
1.3 KiB
ArmAsm
68 lines
1.3 KiB
ArmAsm
|
/*
|
||
|
* Copyright (C) Paul Mackerras 1997.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version
|
||
|
* 2 of the License, or (at your option) any later version.
|
||
|
*/
|
||
|
.text
|
||
|
|
||
|
/*
|
||
|
* Use the BAT2 & 3 registers to map the 1st 16MB of RAM to
|
||
|
* the address given as the 1st argument.
|
||
|
*/
|
||
|
.globl setup_bats
|
||
|
setup_bats:
|
||
|
mfpvr 5
|
||
|
rlwinm 5,5,16,16,31 /* r3 = 1 for 601, 4 for 604 */
|
||
|
cmpwi 0,5,1
|
||
|
li 0,0
|
||
|
bne 4f
|
||
|
mtibatl 3,0 /* invalidate BAT first */
|
||
|
ori 3,3,4 /* set up BAT registers for 601 */
|
||
|
li 4,0x7f
|
||
|
mtibatu 2,3
|
||
|
mtibatl 2,4
|
||
|
oris 3,3,0x80
|
||
|
oris 4,4,0x80
|
||
|
mtibatu 3,3
|
||
|
mtibatl 3,4
|
||
|
b 5f
|
||
|
4: mtdbatu 3,0 /* invalidate BATs first */
|
||
|
mtibatu 3,0
|
||
|
ori 3,3,0xff /* set up BAT registers for 604 */
|
||
|
li 4,2
|
||
|
mtdbatl 2,4
|
||
|
mtdbatu 2,3
|
||
|
mtibatl 2,4
|
||
|
mtibatu 2,3
|
||
|
oris 3,3,0x80
|
||
|
oris 4,4,0x80
|
||
|
mtdbatl 3,4
|
||
|
mtdbatu 3,3
|
||
|
mtibatl 3,4
|
||
|
mtibatu 3,3
|
||
|
5: sync
|
||
|
isync
|
||
|
blr
|
||
|
|
||
|
/*
|
||
|
* Flush the dcache and invalidate the icache for a range of addresses.
|
||
|
*
|
||
|
* flush_cache(addr, len)
|
||
|
*/
|
||
|
.global flush_cache
|
||
|
flush_cache:
|
||
|
addi 4,4,0x1f /* len = (len + 0x1f) / 0x20 */
|
||
|
rlwinm. 4,4,27,5,31
|
||
|
mtctr 4
|
||
|
beqlr
|
||
|
1: dcbf 0,3
|
||
|
icbi 0,3
|
||
|
addi 3,3,0x20
|
||
|
bdnz 1b
|
||
|
sync
|
||
|
isync
|
||
|
blr
|