Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / board-qemu / llfw / stage2_head.S
diff --git a/qemu/roms/SLOF/board-qemu/llfw/stage2_head.S b/qemu/roms/SLOF/board-qemu/llfw/stage2_head.S
new file mode 100644 (file)
index 0000000..c56b117
--- /dev/null
@@ -0,0 +1,95 @@
+/******************************************************************************
+ * Copyright (c) 2004, 2011 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 __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                       */
+       /* r31 = fdt                    - r5    */
+       /* ------------------------------------ */
+       li      r3, r0
+       mr      r4, r31
+       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);
+
+       .section ".bss"
+       .balign STACK_SIZE
+__stack_end:
+       .space STACK_SIZE
+       .text