/*
* arch/ppc/boot/simple/misc-mv64x60.S
*
* Code to change the base address of the host bridges and call board specific
* init routine.
*
* Author: Mark Greer <mgreer@mvista.com>
*
* 2002 (c) MontaVista, Software, Inc. This file is licensed under the terms
* of the GNU General Public License version 2. This program is licensed
* "as is" without any warranty of any kind, whether express or implied.
*/
#include <linux/config.h>
#include <asm/ppc_asm.h>
#include <asm/processor.h>
#include <asm/cache.h>
#include <asm/mv64x60_defs.h>
.globl mv64x60_init
mv64x60_init:
mflr r27
#if (CONFIG_MV64X60_NEW_BASE != CONFIG_MV64X60_BASE)
bl move_base
#endif
bl mv64x60_board_init
mtlr r27
blr
#if (CONFIG_MV64X60_NEW_BASE != CONFIG_MV64X60_BASE)
move_base:
li r20,0
li r23,20
/* Relocate bridge's regs */
addis r25,0,CONFIG_MV64X60_BASE@h
ori r25,r25,MV64x60_INTERNAL_SPACE_DECODE
lwbrx r26,0,(r25)
lis r24,0xffff
and r26,r26,r24
addis r24,0,CONFIG_MV64X60_NEW_BASE@h
srw r24,r24,r23
or r26,r26,r24
stwbrx r26,0,(r25)
sync
/* Wait for write to take effect */
addis r25,0,CONFIG_MV64X60_NEW_BASE@h
ori r25,r25,MV64x60_INTERNAL_SPACE_DECODE
1: lwbrx r24,0,(r25)
cmpw r24,r26
bne 1b
blr
#endif