mirror of
https://github.com/torvalds/linux.git
synced 2024-12-31 23:31:29 +00:00
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
|
||||
#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
|
||||
* 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 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);
|
||||
#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
Block a user