From 90a0c35deb2bc820dac0659ac5f83668f1f7ff04 Mon Sep 17 00:00:00 2001 From: kuangyufei Date: Mon, 4 Jan 2021 14:52:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E6=96=AD=E6=98=AF=E5=A6=82=E4=BD=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9A=84=3F=20CPU=E4=B9=8B=E9=97=B4=E5=8F=88?= =?UTF-8?q?=E6=98=AF=E5=A6=82=E4=BD=95=E9=80=9A=E8=AE=AF=E7=9A=84=3F=20?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=20@note=5Fpic=20=E6=96=B9=E4=BE=BF=E7=90=86?= =?UTF-8?q?=E8=A7=A3=E7=94=BB=E7=9A=84=E5=AD=97=E7=AC=A6=E5=9B=BE=20?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=20@note=5Fwhy=20=E5=B0=9A=E6=9C=AA=E7=9C=8B?= =?UTF-8?q?=E6=98=8E=E7=99=BD=E7=9A=84=E5=9C=B0=E6=96=B9=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E6=82=A8=E7=9C=8B=E6=98=8E=E7=99=BD=E4=BA=86=EF=BC=8C?= =?UTF-8?q?=E8=AF=B7=E5=91=8A=E7=9F=A5=E5=AE=8C=E5=96=84=20=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=20@note=5Fthinking=20=E4=B8=80=E7=82=B9=E6=80=9D?= =?UTF-8?q?=E8=80=83=E5=92=8C=E5=90=90=E6=A7=BD=E7=9A=84=E5=9C=B0=E6=96=B9?= =?UTF-8?q?=20=E6=90=9C=E7=B4=A2=20@note=5F#if0=20=E7=94=B1=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E9=A1=B9=E7=9B=AE=E6=8F=90=E4=BE=9B=E4=B8=8D?= =?UTF-8?q?=E7=94=B1=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=E4=B8=AD=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E7=9A=84=E6=9E=81=E4=B8=BA=E9=87=8D=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BD=93=EF=BC=8C=E4=B8=BA=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E7=90=86=E8=A7=A3=E8=80=8C=E6=B7=BB=E5=8A=A0=E7=9A=84=20?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=20@note=5Fgood=20=E7=BB=99=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E7=82=B9=E8=B5=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arch/arm/arm/include/los_hw_cpu.h | 4 +- arch/arm/arm/src/los_dispatch.S | 2 +- arch/arm/include/los_hw.h | 4 +- kernel/base/mp/los_mp.c | 28 +- kernel/common/los_config.c | 898 ++++++++--------- kernel/common/los_config.h | 8 +- platform/hw/arm/interrupt/gic/gic_v2.c | 388 ++++---- platform/hw/arm/interrupt/gic/gic_v3.c | 935 +++++++++--------- .../arm/timer/arm_private/arm_private_timer.c | 270 ++--- platform/hw/include/gic_common.h | 4 +- platform/hw/include/gic_v3.h | 406 ++++---- zzz/git/push.sh | 2 +- zzz/pic/turing/gic_v3.png | Bin 0 -> 106229 bytes ...\347\220\206\346\265\201\347\250\213.jpeg" | Bin 0 -> 35074 bytes ...5\346\226\255\350\267\257\347\224\261.png" | Bin 0 -> 132415 bytes 15 files changed, 1501 insertions(+), 1448 deletions(-) create mode 100644 zzz/pic/turing/gic_v3.png create mode 100644 "zzz/pic/turing/\344\270\255\346\226\255\345\244\204\347\220\206\346\265\201\347\250\213.jpeg" create mode 100644 "zzz/pic/turing/\344\270\255\346\226\255\350\267\257\347\224\261.png" diff --git a/arch/arm/arm/include/los_hw_cpu.h b/arch/arm/arm/include/los_hw_cpu.h index 7007a1b2..33e9d455 100644 --- a/arch/arm/arm/include/los_hw_cpu.h +++ b/arch/arm/arm/include/los_hw_cpu.h @@ -155,13 +155,13 @@ STATIC INLINE UINT64 OsHwIDGet(VOID) { return ARM_SYSREG_READ(MPIDR); } - +//获取CPU型号,包含CPU各种信息,例如:[15:4]表示 arm 7或arm 9 STATIC INLINE UINT32 OsMainIDGet(VOID) { return ARM_SYSREG_READ(MIDR); } -/* CPU interrupt mask handle implementation */ +/* CPU interrupt mask handle implementation */ //CPU中断掩码句柄实现 #if LOSCFG_ARM_ARCH >= 6 STATIC INLINE UINT32 ArchIntLock(VOID) diff --git a/arch/arm/arm/src/los_dispatch.S b/arch/arm/arm/src/los_dispatch.S index 3cadb7e8..e16fcf08 100644 --- a/arch/arm/arm/src/los_dispatch.S +++ b/arch/arm/arm/src/los_dispatch.S @@ -235,7 +235,7 @@ OsIrqFromKernel: EXC_SP_SET __svc_stack_top, OS_EXC_SVC_STACK_SIZE, R1, R2 #endif - BLX HalIrqHandler + BLX HalIrqHandler /* 调用硬中断处理程序 */ #ifdef LOSCFG_IRQ_USE_STANDALONE_STACK MOV SP, R4 diff --git a/arch/arm/include/los_hw.h b/arch/arm/include/los_hw.h index 91d30ef5..692672dd 100644 --- a/arch/arm/include/los_hw.h +++ b/arch/arm/include/los_hw.h @@ -292,12 +292,12 @@ extern VOID DCacheInvRange(UINTPTR start, UINTPTR end); * @par Dependency: * los_hw.h: the header file that contains the API declaration. * @see None. - */ + */ //获取CPU信息 STATIC INLINE const CHAR *LOS_CpuInfo(VOID) { INT32 i; UINT32 midr = OsMainIDGet(); - /* [15:4] is the primary part number */ + /* [15:4] is the primary part number */ //[15:4]是主要编号 UINT32 partNo = (midr & 0xFFF0) >> 0x4; for (i = 0; g_cpuTable[i].partNo != 0; i++) { diff --git a/kernel/base/mp/los_mp.c b/kernel/base/mp/los_mp.c index 3e95583d..37ecd51c 100644 --- a/kernel/base/mp/los_mp.c +++ b/kernel/base/mp/los_mp.c @@ -42,9 +42,21 @@ extern "C" { #endif /* __cplusplus */ /******************************************************* 多CPU核的操作系统3种处理模式(SMP+AMP+BMP) 鸿蒙实现的是 SMP 的方式 -非对称多处理(Asymmetric multiprocessing,AMP)每个CPU内核运行一个独立的操作系统或同一操作系统的独立实例(instantiation)。 -对称多处理(Symmetric multiprocessing,SMP)一个操作系统的实例可以同时管理所有CPU内核,且应用并不绑定某一个内核。 -混合多处理(Bound multiprocessing,BMP)一个操作系统的实例可以同时管理所有CPU内核,但每个应用被锁定于某个指定的核心。 + 非对称多处理(Asymmetric multiprocessing,AMP)每个CPU内核 + 运行一个独立的操作系统或同一操作系统的独立实例(instantiation)。 + + 对称多处理(Symmetric multiprocessing,SMP)一个操作系统的实例 + 可以同时管理所有CPU内核,且应用并不绑定某一个内核。 + + 混合多处理(Bound multiprocessing,BMP)一个操作系统的实例可以 + 同时管理所有CPU内核,但每个应用被锁定于某个指定的核心。 + +多核多线程处理器的中断 + 由 PIC(Programmable Interrupt Controller)统一控制。PIC 允许一个 + 硬件线程中断其他的硬件线程,这种方式被称为核间中断(Inter-Processor Interrupts,IPI) + +SGI:软件触发中断(Software Generated Interrupt)。在arm处理器中, + SGI共有16个,硬件中断号分别为ID0~ID15。它通常用于多核间通讯。 ********************************************************/ #if (LOSCFG_KERNEL_SMP == YES) @@ -52,8 +64,8 @@ extern "C" { VOID LOS_MpSchedule(UINT32 target)//target每位对应CPU core { UINT32 cpuid = ArchCurrCpuid(); - target &= ~(1U << cpuid); - HalIrqSendIpi(target, LOS_MP_IPI_SCHEDULE);//处理器间中断(IPI) + target &= ~(1U << cpuid);//获取除了自身之外的其他CPU + HalIrqSendIpi(target, LOS_MP_IPI_SCHEDULE);//向目标CPU发送调度信号,核间中断(Inter-Processor Interrupts),IPI } //硬中断唤醒处理函数 VOID OsMpWakeHandler(VOID) @@ -85,7 +97,7 @@ VOID OsMpCollectTasks(VOID) UINT32 ret; /* recursive checking all the available task */ - for (; taskID <= g_taskMaxNum; taskID++) { + for (; taskID <= g_taskMaxNum; taskID++) { //递归检查所有可用任务 taskCB = &g_taskCBArray[taskID]; if (OsTaskIsUnused(taskCB) || OsTaskIsRunning(taskCB)) { @@ -96,8 +108,8 @@ VOID OsMpCollectTasks(VOID) * though task status is not atomic, this check may success but not accomplish * the deletion; this deletion will be handled until the next run. */ - if (taskCB->signal & SIGNAL_KILL) { - ret = LOS_TaskDelete(taskID); + if (taskCB->signal & SIGNAL_KILL) {//任务收到被干掉信号 + ret = LOS_TaskDelete(taskID);//干掉任务,回归任务池 if (ret != LOS_OK) { PRINT_WARN("GC collect task failed err:0x%x\n", ret); } diff --git a/kernel/common/los_config.c b/kernel/common/los_config.c index e4897c27..e8c011ba 100644 --- a/kernel/common/los_config.c +++ b/kernel/common/los_config.c @@ -1,449 +1,449 @@ -/* - * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. - * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "los_config.h" -#include "string.h" -#include "stdio.h" -#include "los_oom.h" -#ifdef LOSCFG_COMPAT_LINUXKPI -#include "linux/workqueue.h" -#include "linux/module.h" -#endif -#include "los_sys.h" -#include "los_tick.h" -#include "los_task_pri.h" -#include "los_printf.h" -#include "los_swtmr.h" -#include "los_swtmr_pri.h" -#include "los_timeslice_pri.h" -#include "los_memory_pri.h" -#include "los_sem_pri.h" -#include "los_mux_pri.h" -#include "los_queue_pri.h" -#include "los_memstat_pri.h" -#include "los_hwi_pri.h" -#include "los_spinlock.h" -#include "los_mp.h" -#include "los_atomic.h" -#include "los_exc_pri.h" -#include "gic_common.h" -#include "los_vm_boot.h" - -#ifdef LOSCFG_FS_VFS -#include "fs/fs.h" -#include "fs/fs_operation.h" -#endif - -#if (LOSCFG_KERNEL_TRACE == YES) -#include "los_trace.h" -#endif - -#ifdef LOSCFG_KERNEL_CPUP -#include "los_cpup_pri.h" -#endif - -#ifdef LOSCFG_COMPAT_POSIX -#include "pprivate.h" -#endif - -#ifdef LOSCFG_DRIVERS_HDF_PLATFORM_UART -#include "console.h" -#endif -#ifdef LOSCFG_KERNEL_TICKLESS -#include "los_tickless.h" -#endif -#ifdef LOSCFG_ARCH_CORTEX_M7 -#include "los_exc_pri.h" -#endif -#ifdef LOSCFG_MEM_RECORDINFO -#include "los_memrecord_pri.h" -#endif -#include "los_hw_tick_pri.h" -#include "los_hwi_pri.h" - -#if defined(LOSCFG_HW_RANDOM_ENABLE) || defined (LOSCFG_DRIVERS_RANDOM) -#include "randomdev.h" -#include "yarrow.h" -#endif -#ifdef LOSCFG_SHELL_DMESG -#include "dmesg_pri.h" -#endif -#ifdef LOSCFG_SHELL_LK -#include "shell_pri.h" -#endif - -#ifdef LOSCFG_KERNEL_PIPE -#include "pipe_common.h" -#endif - -#include "los_process_pri.h" -#include "los_futex_pri.h" - -#ifdef LOSCFG_KERNEL_VDSO -#include "los_vdso.h" -#endif - -#if (LOSCFG_KERNEL_LITEIPC == YES) -#include "hm_liteipc.h" -#endif - -#ifdef LOSCFG_DRIVERS_HIEVENT -#include "hievent_driver.h" -#endif - -#if (LOSCFG_BASE_CORE_HILOG == YES) -#include "los_hilog.h" -#endif - -#ifdef __cplusplus -#if __cplusplus -extern "C" { -#endif /* __cplusplus */ -#endif /* __cplusplus */ - -extern UINT32 OsSystemInit(VOID); -extern VOID SystemInit(VOID);//见于..\vendor\hi3516dv300\module_init\src\system_init.c -//注册 HZ , tick -LITE_OS_SEC_TEXT_INIT VOID osRegister(VOID) -{ - g_sysClock = OS_SYS_CLOCK; //HZ - g_tickPerSecond = LOSCFG_BASE_CORE_TICK_PER_SECOND;//每秒节拍数 默认100 即一个tick = 10ms - - return; -} -//系统初始化已经完成,系统正式开始工作 -LITE_OS_SEC_TEXT_INIT VOID OsStart(VOID) -{ - LosProcessCB *runProcess = NULL; - LosTaskCB *taskCB = NULL; - UINT32 cpuid = ArchCurrCpuid(); - - OsTickStart();//启动tick - - LOS_SpinLock(&g_taskSpin); - taskCB = OsGetTopTask();//获取一个最高优先级任务 - - runProcess = OS_PCB_FROM_PID(taskCB->processID);//获取这个task所在进程 - runProcess->processStatus |= OS_PROCESS_STATUS_RUNNING;//设这个进程为运行进程 -#if (LOSCFG_KERNEL_SMP == YES) - /* - * attention: current cpu needs to be set, in case first task deletion - * may fail because this flag mismatch with the real current cpu. - *///注意:当前cpu需要设置,以防第一个任务被删除可能会失败,因为此标志与实际当前cpu不匹配 - taskCB->currCpu = cpuid;//设置当前cpuID为当前任务跑在这个CPUID上 - runProcess->processStatus = OS_PROCESS_RUNTASK_COUNT_ADD(runProcess->processStatus); -#endif - - OS_SCHEDULER_SET(cpuid);//设置调度要使用的cpu id - - PRINTK("cpu %d entering scheduler\n", cpuid); - OsStartToRun(taskCB);//任务开始起跑 -} -//进程通讯IPC初始化 由OsMain()调用 -LITE_OS_SEC_TEXT_INIT STATIC UINT32 OsIpcInit(VOID) -{ - UINT32 ret; -#if (LOSCFG_BASE_IPC_SEM == YES) - ret = OsSemInit(); - if (ret != LOS_OK) { - return ret; - } -#endif - -#if (LOSCFG_BASE_IPC_QUEUE == YES)//系统已配置支持队列IPC - ret = OsQueueInit();//队列初始化 - if (ret != LOS_OK) { - return ret; - } -#endif - return LOS_OK; -} - -#ifdef LOSCFG_KERNEL_PIPE//管道支持 -LITE_OS_SEC_TEXT_INIT STATIC VOID OsDriverPipeInit(VOID) -{ - (VOID)pipe_init();//管道初始化 -} -#endif - -#ifdef LOSCFG_DRIVERS_HIEVENT //hievent支持 -LITE_OS_SEC_TEXT_INIT STATIC VOID OsDriverHiEventInit(VOID) -{ - (VOID)HieventInit(); -} -#endif - -#ifdef LOSCFG_COMPAT_BSD //是否兼容BSD -extern void configure (void); -LITE_OS_SEC_TEXT_INIT STATIC INT32 OsBsdInit(VOID) -{ - configure(); - mi_startup(SI_SUB_ARCH_INIT); - return LOS_OK; -} -#endif - -// 初始化操作 -LITE_OS_SEC_TEXT_INIT INT32 OsMain(VOID) -{ - UINT32 ret; - - osRegister();// 设置 g_sysClock 和 g_tickPerSecond - -#ifdef LOSCFG_SHELL_DMESG - ret = OsDmesgInit();// shell dmesg 命令用于控制内核dmesg缓存区,类似于echo ,buf 默认8K 最大80K - if (ret != LOS_OK) { - return ret; - } -#endif - -#ifdef LOSCFG_SHELL_LK - OsLkLoggerInit(NULL);// shell log 命令 用于修改&查询日志配置 log level [levelNum]共六个等级 -#endif - -#ifdef LOSCFG_EXC_INTERACTION -#ifdef LOSCFG_ARCH_CORTEX_M7 - /* 4096: 4K space for Stack */ - ret = OsMemExcInteractionInit((UINT32)&__bss_end + 4096); -#else - ret = OsMemExcInteractionInit((UINTPTR)&__bss_end); -#endif - if (ret != LOS_OK) { - return ret; - } -#endif - -#if (LOSCFG_PLATFORM_HWI == YES) - OsHwiInit();// 硬件中断定制的配置项初始化 -#endif - - OsExcInit();// 初始化执行任务堆栈 - - ret = OsTickInit(g_sysClock, LOSCFG_BASE_CORE_TICK_PER_SECOND);// 时钟管理初始化,包含注册中断事件 - if (ret != LOS_OK) { - return ret; - } - -#ifdef LOSCFG_PLATFORM_UART_WITHOUT_VFS -#ifdef LOSCFG_DRIVERS - uart_init();// 串口的初始化 -#endif -#ifdef LOSCFG_SHELL -#endif //LOSCFG_SHELL -#endif //LOSCFG_PLATFORM_UART_WITHOUT_VFS - ret = OsTaskInit();// 任务初始化 - if (ret != LOS_OK) { - PRINT_ERR("OsTaskInit error\n"); - return ret; - } - -#if ((LOSCFG_BASE_IPC_QUEUE == YES) || (LOSCFG_BASE_IPC_MUX == YES) || (LOSCFG_BASE_IPC_SEM == YES)) - ret = OsIpcInit();// 进程间通讯(InterProcess Communication)初始化 - if (ret != LOS_OK) { - return ret; - } -#endif - - ret = OsSysMemInit();// 完成内存的初始化操作,段页管理 - if (ret != LOS_OK) { - PRINT_ERR("OsSysMemInit error\n"); - return ret; - } - - SyscallHandleInit();// 系统调用相关初始化 - - /* - * CPUP should be inited before first task creation which depends on the semaphore - * when LOSCFG_KERNEL_SMP_TASK_SYNC is enabled. So don't change this init sequence - * if not neccessary. The sequence should be like this: - * 1. OsIpcInit - * 2. OsCpupInit - * 3. other inits have task creation - */ -#ifdef LOSCFG_KERNEL_CPUP //cpu统计是否支持 - ret = OsCpupInit();// shell cpup命令用于查询系统CPU的占用率 命令格式cpup [mode] [taskID] - if (ret != LOS_OK) { - PRINT_ERR("OsCpupInit error\n"); - return ret; - } -#endif - - ret = OsKernelInitProcess();// 完成内核进程的初始化 - if (ret != LOS_OK) { - return ret; - } - -#if (LOSCFG_BASE_CORE_SWTMR == YES) - ret = OsSwtmrInit();//软时钟模块初始化 - if (ret != LOS_OK) { - return ret; - } -#endif - -#ifdef LOSCFG_KERNEL_CPUP - OsCpupGuardCreator(); -#endif - -#if (LOSCFG_KERNEL_SMP == YES) - (VOID)OsMpInit();//多处理器模块的初始化 -#endif - -#if defined(LOSCFG_HW_RANDOM_ENABLE) || defined (LOSCFG_DRIVERS_RANDOM) - random_alg_context.ra_init_alg(NULL); - run_harvester_iterate(NULL); -#endif - -#ifdef LOSCFG_COMPAT_BSD - ret = OsBsdInit();//BSD模块初始化 - if (ret != LOS_OK) { - PRINT_ERR("init bsd failed!\n"); - return ret; - } -#endif - -#ifdef LOSCFG_KERNEL_PIPE //打开管道宏 - OsDriverPipeInit();//管道模块初始化 -#endif - - ret = OsSystemInit();//系统初始化 - if (ret != LOS_OK) { - return ret; - } - -#if LOSCFG_DRIVERS_HIEVENT //打开HIEVENT宏 - OsDriverHiEventInit();//HiEvent 初始化 -#endif - -#if (LOSCFG_KERNEL_TRACE == YES) - LOS_TraceInit();//日志模块初始化,没有日志一片摸瞎. -#endif - -#if (LOSCFG_KERNEL_LITEIPC == YES) - ret = LiteIpcInit();//初始化鸿蒙自有的进程间通讯模块 - if (ret != LOS_OK) { - return ret; - } -#endif - -#if (LOSCFG_BASE_CORE_HILOG == YES)//hilog开关 - ret = HiLogDriverInit();//初始化hilog字符设备驱动程序 - if (ret != LOS_OK) { - return ret; - } -#endif - -#ifdef LOSCFG_KERNEL_VDSO - ret = OsInitVdso();//VDSO模块初始化 - if (ret != LOS_OK) {//VDSO就是Virtual Dynamic Shared Object,即内核提供的虚拟的.so,这个.so文件不在磁盘上,而是在内核里头 - return ret; - } -#endif - //Fast Userspace muTexes (快速用户空间互斥体) - ret = OsFutexInit();//linux使用了futex来进行快速通信,pthread_xxx 相关接口全部都是基于futex实现的 - if (ret != LOS_OK) { - PRINT_ERR("Create futex failed : %d!\n", ret); - return ret; - } - - ret = OomTaskInit();//Out-Of-Memory 用于监控使用内存太大的task. - if (ret != LOS_OK) {//在内存不足而某些进程太耗内存时,内核可直接把进程干掉而释放内存 - return ret; - } - - return LOS_OK; -} -//创建系统初始化任务 -STATIC UINT32 OsSystemInitTaskCreate(VOID) -{ - UINT32 taskID; - TSK_INIT_PARAM_S sysTask; - - (VOID)memset_s(&sysTask, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S)); - sysTask.pfnTaskEntry = (TSK_ENTRY_FUNC)SystemInit;//任务的入口函数,这个任务由外部提供 比如..\vendor\hi3516dv300\module_init\src\system_init.c - sysTask.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//16K - sysTask.pcName = "SystemInit";//任务的名称 - sysTask.usTaskPrio = LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO;// 内核默认优先级为10 - sysTask.uwResved = LOS_TASK_STATUS_DETACHED;//任务分离模式 -#if (LOSCFG_KERNEL_SMP == YES) - sysTask.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid()); -#endif - return LOS_TaskCreate(&taskID, &sysTask);//创建任务并加入就绪队列,并立即参与调度 -} - -#ifdef LOSCFG_MEM_RECORDINFO //记录内存信息功能 -STATIC UINT32 OsMemShowTaskCreate(VOID)//创建一个显示内存使用信息的任务 -{ - UINT32 taskID; - TSK_INIT_PARAM_S appTask; - - (VOID)memset_s(&appTask, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S)); - appTask.pfnTaskEntry = (TSK_ENTRY_FUNC)OsMemRecordShowTask; //任务的入口函数 - appTask.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//16K - appTask.pcName = "memshow_Task";//任务名称 - appTask.usTaskPrio = LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO; //优先级为10 - appTask.uwResved = LOS_TASK_STATUS_DETACHED;//分离模式 - return LOS_TaskCreate(&taskID, &appTask);//创建任务并加入就绪队列,并立即参与调度 -} -#endif - -UINT32 OsSystemInit(VOID) -{ - UINT32 ret; -#ifdef LOSCFG_FS_VFS //虚拟文件系统支持 - los_vfs_init(); //虚拟文件系统初始化 -#endif -#ifdef LOSCFG_COMPAT_LINUXKPI - g_pstSystemWq = create_workqueue("system_wq"); -#endif - ret = OsSystemInitTaskCreate();//创建 "SystemInit" 任务 - if (ret != LOS_OK) { - return ret; - } -#ifdef LOSCFG_MEM_RECORDINFO - ret = OsMemShowTaskCreate();//创建 "memshow_task"任务,用于显示虚拟内存使用 - if (ret != LOS_OK) { - PRINTK("create memshow_Task error %u\n", ret); - return ret; - } - PRINTK("create memshow_Task ok\n"); -#endif -#ifdef LOSCFG_KERNEL_TICKLESS //低功耗模式 - LOS_TicklessEnable();//使能低功耗模式 -#endif - - return 0; -} - -#ifdef __cplusplus -#if __cplusplus -} -#endif /* __cplusplus */ -#endif /* __cplusplus */ +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "los_config.h" +#include "string.h" +#include "stdio.h" +#include "los_oom.h" +#ifdef LOSCFG_COMPAT_LINUXKPI +#include "linux/workqueue.h" +#include "linux/module.h" +#endif +#include "los_sys.h" +#include "los_tick.h" +#include "los_task_pri.h" +#include "los_printf.h" +#include "los_swtmr.h" +#include "los_swtmr_pri.h" +#include "los_timeslice_pri.h" +#include "los_memory_pri.h" +#include "los_sem_pri.h" +#include "los_mux_pri.h" +#include "los_queue_pri.h" +#include "los_memstat_pri.h" +#include "los_hwi_pri.h" +#include "los_spinlock.h" +#include "los_mp.h" +#include "los_atomic.h" +#include "los_exc_pri.h" +#include "gic_common.h" +#include "los_vm_boot.h" + +#ifdef LOSCFG_FS_VFS +#include "fs/fs.h" +#include "fs/fs_operation.h" +#endif + +#if (LOSCFG_KERNEL_TRACE == YES) +#include "los_trace.h" +#endif + +#ifdef LOSCFG_KERNEL_CPUP +#include "los_cpup_pri.h" +#endif + +#ifdef LOSCFG_COMPAT_POSIX +#include "pprivate.h" +#endif + +#ifdef LOSCFG_DRIVERS_HDF_PLATFORM_UART +#include "console.h" +#endif +#ifdef LOSCFG_KERNEL_TICKLESS +#include "los_tickless.h" +#endif +#ifdef LOSCFG_ARCH_CORTEX_M7 +#include "los_exc_pri.h" +#endif +#ifdef LOSCFG_MEM_RECORDINFO +#include "los_memrecord_pri.h" +#endif +#include "los_hw_tick_pri.h" +#include "los_hwi_pri.h" + +#if defined(LOSCFG_HW_RANDOM_ENABLE) || defined (LOSCFG_DRIVERS_RANDOM) +#include "randomdev.h" +#include "yarrow.h" +#endif +#ifdef LOSCFG_SHELL_DMESG +#include "dmesg_pri.h" +#endif +#ifdef LOSCFG_SHELL_LK +#include "shell_pri.h" +#endif + +#ifdef LOSCFG_KERNEL_PIPE +#include "pipe_common.h" +#endif + +#include "los_process_pri.h" +#include "los_futex_pri.h" + +#ifdef LOSCFG_KERNEL_VDSO +#include "los_vdso.h" +#endif + +#if (LOSCFG_KERNEL_LITEIPC == YES) +#include "hm_liteipc.h" +#endif + +#ifdef LOSCFG_DRIVERS_HIEVENT +#include "hievent_driver.h" +#endif + +#if (LOSCFG_BASE_CORE_HILOG == YES) +#include "los_hilog.h" +#endif + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif /* __cplusplus */ +#endif /* __cplusplus */ + +extern UINT32 OsSystemInit(VOID); +extern VOID SystemInit(VOID); +//注册 HZ , tick +LITE_OS_SEC_TEXT_INIT VOID osRegister(VOID) +{ + g_sysClock = OS_SYS_CLOCK; //HZ + g_tickPerSecond = LOSCFG_BASE_CORE_TICK_PER_SECOND;//每秒节拍数 默认100 即一个tick = 10ms + + return; +} +//系统初始化已经完成,系统正式开始工作,此处每个CPU都会调用一次 +LITE_OS_SEC_TEXT_INIT VOID OsStart(VOID) +{ + LosProcessCB *runProcess = NULL; + LosTaskCB *taskCB = NULL; + UINT32 cpuid = ArchCurrCpuid(); + + OsTickStart();//启动tick + + LOS_SpinLock(&g_taskSpin); + taskCB = OsGetTopTask();//获取一个最高优先级任务 + + runProcess = OS_PCB_FROM_PID(taskCB->processID);//获取这个task所在进程 + runProcess->processStatus |= OS_PROCESS_STATUS_RUNNING;//设这个进程为运行进程 +#if (LOSCFG_KERNEL_SMP == YES) + /* + * attention: current cpu needs to be set, in case first task deletion + * may fail because this flag mismatch with the real current cpu. + *///注意:当前cpu需要设置,以防第一个任务被删除可能会失败,因为此标志与实际当前cpu不匹配 + taskCB->currCpu = cpuid;//设置当前cpuID为当前任务跑在这个CPUID上 + runProcess->processStatus = OS_PROCESS_RUNTASK_COUNT_ADD(runProcess->processStatus); +#endif + + OS_SCHEDULER_SET(cpuid);//设置调度cpu id + + PRINTK("cpu %d entering scheduler\n", cpuid); + OsStartToRun(taskCB);//任务开始跑任务 +} +//进程通讯IPC初始化 由OsMain()调用 +LITE_OS_SEC_TEXT_INIT STATIC UINT32 OsIpcInit(VOID) +{ + UINT32 ret; +#if (LOSCFG_BASE_IPC_SEM == YES) + ret = OsSemInit(); //信号量初始化 + if (ret != LOS_OK) { + return ret; + } +#endif + +#if (LOSCFG_BASE_IPC_QUEUE == YES)//系统已配置支持队列IPC + ret = OsQueueInit(); //队列初始化 + if (ret != LOS_OK) { + return ret; + } +#endif + return LOS_OK; +} + +#ifdef LOSCFG_KERNEL_PIPE //管道支持 +LITE_OS_SEC_TEXT_INIT STATIC VOID OsDriverPipeInit(VOID) +{ + (VOID)pipe_init();//管道初始化 +} +#endif + +#ifdef LOSCFG_DRIVERS_HIEVENT //hievent支持 +LITE_OS_SEC_TEXT_INIT STATIC VOID OsDriverHiEventInit(VOID) +{ + (VOID)HieventInit(); +} +#endif + +#ifdef LOSCFG_COMPAT_BSD //是否兼容BSD +extern void configure (void); +LITE_OS_SEC_TEXT_INIT STATIC INT32 OsBsdInit(VOID) +{ + configure(); + mi_startup(SI_SUB_ARCH_INIT); + return LOS_OK; +} +#endif + +// 初始化操作 +LITE_OS_SEC_TEXT_INIT INT32 OsMain(VOID) +{ + UINT32 ret; + + osRegister();// 设置 g_sysClock 和 g_tickPerSecond + +#ifdef LOSCFG_SHELL_DMESG + ret = OsDmesgInit();// shell dmesg 命令用于控制内核dmesg缓存区,类似于echo ,buf 默认8K 最大80K + if (ret != LOS_OK) { + return ret; + } +#endif + +#ifdef LOSCFG_SHELL_LK + OsLkLoggerInit(NULL);// shell log 命令 用于修改&查询日志配置 log level [levelNum]共六个等级 +#endif + +#ifdef LOSCFG_EXC_INTERACTION +#ifdef LOSCFG_ARCH_CORTEX_M7 + /* 4096: 4K space for Stack */ + ret = OsMemExcInteractionInit((UINT32)&__bss_end + 4096); +#else + ret = OsMemExcInteractionInit((UINTPTR)&__bss_end); +#endif + if (ret != LOS_OK) { + return ret; + } +#endif + +#if (LOSCFG_PLATFORM_HWI == YES) + OsHwiInit();// 硬中断初始化 +#endif + + OsExcInit();// 异常接管初始化 + + ret = OsTickInit(g_sysClock, LOSCFG_BASE_CORE_TICK_PER_SECOND);// tick初始化,包含注册中断事件 + if (ret != LOS_OK) { + return ret; + } + +#ifdef LOSCFG_PLATFORM_UART_WITHOUT_VFS +#ifdef LOSCFG_DRIVERS + uart_init();// 串口的初始化 +#endif +#ifdef LOSCFG_SHELL +#endif //LOSCFG_SHELL +#endif //LOSCFG_PLATFORM_UART_WITHOUT_VFS + ret = OsTaskInit();// 任务初始化 + if (ret != LOS_OK) { + PRINT_ERR("OsTaskInit error\n"); + return ret; + } + +#if ((LOSCFG_BASE_IPC_QUEUE == YES) || (LOSCFG_BASE_IPC_MUX == YES) || (LOSCFG_BASE_IPC_SEM == YES)) + ret = OsIpcInit();// 进程间通讯(InterProcess Communication)初始化 + if (ret != LOS_OK) { + return ret; + } +#endif + + ret = OsSysMemInit();// 完成内存的初始化操作,段页管理 + if (ret != LOS_OK) { + PRINT_ERR("OsSysMemInit error\n"); + return ret; + } + + SyscallHandleInit();// 系统调用相关初始化 + + /* + * CPUP should be inited before first task creation which depends on the semaphore + * when LOSCFG_KERNEL_SMP_TASK_SYNC is enabled. So don't change this init sequence + * if not neccessary. The sequence should be like this: + * 1. OsIpcInit + * 2. OsCpupInit + * 3. other inits have task creation + */ +#ifdef LOSCFG_KERNEL_CPUP //cpu统计是否支持 + ret = OsCpupInit();// shell cpup命令用于查询系统CPU的占用率 命令格式cpup [mode] [taskID] + if (ret != LOS_OK) { + PRINT_ERR("OsCpupInit error\n"); + return ret; + } +#endif + + ret = OsKernelInitProcess();// 完成内核进程的初始化 + if (ret != LOS_OK) { + return ret; + } + +#if (LOSCFG_BASE_CORE_SWTMR == YES) + ret = OsSwtmrInit();//软时钟模块初始化 + if (ret != LOS_OK) { + return ret; + } +#endif + +#ifdef LOSCFG_KERNEL_CPUP + OsCpupGuardCreator(); +#endif + +#if (LOSCFG_KERNEL_SMP == YES) + (VOID)OsMpInit();//多处理器模块的初始化 +#endif + +#if defined(LOSCFG_HW_RANDOM_ENABLE) || defined (LOSCFG_DRIVERS_RANDOM) + random_alg_context.ra_init_alg(NULL); + run_harvester_iterate(NULL); +#endif + +#ifdef LOSCFG_COMPAT_BSD + ret = OsBsdInit();//BSD模块初始化 + if (ret != LOS_OK) { + PRINT_ERR("init bsd failed!\n"); + return ret; + } +#endif + +#ifdef LOSCFG_KERNEL_PIPE //打开管道宏 + OsDriverPipeInit();//管道模块初始化 +#endif + + ret = OsSystemInit();//系统初始化 + if (ret != LOS_OK) { + return ret; + } + +#if LOSCFG_DRIVERS_HIEVENT //打开HIEVENT宏 + OsDriverHiEventInit();//HiEvent 初始化 +#endif + +#if (LOSCFG_KERNEL_TRACE == YES) + LOS_TraceInit();//日志模块初始化,没有日志一片摸瞎. +#endif + +#if (LOSCFG_KERNEL_LITEIPC == YES) + ret = LiteIpcInit();//初始化鸿蒙自有的进程间通讯模块 + if (ret != LOS_OK) { + return ret; + } +#endif + +#if (LOSCFG_BASE_CORE_HILOG == YES)//hilog开关 + ret = HiLogDriverInit();//初始化hilog字符设备驱动程序 + if (ret != LOS_OK) { + return ret; + } +#endif + +#ifdef LOSCFG_KERNEL_VDSO + ret = OsInitVdso();//VDSO模块初始化 + if (ret != LOS_OK) {//VDSO就是Virtual Dynamic Shared Object,即内核提供的虚拟的.so,这个.so文件不在磁盘上,而是在内核里头 + return ret; + } +#endif + //Fast Userspace muTexes (快速用户空间互斥体) + ret = OsFutexInit();//linux使用了futex来进行快速通信,pthread_xxx 相关接口全部都是基于futex实现的 + if (ret != LOS_OK) { + PRINT_ERR("Create futex failed : %d!\n", ret); + return ret; + } + + ret = OomTaskInit();//Out-Of-Memory 用于监控使用内存太大的task. + if (ret != LOS_OK) {//在内存不足而某些进程太耗内存时,内核可直接把进程干掉而释放内存 + return ret; + } + + return LOS_OK; +} +//创建系统初始化任务 +STATIC UINT32 OsSystemInitTaskCreate(VOID) +{ + UINT32 taskID; + TSK_INIT_PARAM_S sysTask; + + (VOID)memset_s(&sysTask, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S)); + sysTask.pfnTaskEntry = (TSK_ENTRY_FUNC)SystemInit;//任务的入口函数,这个任务由外部提供 比如..\vendor\hi3516dv300\module_init\src\system_init.c + sysTask.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//16K + sysTask.pcName = "SystemInit";//任务的名称 + sysTask.usTaskPrio = LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO;// 内核默认优先级为10 + sysTask.uwResved = LOS_TASK_STATUS_DETACHED;//任务分离模式 +#if (LOSCFG_KERNEL_SMP == YES) + sysTask.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid());//cpu 亲和性设置,记录执行过任务的CPU,尽量确保由同一个CPU完成任务周期 +#endif + return LOS_TaskCreate(&taskID, &sysTask);//创建任务并加入就绪队列,并立即参与调度 +} + +#ifdef LOSCFG_MEM_RECORDINFO //记录内存信息功能 +STATIC UINT32 OsMemShowTaskCreate(VOID)//创建一个显示内存使用信息的任务 +{ + UINT32 taskID; + TSK_INIT_PARAM_S appTask; + + (VOID)memset_s(&appTask, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S)); + appTask.pfnTaskEntry = (TSK_ENTRY_FUNC)OsMemRecordShowTask; //任务的入口函数 + appTask.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//16K + appTask.pcName = "memshow_Task";//任务名称 + appTask.usTaskPrio = LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO; //优先级为10 + appTask.uwResved = LOS_TASK_STATUS_DETACHED;//分离模式 + return LOS_TaskCreate(&taskID, &appTask);//创建任务并加入就绪队列,并立即参与调度 +} +#endif + +UINT32 OsSystemInit(VOID) +{ + UINT32 ret; +#ifdef LOSCFG_FS_VFS //虚拟文件系统支持 + los_vfs_init(); //虚拟文件系统初始化 +#endif +#ifdef LOSCFG_COMPAT_LINUXKPI + g_pstSystemWq = create_workqueue("system_wq"); +#endif + ret = OsSystemInitTaskCreate();//创建 "SystemInit" 任务 + if (ret != LOS_OK) { + return ret; + } +#ifdef LOSCFG_MEM_RECORDINFO + ret = OsMemShowTaskCreate();//创建 "memshow_task"任务,用于显示虚拟内存使用 + if (ret != LOS_OK) { + PRINTK("create memshow_Task error %u\n", ret); + return ret; + } + PRINTK("create memshow_Task ok\n"); +#endif +#ifdef LOSCFG_KERNEL_TICKLESS //低功耗模式 + LOS_TicklessEnable();//使能低功耗模式 +#endif + + return 0; +} + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ diff --git a/kernel/common/los_config.h b/kernel/common/los_config.h index 6f748392..d84a058f 100644 --- a/kernel/common/los_config.h +++ b/kernel/common/los_config.h @@ -77,7 +77,7 @@ extern UINT32 __heap_end; // 堆区结束地址 * time timer clock (unit: HZ) */ #ifndef OS_TIME_TIMER_CLOCK -#define OS_TIME_TIMER_CLOCK OS_SYS_CLOCK +#define OS_TIME_TIMER_CLOCK OS_SYS_CLOCK //定时器频率 #endif /** @@ -109,16 +109,16 @@ extern UINT32 __heap_end; // 堆区结束地址 /** * @ingroup los_config - * Sched clck interval + * Sched clock interval */ -#define SCHED_CLOCK_INTETRVAL_TICKS 100 +#define SCHED_CLOCK_INTETRVAL_TICKS 100 //调度时间间隔 /** * @ingroup los_config * External configuration item for timer tailoring */ #ifndef LOSCFG_BASE_CORE_TICK_HW_TIME -#define LOSCFG_BASE_CORE_TICK_HW_TIME NO +#define LOSCFG_BASE_CORE_TICK_HW_TIME NO //定时器裁剪的外部配置项 #endif /****************************** Hardware interrupt module configuration ******************************/ diff --git a/platform/hw/arm/interrupt/gic/gic_v2.c b/platform/hw/arm/interrupt/gic/gic_v2.c index e7b76e4a..2e5dd5b3 100644 --- a/platform/hw/arm/interrupt/gic/gic_v2.c +++ b/platform/hw/arm/interrupt/gic/gic_v2.c @@ -1,194 +1,194 @@ -/* - * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. - * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "gic_common.h" -#include "los_hwi_pri.h" -#include "los_mp.h" - -STATIC_ASSERT(OS_USER_HWI_MAX <= 1020, "hwi max is too large!"); - -#ifdef LOSCFG_PLATFORM_BSP_GIC_V2 - -STATIC UINT32 g_curIrqNum = 0; - -#if (LOSCFG_KERNEL_SMP == YES) -/* - * filter description - * 0b00: forward to the cpu interfaces specified in cpu_mask - * 0b01: forward to all cpu interfaces - * 0b10: forward only to the cpu interface that request the irq - */ -STATIC VOID GicWriteSgi(UINT32 vector, UINT32 cpuMask, UINT32 filter) -{ - UINT32 val = ((filter & 0x3) << 24) | ((cpuMask & 0xFF) << 16) | - (vector & 0xF); - - GIC_REG_32(GICD_SGIR) = val; -} - -VOID HalIrqSendIpi(UINT32 target, UINT32 ipi) -{ - GicWriteSgi(ipi, target, 0); -} - -VOID HalIrqSetAffinity(UINT32 vector, UINT32 cpuMask) -{ - UINT32 offset = vector / 4; - UINT32 index = vector & 0x3; - - GIC_REG_8(GICD_ITARGETSR(offset) + index) = cpuMask; -} -#endif - -UINT32 HalCurIrqGet(VOID) -{ - return g_curIrqNum; -} -//屏蔽中断 -VOID HalIrqMask(UINT32 vector) -{ - if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { - return; - } - - GIC_REG_32(GICD_ICENABLER(vector / 32)) = 1U << (vector % 32); -} -//解除屏蔽 -VOID HalIrqUnmask(UINT32 vector) -{ - if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { - return; - } - - GIC_REG_32(GICD_ISENABLER(vector >> 5)) = 1U << (vector % 32); -} - -VOID HalIrqPending(UINT32 vector) -{ - if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { - return; - } - - GIC_REG_32(GICD_ISPENDR(vector >> 5)) = 1U << (vector % 32); -} - -VOID HalIrqClear(UINT32 vector) -{ - GIC_REG_32(GICC_EOIR) = vector; -} -//给每个CPU core初始化硬件中断 -VOID HalIrqInitPercpu(VOID) -{ - /* unmask interrupts */ //取消屏蔽中断 - GIC_REG_32(GICC_PMR) = 0xFF; - - /* enable gic cpu interface */ //启用gic cpu接口 - GIC_REG_32(GICC_CTLR) = 1; -} -//硬件中断初始化 -VOID HalIrqInit(VOID) -{ - UINT32 i; - - /* set externel interrupts to be level triggered, active low. */ //将外部中断设置为电平触发,低电平激活 - for (i = 32; i < OS_HWI_MAX_NUM; i += 16) { - GIC_REG_32(GICD_ICFGR(i / 16)) = 0; - } - - /* set externel interrupts to CPU 0 */ //将外部中断设置为CPU 0 - for (i = 32; i < OS_HWI_MAX_NUM; i += 4) { - GIC_REG_32(GICD_ITARGETSR(i / 4)) = 0x01010101; - } - - /* set priority on all interrupts */ //设置所有中断的优先级 - for (i = 0; i < OS_HWI_MAX_NUM; i += 4) { - GIC_REG_32(GICD_IPRIORITYR(i / 4)) = GICD_INT_DEF_PRI_X4; - } - - /* disable all interrupts. */ //禁用所有中断。 - for (i = 0; i < OS_HWI_MAX_NUM; i += 32) { - GIC_REG_32(GICD_ICENABLER(i / 32)) = ~0; - } - - HalIrqInitPercpu(); - - /* enable gic distributor control */ - GIC_REG_32(GICD_CTLR) = 1; - -#if (LOSCFG_KERNEL_SMP == YES) - /* register inter-processor interrupt *///注册寄存器处理器间中断处理函数,啥意思?就是当前CPU核向其他CPU核发送中断信号 - //处理器间中断允许一个CPU向系统其他的CPU发送中断信号,处理器间中断(IPI)不是通过IRQ线传输的,而是作为信号直接放在连接所有CPU本地APIC的总线上。 - LOS_HwiCreate(LOS_MP_IPI_WAKEUP, 0xa0, 0, OsMpWakeHandler, 0);//中断处理函数 - LOS_HwiCreate(LOS_MP_IPI_SCHEDULE, 0xa0, 0, OsMpScheduleHandler, 0);//中断处理函数 - LOS_HwiCreate(LOS_MP_IPI_HALT, 0xa0, 0, OsMpScheduleHandler, 0);//中断处理函数 -#endif -} -//硬中断处理函数,这里由硬件触发 -VOID HalIrqHandler(VOID) -{ - UINT32 iar = GIC_REG_32(GICC_IAR); - UINT32 vector = iar & 0x3FFU; - - /* - * invalid irq number, mainly the spurious interrupts 0x3ff, - * gicv2 valid irq ranges from 0~1019, we use OS_HWI_MAX_NUM - * to do the checking. - */ - if (vector >= OS_HWI_MAX_NUM) { - return; - } - g_curIrqNum = vector; - - OsInterrupt(vector); - - /* use orignal iar to do the EOI */ - GIC_REG_32(GICC_EOIR) = iar; -} - -CHAR *HalIrqVersion(VOID) -{ - UINT32 pidr = GIC_REG_32(GICD_PIDR2V2); - CHAR *irqVerString = NULL; - - switch (pidr >> GIC_REV_OFFSET) { - case GICV1: - irqVerString = "GICv1"; - break; - case GICV2: - irqVerString = "GICv2"; - break; - default: - irqVerString = "unknown"; - } - return irqVerString; -} - -#endif +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gic_common.h" +#include "los_hwi_pri.h" +#include "los_mp.h" + +STATIC_ASSERT(OS_USER_HWI_MAX <= 1020, "hwi max is too large!"); + +#ifdef LOSCFG_PLATFORM_BSP_GIC_V2 + +STATIC UINT32 g_curIrqNum = 0; + +#if (LOSCFG_KERNEL_SMP == YES) +/* + * filter description + * 0b00: forward to the cpu interfaces specified in cpu_mask + * 0b01: forward to all cpu interfaces + * 0b10: forward only to the cpu interface that request the irq + */ +STATIC VOID GicWriteSgi(UINT32 vector, UINT32 cpuMask, UINT32 filter) +{ + UINT32 val = ((filter & 0x3) << 24) | ((cpuMask & 0xFF) << 16) | + (vector & 0xF); + + GIC_REG_32(GICD_SGIR) = val; +} + +VOID HalIrqSendIpi(UINT32 target, UINT32 ipi) +{ + GicWriteSgi(ipi, target, 0); +} + +VOID HalIrqSetAffinity(UINT32 vector, UINT32 cpuMask) +{ + UINT32 offset = vector / 4; + UINT32 index = vector & 0x3; + + GIC_REG_8(GICD_ITARGETSR(offset) + index) = cpuMask; +} +#endif + +UINT32 HalCurIrqGet(VOID) +{ + return g_curIrqNum; +} +//屏蔽中断 +VOID HalIrqMask(UINT32 vector) +{ + if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { + return; + } + + GIC_REG_32(GICD_ICENABLER(vector / 32)) = 1U << (vector % 32); +} +//解除屏蔽 +VOID HalIrqUnmask(UINT32 vector) +{ + if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { + return; + } + + GIC_REG_32(GICD_ISENABLER(vector >> 5)) = 1U << (vector % 32); +} + +VOID HalIrqPending(UINT32 vector) +{ + if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { + return; + } + + GIC_REG_32(GICD_ISPENDR(vector >> 5)) = 1U << (vector % 32); +} +//清除中断号对应的中断寄存器的状态位,此接口依赖中断控制器版本,非必需 +VOID HalIrqClear(UINT32 vector) +{ + GIC_REG_32(GICC_EOIR) = vector; +} +//给每个CPU core初始化硬件中断 +VOID HalIrqInitPercpu(VOID) +{ + /* unmask interrupts */ //取消屏蔽中断 + GIC_REG_32(GICC_PMR) = 0xFF; + + /* enable gic cpu interface */ //启用gic cpu接口 + GIC_REG_32(GICC_CTLR) = 1; +} +//硬件中断初始化 +VOID HalIrqInit(VOID) +{ + UINT32 i; + + /* set externel interrupts to be level triggered, active low. */ //将外部中断设置为电平触发,低电平激活 + for (i = 32; i < OS_HWI_MAX_NUM; i += 16) { + GIC_REG_32(GICD_ICFGR(i / 16)) = 0; + } + + /* set externel interrupts to CPU 0 */ //将外部中断设置为CPU 0 + for (i = 32; i < OS_HWI_MAX_NUM; i += 4) { + GIC_REG_32(GICD_ITARGETSR(i / 4)) = 0x01010101; + } + + /* set priority on all interrupts */ //设置所有中断的优先级 + for (i = 0; i < OS_HWI_MAX_NUM; i += 4) { + GIC_REG_32(GICD_IPRIORITYR(i / 4)) = GICD_INT_DEF_PRI_X4; + } + + /* disable all interrupts. */ //禁用所有中断。 + for (i = 0; i < OS_HWI_MAX_NUM; i += 32) { + GIC_REG_32(GICD_ICENABLER(i / 32)) = ~0; + } + + HalIrqInitPercpu(); + + /* enable gic distributor control */ + GIC_REG_32(GICD_CTLR) = 1; + +#if (LOSCFG_KERNEL_SMP == YES) + /* register inter-processor interrupt *///注册寄存器处理器间中断处理函数,啥意思?就是当前CPU核向其他CPU核发送中断信号 + //处理器间中断允许一个CPU向系统其他的CPU发送中断信号,处理器间中断(IPI)不是通过IRQ线传输的,而是作为信号直接放在连接所有CPU本地APIC的总线上。 + LOS_HwiCreate(LOS_MP_IPI_WAKEUP, 0xa0, 0, OsMpWakeHandler, 0);//中断处理函数 + LOS_HwiCreate(LOS_MP_IPI_SCHEDULE, 0xa0, 0, OsMpScheduleHandler, 0);//中断处理函数 + LOS_HwiCreate(LOS_MP_IPI_HALT, 0xa0, 0, OsMpScheduleHandler, 0);//中断处理函数 +#endif +} +//硬中断处理函数,这里由硬件触发,调用见于 ..\arch\arm\arm\src\los_dispatch.S +VOID HalIrqHandler(VOID) +{ + UINT32 iar = GIC_REG_32(GICC_IAR); + UINT32 vector = iar & 0x3FFU; + + /* + * invalid irq number, mainly the spurious interrupts 0x3ff, + * gicv2 valid irq ranges from 0~1019, we use OS_HWI_MAX_NUM + * to do the checking. + */ + if (vector >= OS_HWI_MAX_NUM) { + return; + } + g_curIrqNum = vector; + + OsInterrupt(vector); + + /* use orignal iar to do the EOI */ + GIC_REG_32(GICC_EOIR) = iar; +} +//获取中断控制器版本 +CHAR *HalIrqVersion(VOID) +{ + UINT32 pidr = GIC_REG_32(GICD_PIDR2V2); + CHAR *irqVerString = NULL; + + switch (pidr >> GIC_REV_OFFSET) { + case GICV1: + irqVerString = "GICv1"; + break; + case GICV2: + irqVerString = "GICv2"; + break; + default: + irqVerString = "unknown"; + } + return irqVerString; +} + +#endif diff --git a/platform/hw/arm/interrupt/gic/gic_v3.c b/platform/hw/arm/interrupt/gic/gic_v3.c index ed1ff1eb..36a34d92 100644 --- a/platform/hw/arm/interrupt/gic/gic_v3.c +++ b/platform/hw/arm/interrupt/gic/gic_v3.c @@ -1,447 +1,488 @@ -/* - * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. - * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "gic_common.h" -#include "gic_v3.h" -#include "los_typedef.h" -#include "los_hwi_pri.h" -#include "los_mp.h" - -#ifdef LOSCFG_PLATFORM_BSP_GIC_V3 - -STATIC UINT32 g_curIrqNum = 0; - -STATIC INLINE UINT64 MpidrToAffinity(UINT64 mpidr) -{ - return ((MPIDR_AFF_LEVEL(mpidr, 3) << 32) | - (MPIDR_AFF_LEVEL(mpidr, 2) << 16) | - (MPIDR_AFF_LEVEL(mpidr, 1) << 8) | - (MPIDR_AFF_LEVEL(mpidr, 0))); -} - -#if (LOSCFG_KERNEL_SMP == YES) - -STATIC UINT32 NextCpu(UINT32 cpu, UINT32 cpuMask) -{ - UINT32 next = cpu + 1; - - while (next < LOSCFG_KERNEL_CORE_NUM) { - if (cpuMask & (1U << next)) { - goto OUT; - } - - next++; - } - -OUT: - return next; -} - -STATIC UINT16 GicTargetList(UINT32 *base, UINT32 cpuMask, UINT64 cluster) -{ - UINT32 nextCpu; - UINT16 tList = 0; - UINT32 cpu = *base; - UINT64 mpidr = CPU_MAP_GET(cpu); - while (cpu < LOSCFG_KERNEL_CORE_NUM) { - tList |= 1U << (mpidr & 0xf); - - nextCpu = NextCpu(cpu, cpuMask); - if (nextCpu >= LOSCFG_KERNEL_CORE_NUM) { - goto out; - } - - cpu = nextCpu; - mpidr = CPU_MAP_GET(cpu); - if (cluster != (mpidr & ~0xffUL)) { - cpu--; - goto out; - } - } - -out: - *base = cpu; - return tList; -} - -STATIC VOID GicSgi(UINT32 irq, UINT32 cpuMask) -{ - UINT16 tList; - UINT32 cpu = 0; - UINT64 val, cluster; - - while (cpuMask && (cpu < LOSCFG_KERNEL_CORE_NUM)) { - if (cpuMask & (1U << cpu)) { - cluster = CPU_MAP_GET(cpu) & ~0xffUL; - - tList = GicTargetList(&cpu, cpuMask, cluster); - - /* Generates a Group 1 interrupt for the current security state */ - val = ((MPIDR_AFF_LEVEL(cluster, 3) << 48) | - (MPIDR_AFF_LEVEL(cluster, 2) << 32) | - (MPIDR_AFF_LEVEL(cluster, 1) << 16) | - (irq << 24) | tList); - - GiccSetSgi1r(val); - } - - cpu++; - } -} - -VOID HalIrqSendIpi(UINT32 target, UINT32 ipi) -{ - GicSgi(ipi, target); -} - -VOID HalIrqSetAffinity(UINT32 irq, UINT32 cpuMask) -{ - UINT64 affinity = MpidrToAffinity(NextCpu(0, cpuMask)); - - /* When ARE is on, use router */ - GIC_REG_64(GICD_IROUTER(irq)) = affinity; -} - -#endif - -STATIC VOID GicWaitForRwp(UINT64 reg) -{ - INT32 count = 1000000; /* 1s */ - - while (GIC_REG_32(reg) & GICD_CTLR_RWP) { - count -= 1; - if (!count) { - PRINTK("gic_v3: rwp timeout 0x%x\n", GIC_REG_32(reg)); - return; - } - } -} - -STATIC INLINE VOID GicdSetGroup(UINT32 irq) -{ - /* configure spi as group 0 on secure mode and group 1 on unsecure mode */ -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - GIC_REG_32(GICD_IGROUPR(irq / 32)) = 0; -#else - GIC_REG_32(GICD_IGROUPR(irq / 32)) = 0xffffffff; -#endif -} - -STATIC INLINE VOID GicrSetWaker(UINT32 cpu) -{ - GIC_REG_32(GICR_WAKER(cpu)) &= ~GICR_WAKER_PROCESSORSLEEP; - DSB; - ISB; - while ((GIC_REG_32(GICR_WAKER(cpu)) & 0x4) == GICR_WAKER_CHILDRENASLEEP); -} - -STATIC INLINE VOID GicrSetGroup(UINT32 cpu) -{ - /* configure sgi/ppi as group 0 on secure mode and group 1 on unsecure mode */ -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - GIC_REG_32(GICR_IGROUPR0(cpu)) = 0; - GIC_REG_32(GICR_IGRPMOD0(cpu)) = 0; -#else - GIC_REG_32(GICR_IGROUPR0(cpu)) = 0xffffffff; -#endif -} - -STATIC VOID GicdSetPmr(UINT32 irq, UINT8 priority) -{ - UINT32 pos = irq >> 2; /* one irq have the 8-bit interrupt priority field */ - UINT32 newPri = GIC_REG_32(GICD_IPRIORITYR(pos)); - - /* Shift and mask the correct bits for the priority */ - newPri &= ~(GIC_PRIORITY_MASK << ((irq % 4) * GIC_PRIORITY_OFFSET)); - newPri |= priority << ((irq % 4) * GIC_PRIORITY_OFFSET); - - GIC_REG_32(GICD_IPRIORITYR(pos)) = newPri; -} - -STATIC VOID GicrSetPmr(UINT32 irq, UINT8 priority) -{ - UINT32 cpu = ArchCurrCpuid(); - UINT32 pos = irq >> 2; /* one irq have the 8-bit interrupt priority field */ - UINT32 newPri = GIC_REG_32(GICR_IPRIORITYR0(cpu) + pos * 4); - - /* Clear priority offset bits and set new priority */ - newPri &= ~(GIC_PRIORITY_MASK << ((irq % 4) * GIC_PRIORITY_OFFSET)); - newPri |= priority << ((irq % 4) * GIC_PRIORITY_OFFSET); - - GIC_REG_32(GICR_IPRIORITYR0(cpu) + pos * 4) = newPri; -} - -STATIC VOID GiccInitPercpu(VOID) -{ - /* enable system register interface */ - UINT32 sre = GiccGetSre(); - if (!(sre & 0x1)) { - GiccSetSre(sre | 0x1); - - /* - * Need to check that the SRE bit has actually been set. If - * not, it means that SRE is disabled at up EL level. We're going to - * die painfully, and there is nothing we can do about it. - */ - sre = GiccGetSre(); - LOS_ASSERT(sre & 0x1); - } - -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - /* Enable group 0 and disable grp1ns grp1s interrupts */ - GiccSetIgrpen0(1); - GiccSetIgrpen1(0); - - /* - * For priority grouping. - * The value of this field control show the 8-bit interrupt priority field - * is split into a group priority field, that determines interrupt preemption, - * and a subpriority field. - */ - GiccSetBpr0(MAX_BINARY_POINT_VALUE); -#else - /* enable group 1 interrupts */ - GiccSetIgrpen1(1); -#endif - - /* set priority threshold to max */ - GiccSetPmr(0xff); - - /* EOI deactivates interrupt too (mode 0) */ - GiccSetCtlr(0); -} - -UINT32 HalCurIrqGet(VOID) -{ - return g_curIrqNum; -} -//屏蔽所有CPU的硬件中断 -VOID HalIrqMask(UINT32 vector) -{ - INT32 i; - const UINT32 mask = 1U << (vector % 32);//通过参数获取掩码 - - if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { - return; - } - - if (vector < 32) { - for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {// - GIC_REG_32(GICR_ICENABLER0(i)) = mask; - GicWaitForRwp(GICR_CTLR(i)); - } - } else { - GIC_REG_32(GICD_ICENABLER(vector >> 5)) = mask; - GicWaitForRwp(GICD_CTLR); - } -} -//取消屏蔽硬件中断 -VOID HalIrqUnmask(UINT32 vector) -{ - INT32 i; - const UINT32 mask = 1U << (vector % 32); - - if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { - return; - } - - if (vector < 32) { - for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) { - GIC_REG_32(GICR_ISENABLER0(i)) = mask; - GicWaitForRwp(GICR_CTLR(i)); - } - } else { - GIC_REG_32(GICD_ISENABLER(vector >> 5)) = mask; - GicWaitForRwp(GICD_CTLR); - } -} - -VOID HalIrqPending(UINT32 vector) -{ - if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { - return; - } - - GIC_REG_32(GICD_ISPENDR(vector >> 5)) = 1U << (vector % 32); -} - -VOID HalIrqClear(UINT32 vector) -{ - GiccSetEoir(vector); - ISB; -} - -UINT32 HalIrqSetPrio(UINT32 vector, UINT8 priority) -{ - UINT8 prio = priority; - - if (vector > OS_HWI_MAX_NUM) { - PRINT_ERR("Invalid irq value %u, max irq is %u\n", vector, OS_HWI_MAX_NUM); - return LOS_NOK; - } - - prio = prio & (UINT8)GIC_INTR_PRIO_MASK; - - if (vector >= GIC_MIN_SPI_NUM) { - GicdSetPmr(vector, prio); - } else { - GicrSetPmr(vector, prio); - } - - return LOS_OK; -} - -VOID HalIrqInitPercpu(VOID) -{ - INT32 idx; - UINT32 cpu = ArchCurrCpuid(); - - /* GICR init */ - GicrSetWaker(cpu); - GicrSetGroup(cpu); - GicWaitForRwp(GICR_CTLR(cpu)); - - /* GICR: clear and mask sgi/ppi */ - GIC_REG_32(GICR_ICENABLER0(cpu)) = 0xffffffff; - GIC_REG_32(GICR_ICPENDR0(cpu)) = 0xffffffff; - - GIC_REG_32(GICR_ISENABLER0(cpu)) = 0xffffffff; - - for (idx = 0; idx < GIC_MIN_SPI_NUM; idx += 1) { - GicrSetPmr(idx, MIN_INTERRUPT_PRIORITY); - } - - GicWaitForRwp(GICR_CTLR(cpu)); - - /* GICC init */ - GiccInitPercpu(); - -#ifdef LOSCFG_KERNEL_SMP - /* unmask ipi interrupts */ - HalIrqUnmask(LOS_MP_IPI_WAKEUP); - HalIrqUnmask(LOS_MP_IPI_HALT); -#endif -} - -VOID HalIrqInit(VOID) -{ - UINT32 i; - UINT64 affinity; - - /* disable distributor */ - GIC_REG_32(GICD_CTLR) = 0; - GicWaitForRwp(GICD_CTLR); - ISB; - - /* set externel interrupts to be level triggered, active low. */ - for (i = 32; i < OS_HWI_MAX_NUM; i += 16) { - GIC_REG_32(GICD_ICFGR(i / 16)) = 0; - } - - /* config distributer, mask and clear all spis, set group x */ - for (i = 32; i < OS_HWI_MAX_NUM; i += 32) { - GIC_REG_32(GICD_ICENABLER(i / 32)) = 0xffffffff; - GIC_REG_32(GICD_ICPENDR(i / 32)) = 0xffffffff; - GIC_REG_32(GICD_IGRPMODR(i / 32)) = 0; - - GicdSetGroup(i); - } - - /* set spi priority as default */ - for (i = 32; i < OS_HWI_MAX_NUM; i++) { - GicdSetPmr(i, MIN_INTERRUPT_PRIORITY); - } - - GicWaitForRwp(GICD_CTLR); - - /* disable all interrupts. */ - for (i = 0; i < OS_HWI_MAX_NUM; i += 32) { - GIC_REG_32(GICD_ICENABLER(i / 32)) = 0xffffffff; - } - - /* enable distributor with ARE, group 1 enabled */ - GIC_REG_32(GICD_CTLR) = CTLR_ENALBE_G0 | CTLR_ENABLE_G1NS | CTLR_ARE_S; - - /* set spi to boot cpu only. ARE must be enabled */ - affinity = MpidrToAffinity(AARCH64_SYSREG_READ(mpidr_el1)); - for (i = 32; i < OS_HWI_MAX_NUM; i++) { - GIC_REG_64(GICD_IROUTER(i)) = affinity; - } - - HalIrqInitPercpu(); - -#if (LOSCFG_KERNEL_SMP == YES) - /* register inter-processor interrupt *///注册寄存器处理器间中断处理函数,啥意思?就是当前CPU核向其他CPU核发送中断信号 - //处理器间中断允许一个CPU向系统其他的CPU发送中断信号,处理器间中断(IPI)不是通过IRQ线传输的,而是作为信号直接放在连接所有CPU本地APIC的总线上。 - LOS_HwiCreate(LOS_MP_IPI_WAKEUP, 0xa0, 0, OsMpWakeHandler, 0); //唤醒处理函数 - LOS_HwiCreate(LOS_MP_IPI_SCHEDULE, 0xa0, 0, OsMpScheduleHandler, 0);//调度处理函数 - LOS_HwiCreate(LOS_MP_IPI_HALT, 0xa0, 0, OsMpScheduleHandler, 0); //暂停处理函数 -#endif -} - -VOID HalIrqHandler(VOID) -{ - UINT32 iar = GiccGetIar(); - UINT32 vector = iar & 0x3FFU; - - /* - * invalid irq number, mainly the spurious interrupts 0x3ff, - * valid irq ranges from 0~1019, we use OS_HWI_MAX_NUM to do - * the checking. - */ - if (vector >= OS_HWI_MAX_NUM) { - return; - } - g_curIrqNum = vector; - - OsInterrupt(vector); - GiccSetEoir(vector); -} - -CHAR *HalIrqVersion(VOID) -{ - UINT32 pidr = GIC_REG_32(GICD_PIDR2V3); - CHAR *irqVerString = NULL; - - switch (pidr >> GIC_REV_OFFSET) { - case GICV3: - irqVerString = "GICv3"; - break; - case GICV4: - irqVerString = "GICv4"; - break; - default: - irqVerString = "unknown"; - } - return irqVerString; -} - -#endif +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gic_common.h" +#include "gic_v3.h" +#include "los_typedef.h" +#include "los_hwi_pri.h" +#include "los_mp.h" +/****************************************************************************** +GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为: + 接受硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。 + +SPI (Shared Peripheral Interrupt) + 公用的外部设备中断,也定义为共享中断。可以多个Cpu或者说Core处理,不限定特定的Cpu。 + 比如按键触发一个中断,手机触摸屏触发的中断。 +PPI (Private Peripheral Interrupt) + 私有外设中断。这是每个核心私有的中断。PPI会送达到指定的CPU上,应用场景有CPU本地时钟。 +SGI (Software Generated Interrupt) + 软件触发的中断。软件可以通过写GICD_SGIR寄存器来触发一个中断事件,一般用于核间通信。 +LPI (Locality-specific Peripheral Interrupt) + LPI是GICv3中的新特性,它们在很多方面与其他类型的中断不同。LPI始终是基于消息的中断, + 它们的配置保存在表中而不是寄存器。比如PCIe的MSI/MSI-x中断。 + + 硬件中断号 中断类型 + 0-15 SGI + 16 - 31 PPI + 32 - 1019 SPI + 1020 - 1023 用于指示特殊情况的特殊中断 + 1024 - 8191 Reservd + 8192 - MAX LPI + +GICv3控制器由以下部分组成: + distributor: SPI中断的管理,将中断发送给redistributor + redistributor: PPI,SGI,LPI中断的管理,将中断发送给cpu interface + cpu interface: 传输中断给core + ITS: Interrupt Translation Service, 用来解析LPI中断 + 其中,cpu interface是实现在core内部的,distributor,redistributor,ITS是实现在gic内部的. + +四种中断状态 + Inactive 中断即没有Pending也没有Active + Pending 由于外设硬件产生了中断事件(或者软件触发)该中断事件已经通过 + 硬件信号通知到GIC,等待GIC分配的那个CPU进行处理 + Active CPU已经应答(acknowledge)了该interrupt请求,并且正在处理中 + Active and Pending 当一个中断源处于Active状态的时候,同一中断源又触发了中断, + 进入pending状态 + +参考 + https://blog.csdn.net/yhb1047818384/article/details/86708769 +******************************************************************************/ + +#ifdef LOSCFG_PLATFORM_BSP_GIC_V3 + +STATIC UINT32 g_curIrqNum = 0; + +STATIC INLINE UINT64 MpidrToAffinity(UINT64 mpidr) +{ + return ((MPIDR_AFF_LEVEL(mpidr, 3) << 32) | + (MPIDR_AFF_LEVEL(mpidr, 2) << 16) | + (MPIDR_AFF_LEVEL(mpidr, 1) << 8) | + (MPIDR_AFF_LEVEL(mpidr, 0))); +} + +#if (LOSCFG_KERNEL_SMP == YES) +//获取cpuMask中下一个CPU +STATIC UINT32 NextCpu(UINT32 cpu, UINT32 cpuMask) +{ + UINT32 next = cpu + 1; + + while (next < LOSCFG_KERNEL_CORE_NUM) { + if (cpuMask & (1U << next)) { + goto OUT; + } + + next++; + } + +OUT: + return next; +} + +STATIC UINT16 GicTargetList(UINT32 *base, UINT32 cpuMask, UINT64 cluster) +{ + UINT32 nextCpu; + UINT16 tList = 0; + UINT32 cpu = *base; + UINT64 mpidr = CPU_MAP_GET(cpu); + while (cpu < LOSCFG_KERNEL_CORE_NUM) { + tList |= 1U << (mpidr & 0xf); + + nextCpu = NextCpu(cpu, cpuMask); + if (nextCpu >= LOSCFG_KERNEL_CORE_NUM) { + goto out; + } + + cpu = nextCpu; + mpidr = CPU_MAP_GET(cpu); + if (cluster != (mpidr & ~0xffUL)) { + cpu--; + goto out; + } + } + +out: + *base = cpu; + return tList; +} +//软件触发的中断,软件可以通过写GICD_SGIR寄存器来触发一个中断事件,一般用于核间通信。 +STATIC VOID GicSgi(UINT32 irq, UINT32 cpuMask) +{ + UINT16 tList; + UINT32 cpu = 0; + UINT64 val, cluster; + + while (cpuMask && (cpu < LOSCFG_KERNEL_CORE_NUM)) { + if (cpuMask & (1U << cpu)) { + cluster = CPU_MAP_GET(cpu) & ~0xffUL; + + tList = GicTargetList(&cpu, cpuMask, cluster); + + /* Generates a Group 1 interrupt for the current security state */ + val = ((MPIDR_AFF_LEVEL(cluster, 3) << 48) | + (MPIDR_AFF_LEVEL(cluster, 2) << 32) | + (MPIDR_AFF_LEVEL(cluster, 1) << 16) | + (irq << 24) | tList); + + GiccSetSgi1r(val); + } + + cpu++; + } +} +//Inter-Processor Interrupts,IPI ,向目标CPU发送核间中断 +VOID HalIrqSendIpi(UINT32 target, UINT32 ipi) +{ + GicSgi(ipi, target); +} +//给指定中断号设置CPU亲和性 +VOID HalIrqSetAffinity(UINT32 irq, UINT32 cpuMask) +{ + UINT64 affinity = MpidrToAffinity(NextCpu(0, cpuMask)); + + /* When ARE is on, use router */ + GIC_REG_64(GICD_IROUTER(irq)) = affinity; +} + +#endif + +STATIC VOID GicWaitForRwp(UINT64 reg) +{ + INT32 count = 1000000; /* 1s */ + + while (GIC_REG_32(reg) & GICD_CTLR_RWP) { + count -= 1; + if (!count) { + PRINTK("gic_v3: rwp timeout 0x%x\n", GIC_REG_32(reg)); + return; + } + } +} + +STATIC INLINE VOID GicdSetGroup(UINT32 irq) +{ + /* configure spi as group 0 on secure mode and group 1 on unsecure mode */ +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + GIC_REG_32(GICD_IGROUPR(irq / 32)) = 0; +#else + GIC_REG_32(GICD_IGROUPR(irq / 32)) = 0xffffffff; +#endif +} + +STATIC INLINE VOID GicrSetWaker(UINT32 cpu) +{ + GIC_REG_32(GICR_WAKER(cpu)) &= ~GICR_WAKER_PROCESSORSLEEP; + DSB; + ISB; + while ((GIC_REG_32(GICR_WAKER(cpu)) & 0x4) == GICR_WAKER_CHILDRENASLEEP); +} + +STATIC INLINE VOID GicrSetGroup(UINT32 cpu) +{ + /* configure sgi/ppi as group 0 on secure mode and group 1 on unsecure mode */ +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + GIC_REG_32(GICR_IGROUPR0(cpu)) = 0; + GIC_REG_32(GICR_IGRPMOD0(cpu)) = 0; +#else + GIC_REG_32(GICR_IGROUPR0(cpu)) = 0xffffffff; +#endif +} + +STATIC VOID GicdSetPmr(UINT32 irq, UINT8 priority) +{ + UINT32 pos = irq >> 2; /* one irq have the 8-bit interrupt priority field */ + UINT32 newPri = GIC_REG_32(GICD_IPRIORITYR(pos)); + + /* Shift and mask the correct bits for the priority */ + newPri &= ~(GIC_PRIORITY_MASK << ((irq % 4) * GIC_PRIORITY_OFFSET)); + newPri |= priority << ((irq % 4) * GIC_PRIORITY_OFFSET); + + GIC_REG_32(GICD_IPRIORITYR(pos)) = newPri; +} + +STATIC VOID GicrSetPmr(UINT32 irq, UINT8 priority) +{ + UINT32 cpu = ArchCurrCpuid(); + UINT32 pos = irq >> 2; /* one irq have the 8-bit interrupt priority field */ + UINT32 newPri = GIC_REG_32(GICR_IPRIORITYR0(cpu) + pos * 4); + + /* Clear priority offset bits and set new priority */ + newPri &= ~(GIC_PRIORITY_MASK << ((irq % 4) * GIC_PRIORITY_OFFSET)); + newPri |= priority << ((irq % 4) * GIC_PRIORITY_OFFSET); + + GIC_REG_32(GICR_IPRIORITYR0(cpu) + pos * 4) = newPri; +} + +STATIC VOID GiccInitPercpu(VOID) +{ + /* enable system register interface */ + UINT32 sre = GiccGetSre(); + if (!(sre & 0x1)) { + GiccSetSre(sre | 0x1); + + /* + * Need to check that the SRE bit has actually been set. If + * not, it means that SRE is disabled at up EL level. We're going to + * die painfully, and there is nothing we can do about it. + */ + sre = GiccGetSre(); + LOS_ASSERT(sre & 0x1); + } + +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + /* Enable group 0 and disable grp1ns grp1s interrupts */ + GiccSetIgrpen0(1); + GiccSetIgrpen1(0); + + /* + * For priority grouping. + * The value of this field control show the 8-bit interrupt priority field + * is split into a group priority field, that determines interrupt preemption, + * and a subpriority field. + */ + GiccSetBpr0(MAX_BINARY_POINT_VALUE); +#else + /* enable group 1 interrupts */ + GiccSetIgrpen1(1); +#endif + + /* set priority threshold to max */ + GiccSetPmr(0xff); + + /* EOI deactivates interrupt too (mode 0) */ + GiccSetCtlr(0); +} + +UINT32 HalCurIrqGet(VOID) +{ + return g_curIrqNum; +} +//屏蔽所有CPU的硬件中断 +VOID HalIrqMask(UINT32 vector) +{ + INT32 i; + const UINT32 mask = 1U << (vector % 32);//通过参数获取掩码 + + if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { + return; + } + + if (vector < 32) { + for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {// + GIC_REG_32(GICR_ICENABLER0(i)) = mask; + GicWaitForRwp(GICR_CTLR(i)); + } + } else { + GIC_REG_32(GICD_ICENABLER(vector >> 5)) = mask; + GicWaitForRwp(GICD_CTLR); + } +} +//取消屏蔽指定硬件中断向量号,vector范围[0,127] +VOID HalIrqUnmask(UINT32 vector) +{ + INT32 i; + const UINT32 mask = 1U << (vector % 32); + + if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { + return; + } + + if (vector < 32) { + for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) { + GIC_REG_32(GICR_ISENABLER0(i)) = mask; + GicWaitForRwp(GICR_CTLR(i)); + } + } else { + GIC_REG_32(GICD_ISENABLER(vector >> 5)) = mask; + GicWaitForRwp(GICD_CTLR); + } +} + +VOID HalIrqPending(UINT32 vector) +{ + if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { + return; + } + + GIC_REG_32(GICD_ISPENDR(vector >> 5)) = 1U << (vector % 32); +} +//清除中断号对应的中断寄存器的状态位,此接口依赖中断控制器版本,非必需 +VOID HalIrqClear(UINT32 vector) +{ + GiccSetEoir(vector); + ISB; +} + +UINT32 HalIrqSetPrio(UINT32 vector, UINT8 priority) +{ + UINT8 prio = priority; + + if (vector > OS_HWI_MAX_NUM) { + PRINT_ERR("Invalid irq value %u, max irq is %u\n", vector, OS_HWI_MAX_NUM); + return LOS_NOK; + } + + prio = prio & (UINT8)GIC_INTR_PRIO_MASK; + + if (vector >= GIC_MIN_SPI_NUM) { + GicdSetPmr(vector, prio); + } else { + GicrSetPmr(vector, prio); + } + + return LOS_OK; +} +//当前CPU初始化硬中断 +VOID HalIrqInitPercpu(VOID) +{ + INT32 idx; + UINT32 cpu = ArchCurrCpuid(); + + /* GICR init */ + GicrSetWaker(cpu); + GicrSetGroup(cpu); + GicWaitForRwp(GICR_CTLR(cpu)); + + /* GICR: clear and mask sgi/ppi */ + GIC_REG_32(GICR_ICENABLER0(cpu)) = 0xffffffff; + GIC_REG_32(GICR_ICPENDR0(cpu)) = 0xffffffff; + + GIC_REG_32(GICR_ISENABLER0(cpu)) = 0xffffffff; + + for (idx = 0; idx < GIC_MIN_SPI_NUM; idx += 1) { + GicrSetPmr(idx, MIN_INTERRUPT_PRIORITY); + } + + GicWaitForRwp(GICR_CTLR(cpu)); + + /* GICC init */ + GiccInitPercpu(); + +#ifdef LOSCFG_KERNEL_SMP + /* unmask ipi interrupts */ + HalIrqUnmask(LOS_MP_IPI_WAKEUP); + HalIrqUnmask(LOS_MP_IPI_HALT); +#endif +} +//硬中断初始化 +VOID HalIrqInit(VOID) +{ + UINT32 i; + UINT64 affinity; + + /* disable distributor */ + GIC_REG_32(GICD_CTLR) = 0; //禁止仲裁寄存器工作 + GicWaitForRwp(GICD_CTLR); + ISB; + + /* set externel interrupts to be level triggered, active low. */ + for (i = 32; i < OS_HWI_MAX_NUM; i += 16) {//将外部中断设置为电平触发,低电平有效 + GIC_REG_32(GICD_ICFGR(i / 16)) = 0; + } + + /* config distributer, mask and clear all spis, set group x */ + for (i = 32; i < OS_HWI_MAX_NUM; i += 32) { + GIC_REG_32(GICD_ICENABLER(i / 32)) = 0xffffffff; + GIC_REG_32(GICD_ICPENDR(i / 32)) = 0xffffffff; + GIC_REG_32(GICD_IGRPMODR(i / 32)) = 0; + + GicdSetGroup(i); + } + + /* set spi priority as default */ + for (i = 32; i < OS_HWI_MAX_NUM; i++) { + GicdSetPmr(i, MIN_INTERRUPT_PRIORITY); + } + + GicWaitForRwp(GICD_CTLR); + + /* disable all interrupts. */ + for (i = 0; i < OS_HWI_MAX_NUM; i += 32) { + GIC_REG_32(GICD_ICENABLER(i / 32)) = 0xffffffff; + } + + /* enable distributor with ARE, group 1 enabled */ + GIC_REG_32(GICD_CTLR) = CTLR_ENALBE_G0 | CTLR_ENABLE_G1NS | CTLR_ARE_S; + + /* set spi to boot cpu only. ARE must be enabled */ + affinity = MpidrToAffinity(AARCH64_SYSREG_READ(mpidr_el1)); + for (i = 32; i < OS_HWI_MAX_NUM; i++) { + GIC_REG_64(GICD_IROUTER(i)) = affinity; + } + + HalIrqInitPercpu();//每个CPU初始化硬中断 + +#if (LOSCFG_KERNEL_SMP == YES) + /* register inter-processor interrupt *///注册寄存器处理器间中断处理函数,啥意思?就是当前CPU核向其他CPU核发送中断信号 + //处理器间中断允许一个CPU向系统其他的CPU发送中断信号,处理器间中断(IPI)不是通过IRQ线传输的,而是作为信号直接放在连接所有CPU本地APIC的总线上。 + LOS_HwiCreate(LOS_MP_IPI_WAKEUP, 0xa0, 0, OsMpWakeHandler, 0); //创建硬中断,用于唤醒处理函数 + LOS_HwiCreate(LOS_MP_IPI_SCHEDULE, 0xa0, 0, OsMpScheduleHandler, 0);//创建硬中断,用于调度处理函数 + LOS_HwiCreate(LOS_MP_IPI_HALT, 0xa0, 0, OsMpScheduleHandler, 0); //创建硬中断,用于暂停处理函数 +#endif +} +//硬中断处理函数,这里由硬件触发,调用见于 ..\arch\arm\arm\src\los_dispatch.S +VOID HalIrqHandler(VOID) +{ + UINT32 iar = GiccGetIar();//获取中断号 + UINT32 vector = iar & 0x3FFU; + + /* + * invalid irq number, mainly the spurious interrupts 0x3ff, + * valid irq ranges from 0~1019, we use OS_HWI_MAX_NUM to do + * the checking. + */ //无效的中断号,主要是伪中断0x3ff,有效的中断号在0~1019之间,使用OS_HWI_MAX_NUM来检查 + if (vector >= OS_HWI_MAX_NUM) {//[0,127] + return; + } + g_curIrqNum = vector;//记录当前中断号 + + OsInterrupt(vector); + GiccSetEoir(vector); +} +//获取中断控制器版本 +CHAR *HalIrqVersion(VOID) +{ + UINT32 pidr = GIC_REG_32(GICD_PIDR2V3); + CHAR *irqVerString = NULL; + + switch (pidr >> GIC_REV_OFFSET) { + case GICV3: + irqVerString = "GICv3"; + break; + case GICV4: + irqVerString = "GICv4"; + break; + default: + irqVerString = "unknown"; + } + return irqVerString; +} + +#endif diff --git a/platform/hw/arm/timer/arm_private/arm_private_timer.c b/platform/hw/arm/timer/arm_private/arm_private_timer.c index 7f7d80dd..47d4cf60 100644 --- a/platform/hw/arm/timer/arm_private/arm_private_timer.c +++ b/platform/hw/arm/timer/arm_private/arm_private_timer.c @@ -1,135 +1,135 @@ -/* - * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. - * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "asm/platform.h" -#include "los_hwi.h" -#include "los_tick_pri.h" - -#define OS_CYCLE_PER_TICK (TIMER_FREQ / LOSCFG_BASE_CORE_TICK_PER_SECOND) - -typedef struct { - UINT32 load; /* Private Timer Load Register */ - UINT32 count; /* Private Timer Counter Register */ - UINT32 control; /* Private Timer Control Register */ - UINT32 intStatus; /* Private Timer Interrupt Status Register */ -} PrivateTimer; - -typedef struct { - UINT32 low; /* Global Timer Counter Registers, low bits */ - UINT32 high; /* Global Timer Counter Registers, high bits */ - UINT32 control; /* Global Timer Control Register */ - UINT32 intStatus; /* Global Timer Interrupt Status Register */ - UINT32 compareLow; /* Comparator Value Registers, low bits */ - UINT32 compareHigh; /* Comparator Value Registers, high bits */ - UINT32 increment; /* Auto-increment Register */ -} GlobalTimer; - -PrivateTimer *g_privateTimer = (PrivateTimer *)PRVTIMER_BASE_ADDR; -GlobalTimer *g_globalTimer = (GlobalTimer *)GTIMER_BASE_ADDR; - -UINT32 HalClockFreqRead(VOID) -{ - return TIMER_FREQ; -} - -VOID HalClockFreqWrite(UINT32 freq) -{ - PRINT_WARN("private timer does not support setting frequency\n"); -} - -VOID HalClockStart(VOID) -{ - HalIrqUnmask(PRVTIMER_INT_NUM); - - g_privateTimer->load = OS_CYCLE_PER_TICK; - g_privateTimer->control = 0x06; /* IAE bits = 110, not eanbled yet */ - g_privateTimer->control |= 0x01; /* enable private timer */ -} - -VOID OsTickEntry(VOID) -{ - OsTickHandler(); - - /* clear private timer */ - g_privateTimer->intStatus = 0x01; -} -//硬件时钟初始化 -VOID HalClockInit(VOID) -{ - UINT32 ret; - //创建一个硬时钟 - ret = LOS_HwiCreate(PRVTIMER_INT_NUM, 0xa0, 0, OsTickEntry, NULL); - if (ret != LOS_OK) { - PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret); - } -} - -UINT64 HalClockGetCycles(VOID) -{ - UINT32 low, high; - - do { - high = g_globalTimer->high; - low = g_globalTimer->low; - } while (g_globalTimer->high != high); - - /* combine high and low into 8 bytes cycles */ - return (((UINT64)high << 32) | low); -} - -VOID HalDelayUs(UINT32 usecs) -{ - UINT64 tmo = LOS_CurrNanosec() + usecs * 1000; - - while (LOS_CurrNanosec() < tmo) { - __asm__ volatile ("nop"); - } -} - -UINT64 hi_sched_clock(VOID) -{ - return LOS_CurrNanosec(); -} - -UINT32 HalClockGetTickTimerCycles(VOID) -{ - return g_privateTimer->count; -} - -VOID HalClockTickTimerReload(UINT32 period) -{ - HalIrqUnmask(PRVTIMER_INT_NUM); - - /* set control counter regs to defaults */ - g_privateTimer->load = period; - g_privateTimer->control = 0x06; /* IAE bits = 110, not eanbled yet */ - g_privateTimer->control |= 0x01; /* reenable private timer */ -} +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "asm/platform.h" +#include "los_hwi.h" +#include "los_tick_pri.h" + +#define OS_CYCLE_PER_TICK (TIMER_FREQ / LOSCFG_BASE_CORE_TICK_PER_SECOND) + +typedef struct { + UINT32 load; /* Private Timer Load Register */ + UINT32 count; /* Private Timer Counter Register */ + UINT32 control; /* Private Timer Control Register */ + UINT32 intStatus; /* Private Timer Interrupt Status Register */ +} PrivateTimer; + +typedef struct { + UINT32 low; /* Global Timer Counter Registers, low bits */ + UINT32 high; /* Global Timer Counter Registers, high bits */ + UINT32 control; /* Global Timer Control Register */ + UINT32 intStatus; /* Global Timer Interrupt Status Register */ + UINT32 compareLow; /* Comparator Value Registers, low bits */ + UINT32 compareHigh; /* Comparator Value Registers, high bits */ + UINT32 increment; /* Auto-increment Register */ +} GlobalTimer; + +PrivateTimer *g_privateTimer = (PrivateTimer *)PRVTIMER_BASE_ADDR; +GlobalTimer *g_globalTimer = (GlobalTimer *)GTIMER_BASE_ADDR; + +UINT32 HalClockFreqRead(VOID) +{ + return TIMER_FREQ; +} + +VOID HalClockFreqWrite(UINT32 freq) +{ + PRINT_WARN("private timer does not support setting frequency\n"); +} + +VOID HalClockStart(VOID) +{ + HalIrqUnmask(PRVTIMER_INT_NUM);//取消屏蔽 PRVTIMER_INT_NUM 号中断 + + g_privateTimer->load = OS_CYCLE_PER_TICK; + g_privateTimer->control = 0x06; /* IAE bits = 110, not eanbled yet */ + g_privateTimer->control |= 0x01; /* enable private timer */ +} +//硬时钟回调函数 +VOID OsTickEntry(VOID) +{ + OsTickHandler(); + + /* clear private timer */ + g_privateTimer->intStatus = 0x01; +} +//硬时钟初始化 +VOID HalClockInit(VOID) +{ + UINT32 ret; + //创建一个硬中断 + ret = LOS_HwiCreate(PRVTIMER_INT_NUM, 0xa0, 0, OsTickEntry, NULL); + if (ret != LOS_OK) { + PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret); + } +} + +UINT64 HalClockGetCycles(VOID) +{ + UINT32 low, high; + + do { + high = g_globalTimer->high; + low = g_globalTimer->low; + } while (g_globalTimer->high != high); + + /* combine high and low into 8 bytes cycles */ + return (((UINT64)high << 32) | low); +} + +VOID HalDelayUs(UINT32 usecs) +{ + UINT64 tmo = LOS_CurrNanosec() + usecs * 1000; + + while (LOS_CurrNanosec() < tmo) { + __asm__ volatile ("nop"); + } +} + +UINT64 hi_sched_clock(VOID) +{ + return LOS_CurrNanosec(); +} + +UINT32 HalClockGetTickTimerCycles(VOID) +{ + return g_privateTimer->count; +} + +VOID HalClockTickTimerReload(UINT32 period) +{ + HalIrqUnmask(PRVTIMER_INT_NUM); + + /* set control counter regs to defaults */ + g_privateTimer->load = period; + g_privateTimer->control = 0x06; /* IAE bits = 110, not eanbled yet */ + g_privateTimer->control |= 0x01; /* reenable private timer */ +} diff --git a/platform/hw/include/gic_common.h b/platform/hw/include/gic_common.h index 84b8d656..2dee41aa 100644 --- a/platform/hw/include/gic_common.h +++ b/platform/hw/include/gic_common.h @@ -89,7 +89,7 @@ enum { #ifdef LOSCFG_PLATFORM_BSP_GIC_V3 #define GICD_IGRPMODR(n) (GICD_OFFSET + 0x0d00 + (n) * 4) /* Interrupt Group Mode Registers */ //中断组模式寄存器 -#define GICD_IROUTER(n) (GICD_OFFSET + 0x6000 + (n) * 8) /* Interrupt Rounter Registers */ //中断阻断寄存器 +#define GICD_IROUTER(n) (GICD_OFFSET + 0x6000 + (n) * 8) /* Interrupt Rounter Registers */ //中断路由寄存器,控制一个IRQ发到哪个CPU进行处理 #endif #define GIC_REG_8(reg) (*(volatile UINT8 *)((UINTPTR)(GIC_BASE_ADDR + (reg)))) @@ -104,7 +104,7 @@ enum { #define GIC_MIN_SPI_NUM 32 -/* Interrupt preemption config */ +/* Interrupt preemption config */ //中断抢占配置 #define GIC_PRIORITY_MASK 0xFFU #define GIC_PRIORITY_OFFSET 8 diff --git a/platform/hw/include/gic_v3.h b/platform/hw/include/gic_v3.h index 2781f51a..cdc5abf2 100644 --- a/platform/hw/include/gic_v3.h +++ b/platform/hw/include/gic_v3.h @@ -1,203 +1,203 @@ -/* - * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. - * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _GIC_V3_H_ -#define _GIC_V3_H_ - -#include "stdint.h" -#include "asm/platform.h" -#include "los_hw_cpu.h" - -#define BIT_32(bit) (1u << bit) -#define BIT_64(bit) (1ul << bit) - -#define ICC_CTLR_EL1 "S3_0_C12_C12_4" -#define ICC_PMR_EL1 "S3_0_C4_C6_0" -#define ICC_IAR1_EL1 "S3_0_C12_C12_0" -#define ICC_SRE_EL1 "S3_0_C12_C12_5" -#define ICC_BPR0_EL1 "S3_0_C12_C8_3" -#define ICC_BPR1_EL1 "S3_0_C12_C12_3" -#define ICC_IGRPEN0_EL1 "S3_0_C12_C12_6" -#define ICC_IGRPEN1_EL1 "S3_0_C12_C12_7" -#define ICC_EOIR1_EL1 "S3_0_C12_C12_1" -#define ICC_SGI1R_EL1 "S3_0_C12_C11_5" -#define ICC_EOIR0_EL1 "S3_0_c12_c8_1" -#define ICC_IAR0_EL1 "S3_0_C12_C8_0" - -#define ICC_CTLR_EL3 "S3_6_C12_C12_4" -#define ICC_SRE_EL3 "S3_6_C12_C12_5" -#define ICC_IGRPEN1_EL3 "S3_6_C12_C12_7" - -/* GICD_CTLR bit definitions */ -#define CTLR_ENALBE_G0 BIT_32(0) -#define CTLR_ENABLE_G1NS BIT_32(1) -#define CTLR_ENABLE_G1S BIT_32(2) -#define CTLR_RES0 BIT_32(3) -#define CTLR_ARE_S BIT_32(4) -#define CTLR_ARE_NS BIT_32(5) -#define CTLR_DS BIT_32(6) -#define CTLR_E1NWF BIT_32(7) -#define GICD_CTLR_RWP BIT_32(31) - -/* peripheral identification registers */ -#define GICD_CIDR0 (GICD_OFFSET + 0xfff0) -#define GICD_CIDR1 (GICD_OFFSET + 0xfff4) -#define GICD_CIDR2 (GICD_OFFSET + 0xfff8) -#define GICD_CIDR3 (GICD_OFFSET + 0xfffc) -#define GICD_PIDR0 (GICD_OFFSET + 0xffe0) -#define GICD_PIDR1 (GICD_OFFSET + 0xffe4) -#define GICD_PIDR2 (GICD_OFFSET + 0xffe8) -#define GICD_PIDR3 (GICD_OFFSET + 0xffec) - -/* GICD_PIDR bit definitions and masks */ -#define GICD_PIDR2_ARCHREV_SHIFT 4 -#define GICD_PIDR2_ARCHREV_MASK 0xf - -/* redistributor registers */ -#define GICR_SGI_OFFSET (GICR_OFFSET + 0x10000) - -#define GICR_CTLR(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0000) -#define GICR_IIDR(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0004) -#define GICR_TYPER(i, n) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0008 + (n)*4) -#define GICR_STATUSR(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0010) -#define GICR_WAKER(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0014) -#define GICR_IGROUPR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0080) -#define GICR_IGRPMOD0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0d00) -#define GICR_ISENABLER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0100) -#define GICR_ICENABLER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0180) -#define GICR_ISPENDR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0200) -#define GICR_ICPENDR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0280) -#define GICR_ISACTIVER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0300) -#define GICR_ICACTIVER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0380) -#define GICR_IPRIORITYR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0400) -#define GICR_ICFGR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0c00) -#define GICR_ICFGR1(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0c04) -#define GICR_NSACR(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0e00) - -#define GICR_WAKER_PROCESSORSLEEP_LEN 1U -#define GICR_WAKER_PROCESSORSLEEP_OFFSET 1 -#define GICR_WAKER_CHILDRENASLEEP_LEN 1U -#define GICR_WAKER_CHILDRENASLEEP_OFFSET 2 -#define GICR_WAKER_PROCESSORSLEEP (GICR_WAKER_PROCESSORSLEEP_LEN << GICR_WAKER_PROCESSORSLEEP_OFFSET) -#define GICR_WAKER_CHILDRENASLEEP (GICR_WAKER_CHILDRENASLEEP_LEN << GICR_WAKER_CHILDRENASLEEP_OFFSET) - -STATIC INLINE VOID GiccSetCtlr(UINT32 val) -{ -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - __asm__ volatile("msr " ICC_CTLR_EL3 ", %0" ::"r"(val)); -#else - __asm__ volatile("msr " ICC_CTLR_EL1 ", %0" ::"r"(val)); -#endif - ISB; -} - -STATIC INLINE VOID GiccSetPmr(UINT32 val) -{ - __asm__ volatile("msr " ICC_PMR_EL1 ", %0" ::"r"(val)); - ISB; - DSB; -} - -STATIC INLINE VOID GiccSetIgrpen0(UINT32 val) -{ - __asm__ volatile("msr " ICC_IGRPEN0_EL1 ", %0" ::"r"(val)); - ISB; -} - -STATIC INLINE VOID GiccSetIgrpen1(UINT32 val) -{ -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - __asm__ volatile("msr " ICC_IGRPEN1_EL3 ", %0" ::"r"(val)); -#else - __asm__ volatile("msr " ICC_IGRPEN1_EL1 ", %0" ::"r"(val)); -#endif - ISB; -} - -STATIC INLINE UINT32 GiccGetSre(VOID) -{ - UINT32 temp; -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - __asm__ volatile("mrs %0, " ICC_SRE_EL3 : "=r"(temp)); -#else - __asm__ volatile("mrs %0, " ICC_SRE_EL1 : "=r"(temp)); -#endif - return temp; -} - -STATIC INLINE VOID GiccSetSre(UINT32 val) -{ -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - __asm__ volatile("msr " ICC_SRE_EL3 ", %0" ::"r"(val)); -#else - __asm__ volatile("msr " ICC_SRE_EL1 ", %0" ::"r"(val)); -#endif - ISB; -} - -STATIC INLINE VOID GiccSetEoir(UINT32 val) -{ -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - __asm__ volatile("msr " ICC_EOIR0_EL1 ", %0" ::"r"(val)); -#else - __asm__ volatile("msr " ICC_EOIR1_EL1 ", %0" ::"r"(val)); -#endif - ISB; -} - -STATIC INLINE UINT32 GiccGetIar(VOID) -{ - UINT32 temp; - -#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE - __asm__ volatile("mrs %0, " ICC_IAR0_EL1 : "=r"(temp)); -#else - __asm__ volatile("mrs %0, " ICC_IAR1_EL1 : "=r"(temp)); -#endif - DSB; - - return temp; -} - -STATIC INLINE VOID GiccSetSgi1r(UINT64 val) -{ - __asm__ volatile("msr " ICC_SGI1R_EL1 ", %0" ::"r"(val)); - ISB; - DSB; -} - -STATIC INLINE VOID GiccSetBpr0(UINT32 val) -{ - __asm__ volatile("msr " ICC_BPR0_EL1 ", %0" ::"r"(val)); - ISB; - DSB; -} -#endif +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _GIC_V3_H_ +#define _GIC_V3_H_ + +#include "stdint.h" +#include "asm/platform.h" +#include "los_hw_cpu.h" + +#define BIT_32(bit) (1u << bit) +#define BIT_64(bit) (1ul << bit) + +#define ICC_CTLR_EL1 "S3_0_C12_C12_4" +#define ICC_PMR_EL1 "S3_0_C4_C6_0" +#define ICC_IAR1_EL1 "S3_0_C12_C12_0" +#define ICC_SRE_EL1 "S3_0_C12_C12_5" +#define ICC_BPR0_EL1 "S3_0_C12_C8_3" +#define ICC_BPR1_EL1 "S3_0_C12_C12_3" +#define ICC_IGRPEN0_EL1 "S3_0_C12_C12_6" +#define ICC_IGRPEN1_EL1 "S3_0_C12_C12_7" +#define ICC_EOIR1_EL1 "S3_0_C12_C12_1" +#define ICC_SGI1R_EL1 "S3_0_C12_C11_5" +#define ICC_EOIR0_EL1 "S3_0_c12_c8_1" +#define ICC_IAR0_EL1 "S3_0_C12_C8_0" + +#define ICC_CTLR_EL3 "S3_6_C12_C12_4" +#define ICC_SRE_EL3 "S3_6_C12_C12_5" +#define ICC_IGRPEN1_EL3 "S3_6_C12_C12_7" + +/* GICD_CTLR bit definitions */ +#define CTLR_ENALBE_G0 BIT_32(0) +#define CTLR_ENABLE_G1NS BIT_32(1) +#define CTLR_ENABLE_G1S BIT_32(2) +#define CTLR_RES0 BIT_32(3) +#define CTLR_ARE_S BIT_32(4) +#define CTLR_ARE_NS BIT_32(5) +#define CTLR_DS BIT_32(6) +#define CTLR_E1NWF BIT_32(7) +#define GICD_CTLR_RWP BIT_32(31) +//定义GICD: Generic Interrupt Controller Distributor +/* peripheral identification registers */ //外设身份寄存器 +#define GICD_CIDR0 (GICD_OFFSET + 0xfff0) +#define GICD_CIDR1 (GICD_OFFSET + 0xfff4) +#define GICD_CIDR2 (GICD_OFFSET + 0xfff8) +#define GICD_CIDR3 (GICD_OFFSET + 0xfffc) +#define GICD_PIDR0 (GICD_OFFSET + 0xffe0) +#define GICD_PIDR1 (GICD_OFFSET + 0xffe4) +#define GICD_PIDR2 (GICD_OFFSET + 0xffe8) +#define GICD_PIDR3 (GICD_OFFSET + 0xffec) + +/* GICD_PIDR bit definitions and masks */ +#define GICD_PIDR2_ARCHREV_SHIFT 4 +#define GICD_PIDR2_ARCHREV_MASK 0xf +//定义GICR: Generic Interrupt Controller Redistributor +/* redistributor registers */ //再分发寄存器组,每个CPU都对应一个Redistributor +#define GICR_SGI_OFFSET (GICR_OFFSET + 0x10000) + +#define GICR_CTLR(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0000) //对Distributor控制使能的寄存器 +#define GICR_IIDR(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0004) //获取SOC平台厂商提供的GIC的具体信息,现在一般提供信息是该GIC能够支持最多多少个IRQ硬件中断源 +#define GICR_TYPER(i, n) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0008 + (n)*4) +#define GICR_STATUSR(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0010) +#define GICR_WAKER(i) (GICR_OFFSET + GICR_STRIDE * (i) + 0x0014) //用于支持电源管理功能 +#define GICR_IGROUPR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0080) +#define GICR_IGRPMOD0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0d00) +#define GICR_ISENABLER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0100) +#define GICR_ICENABLER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0180) +#define GICR_ISPENDR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0200) +#define GICR_ICPENDR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0280) +#define GICR_ISACTIVER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0300) //记录某一个IRQ是否ACTIVE +#define GICR_ICACTIVER0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0380) +#define GICR_IPRIORITYR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0400) //记录对应IRQ的优先级别 +#define GICR_ICFGR0(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0c00) +#define GICR_ICFGR1(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0c04) +#define GICR_NSACR(i) (GICR_SGI_OFFSET + GICR_STRIDE * (i) + 0x0e00) + +#define GICR_WAKER_PROCESSORSLEEP_LEN 1U +#define GICR_WAKER_PROCESSORSLEEP_OFFSET 1 +#define GICR_WAKER_CHILDRENASLEEP_LEN 1U +#define GICR_WAKER_CHILDRENASLEEP_OFFSET 2 +#define GICR_WAKER_PROCESSORSLEEP (GICR_WAKER_PROCESSORSLEEP_LEN << GICR_WAKER_PROCESSORSLEEP_OFFSET) +#define GICR_WAKER_CHILDRENASLEEP (GICR_WAKER_CHILDRENASLEEP_LEN << GICR_WAKER_CHILDRENASLEEP_OFFSET) + +STATIC INLINE VOID GiccSetCtlr(UINT32 val) +{ +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + __asm__ volatile("msr " ICC_CTLR_EL3 ", %0" ::"r"(val)); +#else + __asm__ volatile("msr " ICC_CTLR_EL1 ", %0" ::"r"(val)); +#endif + ISB; +} + +STATIC INLINE VOID GiccSetPmr(UINT32 val) +{ + __asm__ volatile("msr " ICC_PMR_EL1 ", %0" ::"r"(val)); + ISB; + DSB; +} + +STATIC INLINE VOID GiccSetIgrpen0(UINT32 val) +{ + __asm__ volatile("msr " ICC_IGRPEN0_EL1 ", %0" ::"r"(val)); + ISB; +} + +STATIC INLINE VOID GiccSetIgrpen1(UINT32 val) +{ +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + __asm__ volatile("msr " ICC_IGRPEN1_EL3 ", %0" ::"r"(val)); +#else + __asm__ volatile("msr " ICC_IGRPEN1_EL1 ", %0" ::"r"(val)); +#endif + ISB; +} + +STATIC INLINE UINT32 GiccGetSre(VOID) +{ + UINT32 temp; +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + __asm__ volatile("mrs %0, " ICC_SRE_EL3 : "=r"(temp)); +#else + __asm__ volatile("mrs %0, " ICC_SRE_EL1 : "=r"(temp)); +#endif + return temp; +} + +STATIC INLINE VOID GiccSetSre(UINT32 val) +{ +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + __asm__ volatile("msr " ICC_SRE_EL3 ", %0" ::"r"(val)); +#else + __asm__ volatile("msr " ICC_SRE_EL1 ", %0" ::"r"(val)); +#endif + ISB; +} + +STATIC INLINE VOID GiccSetEoir(UINT32 val) +{ +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + __asm__ volatile("msr " ICC_EOIR0_EL1 ", %0" ::"r"(val)); +#else + __asm__ volatile("msr " ICC_EOIR1_EL1 ", %0" ::"r"(val)); +#endif + ISB; +} +//获取中断号 +STATIC INLINE UINT32 GiccGetIar(VOID) +{ + UINT32 temp; + +#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE + __asm__ volatile("mrs %0, " ICC_IAR0_EL1 : "=r"(temp)); +#else + __asm__ volatile("mrs %0, " ICC_IAR1_EL1 : "=r"(temp)); +#endif + DSB; + + return temp; +} + +STATIC INLINE VOID GiccSetSgi1r(UINT64 val) +{ + __asm__ volatile("msr " ICC_SGI1R_EL1 ", %0" ::"r"(val)); + ISB; + DSB; +} + +STATIC INLINE VOID GiccSetBpr0(UINT32 val) +{ + __asm__ volatile("msr " ICC_BPR0_EL1 ", %0" ::"r"(val)); + ISB; + DSB; +} +#endif diff --git a/zzz/git/push.sh b/zzz/git/push.sh index 6a2456da..6a113384 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m '1.主从CPU是如何初始化的 2.搞明白了变量前缀 uc:UINT8 us:UINT16 uw:UINT32 代表的意思 +git commit -m '中断是如何管理的? CPU之间又是如何通讯的? 搜索 @note_pic 方便理解画的字符图 搜索 @note_why 尚未看明白的地方,如果您看明白了,请告知完善 搜索 @note_thinking 一点思考和吐槽的地方 diff --git a/zzz/pic/turing/gic_v3.png b/zzz/pic/turing/gic_v3.png new file mode 100644 index 0000000000000000000000000000000000000000..fc09ae04c42803c7b687ae90857b6860423bb822 GIT binary patch literal 106229 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Ŭ=!yM;NE=J=%+%uxCEj^HYn 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�>V3%Tkoj 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%0D7S8s{ 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 PkZGnp33wU&W8wb*H5$qf literal 0 HcmV?d00001 diff --git "a/zzz/pic/turing/\344\270\255\346\226\255\350\267\257\347\224\261.png" "b/zzz/pic/turing/\344\270\255\346\226\255\350\267\257\347\224\261.png" new file mode 100644 index 0000000000000000000000000000000000000000..bc710a5c0a526f08542185dce5f133c7a369c3ae GIT binary patch literal 132415 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�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