85xx: Fix relocation of CCSRBAR
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>
This commit is contained in:
parent
ea154a1781
commit
aed461af81
1 changed files with 5 additions and 4 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue