LPI

article/2025/9/11 18:41:57

概述

LPI全称是Locality-specific Peripheral Interrupts(LPIs),GICv3有两种方式支持LPIs:

1)使用ITS把从设备发送的EventID转换成LPI INTID

2)直接转发LPI INTID到Redistributors(GICR_SETLPIR)

如果一个实现支持LPIs,则默认至少需要支持8192个LPIs,因此每一个LPI的配置和pending信息都是以table的形式保存在memory中(不是寄存器中),这些tables的基地址保存在Redistributors的寄存器中。(Arm建议在Redistributors中缓存部分tables来减少latency和memory traffic的目的)

下面两幅图分别是有ITS和没有ITS时实现LPIs的示意图:

LPI space

GICv>3中有一个全局的物理LPI space,可以被各个Redistributors共享。软件可以通过GICR_PROPBASER寄存器来设置这个全局的物理LPI space:

要注意的是物理LPI space的大小受限于GICD_TYPER.IDbits。

对于一个给定的Redistributor,如果支持物理LPIs,则LPI的配置和状态信息保存在memory的两个table中:

  • LPI Configuration tables
  • LPI Pending tables

其中LPI的优先级和enable位域在LPI的配置表中控制,LPI配置表的地址保存在GICR_PROPBASER寄存器中。(注意在GICR_CTLR.EnableLPIs == 1时,更新GICR_PROPBASER会导致异常)GICR_PROPBASER.IDBits用于设置ID空间,因此LPI配置表和LPI pending table的项目数也就确定了。

LPI的pending信息则保存在LPI pending table中,每个redistributor都有一个独立的pending table。LPI pending table的地址保存在GICR_PENDBASER寄存器中。

如果GICR_CTLR.EnableLPIs == 0,会在Redistributor接口上disable LPI,LPI也不会再变为pending,这点和SGI、PPI、SPI是有区别的。

GICv4中引入了虚拟LPI的配置和pending表,基地址分别保存在GICR_VPROPBASER和GICR_VPENDBASER寄存器中。虚拟LPI的enable则是由GICR_VPENDBASER.Valid来控制。

LPI配置表

GIC支持不同的Redistributors指向不同的LPI Configuration Table,GICR_TYPER.CommonLPIAff表示哪些Redistributor的GICR_PROPBASER需要有相同的值,也就是指向相同的LPI Configuration Table。

为了避免不可以预测的结果,软件必须在下面的情况下保证所有LPI Configuration table都是相同的:

  • 任何一个Redistributor的GICR_CTLR.EnableLPIs从0设置为1
  • 如果支持的是direct LPI,GICR_CTLR.EnableLPIs == 1的情况下,写入任何Redistributor的GICR_INVLPIR和GICR_INVALLR寄存器
  • 如果支持ITS,ITS执行INV和INVALL命令

LPI Configuration Table保存的是LPI的配置信息,包括:

  • GICR_PROPBASER指定的4KB对齐的物理地址,这个地址是LPI Configuration Table的基地址
  • 对于LPI N对应的table entry的地址是(base_address + (N-8192))

软件写入LPI Configuration Table以后,需要触发INV或INVALL命令(有ITS)或者写入寄存器GICR_INVALLR或GICR_INVLPIR(无ITS)来保证配置生效。

LPI配置项

LPI配置表是由若干个8bits的条目组成的,每一个LPI对应一个8bits的条目:

Caching

Redistributor可以caching LPI Configuration Table,但是需要遵循下面的规则:

  • 可以有一个或者多个cache,cache的结构和大小由具体实现确定
  • 一个LPI Configuration table条目可以在任何时间allocate到cache中
  • 缓存的LPI Configuration Table条目不保证一直保留在cache中
  • 缓存的LPI Configuration Table条目不保证和memory中的内容是一致的
  • LPI配置修改后,只有在执行invalidation操作后才能保证可见性

如果没有Redistributor的GICR_CTLR.EnableLPIs == 1,则GIC没有cached LPI Configuration Table条目。

LPI Pending Tables

软件使用GICR_PENDBASER寄存器控制LPI pending tables,这个寄存器存储了物理LPIs的LPI pending table的基地址。

每一个Redistributor维护的LPI Pending table是互相独立的,每一个LPI都有一个bit表示pending状态,0表示没有pending,1表示pending。

如果LPI Pending table的内容全是0的话(包括开始的1KB),就表示没有pending的LPIs。

