powerpc/fsl_booke/32: introduce reloc_kernel_entry() helper
Add a new helper reloc_kernel_entry() to jump back to the start of the new kernel. After we put the new kernel in a randomized place we can use this new helper to enter the kernel and begin to relocate again. Signed-off-by: Jason Yan <yanaijie@huawei.com> Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr> Reviewed-by: Diana Craciun <diana.craciun@nxp.com> Tested-by: Diana Craciun <diana.craciun@nxp.com> Signed-off-by: Scott Wood <oss@buserror.net> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
aa1d2090e6
commit
c061b38a3e
|
@ -1149,6 +1149,19 @@ _GLOBAL(create_kaslr_tlb_entry)
|
|||
sync
|
||||
blr
|
||||
|
||||
/*
|
||||
* Return to the start of the relocated kernel and run again
|
||||
* r3 - virtual address of fdt
|
||||
* r4 - entry of the kernel
|
||||
*/
|
||||
_GLOBAL(reloc_kernel_entry)
|
||||
mfmsr r7
|
||||
rlwinm r7, r7, 0, ~(MSR_IS | MSR_DS)
|
||||
|
||||
mtspr SPRN_SRR0,r4
|
||||
mtspr SPRN_SRR1,r7
|
||||
rfi
|
||||
|
||||
/*
|
||||
* Create a tlb entry with the same effective and physical address as
|
||||
* the tlb entry used by the current running code. But set the TS to 1.
|
||||
|
|
|
@ -140,6 +140,7 @@ extern void adjust_total_lowmem(void);
|
|||
extern int switch_to_as1(void);
|
||||
extern void restore_to_as0(int esel, int offset, void *dt_ptr, int bootcpu);
|
||||
void create_kaslr_tlb_entry(int entry, unsigned long virt, phys_addr_t phys);
|
||||
void reloc_kernel_entry(void *fdt, int addr);
|
||||
#endif
|
||||
extern void loadcam_entry(unsigned int index);
|
||||
extern void loadcam_multi(int first_idx, int num, int tmp_idx);
|
||||
|
|
Loading…
Reference in New Issue