* 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-02 1:25 wilbur.chan 2009-08-04 19:41 ` Sebastian Andrzej Siewior 0 siblings, 1 reply; 5+ messages in thread From: wilbur.chan @ 2009-08-02 1:25 UTC (permalink / raw) To: bigeasy; +Cc: linuxppc-dev Hi, Sebastian, >From: Sebastian Andrzej Siewior <bigeasy at 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 at linutronix.de> >+ xori r6,r4,1 /* Setup TMP mapping in the other A= ddress 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 >......... >+ /* find our address */ >+ addi r7, r30, final_copy_code - relocate_new_kernel >+ >+ mtspr SPRN_SRR0,r7 >+ mtspr SPRN_SRR1,r6 >+ rfi ...........................................................................= ................................................................. In your patch of Booke support for kexec , it setup a 1GB TMP mapping and jump to it. But I saw that, the max size for an e500 entry is 256M=A3=ACso I changed your code to setup 4*256M entries, and it works well on mpc8541. Howerver,it didn't work on mpc8548(e500 v2) and P2020ds(SMP,e500 v2) , and 'rfi' to final_copy_code failed.(I also setup a 1:1 mapping for serial ,so I can trap the flowchart in relocate_new_kernel) Any suggestions about this ? Thank you very much. regards, wilbur ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Re:[PATCH 1/2] powerpc: add kexec support on FSL-Book-E 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 0 siblings, 1 reply; 5+ messages in thread From: Sebastian Andrzej Siewior @ 2009-08-04 19:41 UTC (permalink / raw) To: wilbur.chan; +Cc: linuxppc-dev * wilbur.chan | 2009-08-02 09:25:43 [+0800]: >Hi, Sebastian, Hi Wilbur, >In your patch of Booke support for kexec , it setup a 1GB TMP mapping >and jump to it. > >But I saw that, the max size for an e500 entry is 256M??so I changed >your code to setup 4*256M entries, and it works well on mpc8541. The e500 core family reference manual [0] in chapter 12.2.2 (Variable-Sized Pages) says e500v1 supports only up to 256MiB and e500v2 supports up to 4GiB. So this code is e500v2 but not on purpose. > >Howerver,it didn't work on mpc8548(e500 v2) and >P2020ds(SMP,e500 v2) , and 'rfi' to final_copy_code failed.(I also >setup a 1:1 mapping for serial ,so I can trap the flowchart in >relocate_new_kernel) > > >Any suggestions about this ? Thank you very much. There is no SMP support. The other CPUs are not halted/resumed. At the time of writing it I did not have a SMP machine so I did not implement it. In general it should work on e500v2 boxes. There is one ugly thing: I did not setup the stack in the purgatory code. That means the purgatory code (and everything after it) is using kernel's old stack. This might corrupt things. I don't let purgatory code jump to the kernel code. Instead I jump to a tiny wrapper that is linked at 8Mib and takes the device tree which was handed over, uncompresses the kernel to 0x0 and jumps there. Since there is a gap betwwen 0 and 8MiB I usually have my purgatory stack there. Therefore the wrapper around kernel has to bring its own stack. >regards, > >wilbur [0] E500CORERM.pdf Sebastian ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re:[PATCH 1/2] powerpc: add kexec support on FSL-Book-E 2009-08-04 19:41 ` Sebastian Andrzej Siewior @ 2009-08-25 16:09 ` wilbur.chan 2009-08-28 19:35 ` [PATCH " Sebastian Andrzej Siewior 0 siblings, 1 reply; 5+ messages in thread From: wilbur.chan @ 2009-08-25 16:09 UTC (permalink / raw) To: Sebastian Andrzej Siewior; +Cc: linuxppc-dev 2009/8/5, Sebastian Andrzej Siewior <bigeasy@linutronix.de>: > There is no SMP support. The other CPUs are not halted/resumed. At the > time of writing it I did not have a SMP machine so I did not implement > it. > Sebastian > Hi Sebastian, 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. 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. So, there left one problem, I can not start the second SMP-kernel, even if I closed CPU1. Any suggestions? PTW: no-smp ---> no-smp.........OK no-smp --->smp...............OK smp(with cpu1 closed)---->no-smp..............OK smpw(with cpu1 closed)---->smp ................FAILED regards, wilbur ^ permalink raw reply [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).