linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* Add kexec support for fsl-book-e [V2]
@ 2008-11-03 20:01 Sebastian Andrzej Siewior
  2008-11-03 20:01 ` [PATCH 1/2] powerpc: add kexec support on FSL-Book-E Sebastian Andrzej Siewior
  2008-11-03 20:01 ` [PATCH 2/2] powerpc: enable kexec support on mpc8544ds Sebastian Andrzej Siewior
  0 siblings, 2 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2008-11-03 20:01 UTC (permalink / raw)
  To: linuxppc-dev

This is the kernel part of the kexec support for mpc8544 / FSL BookE.
This version should fix the two things Ben noticed during his review.

Changelog:
 v1: - Removed runtime detection between fsl-book-e & no-mmu part
     - Marked the mmu-setup part as FSL BookE because it does not work
       on BooKE in general

Sebastian

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] powerpc: add kexec support on FSL-Book-E
  2008-11-03 20:01 Add kexec support for fsl-book-e [V2] Sebastian Andrzej Siewior
@ 2008-11-03 20:01 ` Sebastian Andrzej Siewior
  2008-11-03 20:01 ` [PATCH 2/2] powerpc: enable kexec support on mpc8544ds Sebastian Andrzej Siewior
  1 sibling, 0 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2008-11-03 20:01 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: Sebastian Andrzej Siewior

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

The relocate_new_kernel() code usually disables the MMU and the small code
operates on physicall pages while moving the kernel to its final position.
Book-E doesn't support this so a 1:1 mapping must be created.
This patch adds support for FSL-BOOK-E implementation.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 arch/powerpc/kernel/machine_kexec_32.c |    5 +-
 arch/powerpc/kernel/misc_32.S          |  129 ++++++++++++++++++++++++++++++-
 2 files changed, 127 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kernel/machine_kexec_32.c b/arch/powerpc/kernel/machine_kexec_32.c
index ae63a96..6fa8ed3 100644
--- a/arch/powerpc/kernel/machine_kexec_32.c
+++ b/arch/powerpc/kernel/machine_kexec_32.c
@@ -16,10 +16,10 @@
 #include <asm/hw_irq.h>
 #include <asm/io.h>
 
-typedef NORET_TYPE void (*relocate_new_kernel_t)(
+typedef void (*relocate_new_kernel_t)(
 				unsigned long indirection_page,
 				unsigned long reboot_code_buffer,
-				unsigned long start_address) ATTRIB_NORET;
+				unsigned long start_address);
 
 /*
  * This is a generic machine_kexec function suitable at least for
@@ -57,6 +57,7 @@ void default_machine_kexec(struct kimage *image)
 	/* now call it */
 	rnk = (relocate_new_kernel_t) reboot_code_buffer;
 	(*rnk)(page_list, reboot_code_buffer_phys, image->start);
+	BUG();
 }
 
 int default_machine_kexec_prepare(struct kimage *image)
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S
index 7a6dfbc..68ab147 100644
--- a/arch/powerpc/kernel/misc_32.S
+++ b/arch/powerpc/kernel/misc_32.S
@@ -878,9 +878,120 @@ relocate_new_kernel:
 	/* r4 = reboot_code_buffer */
 	/* r5 = start_address      */
 