LPI Pending table的最前面的1KB的内容是由实现决定的,并且这1KB的内容必须在初始化时保证都为0,否则会导致不可预测的结果。

在正常运行过程中,Redistributor负责维护LPI pending table,如果GICR_CTLR.EnableLPIs==1时,软件操作LPI pending table,结果是未知的。如果GICR_CTLR.EnableLPIs==0,在GICR_CTLR.RWP ==0之前写入LPI Pending table,也会导致不可预测的结果。

当GICR_CTLR.EnableLPIs变为1时,Redistributor必须要从LPI pending table中读取物理LPI的pending状态。如果GICR_PENDBASER.PTZ == 1,软件需要保证LPI Pending Table只包含0值,包括开始的1KB。在这种情况下硬件不需要再读取LPI pending table。

如果GICR_CTLR.EnableLPIs清0后,并且GICR_CTLR.RWP为0后,GIC不会再读写LPI Pending Table,所有caching的LPI Pending Table都会invalidated。但是清除GICR_CTLR.EnableLPIs不一定会导致LPI Pending Table更新到memory中。

对于虚拟LPI,当GICR_CTLR.EnableLPIs == 1 && GICR_VPENDBASER.Valid == 1,则Redistributor必须要从LPI Pending Table读取虚拟LPI的pending状态。

Virtual LPI Configuration tables and virtual LPI Pending tables

GICv4使用和物理LPIs类似的机制管理虚拟LPIs。

 

直接转发LPI INTID

如果系统没有实现ITS,则必须要包含下面几个寄存器:

  • GICR_INVLPIR
  • GICR_INVALLR
  • GICR_SYNCR
  • GICR_SETLPIR
  • GICR_CLRLPIR

 


http://chatgpt.dhexx.cn/article/VSktpyHC.shtml

相关文章

系统辨识和自适应控制

系统辨识知识要点 1.为什么采用负反馈技术 2.什么是自适应控制,为什么采用自适应控制,指出自适应控制的使用场合 3.学习了什么辨识方法,这些方法之间的联系 4.最小二乘中的无偏性和一致性指的是什么 5.什么是白噪声 白噪声是一种具有…

