Beruflich Dokumente
Kultur Dokumente
Search codes
/*
* Copyright (c) 2005, 2007 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/*
modification history
--------------------
01b,20oct07,x_s modified for mds837x.
01a,19jan05,dtr written from ads834x/romInit.s/01f
*/
/*
DESCRIPTION
This module contains the entry code for the VxWorks bootrom.
The entry point romInit, is the first code executed on power-up.
It sets the BOOT_COLD parameter to be passed to the generic
romStart() routine.
*/
#define _ASMLANGUAGE
#include <vxWorks.h>
#include <asm.h>
#include <cacheLib.h>
#include "config.h"
#include <regs.h>
#include <sysLib.h>
#define WRITEADR(reg1,reg2,addr32,val) \
lis reg1, HI(addr32); \
ori reg1, reg1, LO(addr32); \
lis reg2, HI(val); \
ori reg2, reg2, LO(val); \
stw reg2, 0(reg1)
#define WRITEOFFSET(regbase,reg2,offset,val) \
lis reg2, HI(val); \
ori reg2, reg2, LO(val); \
stw reg2, offset(regbase);
/* internals */
http://read.pudn.com/downloads151/sourcecode/embed/657719/romInit.s__.htm 1/8
11/21/2017 romInit.rar romInit.s
/* externals */
.text
/*
Hard Reset Configuration Word (HRCW) See config.h/bnc837x.h/target.ref for
more info
*/
.fill 8,1,HRCW_LOW_BYTE0
.fill 8,1,HRCW_LOW_BYTE1
.fill 8,1,HRCW_LOW_BYTE2
.fill 8,1,HRCW_LOW_BYTE3
.fill 8,1,HRCW_HIGH_BYTE0
.fill 8,1,HRCW_HIGH_BYTE1
.fill 8,1,HRCW_HIGH_BYTE2
.fill 8,1,HRCW_HIGH_BYTE3
.fill 192,1,0 /* The rest of the space are filled with zeros */
/******************************************************************************
*
* romInit - entry point for VxWorks in ROM
*
*
* romInit
* (
* int startType /@ only used by 2nd entry point @/
* )
*/
_romInit:
romInit:
cold:
li r11, BOOT_COLD /* set cold boot as start type */
/*
* initialize the IMMR register before any non-core registers
* modification. The default IMMR base address was 0xFF400000,
* as originally programmed in the Hard Reset Configuration Word.
*/
/*
Modifying ACR to increase pipeline depth, must retain
http://read.pudn.com/downloads151/sourcecode/embed/657719/romInit.s__.htm 2/8
11/21/2017 romInit.rar romInit.s
rsvd bits values.
*/
lis r6, 0x0010
ori r6, r6, 0x0000
stw r6, M83XX_ACR(0)(r4)
sync
isync
#ifndef BOOT_FROM_UBOOT
lis r5, HIADJ(QUICC_OR0(CCSBAR))
addi r5, r5, LO(QUICC_OR0(CCSBAR))
#ifdef BMS_HIGH_ENABLE
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,1), FLASH_BASE_ADRS)
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,1), \
(LAWAR_ENABLE | LAWAR_SIZE_64MB ) )
lis r6,HI(M83XX_LBLAWARn(CCSBAR,1))
ori r6,r6,LO(M83XX_LBLAWARn(CCSBAR,1))
lwz r7,0(r6)
isync
#else
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,0), 0x00000000)
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,0), \
(LAWAR_ENABLE | LAWAR_SIZE_2GB ))
lis r6,HI(M83XX_LBLAWARn(CCSBAR,0))
ori r6,r6,LO(M83XX_LBLAWARn(CCSBAR,0))
lwz r7,0(r6)
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,1), 0x80000000)
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,1), \
(LAWAR_ENABLE | LAWAR_SIZE_2GB ) )
lis r6,HI(M83XX_LBLAWARn(CCSBAR,1))
ori r6,r6,LO(M83XX_LBLAWARn(CCSBAR,1))
lwz r7,0(r6)
isync
#endif
#endif
/*
* When the PowerPC 83xx is powered on, the processor fetches the
* instructions located at the address 0x100. We need to jump
* from the address 0x100 to the Flash space.
*/
http://read.pudn.com/downloads151/sourcecode/embed/657719/romInit.s__.htm 3/8
11/21/2017 romInit.rar romInit.s
sub r4, r4, r5 /* */
add r4, r4, r6
WRITEADR(r6,r7,QUICC_BR0(CCSBAR),FLASH_BASE_ADRS|0x1001)
WRITEADR(r6,r7,QUICC_OR0(CCSBAR),FLASH_BASE_ADRS|0x0FF7)
#ifdef BMS_HIGH_ENABLE
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,0), 0x00000000)
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,0), 0x00000000)
lis r6,HI(M83XX_LBLAWARn(CCSBAR,0))
ori r6,r6,LO(M83XX_LBLAWARn(CCSBAR,0))
lwz r7,0(r6)
#else
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,0), FLASH_BASE_ADRS)
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,0), \
(LAWAR_ENABLE | LAWAR_SIZE_8MB ))
lis r6,HI(M83XX_LBLAWARn(CCSBAR,0))
ori r6,r6,LO(M83XX_LBLAWARn(CCSBAR,0))
lwz r7,0(r6)
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,1), FLASH_BASE_ADRS)
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,1), \
(LAWAR_ENABLE | LAWAR_SIZE_32MB ) )
lis r6,HI(M83XX_LBLAWARn(CCSBAR,1))
ori r6,r6,LO(M83XX_LBLAWARn(CCSBAR,1))
lwz r7,0(r6)
isync
#endif
WRITEADR(r6,r7, M83XX_SICRL(CCSBAR),0x80000000)
isync
WRITEADR(r6,r7, M83XX_SICRH(CCSBAR),0x00000002)
isync
/* disable clocks, peripheral driver or sysHwInit() will start */
WRITEADR(r6,r7, QUICC_LBCR(CCSBAR),0)
isync
li r6,0x0020
mtctr r6
lbcdelay:
nop
bdnz lbcdelay
nop
http://read.pudn.com/downloads151/sourcecode/embed/657719/romInit.s__.htm 4/8
11/21/2017 romInit.rar romInit.s
isync
sync
addis r0,0,0
isync /* synchronize */
mtspr 272,r0
mtspr 273,r0
mtspr 274,r0
mtspr 275,r0
isync /* synchronize */
mtsr 0,r0
isync
mtsr 1,r0
isync
mtsr 2,r0
isync
mtsr 3,r0
isync
mtsr 4,r0
isync
mtsr 5,r0
isync
mtsr 6,r0
isync
mtsr 7,r0
isync
mtsr 8,r0
isync
mtsr 9,r0
isync
mtsr 10,r0
isync
mtsr 11,r0
isync
mtsr 12,r0
isync
mtsr 13,r0
isync
mtsr 14,r0
isync
mtsr 15,r0
isync
addi r0,0,0x0020
mtspr 9,r0 /* Load CTR with 32 */
addi r7,0,0 /* Use r7 as the tlb index */
tlb_write_loop:
#if 0
WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,0), (BCSR_BASE_ADRS))
WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,0), \
(LAWAR_ENABLE | LAWAR_SIZE_32KB ))
WRITEADR(r6,r7,QUICC_OR1 (CCSBAR), \
(BCSR_BASE_ADRS & 0xffff0000) | 0xe9f7)
/* load BR2 */
WRITEADR(r6,r7,QUICC_BR1 (CCSBAR), 0xffff0801)
isync
sync
#endif
#ifndef BOOT_FROM_UBOOT
#ifdef INCLUDE_DDR_SDRAM
/* Memory mapped region base address */
WRITEADR(r6,r7,M83XX_DDRLAWBARn(CCSBAR,0), \
DDR_SDRAM_LOCAL_ADRS)
WRITEADR(r6,r7,M83XX_DDRLAWARn(CCSBAR,0), \
LAWAR_ENABLE | LAWAR_SIZE_512MB )
nop
nop
nop
nop
isync
WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0x43000000)
WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG_2), 0x00001000)
WRITEOFFSET(r6,r7,(DDR_SDRAM_MODE_CFG), 0x44500632)
WRITEOFFSET(r6,r7,(DDR_SDRAM_MODE_CFG_2), 0x8000c000)
WRITEOFFSET(r6,r7,(DDR_SDRAM_INTERVAL), 0x03CF0080)
WRITEOFFSET(r6,r7,(DDR_SDRAM_CLK_CNTRL), 0x02000000)
lis r7,0x0001
mtctr r7
delayddr1:
nop
bdnz delayddr1
WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0xc3000000)
sync
isync
lis r7,0x0001
mtctr r7
delayddr2:
nop
bdnz delayddr2
isync
sync
#endif /* INCLUDE_DDR_SDRAM */
#endif
isync
bl sysClearFPRegs
warm:
/* turn the instruction cache ON for faster FLASH ROM boots */
mfspr r4, HID0
ori r4, r4, _PPC_HID0_ICE | _PPC_HID0_ICFI /* set ICE & ICFI */
rlwinm r5, r4, 0, _PPC_HID0_BIT_ICFI + 1, _PPC_HID0_BIT_ICFI - 1
/* clear the ICFI bit */
isync
/*
* The setting of the instruction cache enable (ICE) bit must be
* preceded by an isync instruction to prevent the cache from being
* enabled or disabled while an instruction access is in progress.
*/
/* go to C entry point */
/*
* calculate C entry point: routine - entry point + ROM base
* routine = romStart
http://read.pudn.com/downloads151/sourcecode/embed/657719/romInit.s__.htm 7/8
11/21/2017 romInit.rar romInit.s
* entry point = romInit = R7
* ROM base = ROM_TEXT_ADRS = R8
* C entry point: romStart - R7 + R8
*/
http://read.pudn.com/downloads151/sourcecode/embed/657719/romInit.s__.htm 8/8