-	li	r0, 0
+	mflr	r28
+	mr	r29, r3
+	mr	r30, r4
+	mr	r31, r5
+
+#ifdef CONFIG_FSL_BOOKE
+
+	li	r25, 0			/* phys kernel start (low) */
+
+/* 1. Find the index of the entry we're executing in */
+	bl	invstr			/* Find our address */
+invstr:
+	mflr	r6			/* Make it accessible */
+	mfmsr	r7
+	rlwinm	r4,r7,27,31,31		/* extract MSR[IS] */
+	mfspr	r7, SPRN_PID0
+	slwi	r7,r7,16
+	or	r7,r7,r4
+	mtspr	SPRN_MAS6,r7
+	tlbsx	0,r6			/* search MSR[IS], SPID=PID0 */
+	mfspr	r7,SPRN_MAS1
+	andis.	r7,r7,MAS1_VALID@h
+	bne	match_TLB
 
 	/*
+	 * We search just in PID0 because kernel's global mapping has to be
+	 * there. We simply return to the caller if we didn't find the mapping
+	 * since we didn't (yet) pass the point of no return. This should not
+	 * happen.
+	 */
+	mtlr	r28
+	blr
+
+match_TLB:
+	mfspr	r7,SPRN_MAS0
+	rlwinm	r3,r7,16,20,31		/* Extract MAS0(Entry) */
+
+	mfspr	r7,SPRN_MAS1		/* Insure IPROT set */
+	oris	r7,r7,MAS1_IPROT@h
+	mtspr	SPRN_MAS1,r7
+	tlbwe
+
+/* 2. Invalidate all entries except the entry we're executing in */
+	mfspr	r9,SPRN_TLB1CFG
+	andi.	r9,r9,0xfff
+	li	r6,0			/* Set Entry counter to 0 */
+1:
+	lis	r7,0x1000		/* Set MAS0(TLBSEL) = 1 */
+	rlwimi	r7,r6,16,4,15		/* Setup MAS0 = TLBSEL | ESEL(r6) */
+	mtspr   SPRN_MAS0,r7
+	tlbre
+	mfspr	r7,SPRN_MAS1
+	rlwinm  r7,r7,0,2,31		/* Clear MAS1 Valid and IPROT */
+	cmpw	r3,r6
+	beq	skpinv			/* Dont update the current execution TLB */
+	mtspr	SPRN_MAS1,r7
+	tlbwe
+	isync
+skpinv:
+	addi	r6,r6,1			/* Increment */
+	cmpw	r6,r9			/* Are we done? */
+	bne	1b			/* If not, repeat */
+
+	/* Invalidate TLB0 */
+	li	r6,0x04
+	tlbivax	0,r6
+	TLBSYNC
+	/* Invalidate TLB1 */
+	li	r6,0x0c
+	tlbivax	0,r6
+	TLBSYNC
+
+/* 3. Setup a temp mapping and jump to it */
+	andi.	r5, r3, 0x1		/* Find an entry not used and is non-zero */
+	addi	r5, r5, 0x1
+	lis	r7, 0x1000		/* Set MAS0(TLBSEL) = 1 */
+	rlwimi	r7, r3, 16, 4, 15	/* Setup MAS0 = TLBSEL | ESEL(r3) */
+	mtspr	SPRN_MAS0,r7
+	tlbre
+
+	/* Just modify the entry ID and EPN for the temp mapping */
+	lis	r7,0x1000		/* Set MAS0(TLBSEL) = 1 */
+	rlwimi	r7,r5,16,4,15		/* Setup MAS0 = TLBSEL | ESEL(r5) */
+	mtspr	SPRN_MAS0,r7
+
+	xori	r6,r4,1			/* Setup TMP mapping in the other Address space */
+	slwi	r6,r6,12
+	oris	r6,r6,(MAS1_VALID|MAS1_IPROT)@h
+	ori	r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_1GB))@l
+	mtspr	SPRN_MAS1,r6
+
+	lis	r7, MAS2_I | MAS2_G
+	mtspr	SPRN_MAS2,r7
+
+	li	r8, 0
+	ori	r8,r25,(MAS3_SX|MAS3_SW|MAS3_SR)
+	mtspr   SPRN_MAS3,r8
+
+	tlbwe
+
+	xori	r6, r4, 1
+	slwi	r5, r6, 4		/* DS setup new context with other address space */
+	slwi	r6, r6, 5		/* IS setup new context with other address space */
+	or	r6, r6, r5
+
+	/* find our address */
+	addi	r7, r30, final_copy_code - relocate_new_kernel
+
+	mtspr	SPRN_SRR0,r7
+	mtspr	SPRN_SRR1,r6
+	rfi
+#else
+	li	r0, 0
+	/*
 	 * Set Machine Status Register to a known status,
 	 * switch the MMU off and jump to 1: in a single step.
 	 */
