diff options
Diffstat (limited to 'hifi/xaf/hifi-dpf/ipc/xt-shmem/hikey/reset.S')
-rw-r--r-- | hifi/xaf/hifi-dpf/ipc/xt-shmem/hikey/reset.S | 460 |
1 files changed, 0 insertions, 460 deletions
diff --git a/hifi/xaf/hifi-dpf/ipc/xt-shmem/hikey/reset.S b/hifi/xaf/hifi-dpf/ipc/xt-shmem/hikey/reset.S deleted file mode 100644 index b2cb2688..00000000 --- a/hifi/xaf/hifi-dpf/ipc/xt-shmem/hikey/reset.S +++ /dev/null @@ -1,460 +0,0 @@ -/******************************************************************************* -* Copyright (C) 2018 Cadence Design Systems, Inc. -* -* Permission is hereby granted, free of charge, to any person obtaining -* a copy of this software and associated documentation files (the -* "Software"), to use this Software with Cadence processor cores only and -* not with any other processors and platforms, subject to -* the following conditions: -* -* The above copyright notice and this permission notice shall be included -* in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -******************************************************************************/ -/****************************************************************************** - reset.S - reset vector for BALONGV7R1 architechure,Any problem pls refer - to the Xtensa Microprocessor Programmer's Guide. -******************************************************************************/ - -#include <xtensa/coreasm.h> -#include <xtensa/simcall.h> -#include "reset.h" - - .begin literal_prefix .ResetVector - .section .ResetVector.text, "ax" - .global _ResetVector - .align 4 - -_ResetVector: - j _Reset - - .end literal_prefix - - /***************************************************************************** - Reset - *****************************************************************************/ - .begin literal_prefix .Reset - .section .Reset.text, "ax" - .global _Reset - .align 4 - -_Reset: - /* clear all of interrupts*/ - movi a0, 0 - wsr a0, INTENABLE - - wsr a0, IBREAKA_0 - wsr a0, IBREAKA_1 - wsr a0, DBREAKA_0 - wsr a0, DBREAKA_1 - wsr a0, DBREAKC_0 - wsr a0, DBREAKC_1 - wsr a0, IBREAKENABLE - - /* ICOUNT,ICOUNTLEVEL,ICOUNTexception clear ICOUNT and ICOUNTLEVEL*/ - wsr a0, ICOUNT - wsr a0, ICOUNTLEVEL - isync - - /*debug disable XCHAL_DEBUGLEVEL*/ - rsil a1, XCHAL_DEBUGLEVEL - 1 - -// write windowbase and windowstart, then do rsync. -// reload a0 with 0, because registers may have moved after -// writing windowbase/windowstart. - wsr a0, CCOUNT - /* init register windows*/ - wsr a0, WINDOWBASE - rsync - movi a1, 1 - wsr a1, WINDOWSTART - - ssai 0 - - /*Level-1 init EXCSAVE_1 level-1 interrupt*/ - wsr a0, EXCSAVE_1 - wsr a0, EPC_1 - wsr a0, EXCCAUSE - - /*Level-2 init EXCSAVE_1 level-2 interrupt*/ - wsr a0, EPC_2 - wsr a0, EPS_2 - wsr a0, EXCSAVE_2 - - /*Level-3 init EXCSAVE_1 level-3 interrupt*/ - wsr a0, EPC_3 - wsr a0, EPS_3 - wsr a0, EXCSAVE_3 - - /*Level-4 init EXCSAVE_1 level-4 interrupt*/ - wsr a0, EPC_4 - wsr a0, EPS_4 - wsr a0, EXCSAVE_4 - - /*Level-5(DEBUG) init EXCSAVE_1 level-5 interrupt*/ - wsr a0, EPC_5 - wsr a0, EPS_5 - wsr a0, EXCSAVE_5 - - /*NMI init EXCSAVE_1 level-6(NMI) interrupt */ - wsr a0, EPC_6 - wsr a0, EPS_6 - wsr a0, EXCSAVE_6 - - - /*0/1/2 init timer 0&1 */ - wsr a0, CCOMPARE_0 - wsr a0, CCOMPARE_1 - //wsr a0, CCOMPARE_2 //hifi3 CCOMPARE_0 CCOMPARE_1 - - /* clear all of */ - movi a2, XCHAL_INTTYPE_MASK_EXTERN_EDGE | XCHAL_INTTYPE_MASK_SOFTWARE - wsr a2, INTCLEAR - - wsr a0, BR - - /* disable coprocessor */ - /*wsr a0, CPENABLE*/ - - movi a2, XCHAL_DEBUGLEVEL - 1 - wsr a2, PS - rsync - - - /*icache init icache */ -#if (XCHAL_ICACHE_SIZE != 0) - #if (XCHAL_ICACHE_SIZE == 8192) //212GP and 330HiFi - movi a2, 64 - #elif (XCHAL_ICACHE_SIZE == 16384) //232L and 570T - movi a2, 128 - #elif (XCHAL_ICACHE_SIZE == 32768) //BALONGV7R1 - movi a2, 256 - #elif (XCHAL_ICACHE_SIZE == 65536) //CHICAGO HIFI - movi a2, 256 - #endif - - /*icache unlock icache */ - #if (XCHAL_ICACHE_LINESIZE == 128) - movi a3, 0 - loop a2, .L0 - iiu a3, 0 - iiu a3, XCHAL_ICACHE_LINESIZE - addi a3, a3, XCHAL_ICACHE_LINESIZE*2 - - iiu a3, 0 - iiu a3, XCHAL_ICACHE_LINESIZE - addi a3, a3, XCHAL_ICACHE_LINESIZE*2 -.L0: - - #else - movi a3, 0 - loop a2, .L0 - iiu a3, 0 - iiu a3, XCHAL_ICACHE_LINESIZE - iiu a3, XCHAL_ICACHE_LINESIZE*2 - iiu a3, XCHAL_ICACHE_LINESIZE*3 - addi a3, a3, XCHAL_ICACHE_LINESIZE*4 -.L0: - #endif - - - #if (XCHAL_ICACHE_SIZE == 8192) //212GP and 330HiFi - movi a2, 64 - #elif (XCHAL_ICACHE_SIZE == 16384) //232L and 570T - movi a2, 128 - #elif (XCHAL_ICACHE_SIZE == 32768) //BALONGV7R1 - movi a2, 256 - #elif (XCHAL_ICACHE_SIZE == 65536) //CHICAGO HIFI - movi a2, 256 - #endif - - /*icache disable icache */ - movi a3, 0 - loop a2, .L1 - iii a3, 0 - iii a3, XCHAL_ICACHE_LINESIZE - iii a3, XCHAL_ICACHE_LINESIZE*2 - iii a3, XCHAL_ICACHE_LINESIZE*3 - addi a3, a3, XCHAL_ICACHE_LINESIZE*4 -.L1: - isync -#endif - - - - - /*dcache init dcache */ -#if (XCHAL_DCACHE_SIZE != 0) - #if (XCHAL_DCACHE_SIZE == 8192) //212GP and 330HiFi - movi a2, 64 - #elif (XCHAL_DCACHE_SIZE == 16384) //232L and 570T - movi a2, 128 - #elif (XCHAL_DCACHE_SIZE == 32768) //BALONGV7R1 - movi a2, 256 - #elif (XCHAL_DCACHE_SIZE == 65536) //CHICAGO HIFI - movi a2, 256 - #endif - - /*dcache unlock dcache */ - #if (XCHAL_DCACHE_LINESIZE == 128) - movi a3, 0 - loop a2, .L2 - diu a3, 0 - diu a3, XCHAL_DCACHE_LINESIZE - addi a3, a3, XCHAL_DCACHE_LINESIZE*2 - - diu a3, 0 - diu a3, XCHAL_DCACHE_LINESIZE - addi a3, a3, XCHAL_DCACHE_LINESIZE*2 -.L2: - - #else - movi a3, 0 - loop a2, .L2 - diu a3, 0 - diu a3, XCHAL_DCACHE_LINESIZE - diu a3, XCHAL_DCACHE_LINESIZE*2 - diu a3, XCHAL_DCACHE_LINESIZE*3 - addi a3, a3, XCHAL_DCACHE_LINESIZE*4 -.L2: - #endif - #if (XCHAL_DCACHE_SIZE == 8192) //212GP and 330HiFi - movi a2, 64 - #elif (XCHAL_DCACHE_SIZE == 16384) //232L and 570T - movi a2, 128 - #elif (XCHAL_DCACHE_SIZE == 32768) //BALONGV7R1 - movi a2, 256 - #elif (XCHAL_DCACHE_SIZE == 65536) //CHICAGO HIFI - movi a2, 256 - #endif - - - /*dcache disable dcache */ - movi a3, 0 - loop a2, .L3 - dii a3, 0 - dii a3, XCHAL_DCACHE_LINESIZE - dii a3, XCHAL_DCACHE_LINESIZE*2 - dii a3, XCHAL_DCACHE_LINESIZE*3 - addi a3, a3, XCHAL_DCACHE_LINESIZE*4 -.L3: - dsync -#endif - - /* - 0x00000000-0x1fffffff : caches off(bypass) - 0x20000000-0x3fffffff : caches off(bypass) - 0x40000000-0x5fffffff : caches off(bypass) - 0x60000000-0x7fffffff : caches off(bypass) - 0x80000000-0x9fffffff : caches off(bypass) - 0xa0000000-0xbfffffff : caches off(bypass) - 0xc0000000-0xdfffffff : caches on,0x00000000-0x1fffffff - 0xe0000000-0xffffffff : caches off(bypass),:0xe0000000~0xefffffff 0x20000000~0x2fffffff - */ - /* config the memory access right */ - movi a3, 0x00000000 /*0x00000000-0x1fffffff*/ - set_access_mode PIF_BYPASS /*can not access*/ - - movi a3, 0x20000000 /*0x20000000-0x3fffffff*/ - set_access_mode PIF_BYPASS - - movi a3, 0x40000000 /*0x40000000-0x5fffffff*/ -#if (XCHAL_DCACHE_LINESIZE == 128) - set_access_mode PIF_BYPASS -#else - set_access_mode PIF_BYPASS -#endif - - movi a3, 0x60000000 /*0x60000000-0x7fffffff*/ - set_access_mode PIF_BYPASS - - movi a3, 0x80000000 /*0x80000000-0x9fffffff*/ - #if (XCHAL_DCACHE_LINESIZE == 128) - set_access_mode PIF_BYPASS - #else - set_access_mode PIF_BYPASS - #endif - - movi a3, 0xa0000000 /*0xa0000000-0xbfffffff*/ - set_access_mode PIF_BYPASS - - movi a3, 0xc0000000 /*0xc0000000-0xdfffffff*/ - set_access_mode PIF_CACHED_WBA /*PIF_CACHED*/ - - movi a3, 0xe0000000 /*0xe0000000-0xffffffff*/ - set_access_mode PIF_BYPASS - - /* 0x40000000 0xe0000000, 0x50000000 0xf0000000,*/ - /*movi a2, 0x40000000 //vpn - movi a3, 0xe0000000 //ppn - movi a5, 0xE0000000 // tlb mask, upper 3 bits - and a4, a3, a5 // upper 3 bits of PPN area - and a7, a2, a5 // upper 3 bits of VPN area - - ritlb1 a5, a7 // get current PPN+AM of segment for I - rdtlb1 a6, a7 // get current PPN+AM of segment for D - extui a5, a5, 0, 4 // keep only AM for I - extui a6, a6, 0, 4 // keep only AM for D - add a2, a4, a5 // combine new PPN with orig AM for I - add a3, a4, a6 // combine new PPN with orig AM for D - witlb a2, a7 // write new tlb mapping for I - wdtlb a3, a7 // write new tlb mapping for D - */ - isync - dsync - - /* - prepare the environment of run C code - */ - movi sp, __stack - - movi a2, PS_WOE_MASK | PS_PROGSTACK_MASK - wsr a2, PS - rsync - - movi a8, _bss_start - movi a10, _bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone: - - movi a8, _ulpp_bss_start - movi a10, _ulpp_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone1 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone1: - -#ifdef HIFI_DTS_V3 - movi a8, _dtsv3_bss_start - movi a10, _dtsv3_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone2 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone2: -#endif - -#ifdef HIFI_DTS_V4 - movi a8, _dtsv4_bss_start - movi a10, _dtsv4_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone3 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone3: -#endif - -#ifdef HIFI_VLP - movi a8, _efr_fr_hr_vlpd_bss_start - movi a10, _efr_fr_hr_vlpd_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone4 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone4: - - movi a8, _amr_vlpd_bss_start - movi a10, _amr_vlpd_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone5 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone5: - - movi a8, _vlpd_bss_start - movi a10, _vlpd_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone6 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone6: - - movi a8, _amrwb_vlpd_bss_start - movi a10, _amrwb_vlpd_bss_end - sub a11, a10, a8 - srli a11, a11, 2 - - movi a9, 0 - loopnez a11, zerodone7 - s32i a9, a8, 0 - addi a8, a8, 4 -zerodone7: -#endif - -callmain: - -// Do NOT modify a1 here, it is the stack pointer. -// Use another register instead (a3?) -// Not sure why the NOPs are present. -#movi a1, 0xdeadbeef - movi a1, 0xe8073000 - movi a2, 0xe8075e10 /*HIFI_RESERVE1_LOCATION*/ - s32i a1, a2, 0 - - movi a0, 0 - movi a6, 0 /* clear argc*/ - movi a7, 0 /* clear argv*/ - movi a8, 0 /* clear envp*/ - movi a4, main - nop - nop - callx4 a4 - -reset_exit: - movi a2, SYS_exit -// Where does it go from here ? execution will fall through into -// whatever happens to follow. Either halt here or jump to some -// specific code. - - .end literal_prefix - -#ifdef VOS_VENUS_TEST_STUB - .text - .global sim_call - .type sim_call,@function - .align 4 -sim_call: - entry sp, 64 - addi a4, a3,-3 - movi a3, g_auwVosTestMessageBuf - movi a2, SYS_log_msg - simcall - retw - -#endif - - |