Commit ed2ddc56 authored by Diana Craciun's avatar Diana Craciun Committed by Scott Wood

powerpc: Replaced tlbilx with tlbwe in the initialization code

On Freescale e6500 cores EPCR[DGTMI] controls whether guest supervisor
state can execute TLB management instructions. If EPCR[DGTMI]=0
tlbwe and tlbilx are allowed to execute normally in the guest state.

A hypervisor may choose to virtualize TLB1 and for this purpose it
may use IPROT to protect the entries for being invalidated by the
guest. However, because tlbwe and tlbilx execution in the guest state
are sharing the same bit, it is not possible to have a scenario where
tlbwe is allowed to be executed in guest state and tlbilx traps. When
guest TLB management instructions are allowed to be executed in guest
state the guest cannot use tlbilx to invalidate TLB1 guest entries.

Linux is using tlbilx in the boot code to invalidate the temporary
entries it creates when initializing the MMU. The patch is replacing
the usage of tlbilx in initialization code with tlbwe with VALID bit
cleared.

Linux is also using tlbilx in other contexts (like huge pages or
indirect entries) but removing the tlbilx from the initialization code
offers the possibility to have scenarios under hypervisor which are
not using huge pages or indirect entries.
Signed-off-by: default avatarDiana Craciun <Diana.Craciun@freescale.com>
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 1149e8a7
...@@ -1068,12 +1068,9 @@ skpinv: addi r6,r6,1 /* Increment */ ...@@ -1068,12 +1068,9 @@ skpinv: addi r6,r6,1 /* Increment */
mtspr SPRN_MAS0,r3 mtspr SPRN_MAS0,r3
tlbre tlbre
mfspr r6,SPRN_MAS1 mfspr r6,SPRN_MAS1
rlwinm r6,r6,0,2,0 /* clear IPROT */ rlwinm r6,r6,0,2,31 /* clear IPROT and VALID */
mtspr SPRN_MAS1,r6 mtspr SPRN_MAS1,r6
tlbwe tlbwe
/* Invalidate TLB1 */
PPC_TLBILX_ALL(0,R0)
sync sync
isync isync
...@@ -1127,12 +1124,9 @@ skpinv: addi r6,r6,1 /* Increment */ ...@@ -1127,12 +1124,9 @@ skpinv: addi r6,r6,1 /* Increment */
mtspr SPRN_MAS0,r4 mtspr SPRN_MAS0,r4
tlbre tlbre
mfspr r5,SPRN_MAS1 mfspr r5,SPRN_MAS1
rlwinm r5,r5,0,2,0 /* clear IPROT */ rlwinm r5,r5,0,2,31 /* clear IPROT and VALID */
mtspr SPRN_MAS1,r5 mtspr SPRN_MAS1,r5
tlbwe tlbwe
/* Invalidate TLB1 */
PPC_TLBILX_ALL(0,R0)
sync sync
isync isync
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment