diff options
author | 2017-04-25 03:31:15 -0700 | |
---|---|---|
committer | 2017-05-22 06:48:08 +0000 | |
commit | bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch) | |
tree | ca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/SLOF/slof/entry.S | |
parent | a14b48d18a9ed03ec191cf16b162206998a895ce (diff) |
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to
kvmfornfv repo and make use of the updated latest qemu for the
execution of all testcase
Change-Id: I1280af507a857675c7f81d30c95255635667bdd7
Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/SLOF/slof/entry.S')
-rw-r--r-- | qemu/roms/SLOF/slof/entry.S | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/qemu/roms/SLOF/slof/entry.S b/qemu/roms/SLOF/slof/entry.S deleted file mode 100644 index 5372de357..000000000 --- a/qemu/roms/SLOF/slof/entry.S +++ /dev/null @@ -1,219 +0,0 @@ -/****************************************************************************** - * 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> - -#define STACKSIZE 0x2000 - - # - # The generic exception code. - # - # Enter with GPR0 = vector, SPRG0 = saved GPR0 - # - - .section ".entry_text" - -the_handler: - .quad handler - -eregs: - /* the_exception_frame is a C variable which is usually - * defined in $(TARG).c - * the_exception_frame can be accessed from paflof through - * the word eregs - * in the case an excpetion is handled paflof will read - * from eregs the values of all registers and print them - * out in the exception handler */ - .quad the_exception_frame - -handler: - mtsprg 1,1 # SPRG1 = saved GPR1 - bcl 20,31,$+4 - mflr 1 - ld 1,eregs-$+4(1) # GPR1 = address of register save area - - .irp i, 2,3,4,5,6,7,8,9,10,11,12,13,14,15, \ - 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - std \i,\i*8(1) - .endr # save GPR2..GPR31 - - li r3, 3 // GPR3 = mode (param_1, param_2) - mr 4,0 // GPR4 = vector - - mfsprg 0,0 - std 0,0(1) # save GPR0 - mfsprg 0,1 - std 0,8(1) # save GPR1 - - cmpwi r4, 0x900 # Decrementer interrupt - bne 0f - mfdec r5 # Save old value of decrementer as reason - lis r0,0x7fff # Set decrementer to highest value - mtdec r0 -0: - mfcr 0 - std 0,0x100(1) - mfxer 0 - std 0,0x108(1) - mfsprg 0,3 # save lr - std 0,0x110(1) - mfsprg 0,2 # save ctr - std 0,0x118(1) - mfsrr0 0 - std 0,0x120(1) - mfsrr1 0 - std 0,0x128(1) - mfdar 0 - std 0,0x130(1) - mfdsisr 0 - std 0,0x138(1) # save special regs - - bcl 20, 31, over -base: - .align 3 -.the_system_stack: - .quad the_system_stack+STACKSIZE-base -over: - mflr r2 /* gpr 2 is the base */ - ld r1, .the_system_stack-base(r2) /* load stack pointer */ - add r1, r1, r2 /* add base */ - li r0, 0 - stdu r0, -0x10(r1) - stdu r1, -0x100(r1) - - lis 2,engine@ha - ld 0,engine@l(2) # set up entry - mtsrr0 0 - - ld 2,8+engine@l(2) # set up TOC pointer - - rfid -# b .engine # ...and run! - - - - # - # Swap non-volatile client interface regs, plus GPR3..GPR7. - # - -swap_ci_regs: - /* save lr */ - mflr r0 - /* let's find out where our client stack is */ - bcl 20, 31, client_over -client_base: - .align 3 -.the_client_frame: - .quad the_client_frame-client_base -client_over: - mflr r8 /* gpr 2 is the client_base */ - mtlr r0 /* restore the original lr */ - ld r0, .the_client_frame-client_base(r8) - add r8, r0, r8 /* add the client_base */ - /* r8 now contains the address of the_client_frame */ - - .irp i, 1,2,3,4,5,6,7, \ - 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - ld 0,\i*8(8) - std \i,\i*8(8) - mr \i,0 - .endr # swap GPR1..7, GPR13..31 - - ld 0,0x100(8) - mfcr 9 - mtcrf 0xff,0 - std 9,0x100(8) # swap CR - - ld 0,0x128(8) - mfmsr 9 - mtmsrd 0 - sync - isync - std 9,0x128(8) # swap MSR - - blr - - # - # Entry point for the OF client interface. - # - - .globl client_entry_point - .section ".opd","aw" - .align 3 -client_entry_point: - .quad .client_entry_point,.TOC.@tocbase,0 - .previous - .type .client_entry_point,@function - .globl .client_entry_point -.client_entry_point: - mflr 4 - bl swap_ci_regs # swap regs - mtlr 4 - li 3, 0 # client call - blr - - # - # Start the client. - # - - .globl call_client - .section ".opd","aw" - .align 3 -call_client: - .quad .call_client,.TOC.@tocbase,0 - .previous - .type .call_client,@function - .globl .call_client - -.call_client: # called with r3 = address, returns r3 - mflr 4 - mtctr 3 - bl swap_ci_regs - /* Check if LE loading */ - cmpwi 0,13,1 - beq 0f - bctrl - b 1f -0: /* handle LE */ - mfmsr 13 - xori 13,13,1 - mtsrr1 13 - mfctr 13 - mr 12,13 - mtsrr0 13 - rfid -#if 0 /* in case we return back, still to be tested */ - .long 0x05009f42; /* bcl 20,31,$+4 */ - .long 0xa602c87d; /* mflr r14 */ - .long 0x1c00ce39; /* addi r14,r14,28 */ - .long 0xa600e07d; /* mfmsr r15 */ - .long 0x0100ef69; /* xori r15,r15,1 */ - .long 0xa603da7d; /* mtsrr0 r14 */ - .long 0xa603fb7d; /* mtsrr1 r15 */ - .long 0x2400004c; /* rfid */ -#endif -1: - bl swap_ci_regs - mtlr 4 - li 3, -1 # client app return - blr - - - # Call another function via pointer in r6 - # (arguments can be provided in r3 to r5) - # Destination function should jump back to lr -C_ENTRY(call_c) - mtctr r6 - bctr - -.global the_system_stack - .lcomm the_system_stack, STACKSIZE, 16 |