Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / board-js2x / llfw / stage2_head.S
diff --git a/qemu/roms/SLOF/board-js2x/llfw/stage2_head.S b/qemu/roms/SLOF/board-js2x/llfw/stage2_head.S
new file mode 100644 (file)
index 0000000..5460bfe
--- /dev/null
@@ -0,0 +1,91 @@
+/******************************************************************************
+ * Copyright (c) 2004, 2008 IBM Corporation
+ * All rights reserved.
+ * This program and the accompanying materials
+ * are made available under the terms of the BSD License
+ * which accompanies this distribution, and is available at
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * Contributors:
+ *     IBM Corporation - initial implementation
+ *****************************************************************************/
+
+#include "macros.h"
+#include "../../llfw/boot_abort.h"
+
+/*#################### defines #####################*/
+#define STACK_SIZE   0x4000
+
+/*#################### code ########################*/
+       .text
+       .globl .gluon_c_entry
+       .globl __toc_start
+       .globl __toc_end
+       .globl __stack_end
+       .globl __bss_start
+       .globl __bss_size
+       .globl __start
+
+ASM_ENTRY(__startC)
+       /* clear out bss section                */
+        LOAD64(r3, (__bss_start - 8))
+        LOAD64(r4, __bss_size)
+
+        /* divide __bss_size by 8 to get number */
+        /* of dwords to clear                   */
+        srwi.   r4, r4, 3
+        beq     bsscdone
+        li      r5, 0
+        mtctr   r4
+bssc:   stdu    r5, 8(r3)
+        bdnz    bssc
+bsscdone:
+       /* setup stack                          */
+       LOAD64(r1, __stack_end + STACK_SIZE)
+
+       /* save return address beside stack     */
+       addi    r3, r1, 128
+       mflr    r0
+       std     r0, 0(r3)
+       
+       /* setup toc                            */
+       bl      toc_init
+
+       /* ------------------------------------ */
+       /* jump to c-code                       */
+       /* r10 = cpu_init_slave address - r3    */
+       /* r11 = slave_setup address    - r4    */
+       /* ------------------------------------ */
+       mr      r3, r10
+       mr      r4, r11
+       bl      .early_c_entry
+
+       /* return to caller...                  */
+       LOAD64(r1, __stack_end + STACK_SIZE)
+       addi    r1, r1, 128
+       ld      r3, 0(r1)
+       mtlr    r3
+       blr
+
+       /* #################################### */
+       /* Basic Additional Functions           */
+       /* for extended lib functions see       */
+       /* external library                     */
+       /* #################################### */
+       .align  2
+
+       /* ------------------------------------ */
+       /* updates toc in r2                    */
+       /* ------------------------------------ */
+ASM_ENTRY(toc_init)    
+       LOAD64(r2, __toc_start)
+       addi    r2,r2,0x4000
+       addi    r2,r2,0x4000
+       blr
+
+       /* ------------------------------------ */
+       /* stores arg#1 in r27 and stops        */
+       /* ------------------------------------ */
+ENTRY(do_panic)
+ENTRY(halt_sys)
+       BOOT_ABORT_R3HINT(ABORT_CANIO, ALTBOOT, msg_e_ierror);