diff options
author | RajithaY <rajithax.yerrumsetty@intel.com> | 2017-04-25 03:31:15 -0700 |
---|---|---|
committer | Rajitha Yerrumchetty <rajithax.yerrumsetty@intel.com> | 2017-05-22 06:48:08 +0000 |
commit | bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch) | |
tree | ca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/SLOF/rtas/reloc.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/rtas/reloc.S')
-rw-r--r-- | qemu/roms/SLOF/rtas/reloc.S | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/qemu/roms/SLOF/rtas/reloc.S b/qemu/roms/SLOF/rtas/reloc.S deleted file mode 100644 index 1b5b59a68..000000000 --- a/qemu/roms/SLOF/rtas/reloc.S +++ /dev/null @@ -1,183 +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 <rtas.h> - -/* -Function: - Input: - r3: Destination to copy rtas code to - r4: Configuration - Output: - r3: Entry point for rtas calls -Decription: Called by OpenFirmware to instantiate rtas, needs to copy - itself to destination, also do a relocations. - -*/ - -.extern rtas_entry -.extern .stack -.extern _got -.extern _got_end -.extern __bss_start -.extern __bss_end -.extern rtas_config - - - .section ".rtasstart","ax"; - .align 3 - .globl _rtas_start -_rtas_start: - mflr r10 # save link register - bcl 20,31,.over # branch (always) to .over - -.base: - .align 3 - -/* Our Open Firmware needs to know the size of the RTAS binary and the - * size & address of the RTAS function jump table. SLOF always looks for this - * information in the following three quads here at the very beginning of the - * RTAS binary at offset 8. So DO NOT DELETE/MOVE them! */ - -._rtas_size: .quad _rtas_end-_rtas_start -._ptr_to_func_tab: .quad rtas_func_tab-_rtas_start -._ptr_to_func_tab_size: .quad rtas_func_tab_size-_rtas_start - -/* The other variables are not accessed by SLOF anymore: */ - -._rel_offset: .quad _reloc_table_start-_rtas_start -._rel_end_offset: .quad _reloc_table_end-_rtas_start -._bss_offset: .quad __bss_start-_rtas_start -._bss_end_offset: .quad __bss_end-_rtas_start -._rtas_entry_offset: .quad rtas_entry-_rtas_start -._rtas_config_offset: .quad rtas_config-_rtas_start -._rtas_stack: .quad .stack-_rtas_start+RTAS_STACKSIZE-0x60 -._rtas_toc: .quad _got-_rtas_start - -.over: - mflr r8 # gpr 8 is the base - addi r8,r8,_rtas_start-.base # points to _rtas_start - mr r11,r4 # Save config value - -# Copy rtas code - - ld r5,._rtas_size-_rtas_start(r8) - mr r4,r8 # Start of rtas - addi r6,r3,-8 # Destination - addi r4,r4,-8 # Source - srdi r5,r5,3 # Count in quads - mtctr r5 -0: - ldu r0,8(r4) - stdu r0,8(r6) - bdnz 0b - -# Clear bss - - ld r4,._bss_offset-_rtas_start(r8) - ld r5,._bss_end_offset-_rtas_start(r8) - li r0,0 - add r6,r3,r4 # Address bss in copied code - addi r6,r6,-8 - sub r5,r5,r4 # Calculate bss size - srdi r5,r5,3 # Count in quads - mtctr r5 -0: - stdu r0,8(r6) - bdnz 0b - -# Relocate got - - ld r4, ._rel_offset-_rtas_start(r8) - ld r5, ._rel_end_offset-_rtas_start(r8) - sub r5, r5,r4 # Calculate reloc table size - cmpdi r5, 0 # No reloc table ? - beq 1f - - add r4, r4, r3 # Calculate reloc table address - addi r4, r4, -4 - srdi r5, r5, 2 # Count in words - mtctr r5 -0: - lwzu r6, 4(r4) # Load offset out of reloc table - ldx r0, r6, r3 # Load value - add r0, r0, r3 # Add relocation offset = load address - stdx r0, r6, r3 - bdnz 0b -1: - -# Save config data - - ld r5,._rtas_config_offset-_rtas_start(r8) - add r5,r5,r3 - std r11,0(r5) - -# Flush to memory - - mr r4,r3 # Destination address - ld r5,._rtas_size-_rtas_start(r8) - - add r5,r5,r4 - addi r5,r5,127 - rlwinm r4,r4,0,0,24 - rlwinm r5,r5,0,0,24 - sub r5,r5,r4 - srwi r5,r5,7 - mtctr r5 -0: - dcbst 0,r4 - sync - icbi 0,r4 - sync - isync - addi r4,r4,128 - bdnz 0b - -# Call init function - mfmsr r11 # Switch to 64 bit mode - mr r7,r11 - rotldi r11,r11,1 - ori r11,r11,1 - rotldi r11,r11,63 - mtmsrd r11 - isync - mr r9,r1 # save old stack pointer - ld r1,._rtas_stack-_rtas_start(r8) # load new stack pointer - add r1,r1,r3 - std r9,0(r1) # save stack pointer - std r2,64(r1) # save toc - std r7,72(r1) # save old msr value - - ld r2,._rtas_toc-_rtas_start(r8) # load got pointer - add r2,r2,r3 - - bl save_regs_r3_r12 - bl .rtas_init - bl restore_regs_r3_r12 - - ld r11,72(r1) # restore msr value - ld r2,64(r1) # restore toc - ld r1,0(r1) # get old stack - - mtmsrd r11 # restore msr - isync - - -# Return rtas entry - - ld r4,._rtas_entry_offset-_rtas_start(r8) - add r3,r3,r4 - mtlr r10 - blr - - - |