大家好,我正在做Cortex-A7上的一个project,因为一些原因,主要代码都是跑在svn_ns状态下的。在初始化GIC时遇到了一些问题:
原本我的GIC驱动是跑在svn_s状态下,全部中断都属于Group 0,一切都没问题。现在一些原因需要让它跑在svn_ns下,查阅资料后发现为了可以在non secure状态下enable一个中断,需要把这个中断设置成Group 1,否则各种对应这个中断的设置会被忽略掉,于是我把所有的中断通过secure monitor 都设置成了Group 1。至于Priority设置,由于所有的中断都是同一个priority的,所以也没变。GICD和GICC对Group 1的enable在non-secure状态下都变成了ctrl的bit 0,所以代码依然没变。然而,都设置好了之后中断依然进不来...关键的寄存器也都读出来核对了一下,也没发现什么问题。
恳请各位指点或者提供一些大家觉得我有可能忽略掉的点。多谢!
Hi Zizhu,
你能说下为什么要切换到NS World吗?通常情况下Monitor下是负责保存/恢复context,状态切换。GIC的寄存器有的是secure only,有的banked,如果使用Security Extension, 一般情况下GIC的是在Trusted OS下初始化。在你这case中,因为GICD_CTRL是banked的,在Normal World中也需要对GICD_CTRL进行enable.
希望对你有用
赞