If the virtual address for CCSRBAR is the same after relocation but
the physical address is changing we'd end up having two TLB entries with
the same VA.  Instead we new us the new CCSRBAR virt address + 4k as a
temp virt address to access the old CCSRBAR to relocate it.

Signed-off-by: Kumar Gala <[EMAIL PROTECTED]>
---
 cpu/mpc85xx/cpu_init.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/cpu/mpc85xx/cpu_init.c b/cpu/mpc85xx/cpu_init.c
index 3a8aef2..1cb9ed9 100644
--- a/cpu/mpc85xx/cpu_init.c
+++ b/cpu/mpc85xx/cpu_init.c
@@ -140,14 +140,15 @@ void cpu_init_early_f(void)
 #if (CONFIG_SYS_CCSRBAR_DEFAULT != CONFIG_SYS_CCSRBAR_PHYS)
        {
                u32 temp;
+               volatile u32 *ccsr_virt =
+                       (volatile u32 *)(CONFIG_SYS_CCSRBAR + 0x1000);
 
-               set_tlb(0, CONFIG_SYS_CCSRBAR_DEFAULT, 
CONFIG_SYS_CCSRBAR_DEFAULT,
+               set_tlb(0, (u32)ccsr_virt, CONFIG_SYS_CCSRBAR_DEFAULT,
                        MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                        1, 1, BOOKE_PAGESZ_4K, 0);
 
-               temp = in_be32((volatile u32 *)CONFIG_SYS_CCSRBAR_DEFAULT);
-               out_be32((volatile u32 *)CONFIG_SYS_CCSRBAR_DEFAULT, 
CONFIG_SYS_CCSRBAR_PHYS >> 12);
-
+               temp = in_be32(ccsr_virt);
+               out_be32(ccsr_virt, CONFIG_SYS_CCSRBAR_PHYS >> 12);
                temp = in_be32((volatile u32 *)CONFIG_SYS_CCSRBAR);
        }
 #endif
-- 
1.5.6.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to