I'm reading the start.S for mpc83xx in u-boot.
I couldn't understand how the source code below work:
 
/***************************************************
map_flash_by_law1: /* When booting from ROM (Flash or EPROM), clear the  */ /* 
Address Mask in OR0 so ROM appears everywhere      */ 
/*----------------------------------------------------*/ lis r3, (CFG_IMMR)@h  
/* r3 <= CFG_IMMR    */ lwz r4, o...@l(r3) li r5, 0x7fff        /* r5 <= 
0x00007FFFF */ and r4, r4, r5 stw r4, o...@l(r3)     /* OR0 <= OR0 & 
0x00007FFFF */
 
 /* As MPC8349E User's Manual presented, when RCW[BMS] is set to 0,  * system 
will boot from 0x0000_0100, and the LBLAWBAR0[BASE_ADDR]  * reset value is 
0x00000; when RCW[BMS] is set to 1, system will boot  * from 0xFFF0_0100, and 
the LBLAWBAR0[BASE_ADDR] reset value is  * 0xFF800.  From the hard resetting to 
here, the processor fetched and  * executed the instructions one by one.  There 
is not absolutely  * jumping happened.  Laterly, the u-boot code has to do an 
absolutely  * jumping to tell the CPU instruction fetching component what the  
* u-boot TEXT base address is.  Because the TEXT base resides in the  * boot 
ROM memory space, to garantee the code can run smoothly after  * that jumping, 
we must map in the entire boot ROM by Local Access  * Window.  Sometimes, we 
desire an non-0x00000 or non-0xFF800 starting  * address for boot ROM, such as 
0xFE000000.  In this case, the default  * LBIU Local Access Widow 0 will not 
cover this memory space.  So, we  * need another wind
 ow to map in it.  */
 lis r4, (CFG_FLASH_BASE)@h ori r4, r4, (CFG_FLASH_BASE)@l stw r4, 
LBLAWBAR1(r3) /* LBLAWBAR1 <= CFG_FLASH_BASE */
 /* Store 0x80000012 + log2(CFG_FLASH_SIZE) into LBLAWAR1 */ /*0x8000_0000 is 
used to enable this window*/ /*0x0000_0000-0x0000_0012 is the reserved window 
size*/ lis r4, (0x80000012)@h ori r4, r4, (0x80000012)@l li r5, 
CFG_FLASH_SIZE1: srawi. r5, r5, 1 /* r5 = r5 >> 1 */ addi r4, r4, 1 bne 1b
 
 stw r4, LBLAWAR1(r3) /* LBLAWAR1 <= Flash Size */ blr
********************************************************/
 
the problem is from this segment:
 
1: srawi. r5, r5, 1 /* r5 = r5 >> 1 */ addi r4, r4, 1 bne 1b
 
How it adjust the flash size to the fit size?
I define the CFG_FLASH_SIZE equal 1 in the MPC8313ERDB.h
_________________________________________________________________
微软地图率先推出跨城市多点驾车路线查询!
http://ditu.live.com/?form=MRAHAB&rtp=pos.30.454167_116.308611_%E5%A4%AA%E6%B9%96__~pos.29.554046_115.983427_%E5%BA%90%E5%B1%B1__~pos.29.116111_110.478889_%E5%BC%A0%E5%AE%B6%E7%95%8C__&rtop=0~0~0&encType=1
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to