瀏覽代碼

mpc86xx: Use SRR0/1/rfi to enable address translation, not blr

Using a mtmsr/blr means that you have to be executing at the
same virtual address once you enable translation.  This is
unnecessarily restrictive, and is not really how this is
usually done.  Change it to use the more common mtspr SRR0/SRR1
and rfi method.

Signed-off-by: Becky Bruce <becky.bruce@freescale.com>
Becky Bruce 16 年之前
父節點
當前提交
c1e1cf6954
共有 1 個文件被更改,包括 8 次插入11 次删除
  1. 8 11
      cpu/mpc86xx/start.S

+ 8 - 11
cpu/mpc86xx/start.S

@@ -244,9 +244,15 @@ in_flash:
 	 */
 	 */
 
 
 	/* enable address translation */
 	/* enable address translation */
-	bl	enable_addr_trans
-	sync
+	mfmsr	r5
+	ori	r5, r5, (MSR_IR | MSR_DR)
+	lis	r3,addr_trans_enabled@h
+	ori	r3, r3, addr_trans_enabled@l
+	mtspr	SPRN_SRR0,r3
+	mtspr	SPRN_SRR1,r5
+	rfi
 
 
+addr_trans_enabled:
 	/* enable and invalidate the data cache */
 	/* enable and invalidate the data cache */
 /*	bl	l1dcache_enable */
 /*	bl	l1dcache_enable */
 	bl	dcache_enable
 	bl	dcache_enable
@@ -423,15 +429,6 @@ tlblp:
 	blt tlblp
 	blt tlblp
 	blr
 	blr
 
 
-	.globl enable_addr_trans
-enable_addr_trans:
-	/* enable address translation */
-	mfmsr	r5
-	ori	r5, r5, (MSR_IR | MSR_DR)
-	mtmsr	r5
-	isync
-	blr
-
 	.globl disable_addr_trans
 	.globl disable_addr_trans
 disable_addr_trans:
 disable_addr_trans:
 	/* disable address translation */
 	/* disable address translation */