Commit Diff


commit - 6c006d3773ab84b28a9c6ab81d8c600ee6dbf943
commit + 5cc91f03efb86a3999bee23ce9f0317328ccba1e
blob - b3a828c28a57f36c489bc3560b284843c9d7c3d9
blob + 280c4e7126e34c45f11658c89ee046a63d6fb9ec
--- aim64/cpu.c
+++ aim64/cpu.c
@@ -46,7 +46,6 @@
 #include <dev/ofw/openfirm.h>
 
 #include <machine/autoconf.h>
-#include <powerpc/bat.h>
 #include <machine/cpu.h>
 #include <machine/trap.h>
 #include <powerpc/hid.h>
blob - a78e33ffe9c7066c18d871a6c160e32a7b85c646
blob + 49b58b9b3388d9f23c905fe49f4b689a0a07928e
--- aim64/ofwreal.S
+++ aim64/ofwreal.S
@@ -50,41 +50,42 @@
 #define	CACHELINE	32		/* Note that this value is really hardwired */
 
 	.data
-ofentry:	.long	0		/* actual entry to firmware in virtual mode */
+ofentry:	.llong	0		/* actual entry to firmware in virtual mode */
 
-#define	SRSIZE		(16*4+4)
-#define	SPRGSIZE	(4*4)
-#define	SDR1SIZE	4
-#define MSRSIZE		4
+#define	SRSIZE		(16*8+8)
+#define	SPRGSIZE	(4*8)
+#define	SDR1SIZE	8
+#define MSRSIZE		8
 #define	SVSIZE		(SRSIZE+SPRGSIZE+SDR1SIZE+MSRSIZE)
-#define BATSIZE		(16*4)
+#define BATSIZE		(16*8)
 
 	.global _C_LABEL(fwcall)
-_C_LABEL(fwcall): .long 0
+_C_LABEL(fwcall): .llong 0
 
 .lcomm	fwsave,SVSIZE,8
 .lcomm	fwbatsave,BATSIZE,8
 .lcomm	clsave,SVSIZE,8
 .lcomm	clbatsave,BATSIZE,8
-.lcomm	ofsrsave,16*4,4	/* 16 words of 4 bytes to store OF segment registers */
-.lcomm	srsave,16*4,4	/* 16 words of 4 bytes to swap OF segment registers*/
+.lcomm	ofsrsave,16*8,4	/* 16 doublewords of 8 bytes to store OF segment registers */
+.lcomm	srsave,16*8,4	/* 16 doublewords of 8 bytes to swap OF segment registers*/
 	.globl _C_LABEL(ofmsr)
-_C_LABEL(ofmsr):	.long	0	/* area to store msr for openfirmware*/
+_C_LABEL(ofmsr):	.llong	0	/* area to store msr for openfirmware*/
 
+	.align 3
 	.text
 _ENTRY(_C_LABEL(ofw_init))
 	mflr	%r31			/* save return address */
 
 	mr	%r13,%r6		/* save args (only pointer used) */
 	lis	%r8,ofentry@ha
-	stw	%r5,ofentry@l(%r8)	/* save virtual mode firmware entry */
+	std	%r5,ofentry@l(%r8)	/* save virtual mode firmware entry */
 
 	lis	%r4,fwcall@ha		/* call ofw directly until vm setup */
-	stw	%r5,fwcall@l(%r4)
+	std	%r5,fwcall@l(%r4)
 
 	mfmsr	%r5
 	lis	%r4,_C_LABEL(ofmsr)@ha	/* save msr from openfirmware */
-	stw	%r5,_C_LABEL(ofmsr)@l(%r4)
+	std	%r5,_C_LABEL(ofmsr)@l(%r4)
 #if 0
 	lis	%r0,(0x80001ffe)@ha
 	addi	%r0,%r0,(0x80001ffe)@l
@@ -128,11 +129,12 @@ savemmu:
 	mr	%r6,%r4	/* r4 holds pointer to BAT save area */
 
 	li	%r4,0			/* save SRs */
