1d6aed566Sopenharmony_ci/* 2d6aed566Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3d6aed566Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d6aed566Sopenharmony_ci * you may not use this file except in compliance with the License. 5d6aed566Sopenharmony_ci * You may obtain a copy of the License at 6d6aed566Sopenharmony_ci * 7d6aed566Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d6aed566Sopenharmony_ci * 9d6aed566Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d6aed566Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d6aed566Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d6aed566Sopenharmony_ci * See the License for the specific language governing permissions and 13d6aed566Sopenharmony_ci * limitations under the License. 14d6aed566Sopenharmony_ci */ 15d6aed566Sopenharmony_ci 16d6aed566Sopenharmony_ci#include "riscv_hal.h" 17d6aed566Sopenharmony_ci#include "los_debug.h" 18d6aed566Sopenharmony_ci#include "soc.h" 19d6aed566Sopenharmony_ci#include "plic.h" 20d6aed566Sopenharmony_ci 21d6aed566Sopenharmony_ci#ifdef __cplusplus 22d6aed566Sopenharmony_ci#if __cplusplus 23d6aed566Sopenharmony_ciextern "C" { 24d6aed566Sopenharmony_ci#endif 25d6aed566Sopenharmony_ci#endif 26d6aed566Sopenharmony_ci 27d6aed566Sopenharmony_ciVOID HalIrqDisable(UINT32 vector) 28d6aed566Sopenharmony_ci{ 29d6aed566Sopenharmony_ci if (vector <= RISCV_SYS_MAX_IRQ) { 30d6aed566Sopenharmony_ci CLEAR_CSR(mie, 1 << vector); 31d6aed566Sopenharmony_ci } else { 32d6aed566Sopenharmony_ci PlicIrqDisable(vector); 33d6aed566Sopenharmony_ci } 34d6aed566Sopenharmony_ci} 35d6aed566Sopenharmony_ci 36d6aed566Sopenharmony_ciVOID HalIrqEnable(UINT32 vector) 37d6aed566Sopenharmony_ci{ 38d6aed566Sopenharmony_ci if (vector <= RISCV_SYS_MAX_IRQ) { 39d6aed566Sopenharmony_ci SET_CSR(mie, 1 << vector); 40d6aed566Sopenharmony_ci } else { 41d6aed566Sopenharmony_ci PlicIrqEnable(vector); 42d6aed566Sopenharmony_ci } 43d6aed566Sopenharmony_ci} 44d6aed566Sopenharmony_ci 45d6aed566Sopenharmony_ciVOID HalSetLocalInterPri(UINT32 interPriNum, UINT16 prior) 46d6aed566Sopenharmony_ci{ 47d6aed566Sopenharmony_ci PlicIrqSetPrio(interPriNum, prior); 48d6aed566Sopenharmony_ci} 49d6aed566Sopenharmony_ci 50d6aed566Sopenharmony_ciBOOL HalBackTraceFpCheck(UINT32 value) 51d6aed566Sopenharmony_ci{ 52d6aed566Sopenharmony_ci if (value >= (UINT32)(UINTPTR)(&__bss_end)) { 53d6aed566Sopenharmony_ci return TRUE; 54d6aed566Sopenharmony_ci } 55d6aed566Sopenharmony_ci 56d6aed566Sopenharmony_ci if ((value >= (UINT32)(UINTPTR)(&__start_and_irq_stack_top)) && (value < (UINT32)(UINTPTR)(&__except_stack_top))) { 57d6aed566Sopenharmony_ci return TRUE; 58d6aed566Sopenharmony_ci } 59d6aed566Sopenharmony_ci 60d6aed566Sopenharmony_ci return FALSE; 61d6aed566Sopenharmony_ci} 62d6aed566Sopenharmony_ci 63d6aed566Sopenharmony_ciVOID HalPlicInit(VOID) 64d6aed566Sopenharmony_ci{ 65d6aed566Sopenharmony_ci PlicIrqInit(); 66d6aed566Sopenharmony_ci 67d6aed566Sopenharmony_ci HalIrqEnable(RISCV_MACH_EXT_IRQ); 68d6aed566Sopenharmony_ci} 69d6aed566Sopenharmony_ci 70d6aed566Sopenharmony_ci#ifdef __cplusplus 71d6aed566Sopenharmony_ci#if __cplusplus 72d6aed566Sopenharmony_ci} 73d6aed566Sopenharmony_ci#endif 74d6aed566Sopenharmony_ci#endif 75