微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

aarch64 非安全组 1 中断未停用但作为组 0 中断,ISR 运行正常

如何解决aarch64 非安全组 1 中断未停用但作为组 0 中断,ISR 运行正常

我正在 qemu-system-aarch64 上测试一个简单的裸机程序。 我添加一个简单的外设来产生中断,当我启用外设和给它一个命令时它会产生中断。我分配了中断 ID 208。(SPI 196,208-32=196)。
当我将中断分配给组 0 时,它可以很好地处理这两个中断。 但是,当我将中断分配给非安全组 1 时,从第一个中断开始就无法停用。我只展示了下面两种设置的不同之处。

为了在 ISR 中获取中断 ID,在使用组 0 时,我使用 mrs x0,s3_0_c12_c8_0(ICC_IAR0_EL1,interrupt ack register for group 0)获取 ID,但在使用非安全组 1 时,我使用 mrs x0,s3_0_c12_c12_0(ICC_IAR1_EL1,ack for group 1)获取 INTID。这没问题,因为我在这两种情况下都获得了 ID 208。
为了将 IRQ 分配到一个组中,对于组 0 的情况,我将位 '0' 写入相应的 GICD_GROUPR 位,对于 NS-group1 的情况,我将位 '1' 写入 GICD_GROUPR 寄存器位。当然组0和组1都在ICC_IGRPEN1_EL3寄存器中启用。(裸机程序在EL3中运行)
问题是停用。这对 NS-group1 不起作用:对于组 0 测试,我将 INTID 值写入 ICC_EOIR0_EL1(中断结束)寄存器并将该值也写入 ICC_DIR_EL1(停用)寄存器。但是对于 NS-group1 的情况,我将 INTID 值写入 ICC_EOIR1_EL1 和 ICC_DIR_EL1。

我尝试了其他设置但找不到它,并且仍在尝试找到我遗漏的内容。如果有了解 aarch64 的人能给我一些建议,我将不胜感激。谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。