]> git.sur5r.net Git - u-boot/commitdiff
85xx: Fix relocation of CCSRBAR
authorKumar Gala <galak@kernel.crashing.org>
Mon, 24 Nov 2008 16:29:25 +0000 (10:29 -0600)
committerAndrew Fleming-AFLEMING <afleming@freescale.com>
Thu, 4 Dec 2008 09:15:43 +0000 (03:15 -0600)
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 <galak@kernel.crashing.org>
Acked-by: Andy Fleming <afleming@freescale.com>
cpu/mpc85xx/cpu_init.c

index 5862bd6ab0732661ddfd9a14aea33c8ba1e024ba..2d86547c203d704de572784b975c67fafeb5f31d 100644 (file)
@@ -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