|
|
|
@ -208,7 +208,7 @@ in_flash: |
|
|
|
|
bl enable_addr_trans |
|
|
|
|
sync |
|
|
|
|
|
|
|
|
|
/* enable and invalidate the data cache */ |
|
|
|
|
/* enable the data cache */ |
|
|
|
|
bl dcache_enable |
|
|
|
|
sync |
|
|
|
|
#ifdef CFG_INIT_RAM_LOCK |
|
|
|
@ -483,17 +483,29 @@ init_e300_core: /* time t 10 */ |
|
|
|
|
1: |
|
|
|
|
#endif /* CONFIG_WATCHDOG */ |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_MASK_AER_AO) |
|
|
|
|
/* Write the Arbiter Event Enable to mask Address Only traps. */ |
|
|
|
|
/* This prevents the dcbz instruction from being trapped when */ |
|
|
|
|
/* HID0_ABE Address Broadcast Enable is set and the MEMORY */ |
|
|
|
|
/* COHERENCY bit is set in the WIMG bits, which is often */ |
|
|
|
|
/* needed for PCI operation. */ |
|
|
|
|
lwz r4, 0x0808(r3) |
|
|
|
|
rlwinm r0, r4, 0, ~AER_AO |
|
|
|
|
stw r0, 0x0808(r3) |
|
|
|
|
#endif /* CONFIG_MASK_AER_AO */ |
|
|
|
|
|
|
|
|
|
/* Initialize the Hardware Implementation-dependent Registers */ |
|
|
|
|
/* HID0 also contains cache control */ |
|
|
|
|
/* - force invalidation of data and instruction caches */ |
|
|
|
|
/*------------------------------------------------------*/ |
|
|
|
|
|
|
|
|
|
lis r3, CFG_HID0_INIT@h
|
|
|
|
|
ori r3, r3, CFG_HID0_INIT@l
|
|
|
|
|
ori r3, r3, (CFG_HID0_INIT | HID0_ICFI | HID0_DCFI)@l
|
|
|
|
|
SYNC |
|
|
|
|
mtspr HID0, r3 |
|
|
|
|
|
|
|
|
|
lis r3, CFG_HID0_FINAL@h
|
|
|
|
|
ori r3, r3, CFG_HID0_FINAL@l
|
|
|
|
|
ori r3, r3, (CFG_HID0_FINAL & ~(HID0_ICFI | HID0_DCFI))@l
|
|
|
|
|
SYNC |
|
|
|
|
mtspr HID0, r3 |
|
|
|
|
|
|
|
|
@ -703,8 +715,7 @@ disable_addr_trans: |
|
|
|
|
icache_enable: |
|
|
|
|
mfspr r3, HID0 |
|
|
|
|
ori r3, r3, HID0_ICE |
|
|
|
|
lis r4, 0 |
|
|
|
|
ori r4, r4, HID0_ILOCK |
|
|
|
|
li r4, HID0_ICFI|HID0_ILOCK |
|
|
|
|
andc r3, r3, r4 |
|
|
|
|
ori r4, r3, HID0_ICFI |
|
|
|
|
isync |
|
|
|
@ -717,13 +728,10 @@ icache_enable: |
|
|
|
|
icache_disable: |
|
|
|
|
mfspr r3, HID0 |
|
|
|
|
lis r4, 0 |
|
|
|
|
ori r4, r4, HID0_ICE|HID0_ILOCK |
|
|
|
|
ori r4, r4, HID0_ICE|HID0_ICFI|HID0_ILOCK |
|
|
|
|
andc r3, r3, r4 |
|
|
|
|
ori r4, r3, HID0_ICFI |
|
|
|
|
isync |
|
|
|
|
mtspr HID0, r4 /* sets invalidate, clears enable and lock*/ |
|
|
|
|
isync |
|
|
|
|
mtspr HID0, r3 /* clears invalidate */ |
|
|
|
|
mtspr HID0, r3 /* clears invalidate, enable and lock */ |
|
|
|
|
blr |
|
|
|
|
|
|
|
|
|
.globl icache_status
|
|
|
|
@ -737,25 +745,24 @@ dcache_enable: |
|
|
|
|
mfspr r3, HID0 |
|
|
|
|
li r5, HID0_DCFI|HID0_DLOCK |
|
|
|
|
andc r3, r3, r5 |
|
|
|
|
mtspr HID0, r3 /* no invalidate, unlock */ |
|
|
|
|
ori r3, r3, HID0_DCE |
|
|
|
|
ori r5, r3, HID0_DCFI |
|
|
|
|
mtspr HID0, r5 /* enable + invalidate */ |
|
|
|
|
mtspr HID0, r3 /* enable */ |
|
|
|
|
sync |
|
|
|
|
mtspr HID0, r3 /* enable, no invalidate */ |
|
|
|
|
blr |
|
|
|
|
|
|
|
|
|
.globl dcache_disable
|
|
|
|
|
dcache_disable: |
|
|
|
|
mflr r4 |
|
|
|
|
bl flush_dcache /* uses r3 and r5 */ |
|
|
|
|
mfspr r3, HID0 |
|
|
|
|
lis r4, 0 |
|
|
|
|
ori r4, r4, HID0_DCE|HID0_DLOCK |
|
|
|
|
andc r3, r3, r4 |
|
|
|
|
ori r4, r3, HID0_DCI |
|
|
|
|
li r5, HID0_DCE|HID0_DLOCK |
|
|
|
|
andc r3, r3, r5 |
|
|
|
|
ori r5, r3, HID0_DCFI |
|
|
|
|
sync |
|
|
|
|
mtspr HID0, r4 /* sets invalidate, clears enable and lock */ |
|
|
|
|
mtspr HID0, r5 /* sets invalidate, clears enable and lock */ |
|
|
|
|
sync |
|
|
|
|
mtspr HID0, r3 /* clears invalidate */ |
|
|
|
|
mtlr r4 |
|
|
|
|
blr |
|
|
|
|
|
|
|
|
|
.globl dcache_status
|
|
|
|
@ -764,6 +771,18 @@ dcache_status: |
|
|
|
|
rlwinm r3, r3, (31 - HID0_DCE_SHIFT + 1), 31, 31 |
|
|
|
|
blr |
|
|
|
|
|
|
|
|
|
.globl flush_dcache
|
|
|
|
|
flush_dcache: |
|
|
|
|
lis r3, 0 |
|
|
|
|
lis r5, CFG_CACHELINE_SIZE |
|
|
|
|
1: cmp 0, 1, r3, r5 |
|
|
|
|
bge 2f |
|
|
|
|
lwz r5, 0(r3) |
|
|
|
|
lis r5, CFG_CACHELINE_SIZE |
|
|
|
|
addi r3, r3, 0x4 |
|
|
|
|
b 1b |
|
|
|
|
2: blr |
|
|
|
|
|
|
|
|
|
.globl get_pvr
|
|
|
|
|
get_pvr: |
|
|
|
|
mfspr r3, PVR |
|
|
|
@ -1060,9 +1079,9 @@ lock_ram_in_cache: |
|
|
|
|
*/ |
|
|
|
|
lis r3, (CFG_INIT_RAM_ADDR & ~31)@h
|
|
|
|
|
ori r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
|
|
|
|
|
li r2, ((CFG_INIT_RAM_END & ~31) + \ |
|
|
|
|
li r4, ((CFG_INIT_RAM_END & ~31) + \ |
|
|
|
|
(CFG_INIT_RAM_ADDR & 31) + 31) / 32 |
|
|
|
|
mtctr r2 |
|
|
|
|
mtctr r4 |
|
|
|
|
1: |
|
|
|
|
dcbz r0, r3 |
|
|
|
|
addi r3, r3, 32 |
|
|
|
@ -1070,7 +1089,7 @@ lock_ram_in_cache: |
|
|
|
|
|
|
|
|
|
/* Lock the data cache */ |
|
|
|
|
mfspr r0, HID0 |
|
|
|
|
ori r0, r0, 0x1000 |
|
|
|
|
ori r0, r0, HID0_DLOCK |
|
|
|
|
sync |
|
|
|
|
mtspr HID0, r0 |
|
|
|
|
sync |
|
|
|
@ -1082,8 +1101,9 @@ unlock_ram_in_cache: |
|
|
|
|
/* invalidate the INIT_RAM section */ |
|
|
|
|
lis r3, (CFG_INIT_RAM_ADDR & ~31)@h
|
|
|
|
|
ori r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
|
|
|
|
|
li r2,512 |
|
|
|
|
mtctr r2 |
|
|
|
|
li r4, ((CFG_INIT_RAM_END & ~31) + \ |
|
|
|
|
(CFG_INIT_RAM_ADDR & 31) + 31) / 32 |
|
|
|
|
mtctr r4 |
|
|
|
|
1: icbi r0, r3 |
|
|
|
|
dcbi r0, r3 |
|
|
|
|
addi r3, r3, 32 |
|
|
|
@ -1096,9 +1116,10 @@ unlock_ram_in_cache: |
|
|
|
|
li r5, HID0_DLOCK|HID0_DCFI |
|
|
|
|
andc r3, r3, r5 /* no invalidate, unlock */ |
|
|
|
|
ori r5, r3, HID0_DCFI /* invalidate, unlock */ |
|
|
|
|
sync |
|
|
|
|
mtspr HID0, r5 /* invalidate, unlock */ |
|
|
|
|
mtspr HID0, r3 /* no invalidate, unlock */ |
|
|
|
|
sync |
|
|
|
|
mtspr HID0, r3 /* no invalidate, unlock */ |
|
|
|
|
blr |
|
|
|
|
#endif /* !CONFIG_NAND_SPL */ |
|
|
|
|
#endif /* CFG_INIT_RAM_LOCK */ |
|
|
|
|