+#if 0
 1:
 	addis	%r4,%r4,-0x10000000@ha
 	or.	%r4,%r4,%r4
 	mfsrin	%r5,%r4
-	stwu	%r5,4(%r3)
+	stdu	%r5,8(%r3)
 	bne	1b
 
 	mfibatl	%r4,0			/* save BATs */
@@ -167,23 +169,24 @@ savemmu:
 	stw	%r4,0x38(%r6)
 	mfdbatu	%r4,3
 	stw	%r4,0x3c(%r6)
+#endif
 
 	mfsprg	%r4,0			/* save SPRGs */
-	stw	%r4,4(%r3)
+	std	%r4,8(%r3)
 	mfsprg	%r4,1
-	stw	%r4,8(%r3)
+	std	%r4,16(%r3)
 	mfsprg	%r4,2
-	stw	%r4,12(%r3)
+	std	%r4,24(%r3)
 	mfsprg	%r4,3
-	stw	%r4,16(%r3)
+	std	%r4,32(%r3)
 
 	mfsdr1	%r4			/* save SDR1 */
-	stw	%r4,20(%r3)
+	std	%r4,40(%r3)
 
 	addi	%r4,%r3,24
 
 	mfmsr	%r4
-	stw	%r4,24(%r3)
+	std	%r4,48(%r3)
 
 	sync
 	isync
@@ -201,8 +204,9 @@ restoremmu:
 	mtmsr	%r0
 	mr	%r6,%r4			/* pointer to sr to restore */
 	li	%r4,0			/* restore SRs */
+#if 0
 1:
-	lwzu	%r5,4(%r3)
+	ldzu	%r5,8(%r3)
 	addis	%r4,%r4,-0x10000000@ha
 	or.	%r4,%r4,%r4
 	mtsrin	%r5,%r4
@@ -257,14 +261,15 @@ restoremmu:
 	mtdbatl	3,%r4
 	lwz	%r4,60(%r6)
 	mtdbatu	3,%r4
+#endif
 
-	lwz	%r4,4(%r3)
+	ld	%r4,8(%r3)
 	mtsprg	0,4			/* restore SPRGs */
-	lwz	%r4,8(%r3)
+	ld	%r4,16(%r3)
 	mtsprg	1,4
-	lwz	%r4,12(%r3)
+	ld	%r4,24(%r3)
 	mtsprg	2,4
-	lwz	%r4,16(%r3)
+	ld	%r4,32(%r3)
 	mtsprg	3,4
 
 	sync				/* remove everything from tlb */
@@ -279,13 +284,14 @@ restoremmu:
 	tlbsync
 	sync
 
-	lwz	%r4,20(%r3)
+	ld	%r4,40(%r3)
 	sync
 	mtsdr1	%r4			/* restore SDR1 */
 
 
 	/* tlbia */
 	sync
+	/* XXX offset in 64 bit mode? */
 	li	%r5,0x40
 	mtctr	%r5
 	li	%r4,0
@@ -297,7 +303,7 @@ restoremmu:
 	tlbsync
 	sync
 
-	lwz	%r4,24(%r3)
+	ld	%r4,48(%r3)
 	mtmsr	%r4
 	isync
 
@@ -305,10 +311,10 @@ restoremmu:
 
 
 _ENTRY(_C_LABEL(fwentry))
-	stwu	%r1,-16(%r1)
+	stdu	%r1,-32(%r1)
 	mflr	%r4
-	stw	%r4,20(%r1)
-	stw	%r3,12(%r1)			/* save arg */
+	std	%r4,40(%r1)
+	std	%r3,24(%r1)			/* save arg */
 
 	lis	%r3,clsave@ha		/* save mmu values of client */
 	addi	%r3,%r3,clsave@l
@@ -323,7 +329,7 @@ _ENTRY(_C_LABEL(fwentry))
 	bl	restoremmu
 
 	lis	%r3,ofentry@ha
-	lwz	%r3,ofentry@l(%r3)	/* get actual firmware entry */
+	ld	%r3,ofentry@l(%r3)	/* get actual firmware entry */
 	mtlr	%r3
 
 	mfmsr	%r4
