| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> GIC spec之ITS和LPI中断2 -> 正文阅读 |
|
[大数据]GIC spec之ITS和LPI中断2 |
1.1 LPI配置表????????LPI配置为全局的。GIC是否支持指向LPI配置表的不同拷贝的Redistributor是由实现定义的。 ????????是否在不同Redistributor设置GICR_PROPBASER为不同值是由实现定义的。无论GICR_CTLR.EnableLPIs==1,GICR_TYPER.CommonLPIAff表明哪个Redistributor必须让GICR_PROPBASER设置为相同的值。 ????????实现将GICR_PROPBASER的所有拷贝被要求为相同的值(在访问通用状态)。 ????????当GICR_CTLR.EnableLPIs==1时,在使用通用LPI配置表的Redistributor中对不同的GICR_PROPBASER的拷贝设置为不同的值会导致不可预测行为。 ????????如果GICR_PROPBASER在不同Redistributor中设置为不同值,当GIC读取LPI配置表时由实现决定哪个GICR_PROPBASER被使用。但是,这些使用的拷贝将与GICR_CTLR.EnableLPIs==1的Redistributor相关。 ????????为避免不可预测的行为,软件必须保证LPI配置表的所有拷贝都是唯一的,并且所有的修改都是全局可见的,这时: (1)在任何Redistributor上写GICR_CTLR.EnableLPI从0到1; (2)如果支持直接LPI,GICR_CTLR.EnableLPI=1的任何Redistributor写GICR_INVLPIR和GICR_INVALLR; (3)ITS执行的INV和INVALL命令,实现必须包含至少一个ITS; 内存中的一个LPI配置表保存每个LPI的包含配置信息的条目,这时: (1)GICR_PROPBASER指定一个4KB对齐的物理地址。它为LPI配置表基地址。 (2)对于任何LPI N,表项的位置由base address + N - 8192定义; ????????为修改中断的配置,软件写LPI配置表,然后发INV或INVALL命令。在不包含ITS的实现中,软件写GICR_INVALLR或GICR_INVLPIR。 Table 5-1为LPI配置表项位赋值。
Caching ????????Redistributor可以缓冲GICR_PPROPBASER指定的LPI配置表的信息。当GICR_CTLR.EnableLPI=1时,遵守下列所有的规则:
- 如果实现一个或多个ITS实现时,使用INV或INVALL命令发送无效化命令。一个SYNC命令可以完成INV和INVALL命令。 - 如果ITS没有实现时,写GICR_INVALLR或GICR_INVLPIR发出无效化命令。 ????????如果没有GICR_CTLR.EnableLPI=1的Redistributor,GIC没有缓存的LPI配置表项。 1.2 LPI pending表????????软件配置LPI pending表,通过写GICR_PENDBASER使用有效LPI INTID的实现范围。寄存器提供物理LPI的LPI pending表的基地址。 ????????每个Redistributor会维护一个独立的LPI pending表的条目。当Redistributor中GICR_CTLR.EnableLPIs=1时LPI pending表指明了每个LPI的pending状态。 0 LPI没有pending 1 LPI正处于pending ????????对于给定的LPI: (1)LPI pending表中对应byte在位置base_address + (N/8) (2)bit在byte的位置为N mod 8 ????????仅包含0的LPI pending表(包含前1KB)表明没有pending LPI。 ????????LPI pending表的前1KB是由实现定义的。但是如果LPI pending表的前1KB和剩下的部分仅包含0,这表明没有任何pending LPI。 ????????在初始分配时LPI pending表的前1KB内存必须仅包含0,这必须对Redistributor可见,否则影响不可预测。 ????????在正常情况下,LPI pending表是由Redistributor单独维护的。 ????????如果软件在GICR_CTLR.EnableLPIs=1时写LPI pending表,行为不可预测。当GICR_CTLR.EnableLPIs被清为0时,如果LPI pending表在GICR_CTLR.RWP被读为0时被写,行为也不可预测。 ????????Redistributor被要求共享一个公共的LPI配置表,由GICR_CTLR.CommonLPIAff指定,它将把GICR_PENDBASER的OuterCache, Shareability, 或InnerCache域作为访问通用状态。 ????????当GICR_CTLR.EnableLPI=1时,GICR_PENDBASER的OuterCache, Shareability, 或InnerCache域被在不同的Redistributor上被编程为不同值,这时不可预测的。 ????????对于物理LPI,当GICR_CTLR.EnableLPIs被修改为1时,Redistributor必须从物理LPI pending表中读取物理LPI的pending状态。 NOTE:如果GICR_PENDBASER.PTZ=1时,软件保证LPI pending表仅包含0,包括前1KB。在这种情况下硬件可以不会读取表的任何部分。 ????????如果GICR_CTLR.EnableLPIs=1时,当GICR_CTLR.RWP读为0时,GIC不会再对LPI pending表做更多的访问,LPI pending表的任何缓存都无效。不能保证清GICR_CTLR.EnableLPIs会导致LPI pending表被更新到内存中。 NOTE: 如果实现了一个或多个ITS,Arm强烈建议所有LPI在GICR_CTLR.EnableLPI被清为0时映射到其他的Redistributor中。 ????????对于虚拟LPI,当GICR_CTLR.EnableLPIs=1时,GICR_VPENDBASER.Valid被修改为1时,Redistributor必须从虚拟LPI pending表中读取虚拟LPI的pending状态。 NOTE: 如果GICR_VPENDBASER.IDAI=0时,软件保证LPI pending表被同一个GIC实现写,这意味这硬件可以依赖表的前1KB而不许读取整个表项。 ????????当GICR_CTLR.EnableLPIs=1时,如果GICR_PROPBASER.IDbits 小于0b1101时,GIC可以仍会访问LPI pending表的实现定义的区域。 1.3 虚拟LPI配置表和虚拟LPI pending表????????GICv4同样使用内存表来管理虚拟LPI的配置和pending信息。表的格式也与物理LPI一样。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 2:59:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |