- 论坛徽章:
- 0
|
使用U-BOOT 1.1.4 引导linux。经过跟踪发现在linux启动过程中无法打开数据cache。
在 cpu_setup_6xx.S文件中的setup_common_caches函数中如果打开数据cache,则程序无法继续执行。
原始代码默认是打开数据cache的,如下:
/* Enable caches for 603's, 604, 750 & 7400 */
setup_common_caches:
mfspr r11,SPRN_HID0
andi. r0,r11,HID0_DCE
ori r11,r11,HID0_ICE|HID0_DCE
ori r8,r11,HID0_ICFI
bne 1f /* don't invalidate the D-cache */
ori r8,r8,HID0_DCI /* unless it wasn't enabled */
1: sync
mtspr SPRN_HID0,r8 /* enable and invalidate caches */
sync
mtspr SPRN_HID0,r11 /* enable caches */
sync
isync
blr
如果我修改代码,只打开指令cache,不打开数据cache,程序可以继续执行,但无法执行到start_here, 见下面代码:
turn_on_mmu:
mfmsr r0
ori r0,r0,MSR_DR|MSR_IR
mtspr SPRN_SRR1,r0
lis r0,start_here@h
ori r0,r0,start_here@l
mtspr SPRN_SRR0,r0
SYNC
RFI /* enables MMU */
程序停在RFI指令前, RFI指令无法返回。
请各位大侠帮忙分析,不胜感激。
[ 本帖最后由 gloom 于 2006-6-28 14:33 编辑 ] |
|