@@ -331,10 +337,10 @@ _ENTRY(_C_LABEL(fwentry))
 	mtmsr	%r4
 	isync
 
-	lwz	%r3,12(%r1)		/* restore arg */
+	ld	%r3,24(%r1)		/* restore arg */
 	blrl				/* do actual firmware call */
 
-	stw	%r3,12(%r1)		/* save return value */
+	std	%r3,24(%r1)		/* save return value */
 
 	lis	%r3,fwsave@ha		/* save mmu values of firmare */
 	addi	%r3,%r3,fwsave@l	/* (might not be necessary, but... */
@@ -348,10 +354,11 @@ _ENTRY(_C_LABEL(fwentry))
 	addi	%r4,%r4,clbatsave@l
 	bl	restoremmu
 
-	lwz	%r4,20(%r1)
-	lwz	%r3,12(%r1)		/* restore return value */
+	ld	%r4,40(%r1)
+	ld	%r3,24(%r1)		/* restore return value */
 
 	mtlr	%r4
+	/* XXX - should this be 32? */
 	addi	%r1,%r1,16
 	blr
 
@@ -359,9 +366,9 @@ _ENTRY(_C_LABEL(fwentry))
  * OpenFirmware entry point
  */
 _ENTRY(_C_LABEL(openfirmware))
-	stwu	%r1,-16(%r1)
+	stdu	%r1,-32(%r1)
 	mflr	%r0			/* save return address */
-	stw	%r0,20(%r1)
+	std	%r0,40(%r1)
 
 	lis	%r4,fwcall@ha
 	lwz	%r4,fwcall@l(%r4)
@@ -369,7 +376,7 @@ _ENTRY(_C_LABEL(openfirmware))
 	mtlr	%r4
 	blrl
 
-	lwz	%r0,20(%r1)
+	ld	%r0,40(%r1)
 	mtlr	%r0
 	lwz	%r1,0(%r1)
 	blr
@@ -412,9 +419,9 @@ _ENTRY(_C_LABEL(ofw_stack))
 	mfmsr	%r8			/* turn off interrupts */
 	andi.	%r0,%r8,~(PSL_EE|PSL_RI)@l
 	mtmsr	%r0
-	stw	%r8,4(%r1)		/* abuse return address slot */
+	std	%r8,8(%r1)		/* abuse return address slot */
 
-	lwz	%r5,0(%r1)		/* get length of stack frame */
+	ld	%r5,0(%r1)		/* get length of stack frame */
 	subf	%r5,%r1,%r5
 
 	lis	%r7,firmstk+NBPG-8@ha
@@ -424,10 +431,10 @@ _ENTRY(_C_LABEL(ofw_stack))
 	lis	%r6,ofw_back@ha
 	addi	%r6,%r6,ofw_back@l
 	subf	%r4,%r5,%r7		/* make room for stack frame on new stack */
-	stwu	%r1,-16(%r7)
-	stw	%r6,4(%r7)		/* setup return pointer */
+	stdu	%r1,-32(%r7)
+	std	%r6,8(%r7)		/* setup return pointer */
 
-	stw	%r7,-16(%r4)
+	std	%r7,-32(%r4)
 
 	addi	%r3,%r1,%r8
 	addi	%r1,%r4,-16
@@ -438,13 +445,13 @@ _ENTRY(_C_LABEL(ofw_stack))
 
 	.type ofw_back,@function
 ofw_back:
-	lwz	%r1,0(%r1)		/* get callers original stack pointer */
+	ld	%r1,0(%r1)		/* get callers original stack pointer */
 
-	lwz	%r0,4(%r1)		/* get saved msr from abused slot */
+	ld	%r0,8(%r1)		/* get saved msr from abused slot */
 	mtmsr	%r0
 
-	lwz	%r1,0(%r1)		/* return */
-	lwz	%r0,4(%r1)
+	ld	%r1,0(%r1)		/* return */
+	ld	%r0,8(%r1)
 	mtlr	%r0
 	blr