【ARM系列】GIC700跨die配置

参考文档:Arm® CoreLinkTM GIC-700 Generic Interrupt Controller Technical Reference Manual A.5 Setting multichip options

涉及的寄存器:GICD_CHIPSR、GICD_DCHIPR、GICD_CHIPR(n),详细寄存器描述:GIC700 Multichip operation

如下配置流程以Chip0为主die,连接其他Chip为例,讲解Multichip之间如何进行连接:

一、设置rt_owner

  1. 配置GICD_DCHIPR.rt_owner=0(DIE0对应的chip_id,设置Chip0为主die);
  2. 读GICD_DCHIP.PUP=0表示步骤1设置成功。

二、设置GICD_CHIPRx.ADDR

设置所有Chip的本地寄存器:GICD_CHIPRx.ADDR (读出GICD_CFGID.LCA==1,即需要对每个chip进行单独配置)
在这里插入图片描述
根据主DIE与其他各DIE的连接关系,此处描述为需要在芯片online之前,完成对所有需链接芯片的本地GICD_CHIPRx.ADDR的配置。其中此处配置的ADDR为其他各DIE的ccg NodeId对应的A4S logical id。
在这里插入图片描述

配置D1_GICD_CHIPR<0>.ADDR = 5  
配置D2_GICD_CHIPR<0>.ADDR =  75 
配置D3_GICD_CHIPR<0>.ADDR =  75 

配置D2_GICD_CHIPR<1>.ADDR = 82
配置D3_GICD_CHIPR<1>.ADDR = 82

配置D3_GICD_CHIPR<2>.ADDR = 5 

//如下配置ADDR的步骤需要在DIE0 online之前完成:

配置D1_GICD_CHIPR<2>.ADDR = 82 (对应其中一路ccg的icdrtdest)
配置D1_GICD_CHIPR<3>.ADDR = 75(对应其中一路ccg的icdrtdest)
配置D2_GICD_CHIPR<3>.ADDR = 2(对应其中一路ccg的icdrtdest)

三、Bringing Chip0 online

  1. 配置GICD_CHIPR<0>.SPI_BLOCK_MIN & SPI_BLOCKS,由于die0 spi INTID 范围32-511,得出SPI_BLOCK_MIN = 0和SPI_BLOCKS =15;
  2. 配置GICD_CHIPR<0>.SocketState=1 使chip 0上线,并读取以下位域表明chip 0上线成功,处于连接状态;
  3. 读取GICD_CHIPR<0>,校验上述写入操作是否成功;
  4. 读取以下寄存器,如果读取数据与此一致,说明芯片 x 现在处于Consistent状态并准备好接受与系统配置中其他芯片的连接。

Check Sequence :
在这里插入图片描述

四.Chip0连接Chip1/2/3

将与DIE0连接的各die配置起来,此时需要配置DIE0的寄存器,(步骤四、五、六都需要配置)

  • 配置GICD_CHIPR(1)
  1. 配置GICD_CHIPR<1>.ADDR = 2 (对应其中一路ccg的icdrtdest)
  2. 配置GICD_CHIPR<1>.SPI_BLOCK_MIN & SPI_BLOCKS
  3. 配置GICD_CHIPR<1>.SocketState=1 使DIE1上线
  4. 校验是否写入成功:
    ①.轮询GICD_DCHIPR.PUP=0,表示连接成功;
    ②.校验配置GICD_CHIPR<1>的值是否生效
  • 配置GICD_CHIPR(2)
  1. 配置GICD_CHIPR<2>.ADDR = 82 (对应其中一路ccg的icdrtdest)
  2. 配置GICD_CHIPR<2>.SPI_BLOCK_MIN & SPI_BLOCKS
  3. 配置GICD_CHIPR<2>.SocketState=1 使DIE2上线
  4. 校验是否写入成功:
    ①.轮询GICD_DCHIPR.PUP=0,表示连接成功;
    ②.校验配置GICD_CHIPR<2>的值是否生效
  • 配置GICD_CHIPR(3)
  1. 配置GICD_CHIPR<3>.ADDR = 75 (对应其中一路ccg的icdrtdest)
  2. 配置GICD_CHIPR<3>.SPI_BLOCK_MIN & SPI_BLOCKS
  3. 配置GICD_CHIPR<3>.SocketState=1 使DIE3上线
  4. 校验是否写入成功:
    ①.轮询GICD_DCHIPR.PUP=0,表示连接成功;
    ②.校验配置GICD_CHIPR<3>的值是否生效

五.Chip1连接Chip2/3

配置D1_GICD_CHIPR<2>

1. 配置D1_GICD_CHIPR<2>.ADDR = 82 (对应其中一路ccg的icdrtdest)
2. 配置D1_GICD_CHIPR<2>.SPI_BLOCK_MIN & SPI_BLOCKS
3. 配置D1_GICD_CHIPR<2>.SocketState=1 使DIE2上线
4. 校验是否写入成功:
①.轮询D1_GICD_DCHIPR.PUP=0,表示连接成功;
②.校验配置D1_GICD_CHIPR<2>的值是否生效

配置D1_GICD_CHIPR<3>
1. 配置D1_GICD_CHIPR<3>.ADDR = 75(对应其中一路ccg的icdrtdest)
2. 配置D1_GICD_CHIPR<3>.SPI_BLOCK_MIN & SPI_BLOCKS
3. 配置D1_GICD_CHIPR<3>.SocketState=1 使DIE3上线。
4. 校验是否写入成功:
①.轮询D1_GICD_DCHIPR.PUP=0,表示连接成功;
②.校验配置D1_GICD_CHIPR<3>的值是否生效

六.Chip2连接Chip3

配置D2_GICD_CHIPR<3>

1. 配置D2_GICD_CHIPR<3>.ADDR = 2(对应其中一路ccg的icdrtdest)
2. 配置D2_GICD_CHIPR<3>.SPI_BLOCK_MIN & SPI_BLOCKS
3. 配置D2_GICD_CHIPR<3>.SocketState=1 使DIE3上线
4. 校验是否写入成功:
①.轮询D2_GICD_DCHIPR.PUP=0,表示连接成功;
②.校验配置D2_GICD_CHIPR<3>的值是否生效

MultiChip连接方式

此处仅展示同一个socket内双die之间的连接方式和数据通路,以及双socket间不同die之间的连接方式和数据通路。

同一个socket内的两个die通信可以使用任一组D2D进行通信。
die间传输:数据流从主die CMN的CCG结点,转换成CXS接口信号,经过die2die将数据发到从die,从die经过die2die和ccg结点,将数据传输到cmn内部并做后续处理。

不同socket之间各die的通信:
不同类型的transaction通过CCG模块,经过CCIX链路转换成CXS接口所支持的flit数据包,flit数据包经过PCX16的CXS接口输入,在PCX16内部打包成TLP包,并经过链路层和物理层,发送到对端PCX16控制器。对端PCX16控制器完成解析,经过CCIX控制器后将数据包发到CCG结点,完成一次跨socket数据传输。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值