PolarFire SoC mpfs-mmuart-interrupt mss_entry.S 启动流程分析
启动文件:/mpfs-mmuart-interrupt/src/platform/mpfs_hal/startup_gcc/mss_entry.S
-
从reset_vector开始。
-
清除返回地址栈(.clear_ras)。
-
设置陷阱向量(trap_vector)。
-
禁用中断,初始化一些CSR寄存器。
-
根据hartid(核心ID)跳转到不同的栈初始化部分(.hart0, .hart1, ...)。
-
初始化栈和HLS(Hart Local Storage)。
-
如果是第一个hart(MPFS_HAL_FIRST_HART),则清除内存(DTIM、L2LIM等),配置L2缓存,清除scratchpad,初始化堆。
-
然后跳转到main_first_hart。
-
其他hart则进入等待循环(.LOtherHartstoWFI),等待第一个hart启动,然后通过WFI等待软件中断,最后跳转到main_other_hart。
我的思考:
1、上电复位,polarfire soc 5个核心,都会从 reset_vector 开始运行, 读取 自己的 hart id , 分别 跳到 e51(), u54_1(), u54_2(), u54_3(), u54_4() 运行;
2、我 在 u54_1 使用 汇编指令 修改了 MTVEC 寄存器, 使用 FreeRTOS 中断向量表, 并没有 修改 其他hart MTVEC , 因此 其他 hart 产生中断 ,还是会 跳到 mss_entry.S trap_vector 运行;
浙公网安备 33010602011771号