AM5728 中断映射

1. Interrupt Controllers(MPU_INTC)

The MPU_INTC module (also called Generalized Interrupt Controller [GIC]) is a single functional unit that is integrated in the ARM® Cortex-A15 multiprocessor core (MPCore) alongside Cortex-A15 processors.

Each Cortex-A15 processor supports three main groups of interrupt sources, with each interrupt source having a unique ID:
• Software Generated Interrupts (SGIs): SGIs are generated by writing to the Cortex-A15 Software Generated Interrupt Register (GICD_SGIR). A maximum of 16 SGIs (ID0–ID15) can be generated for each CPU interface. An SGI has edge-triggered properties. The software triggering of the interrupt is equivalent to the edge transition of the interrupt signal on a peripheral input.
• Private Peripheral Interrupts (PPIs): A PPI is an interrupt generated by a peripheral that is specific to a single processor. Although interrupts ID16–ID31 are dedicated to PPIs in general, only seven PPIs are actually used for each CPU interface (ID25–ID31). Interrupts ID16–ID24 are reserved (not used).
• Shared Peripheral Interrupts (SPIs): SPIs are triggered by events generated on associated interrupt input lines. In this device, the GIC is configured to support 160 SPIs corresponding to its external IRQS[159:0] signals. SPIs start at ID32 and their mapping is presented in Section 17.3.1.

因为MPU的外部中断是SPI中断,所以它的偏移基址为32:即外部IRQ0,对应MPU INTC的ID32。
在这里插入图片描述

2. Device Interrupts

所有的设备中断连接到IRQ_CROSSBAR的输入上面,具体哪个编号对应哪个设备中断,可以查下表:
在这里插入图片描述

3. IRQ_CROSSBAR Module

设备中有一个IRQ_CROSSBAR模块,由CTRL_MODULE_CORE子模块中的寄存器控制。IRQ_CROSSBAR能够将其任何输入信号映射到其任何输出。

  • Input:该模块与设备中断源相关联。所有设备模块的IRQ都连接到IRQ_CROSSBAR输入。每个模块IRQ仅连接到一个IRQ_CROSSBAR输入。
  • Output:IRQ_CROSSBAR模块的每个输出仅连接到某个中断控制器(INTC)的一个中断线(interrupt line)。

因此,设备IRQ通过IRQ_CROSSBAR映射到设备INTC。其中一些IRQ默认映射到其中一个设备INTC的某些中断线,但是有些IRQ默认不映射到任何设备INTC的任何中断线。

连接到IRQ_CROSSBAR输入的所有IRQ可以通过CTRL_CORE_X_IRQ_B_A寄存器重新映射到不同器件INTC的其他中断线。这些寄存器中的每一个都具有表18-14中描述的结构。
在这里插入图片描述
IRQ_CROSSBAR实现设备中断到个中断控制器INTC的映射的内部实现框图如下:
在这里插入图片描述
不是所有INTC的中断线(interrupt lines)都可以通过IRQ_CROSSBAR的寄存器来控制。这意味着这些中断线(interrupt lines)没有连接到IRQ_CROSSBAR的输出,因此只能有一个IRQ连接到这些中断线。常见情况下,这些线路由内部中断源使用,或者由具有INTC的相应模块专用。

下表列出了每个INTC的哪些中断线与IRQ_CROSSBAR控制寄存器相关联。其余的INTC中断线(未在表中列出)不能由IRQ_CROSSBAR寄存器控制。
在这里插入图片描述

4. pcie controller 中断

AM5728的每一个pcie控制器,响应4路传统中断和32路MSI中断:
在这里插入图片描述在这里插入图片描述
pcie控制器上所有设备的中断会汇成PCIe_SS1_IRQ_INT1/PCIe_SS2_IRQ_INT1中断上报给CPU:

首先查找pcie控制器中断对应的IRQ_CROSSBAR输入编号:

