powerpc/fsl_booke/32: introduce create_kaslr_tlb_entry() helper
Add a new helper create_kaslr_tlb_entry() to create a tlb entry by the virtual and physical address. This is a preparation to support boot kernel at a randomized address. 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
39f4b7bf75
commit
aa1d2090e6
|
@ -1114,6 +1114,41 @@ __secondary_hold_acknowledge:
|
||||||
.long -1
|
.long -1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a 64M tlb by address and entry
|
||||||
|
* r3 - entry
|
||||||
|
* r4 - virtual address
|
||||||
|
* r5/r6 - physical address
|
||||||
|
*/
|
||||||
|
_GLOBAL(create_kaslr_tlb_entry)
|
||||||
|
lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */
|
||||||
|
rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r6) */
|
||||||
|
mtspr SPRN_MAS0,r7 /* Write MAS0 */
|
||||||
|
|
||||||
|
lis r3,(MAS1_VALID|MAS1_IPROT)@h
|
||||||
|
ori r3,r3,(MAS1_TSIZE(BOOK3E_PAGESZ_64M))@l
|
||||||
|
mtspr SPRN_MAS1,r3 /* Write MAS1 */
|
||||||
|
|
||||||
|
lis r3,MAS2_EPN_MASK(BOOK3E_PAGESZ_64M)@h
|
||||||
|
ori r3,r3,MAS2_EPN_MASK(BOOK3E_PAGESZ_64M)@l
|
||||||
|
and r3,r3,r4
|
||||||
|
ori r3,r3,MAS2_M_IF_NEEDED@l
|
||||||
|
mtspr SPRN_MAS2,r3 /* Write MAS2(EPN) */
|
||||||
|
|
||||||
|
#ifdef CONFIG_PHYS_64BIT
|
||||||
|
ori r8,r6,(MAS3_SW|MAS3_SR|MAS3_SX)
|
||||||
|
mtspr SPRN_MAS3,r8 /* Write MAS3(RPN) */
|
||||||
|
mtspr SPRN_MAS7,r5
|
||||||
|
#else
|
||||||
|
ori r8,r5,(MAS3_SW|MAS3_SR|MAS3_SX)
|
||||||
|
mtspr SPRN_MAS3,r8 /* Write MAS3(RPN) */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
tlbwe /* Write TLB */
|
||||||
|
isync
|
||||||
|
sync
|
||||||
|
blr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a tlb entry with the same effective and physical address as
|
* 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.
|
* the tlb entry used by the current running code. But set the TS to 1.
|
||||||
|
|
|
@ -139,6 +139,7 @@ extern unsigned long calc_cam_sz(unsigned long ram, unsigned long virt,
|
||||||
extern void adjust_total_lowmem(void);
|
extern void adjust_total_lowmem(void);
|
||||||
extern int switch_to_as1(void);
|
extern int switch_to_as1(void);
|
||||||
extern void restore_to_as0(int esel, int offset, void *dt_ptr, int bootcpu);
|
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);
|
||||||
#endif
|
#endif
|
||||||
extern void loadcam_entry(unsigned int index);
|
extern void loadcam_entry(unsigned int index);
|
||||||
extern void loadcam_multi(int first_idx, int num, int tmp_idx);
|
extern void loadcam_multi(int first_idx, int num, int tmp_idx);
|
||||||
|
|
Loading…
Reference in New Issue