@@ -888,14 +999,22 @@ relocate_new_kernel:
 	mr	r8, r0
 	ori     r8, r8, MSR_RI|MSR_ME
 	mtspr	SPRN_SRR1, r8
-	addi	r8, r4, 1f - relocate_new_kernel
+	addi	r8, r4, final_copy_code - relocate_new_kernel
 	mtspr	SPRN_SRR0, r8
 	sync
 	rfi
+#endif
 
-1:
-	/* from this point address translation is turned off */
-	/* and interrupts are disabled */
+final_copy_code:
+
+	mr	r3, r29
+	mr	r4, r30
+	mr	r5, r31
+
+	li	r0, 0
+
+	/* from this point address translation is turned off or we have  */
+	/* a 1:1 mapping and interrupts are disabled */
 
 	/* set a new stack at the bottom of our page... */
 	/* (not really needed now) */
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] powerpc: enable kexec support on mpc8544ds
  2008-11-03 20:01 Add kexec support for fsl-book-e [V2] Sebastian Andrzej Siewior
  2008-11-03 20:01 ` [PATCH 1/2] powerpc: add kexec support on FSL-Book-E Sebastian Andrzej Siewior
@ 2008-11-03 20:01 ` Sebastian Andrzej Siewior
  1 sibling, 0 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2008-11-03 20:01 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: Sebastian Andrzej Siewior

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 arch/powerpc/Kconfig                     |    2 +-
 arch/powerpc/platforms/85xx/mpc85xx_ds.c |    6 ++++++
 2 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 587da5e..c2c6a20 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -304,7 +304,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
 
 config KEXEC
 	bool "kexec system call (EXPERIMENTAL)"
-	depends on (PPC_PRPMC2800 || PPC_MULTIPLATFORM) && EXPERIMENTAL
+	depends on (PPC_PRPMC2800 || PPC_MULTIPLATFORM || MPC85xx_DS) && EXPERIMENTAL
 	help
 	  kexec is a system call that implements the ability to shutdown your
 	  current kernel, and to start another kernel.  It is like a reboot
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index 3d5f21b..ae573e8 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -30,6 +30,7 @@
 #include <asm/udbg.h>
 #include <asm/mpic.h>
 #include <asm/i8259.h>