【状态估计】用于描述符 LTI 和 LPV 系统的分析、状态估计和故障检测的算法(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

Global Illumination_Light Propagation Volumes (LPV)

文章具体参照 https://ericpolman.com/ 本方法的思想就是把场景分成很多的小格子,然后计算每一个小格子里面的光照(LPV)。如果直接计算每个格子里面的光照那代价也是不可接受的,因此本算法用了一种很巧妙的方式来处理&#xff1…

LPV(Light Propagation Volumes)

lpv 测试了Light Propagation Volumes,全实时没有任何预处理的GI,而且可以适用任意场景。 文档很长,不过基本原理还是比较直白的: 生成reflect shadow map(rsm)。 将rsm信息用SH系数方式注入一个volumetexture中。 …

【GAMES-202实时渲染】4、3D空间全局光照(RSM、LPV、VXGI)

Lec7~8 1、Reflective Shadow Maps(RSM)2、Light Propagation Volumes(LPV)3、Voxel Global Illumination(VXGI) 1、Reflective Shadow Maps(RSM) RSM是一个特别经典的计算全局光照…

lpv

测试了Light Propagation Volumes,全实时没有任何预处理的GI,而且可以适用任意场景。 文档很长,不过基本原理还是比较直白的: 生成reflect shadow map(rsm)。 将rsm信息用SH系数方式注入一个volumetexture中。 在vol…

操作系统经典 pv过桥问题

Semophere bridge1; Semophere mutexNS1,mutexSN1;//用于保护countNS,countSN int countNS0,countSN0; Semophere s11,s20;//用于交替通过 StoN(){while(1){P(mutexSN);countSN;//来车了v(mutexSN);p(mutexSN);if(countNS0){//对面无车,则直接通过P(bridge);通过countSN--;V…

C语言解决四人/多人过桥问题

参加笔试的时候遇到一道经典的算法题,四人过桥问题。当时没写出来😅。 四人过桥问题:在一个黑夜里,有四个人需要过桥,每次只能通过两人,其中一人必须拿着手电筒;但只有一个手电筒,所…

小明过桥问题

小明家必须要过一座桥。小明过桥最快要1秒,小明的弟弟最快要3秒,小明的爸爸最快要6秒,小明的妈妈最快要8秒,小明的爷爷最快要12秒。每次此桥最多可过两人&…

过桥问题

在一个夜黑风高的晚上&#xff0c;有n&#xff08;n < 50&#xff09;个小朋友在桥的这边&#xff0c;现在他们需要过桥&#xff0c;但是由于桥很窄&#xff0c;每次只允许不大于两人通过&#xff0c;他们只有一个手电筒&#xff0c;所以每次过桥的两个人需要把手电筒带回来…

过桥问题的通解

问题一,一个典型过桥问题: 小明一家5口人在夜晚过一座桥,小明过桥要1分钟,小明的弟弟过桥要3分钟,小明的爸爸过桥要6分钟,小明的妈妈过桥要8分钟,小明的爷爷过桥要12分钟;这座桥每次只能过2个人,因是夜晚,过桥时必须提着灯,小明有一只灯,点燃后30分钟会熄灭,问怎…

如何打开tdms文件?

https://www.zhihu.com/question/305029962/answer/1203851780v 下载地址 http://www.ni.com/example/27944/en/ 还有一个综述&#xff0c;写的挺好&#xff01; https://wenku.baidu.com/view/c62700e4aa00b52acec7ca09.html

转载:TDM协议

转自http://www.wangdali.net/i2s/ 1. PCM简介 PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。图11为4 bit 采样深度的PCM数据量化示意图。 图11. 4-bit PCM的采样量化 PCM数字音频接口,即说明接口上传输的音频数据通过PCM…

02 - DDMS

目录 一. DDMS 是什么&#xff1f; 二. 工作原理 三. ddmlib 1.ddmlib简介 总结 一. DDMS 是什么&#xff1f; DDMS 的全称是DalvikDebug Monitor Service&#xff0c;是 Android 开发环境中的Dalvik虚拟机调试监控服务。提供测试设备截屏、查看特定进程正在运行的线程以及堆信…

LabVIEW将现有数据文件映射至TDMS数据文件格式

LabVIEW将现有数据文件映射至TDMS数据文件格式 在某些情况下&#xff0c;可能无法使用TDMS文件格式&#xff0c;例如客户或供应商指定必须使用某种格式存储数据。有些传统仪器可能会自动使用某种自定义格式提供数据输出文件。此外&#xff0c;已经用某种方式收集的传统测量数据…

Matlab打开LabVIEW的tdm/tdms文件

1. 下去NI官网下载 MATLAB TDM Example文件 。 网址&#xff1a;Reading TDM/TDMS Files with The MathWorks, Inc. MATLAB Software - NI Community 这里我两个文件都下载了&#xff0c;但是只打开了2020那个&#xff0c;能用我就没看sp2010那个是干嘛的。 2. 使用Matlab打…

Labview-关于TDMS文件逻辑的学习-从今天开始学习Labview

1. TDMS文件的逻辑格式 TDMS文件的逻辑格式遵循TDM三层结构&#xff0c;仍然是文件、通道组、通道三层。用户在使用时只需要关心这三层就行了。2. TDMS文件API TDMS文件格式基本上可以称为NI用在测试测量领域的通用数据文件格式&#xff0c;LabVIEW, CVI/LabWindows, Signal Ex…

[Matlab科学计算] Matlab打开Labview保存的TDMS文件

1. TDMS文件简单介绍 TDMS文件格式由三个层次结构级别组成&#xff1a;文件、组、通道。文件级别可包含任意数量的组&#xff0c;而每个组又可包含任意数量的通道。通过通道分组&#xff0c;用户可以选择如何组织数据以使其更易于理解。每​个​TDMS​文件​都​包含​两​种​…

JAVA解析TDMS文件

2023年更新&#xff1a; 没想到还有人关注&#xff0c;上传了最新代码 https://github.com/yc97/TDMSDecoder 该代码经过测试&#xff0c;基本没什么bug了 reference: http://www.eefocus.com/Junking/blog/12-07/281264_7bf69.html http://www.ni.com/white-paper/14252/zh…

LabVIEW写入可快速加载的TDMS文件

LabVIEW写入可快速加载的TDMS文件 TDMS文件格式的设计目的是在尽可能快地读写数据的同时仍保持足够的灵活性来适应采集过程中通道数量和采样率的变化。 但是数据读写速度快的文件未必可快速加载。 TDMS文件是一个完全的二进制文件&#xff0c;由多个部分数据段组成&#xff0c;…