IRQ_CROSSBAR_232PCIe_SS1_IRQ_INT0PCIe_SS1 PCIe_SS1interrupt 0
IRQ_CROSSBAR_233PCIe_SS1_IRQ_INT1PCIe_SS1 PCIe_SS1interrupt 1
IRQ_CROSSBAR_355PCIe_SS2_IRQ_INT0PCIe_SS2 PCIe_SS2interrupt 0
IRQ_CROSSBAR_356PCIe_SS2_IRQ_INT1PCIe_SS2 PCIe_SS2interrupt 1

我们使用PCIe_SS1_IRQ_INT1对应IRQ_CROSSBAR的中断输入233,PCIe_SS2_IRQ_INT1对应IRQ_CROSSBAR的中断输入356。

我们把PCIe_SS1_IRQ_INT1配置成MPU的中断ID40,PCIe_SS2_IRQ_INT1配置成MPU的中断ID188。

因为MPU的外设中断编号是从32开始,所以MPU的中断ID40对应MPU_IRQ_8,MPU的中断ID188对应MPU_IRQ_156。

CTRL_CORE_MPU_IRQ_8_9RW320x0000 0A4C0x4A00 2A4C
CTRL_CORE_MPU_IRQ_156_157RW320x0000 0B700x4A00 2B70

我们在DTS中配置IRQ_CROSSBAR的映射关系如下:

        scm@4a002000     /* control module */
            {
            /* this device provide pads config */
            compatible = "ti,am5-pads";
            reg = <0x4a002000 0x2000>;
            #address-cells = <1>;
            #size-cells = <0>;

                pciess1_pads: pciess1pads
                    {
                    pin-set = <
                               0x0a4c 0x000400e9   /* map IRQ_CROSS_BAR_356(pcie_ss1_INT1) to MPU_IRQ_8(ID40) */
                               >;
                    };

                pciess2_pads: pciess2pads
                    {
                    pin-set = <
                               0x0b70 0x00000164   /* map IRQ_CROSS_BAR_356(pcie_ss2_INT1) to MPU_IRQ_156(ID188) */
                               >;
                    };

            }

5. pcie msi 中断

在pcie总线上挂载的设备,即可以使用传统的int_x中断也可以使用msi中断。关于msi的相关寄存器定义如下:

MSI有四种类型:
在这里插入图片描述
其中:

  • Capability ID的值是只读的,05h表示支持MSI功能。

  • Next Capability Pointer也是只读的,其用于查找下一个Capability Structure的位置,其值为00h则表示到达Linked List的最后了。

  • Message Control Register用于确定MSI的格式与支持的功能等信息,如下图所示:
    在这里插入图片描述

具体描述如下:
在这里插入图片描述

  • Message Address Register:32-bit最低两位固定为0,使得该地址是DW对齐的。

  • Mask bits/Pending bits: 当Mask Bits将相关的中断向量(Interrupt Vector)屏蔽后,该MSI将不会被发送。软件可以通过这种方式来使能或者禁止某些MSI的发送。如果相关中断向量没有被屏蔽,则如果发生了相关中断请求,这时Pending Bits中的相应bit则会被置位。一旦中断信息被发出,则该bit会立即被清零。

对MSI中断来说,最重要的还是Message AddressMessage Data的配置。

在AM5728中MSI的配置为:

Message Address = 0x0  
Message Data = 0 - 31

根据Message Data中配置的0-31产生对应PCIECTRL_PL_MSI_CTRL_INT_STATUS_N寄存器中的的0-31号MSI中断。

LOCAL int tiAm572xPcieIntAlloc
{

        pVxbDyncIntEntry[vec].vecAddr = 0;                  /* Message Address = 0x0  */
        pVxbDyncIntEntry[vec].vecVal = 
            pDrvCtrl->msiFreeInt[pDrvCtrl->msiFreeIndex];   /* Message Data = 0 - 31 */

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值