summaryrefslogtreecommitdiffstats
path: root/bsps/powerpc/shared/mmu/pte121.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/powerpc/shared/mmu/pte121.c')
-rw-r--r--bsps/powerpc/shared/mmu/pte121.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/bsps/powerpc/shared/mmu/pte121.c b/bsps/powerpc/shared/mmu/pte121.c
index 93ef909776..778d6353a9 100644
--- a/bsps/powerpc/shared/mmu/pte121.c
+++ b/bsps/powerpc/shared/mmu/pte121.c
@@ -122,9 +122,10 @@
* instructions in order to flush all TLBs.
* On the 750 and 7400, there are 128 two way I and D TLBs,
* indexed by EA[14:19]. Hence calling
- * tlbie rx
+ * tlbie rx, 0
* where rx scans 0x00000, 0x01000, 0x02000, ... 0x3f000
- * is sufficient to do the job
+ * is sufficient to do the job. The 0 in the tlbie instruction is the L operand
+ * which selects a 4KiB page size.
*/
#define NUM_TLB_PER_WAY 64 /* 750 and 7400 have 128 two way TLBs */
#define FLUSH_EA_RANGE (NUM_TLB_PER_WAY<<LD_PG_SIZE)
@@ -640,7 +641,7 @@ triv121PgTblActivate (Triv121PgTbl pt)
/* Now flush all TLBs, starting with the topmost index */
" lis %[tmp2], %[ea_range]@h\n"
"2: addic. %[tmp2], %[tmp2], -%[pg_sz]\n" /* address the next one (decrementing) */
- " tlbie %[tmp2]\n" /* invalidate & repeat */
+ " tlbie %[tmp2], 0\n" /* invalidate & repeat */
" bgt 2b\n"
" eieio \n"
" tlbsync \n"
@@ -872,7 +873,7 @@ triv121UnmapEa (unsigned long ea)
pte->v = 0;
do_dssall ();
__asm__ volatile (" sync \n\t"
- " tlbie %0 \n\t"
+ " tlbie %0, 0 \n\t"
" eieio \n\t"
" tlbsync \n\t"
" sync \n\t"::"r" (ea):"memory");
@@ -960,7 +961,7 @@ triv121ChangeEaAttributes (unsigned long ea, int wimg, int pp)
pte->wimg = wimg;
if (pp >= 0)
pte->pp = pp;
- __asm__ volatile ("tlbie %0; eieio"::"r" (ea):"memory");
+ __asm__ volatile ("tlbie %0, 0; eieio"::"r" (ea):"memory");
pte->v = 1;
__asm__ volatile ("tlbsync; sync":::"memory");