|
@@ -646,6 +646,19 @@ _GLOBAL(kexec_sequence)
|
|
/* turn off mmu */
|
|
/* turn off mmu */
|
|
bl real_mode
|
|
bl real_mode
|
|
|
|
|
|
|
|
+ /* copy 0x100 bytes starting at start to 0 */
|
|
|
|
+ li r3,0
|
|
|
|
+ mr r4,r30 /* start, aka phys mem offset */
|
|
|
|
+ li r5,0x100
|
|
|
|
+ li r6,0
|
|
|
|
+ bl .copy_and_flush /* (dest, src, copy limit, start offset) */
|
|
|
|
+1: /* assume normal blr return */
|
|
|
|
+
|
|
|
|
+ /* release other cpus to the new kernel secondary start at 0x60 */
|
|
|
|
+ mflr r5
|
|
|
|
+ li r6,1
|
|
|
|
+ stw r6,kexec_flag-1b(5)
|
|
|
|
+
|
|
/* clear out hardware hash page table and tlb */
|
|
/* clear out hardware hash page table and tlb */
|
|
ld r5,0(r27) /* deref function descriptor */
|
|
ld r5,0(r27) /* deref function descriptor */
|
|
mtctr r5
|
|
mtctr r5
|
|
@@ -676,19 +689,6 @@ _GLOBAL(kexec_sequence)
|
|
* are the boot cpu ?????
|
|
* are the boot cpu ?????
|
|
* other device tree differences (prop sizes, va vs pa, etc)...
|
|
* other device tree differences (prop sizes, va vs pa, etc)...
|
|
*/
|
|
*/
|
|
-
|
|
|
|
- /* copy 0x100 bytes starting at start to 0 */
|
|
|
|
- li r3,0
|
|
|
|
- mr r4,r30
|
|
|
|
- li r5,0x100
|
|
|
|
- li r6,0
|
|
|
|
- bl .copy_and_flush /* (dest, src, copy limit, start offset) */
|
|
|
|
-1: /* assume normal blr return */
|
|
|
|
-
|
|
|
|
- /* release other cpus to the new kernel secondary start at 0x60 */
|
|
|
|
- mflr r5
|
|
|
|
- li r6,1
|
|
|
|
- stw r6,kexec_flag-1b(5)
|
|
|
|
mr r3,r25 # my phys cpu
|
|
mr r3,r25 # my phys cpu
|
|
mr r4,r30 # start, aka phys mem offset
|
|
mr r4,r30 # start, aka phys mem offset
|
|
mtlr 4
|
|
mtlr 4
|