PowerPC中断系统简介(一)

1. PowerPC中断系统简介

PowerPC处理器的中断系统由两部分组成,一是内核的中断及异常的处理;二是中断控制器。以P2020处理器为例,包括E500内核中断及异常处理系统和OpenPIC中断控制器。在E500内核中,包含两种可以暂时中止处理器运行当前指令的事件、中断和异常。其中,异常是由E500内核产生的,如出现非法指令,访问存储器时出现TLB Miss等情况;而中断通过处理器内核的外部引脚,如intcintmcp信号有效时产生的事件。

1.1      内核中断向量

中断向量是指中断或者异常程序的入口地址。基于603E内核的PowerPC处理器,中断向量为一个固定的物理地址。在这些处理器进入中断和异常处理程序时,MMU将会被自动关闭,因此603E内核可以使用固定的物理地址作为中断向量。而E500内核在进入中断和异常处理程序时,不能关闭MMU,因此不能使用物理地址作为中断向量,而应使用IVPRIVOR寄存器保存相应的中断向量。

E500内核中,使用IVPRIVORx寄存器共同确定中断或者异常程序的入口地址。其中,IVPR寄存器提供中断程序入口地址的第0~15位,IVORx提供中断程序入口地址的第16~27位,而中断程序的入口地址的第28~310IVORx与异常的对应关系如 1.1所示:

image.png

 

1.1 E500内核中断向量表

1.1      外部中断处理流程

E500内核的外部中断由三部分组成,分别为Machine Check异常、Critical Interrupt异常和External Input异常。在E500内核中,Machine Check异常采用边沿触发(edge-triggered),而Critical Interrupt异常和External Input异常使用电平触发(level-triggered)

PIC中,P2020处理器设置了一些寄存器位,将中断映射为电平或者边沿触发,但这些中断触发条件需要以电平的形式传递给E500内核。E500内核在进入中断和中断返回时都

要进行程序上下文的切换。频繁的中断将会极大影响处理器的效率。在E500内核中,一个完整的中断处理流程如下:

1.         E500内核捕捉到硬件中断信号cintint或者mcp

2.         E500内核在捕捉到硬件中断信号后,需要做一些必要的准备,之后才可以进入外部中断处理程序。这些准备带来了一些外部中断处理的延时,这些延时不可避免。首先E500内核清除在指令完成队列CQ中的所有指令,除了以下三种指令:

1)        CQ0中的对保护区域(Guarded)的读操作指令。

2)        对禁止Cache内存区域操作的指令。

3)        stwcx.指令。

这些指令执行完毕后,E500内核才可以进入中断模式。在清除CQ后,E500中断处理模块从相应的中断向量处预取指令到IQ中。这些中断的预处理过程,其主要目的是为中断处理程序准备一个“干净”的空间,保证中断处理程序与被中断程序之间不相互干扰。由此可见,E500内核进入中断处理程序之前,隐式地进行了指令同步操作。

3.         E500内核将中断程序的返回地址保存在SRR0中;将程序的MSR寄存器保存在SRR1中。对于一些特殊的异常,如DSIISITLB Miss等,E500内核还会自动保留E500内核的其他一些寄存器。

4.         E500内核将MSR寄存器的CEMEDE位保留,其他位全部清零。因此E500内核在进行外部中断处理程序时,仍然可以被Critical中断,Machine check中断和调试中断程序重入,但是不能被外部中断立即重入。在Linux PowerPC中,外部中断处理程序会选择合适时机使能MSR寄存器的EE位,以支持外部中断的重人。

5.         MSR中的PREEISDS位将被清除,因此E500内核在超级用户模式中,运行中断处理程序时,对程序空间和数据空间的访问都要在地址空间0上进行。

6.         E500内核将根据IVPRIVOR4寄存器确定中断向量,进行中断程序的执行。

7.         在中断处理程序执行完毕后,使用rfi指令进行中断返回。rfi指令将从SRR1寄存器中恢复MSR寄存器的值,并从SRR0寄存器中获得程序返回地址。rfi指令在进行程序正文切换之前还会进行指令和数据的同步,还给被中断的程序一个“干净”的空间,之后E500内核进行中断返回。

猜你喜欢

转载自my.oschina.net/u/3770369/blog/1625188