【ARM系列】GIC MultiChip中的SPI 操作

前言

在有多个chip或soc组成的multichip系统中,为了支持中断在多chip间的路由传输,需要将spi中断的空间进行划分,为每个chip或soc分配合适的spi中断范围。multichip operation的配置请参考系列的另一篇文章:GIC700 Multichip operation,本文只针对spi的操作事项进行说明,配置细节不再进行赘述。

操作说明

1.在完成multi operation后,各chip或soc之间的gic的连接关系和spi中断的划分就已经明确。可以在相连的chip或soc中选择任一个对spi进行编程,chip或soc之间的通信是通过各chip或soc之间的cross_chip interface进行的。

2.spi中断在各个chip或soc之间的路由可以通过配置GICD_IROUTERn寄存器实现,remote chip可以通过其中的Affinity2或Affinity3指定。可以通过GICD_CFGID.AFSL的值判断是选用哪个affinity level。

在这里插入图片描述

GICD_IROUTERn寄存器如图所示,通常情况:
Aff3用于指定哪个chip
Aff2用于指定哪个cluster
Aff1用于指定哪个core
Aff0用于指定哪个thread

3.可以通过配置GICD_SETSPI_NSR/GICD_SETSPI_SR或GICD_CLRSPI_NSR/GICD_CLRSPI_SR将spi中断挂起或清除。为了更高效的操作,建议在拥有该spi的chip或soc进行编程

4.SPI Collator wires连接在每个chip或soc的最低的SPI上。
举例:GICD_CHIPx.SPI_BLOCK_MIN = 4,那么该Chip x的SPI Collator所驱动的SPI INTID应该从160开始,(4 x 32) + 32 = 160。在一个相同的2-chip系统中,每一个chip或soc所驱动的spi wires不应该大于16 x (SPI blocks)。(没有太明白,为甚不是32?)

5.对 1-N 模式 SPI 中断的支持。有些GIC IP是不支持1-N模式的spi中断进行跨die的,需要查看IP feature进行确认。

特别说明

以GIC600为例,该IP共支持960个spi中断,在一个相同的2-chip系统中,假设通过CrossChip配置每个chip的spi都为480根,每个spi block包含32个spi中断,那么每个chip的spi block的数量都为15个,根据上面第4点的要求,每个chip通过spi collator所驱动的spi不能超过16x(15+15) = 480。那么此时就需要注意了,由于单个chip最大可以支持960个spi中断,在配置CrossChip后,每个chip最大只能支持480个,大于480的中断是无法进行处理的,因此在进行中断规划时要特别注意,需要将单个chip的中断合并在480个之内,防止中断无法处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值