GICv2禁用安全扩展后Group1配置时钟中断失效的疑问咨询
GICv2禁用安全扩展后Group1配置时钟中断失效的疑问咨询
大家好,我目前正在学习GIC相关的内容,最近在QEMU上调试自己写的GICv2初始化代码时遇到了一个困惑,想请教一下各位大佬。
我的QEMU启动命令是:qemu-system-aarch64 -machine virt,secure=off,gic-version=2 -cpu cortex-a53 -nographic -kernel kernel.elf
参考的文档是IHI0048B GIC架构规范,现在遇到的问题是:
当我禁用安全扩展(通过启动参数secure=off),并把中断组配置为Group1时,时钟中断完全无法触发;但如果我将中断组设置为Group0,时钟中断就能正常工作。
但根据IHI0048B GIC架构规范的描述,只有支持安全扩展的系统才能配置Group0,这就和我实际测试的结果矛盾了,我怀疑是不是自己对规范的理解有偏差?
下面是我写的GICv2初始化代码,以及相关的调试逻辑:
void gicv2_init() { int value; __asm__ volatile("ldr %w0, [%1]" : "=r"(value) : "r"(GICD_TYPER)); printf("Security Extensions: %d\n", SECURITY_SUPPORT(value)); int interrupts; interrupts = ((value & 0xF) + 1) * 32; if (interrupts > 1020) { interrupts = 1020; // 1020 ~ 1023 are reserved } printf("Max interrupt numbers: %d\n", interrupts); // Disable interrupt forwarding __asm__ volatile("str %w0, [%1]" : : "r"(0), "r"(GICD_CTLR) : "memory"); // Disable 0~31 interrupt, except permanently interrupt __asm__ volatile("str %w0, [%1]" : : "r"(0xffffffff), "r"(GICD_ICENABLERn) : "memory"); if (SECURITY_SUPPORT(value)) { // TODO: secure access or non-secure access configure } else { // set 0-31 interrupt Group1 __asm__ volatile("str %w0, [%1]" :: "r"(0xFFFFFFFFU), "r"(GICD_IGROUPRn) : "memory"); // clear 0~31 interrupt pending state __asm__ volatile("str %w0, [%1]" : : "r"(0xFFFFFFFFU), "r"(GICD_ICPENDRn) : "memory"); // clear 0~31 interrupt active state __asm__ volatile("str %w0, [%1]" : : "r"(0xFFFFFFFFU), "r"(GICD_ICACTIVERn) : "memory"); // Enable GICD Group0/1 __asm__ volatile("str %w0, [%1]" : : "r"(3), "r"(GICD_CTLR) : "memory"); // Enable GICC Group0/1 __asm__ volatile("ldr %w0, [%1]" : "=r"(value) : "r"(GICC_CTLR)); value |= (1 << 1 | 1 << 0); __asm__ volatile("str %w0, [%1]" :: "r"(value), "r"(GICC_CTLR) : "memory"); } __asm__ volatile("str %w0, [%1]" :: "r"(0xff), "r"(GICC_PMR) : "memory"); }
补充一下,代码里的SECURITY_SUPPORT宏是用来解析GICD_TYPER寄存器中的安全扩展支持位的,目前调试输出显示Security Extensions: 0,说明系统确实处于禁用安全扩展的状态。
有没有大佬能帮我分析一下,到底是我对规范的理解错了,还是代码里有什么没注意到的问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

