ARM: redo TTBR setup code for LPAE
Re-engineer the LPAE TTBR setup code. Rather than passing some shifted address in order to fit in a CPU register, pass either a full physical address (in the case of r4, r5 for TTBR0) or a PFN (for TTBR1). This removes the ARCH_PGD_SHIFT hack, and the last dangerous user of cpu_set_ttbr() in the secondary CPU startup code path (which was there to re-set TTBR1 to the appropriate high physical address space on Keystone2.) Tested-by: Murali Karicheri <m-karicheri2@ti.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -39,19 +39,6 @@ static int keystone_smp_boot_secondary(unsigned int cpu,
|
||||
return error;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARM_LPAE
|
||||
static void __cpuinit keystone_smp_secondary_initmem(unsigned int cpu)
|
||||
{
|
||||
pgd_t *pgd0 = pgd_offset_k(0);
|
||||
cpu_set_ttbr(1, __pa(pgd0) + TTBR1_OFFSET);
|
||||
local_flush_tlb_all();
|
||||
}
|
||||
#else
|
||||
static inline void __cpuinit keystone_smp_secondary_initmem(unsigned int cpu)
|
||||
{}
|
||||
#endif
|
||||
|
||||
struct smp_operations keystone_smp_ops __initdata = {
|
||||
.smp_boot_secondary = keystone_smp_boot_secondary,
|
||||
.smp_secondary_init = keystone_smp_secondary_initmem,
|
||||
};
|
||||
|
Reference in New Issue
Block a user