+#include <linux/kexec.h>
 
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
@@ -227,6 +228,11 @@ define_machine(mpc8544_ds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
+#ifdef CONFIG_KEXEC
+	.machine_kexec          = default_machine_kexec,
+	.machine_kexec_prepare  = default_machine_kexec_prepare,
+	.machine_crash_shutdown = default_machine_crash_shutdown,
+#endif
 };
 
 define_machine(mpc8572_ds) {
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] powerpc: add kexec support on FSL-Book-E
  2009-08-25 16:09   ` wilbur.chan
@ 2009-08-28 19:35     ` Sebastian Andrzej Siewior
  2009-09-06 14:27       ` wilbur.chan
  0 siblings, 1 reply; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2009-08-28 19:35 UTC (permalink / raw)
  To: wilbur.chan; +Cc: linuxppc-dev

wilbur.chan wrote:
> Hi  Sebastian,
Hi Wilbur,

> Recently I've implemented  non-SMP kexec on MPC8572 and P2020ds(2G ram).
> 
> 
> 
> I modified your
> 
> misc_32.S that , I setuped  two '1G' entries  after the "rfi"
> instruction, so that I did
> not  need to setup  mapping for instruction address.
If you send some patches I could add them to my tree so we have
everything together.

> As for SMP supporting,I tried to close one of the CPUs in
> default_machine_kexec,
> 
> and found that , when cpu1  closed  ,and if the second kernel is NON-
> 
> SMP,everything went well.so I added some code in
> 
> kexec-tools, to make sure the 'kexec' process was running on CPU 0.
I remember that ppc64 had some code to suspend and start the second CPU in
the purgatory code. Not sure if there is a generic way for this on ppc32
or it is a book-e thing. Haven't look at it (yet).

> So, there left one problem, I can not start the second SMP-kernel,
> even if I  closed
> 
> CPU1.  Any suggestions?
The interesting thing is where do you hang/crash. It could be possible
that the kernel is waiting for the non-boot cpus to show up and it
doesn't. Have you look how u-boot prepares the cpus and how kernel
disables them on shutdown?


> PTW:
> 
> no-smp ---> no-smp.........OK
> no-smp --->smp...............OK
Does this mean your smp kernel has more that one CPU or just one?

> smp(with cpu1 closed)---->no-smp..............OK
> smpw(with cpu1 closed)---->smp ................FAILED
> 
> 
> regards,
> 
> wilbur

Sebastian

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] powerpc: add kexec support on FSL-Book-E
  2009-08-28 19:35     ` [PATCH " Sebastian Andrzej Siewior
@ 2009-09-06 14:27       ` wilbur.chan
  0 siblings, 0 replies; 5+ messages in thread
From: wilbur.chan @ 2009-09-06 14:27 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior; +Cc: linuxppc-dev

2009/8/29, Sebastian Andrzej Siewior <bigeasy@linutronix.de>:

> If you send some patches I could add them to my tree so we have
> everything together.

Hmmm..I don't know how to make a patch like yours.. So , I just
manually  list my

codes below which are added to  machine_kexec_32.c and misc_32.S respectively.




1) machine_kexec_32.c (only test on MPC8572, MPC8541 , P2020DS, so I

used macro here, the param of image->segment[image->nr_segments - 1].mem

is the dtb address)

//default_machine_kexec

+ #if defined(CONFIG_MPC8572_PC) || defined(CONFIG_P2020) ||
defined(CONFIG_MPC8560_ADS)
+ (*rnk)(page_list, reboot_code_buffer, image->start,
image->segment[image->nr_segments - 1].mem);
 +#else
 rnk = (relocate_new_kernel_t) reboot_code_buffer;
	(*rnk)(page_list, reboot_code_buffer_phys, image->start);
 +#endif



2) misc_32.S:


 define macro to setup mapping:


+#define FSL_BOOKE_MAS0(tlbsel,esel,nv) \
+ (MAS0_TLBSEL(tlbsel) | MAS0_ESEL(esel) | MAS0_NV(nv))

+#define FSL_BOOKE_MAS1(v,iprot,tid,ts,tsize) \
 + ((((v) << 31) & MAS1_VALID)             |\
  +(((iprot) << 30) & MAS1_IPROT)          |\
 + (MAS1_TID(tid))    |\
  +(((ts) << 12) & MAS1_TS)                |\
 + (MAS1_TSIZE(tsize)))


+#define FSL_BOOKE_MAS2(epn, wimge) \
  +(((epn) & MAS3_RPN) | (wimge))

+#define FSL_BOOKE_MAS3(rpn, user, perms) \
 + (((rpn) & MAS3_RPN) | (user) | (perms))




+ #ifdef CONFIG_E500

/* 1. Find the index of the entry we're executing in */
 bl invstr   /* Find our address */
 invstr:
 mflr r6   /* Make it accessible */
 mfmsr r7
 rlwinm r4,r7,27,31,31  /* extract MSR[IS] */
 mfspr r7, SPRN_PID0
 slwi r7,r7,16
 or r7,r7,r4
 mtspr SPRN_MAS6,r7
 tlbsx 0,r6   /* search MSR[IS], SPID=PID0 */
 mfspr r7,SPRN_MAS1
 andis. r7,r7,MAS1_VALID@h
 bne match_TLB

 /*
  * We search just in PID0 because kernel's global mapping has to be
  * there. We simply return to the caller if we didn't find the mapping
  * since we didn't (yet) pass the point of no return. This should not
  * happen.
  */
 mtlr r28
 blr

match_TLB:
 mfspr r7,SPRN_MAS0
 rlwinm r3,r7,16,20,31  /* Extract MAS0(Entry) */

 mfspr r7,SPRN_MAS1  /* Insure IPROT set */
 oris r7,r7,MAS1_IPROT@h
 mtspr SPRN_MAS1,r7
 tlbwe

/* 2. Invalidate all entries except the entry we're executing in */
 mfspr r9,SPRN_TLB1CFG
 andi. r9,r9,0xfff
 li r6,0   /* Set Entry counter to 0 */
1:
 lis r7,0x1000  /* Set MAS0(TLBSEL) = 1 */
 rlwimi r7,r6,16,4,15  /* Setup MAS0 = TLBSEL | ESEL(r6) */
 mtspr   SPRN_MAS0,r7
 tlbre
 mfspr r7,SPRN_MAS1
 rlwinm  r7,r7,0,2,31  /* Clear MAS1 Valid and IPROT */
 cmpw r3,r6
 beq skpinv   /* Dont update the current execution TLB */
 mtspr SPRN_MAS1,r7
 tlbwe
 isync
skpinv:
 addi r6,r6,1   /* Increment */
 cmpw r6,r9   /* Are we done? */
 bne 1b   /* If not, repeat */

 /* Invalidate TLB0 */
 li r6,0x04
 tlbivax 0,r6
 TLBSYNC
 /* Invalidate TLB1 */
 li r6,0x0c
 tlbivax 0,r6
 TLBSYNC


+#ifdef  CONFIG_MPC8572_PC || CONFIG_P2020
+ lis     r6,FSL_BOOKE_MAS0(1, 13, 0)@h
+ ori     r6,r6,FSL_BOOKE_MAS0(1, 13, 0)@l

 +lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1GB)@h
 +ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1GB)@l

+ lis     r8,FSL_BOOKE_MAS2(0x00000000, (MAS2_I|MAS2_G))@h
 +ori     r8,r8,FSL_BOOKE_MAS2(0x00000000, (MAS2_I|MAS2_G))@l

+ lis     r9,FSL_BOOKE_MAS3(0x00000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
+ ori     r9,r9,FSL_BOOKE_MAS3(0x00000000, 0,  (MAS3_SX|MAS3_SW|MAS3_SR))@l

 +mtspr   SPRN_MAS0,r6
+ mtspr   SPRN_MAS1,r7
 +mtspr   SPRN_MAS2,r8
 +mtspr   SPRN_MAS3,r9
+ isync
+ msync
 +tlbwe

+ lis     r6,FSL_BOOKE_MAS0(1, 12, 0)@h
+ ori     r6,r6,FSL_BOOKE_MAS0(1, 12, 0)@l

 +lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1GB)@h
 +ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1GB)@l

 +lis     r8,FSL_BOOKE_MAS2(0x40000000, (MAS2_I|MAS2_G))@h
 +ori     r8,r8,FSL_BOOKE_MAS2(0x40000000, (MAS2_I|MAS2_G))@l

 +lis     r9,FSL_BOOKE_MAS3(0x40000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
 +ori     r9,r9,FSL_BOOKE_MAS3(0x40000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l

 +mtspr   SPRN_MAS0,r6
+ mtspr   SPRN_MAS1,r7
+ mtspr   SPRN_MAS2,r8
 +mtspr   SPRN_MAS3,r9
 +isync
 +msync
+ tlbwe

+#endif

+#ifdef  CONFIG_MPC8560_ADS
+ lis     r6,FSL_BOOKE_MAS0(1, 13, 0)@h
 +ori     r6,r6,FSL_BOOKE_MAS0(1, 13, 0)@l

+ lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@h
+ ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@l

 +lis     r8,FSL_BOOKE_MAS2(0x00000000, (MAS2_I|MAS2_G))@h
 +ori     r8,r8,FSL_BOOKE_MAS2(0x00000000, (MAS2_I|MAS2_G))@l

+ lis     r9,FSL_BOOKE_MAS3(0x00000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
 +ori     r9,r9,FSL_BOOKE_MAS3(0x00000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l

 +mtspr   SPRN_MAS0,r6
 +mtspr   SPRN_MAS1,r7
+ mtspr   SPRN_MAS2,r8
 +mtspr   SPRN_MAS3,r9
 +isync
+ msync
 +tlbwe

+ lis     r6,FSL_BOOKE_MAS0(1, 12, 0)@h
 +ori     r6,r6,FSL_BOOKE_MAS0(1, 12, 0)@l

 +lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@h
 +ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@l

+ lis     r8,FSL_BOOKE_MAS2(0x10000000, (MAS2_I|MAS2_G))@h
+ ori     r8,r8,FSL_BOOKE_MAS2(0x10000000, (MAS2_I|MAS2_G))@l

 +lis     r9,FSL_BOOKE_MAS3(0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
 +ori     r9,r9,FSL_BOOKE_MAS3(0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l

+ mtspr   SPRN_MAS0,r6
 +mtspr   SPRN_MAS1,r7
 +mtspr   SPRN_MAS2,r8
 +mtspr   SPRN_MAS3,r9
 +isync
 +msync
 +tlbwe


 +lis     r6,FSL_BOOKE_MAS0(1, 11, 0)@h
+ ori     r6,r6,FSL_BOOKE_MAS0(1, 11, 0)@l

+ lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@h
 +ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@l

+ lis     r8,FSL_BOOKE_MAS2(0x20000000, (MAS2_I|MAS2_G))@h
+ ori     r8,r8,FSL_BOOKE_MAS2(0x20000000, (MAS2_I|MAS2_G))@l

+ lis     r9,FSL_BOOKE_MAS3(0x20000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
 +ori     r9,r9,FSL_BOOKE_MAS3(0x20000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l

 +mtspr   SPRN_MAS0,r6
+ mtspr   SPRN_MAS1,r7
+ mtspr   SPRN_MAS2,r8
+ mtspr   SPRN_MAS3,r9
 +isync
+ msync
+ tlbwe

+ lis     r6,FSL_BOOKE_MAS0(1, 10, 0)@h
 +ori     r6,r6,FSL_BOOKE_MAS0(1, 10, 0)@l

 +lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@h
 +ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)@l

+ lis     r8,FSL_BOOKE_MAS2(0x30000000, (MAS2_I|MAS2_G))@h
 +ori     r8,r8,FSL_BOOKE_MAS2(0x30000000, (MAS2_I|MAS2_G))@l

 +lis     r9,FSL_BOOKE_MAS3(0x30000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
 +ori     r9,r9,FSL_BOOKE_MAS3(0x30000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l

+ mtspr   SPRN_MAS0,r6
 +mtspr   SPRN_MAS1,r7
 +mtspr   SPRN_MAS2,r8
+ mtspr   SPRN_MAS3,r9
 +isync
 +msync
 +tlbwe
+#endif

+#endif

 mr r3, r29
 mr r5, r31

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-09-06 14:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-03 20:01 Add kexec support for fsl-book-e [V2] Sebastian Andrzej Siewior
2008-11-03 20:01 ` [PATCH 1/2] powerpc: add kexec support on FSL-Book-E Sebastian Andrzej Siewior
2008-11-03 20:01 ` [PATCH 2/2] powerpc: enable kexec support on mpc8544ds Sebastian Andrzej Siewior
  -- strict thread matches above, loose matches on Subject: below --
2009-08-02  1:25 Re:[PATCH 1/2] powerpc: add kexec support on FSL-Book-E wilbur.chan
2009-08-04 19:41 ` Sebastian Andrzej Siewior
2009-08-25 16:09   ` wilbur.chan
2009-08-28 19:35     ` [PATCH " Sebastian Andrzej Siewior
2009-09-06 14:27       ` wilbur.chan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).