【ARM系列】GIC700 LPI中断-its Table配置流程

its Table 包含设备表、中断翻译表和集合表。its Table的配置是通过core写ITS Command Queue来配置的,Command Queue存储在内存中。当core将命令写入Command Queue后,通过寄存器通知ITS,ITS从内存中依次读取命令,然后根据命令内容配置对应的ITS Table页表项。

一、硬件结构

Command Queue主要由两部分构成:寄存器内存
内存用于存储命令队列;寄存器用于记录命令队列所在的内存基地址,属性和对应的状态。

寄存器主要有三个:
1、GITS_CBASER
该寄存器中存放了CommandQueue的基地址、分配内存的访问属性(cacheable/shareable)、分配内存空间的大小(有多少4KB)
请添加图片描述

2、GITS_CREADR: 用来记录ITS执行的指令的地址相对于命令队列基地址的偏移
请添加图片描述

3、GITS_CWRITER: 用来记录软件写入指令的地址相对于命令队列基地址的偏移
请添加图片描述

内存部分:
系统规划了一段以GITS_CBASER.Physical_Address为基地址的连续4KB*size的空间用于存放its Command Queue,其中每个Entry为32 bytes(与its command一致),its Command Queue的存储结构如下所示:
请添加图片描述
ITS Command按照写入顺序排列在Command Queue内,ITS按照顺序从Command Queue内读取指令并执行。以GITS_CBASER.Physical_Address为基地址,GITS_CREADR标识ITS执行的指令位置。ITS Command Queue支持一边写入指令,一边执行指令。每当写入一条新指令时,GITS_CWRITER.Offset + 0x20;同理,每当ITS执行一条指令时,GITS_CREADR.Offset +0x20。

二、配置过程

ITS指令以32byte为一个entry,通过对[7:0]的不同编码,标识不同的指令,同时在其他位置上加上对应的参数,即构成一个完整的指令内容。本章以LPI配置流程中相关的MAPD,MAPTI,MAPC为例介绍命令结构和组成,其他指令以及详细介绍参考GICv3 SPEC上ITS Commands部分。

本例中分配地址空间如下所示,下面以此为例讲解各its Table的配置过程
itsCommandQueue : 0x0606_0000
Device Table: 0x0603_0000
Interrupt Translation Table: 0x0605_0000
Collection Table: 0x0604_0000

1、MAPD Command
MAPD指令用于映射DeviceID -> ITT页表,需要配置的参数为DeviceID,ITT_addr,Size,以及Valid使能。MAPD数据结构图如下所示:
请添加图片描述
DeviceID:标识对应的发起中断请求的device
ITT_addr:标识ITT页表的地址
Size:5bit数值,标识该ITT页表项最多支持多少bit的EventID
Valid:标识ITT_addr和Size是否使能

☆ DeviceID=0,配置device table的过程:
1)core 将mapd command写入itsCommandQueue,此处DeviceID=0,size=0xd,ITT_addr=0x0605_0000,Valid = 1

请添加图片描述

2)通过gicd master将此笔mapd command数据读出

请添加图片描述
3)gicd master先对device table发起一笔读操作后,然后将device table entry写入到devicetable

请添加图片描述

☆ DeviceID=1,配置device table的过程:
1)core将mapd command写入itsCommandQueue,此处DeviceID=1,size=0xd,ITT_addr=0x0605_8000,Valid = 1

请添加图片描述

2)通过gicd master将此笔mapd command数据读出

请添加图片描述

3)gicd master先对device table发起一笔读操作后,然后将device table entry写入到devicetable

请添加图片描述

两个DTE在Device Table中的排布如下:
在这里插入图片描述

2、MAPTI Command
MAPTI指令用于配置ITT的页表项,即映射DeviceID和EventID到INTID和ICID。MAPTI结构图如下所示:请添加图片描述
DeviceID:标识发起中断请求的device
EventID:标识对应device的哪个中断
pINTID:该中断对应的中断号(从8192开始)
ICID:标识该中断对应的collection信息编号,即代表路由到哪个核

配置interrupt translation table的过程:
1)core 将mapti command写入itsCommandQueue,此处DeviceID=1,EventID=8,pINTID=0x2008,ICID=1

请添加图片描述

2)通过gicd master将此笔mapti command读出

请添加图片描述

3)gicd master先对device table发起一笔读操作获取到DeviceID=1对应的ITT Addr,然后将Interrupt Translation Entry写入到pINTID对应的ITT Addr

请添加图片描述

两组ITT在内存中的排布如下表所示:
在这里插入图片描述

3、MAPC Command
MAPC指令用于配置CT的页表项,即映射ICID -> RDbase(标识一个Redistributor)。MAPC结构图如下所示:请添加图片描述
ICID:标识对应中断的collect编号
RDbase:标识对应的Redistributor

配置collection table的过程:

  1. core 将mapc command写入itsCommandQueue,此处ICID=1,RDbase=1,Valid=1
    请添加图片描述
    2)通过gicd master将此笔mapc command读出
    请添加图片描述
    3)gicd master先对collection table发起一笔读操作,然后将Collection Entry写入到对应的CT Addr
    请添加图片描述
    CTE在内存中的排布如下表所示:
    在这里插入图片描述
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值