SMMU架构手册之command和event队列(1)

        SMMU所有的输入和输出队列都是内存中的环形buffer。编程接口包括一个输入的command队列和一个输出的event队列(可选一个PRI队列)。每个队列用于producer-consumer方式,一个输出队列包含SMMU产生和软件消耗的数据。输入队列包含软件产生的数据,SMMU来消耗。

1. SMMU环形队列

        一个队列为2^n大小的FIFO环形,带一个基指针和两个index寄存器PROD和CONS,表明队列中的生产者和消耗者的当前位置。对输入和输出情况,仅SMMU维护一个index,软件维护另一个index。

        对于输入队列(command队列),在向一个队列中插入一项时软件来更新PROD index,SMMU读取来决定新的项。每一个项被消耗SMMU更新CONS index,软件读取来决定每一项被消耗,空间被消耗。输出队列正好相反。

        PROD表明由生产者下一个被写的位置的Index,若队列非满。CONS表明若队列非满,下一个被读的位置的index。index必须一致增加,当它超过队列的顶部时卷积到底部。

        队列使用镜像环形buffer安排,它允许所有项同时有效(而不是在其他环形buffer中的N-1个有效项)。每个index由一个wrap标志,下一个更高位临近index值包含PROD和CONS。该位每次反转。由每个index的owner,生产者或消费者,当owner更新index来反转该位。软件读取寄存器,增加或反转index,写回wrap和index域。单个更新阻止index和wrap的非一致性。

(1)若两个index相等且wrap位相同时,队列为空,没有可消耗的内容;

(2)若两个index相等且wrap位不相等时,队列为满,不能在产生内容;

(3)若两个Index不相等或wrap位不相等时,消耗者消耗内容,增加CONS index直到队列为空(index和wrap位都相等)

        因此,当两个index表明同一个位置时,wrap位区分空buffer和满buffer情况。

        在初始化时,在使能队列前,控制SMMU的agent写队列index。队列index必须被初始化位下列连续的状态:

(1)PROD.WR=CONS.RD且PROD.WR_WRAP=CONS.RD_WRAP,表示一个空队列;

NOTE: ARM期望在正常初始化时为此状态。

(2)PROD.WR=CONS.RD且PROD.WR_WRAP!=CONS.RD_WRAP,表示一个满队列;

(3)PROD.WR>CONS.RD且PROD.WR_WRAP=CONS.RD_WRAP,表示部分满队列;

(4)PROD.WR<CONS.RD且PROD.WR_WRAP!=CONS.RD_WRAP,表示部分满队列;

        无论在初始化还是队列使能后控制SMMU的agent不能写队列index到下述不连续的状态:

(1)PROD.WR>CONS.RD且PROD.WR_WRAP!=CONS.RD_WRAP;

(2)PROD.WR<CONS.RD且PROD.WR==CONS.RD_WRAP;

        若队列index被写到非连续的状态,下列不可预测的行为被允许:

(1)SMMU对特定的队列消耗或生产,在队列中队列项在未知的位置;

(2)SMMU对特定的队列不消耗或生产,队列项处于非连续的状态;

        每个环形buffer大小为2^n, 0<=n<=19。实现支持少于19bit的索引。每个PROD和CONS寄存器为20bit,其中19bit用于索引加上wrap bit。实际使用的buffer大小由软件决定,由SMMU实现定义的。wrap位的位置取决于配置index大小。

NOTE: 比如,当一个队列被配置为128项,这意味着:

(1)队列index为7bit;

(2)PROD.WR和CONS.RD域为7bit。队列索引为PROD和CONS的[6:0]位。

(3)PROD和CONS寄存器的位[7]为wrap位,其中位[19:8]被忽略。

        下图呈现了环形buffer的生命周期:

        当生产或消耗entry时,软件必须只增加index(除了当增加会导致wrap)。index不能向后移动。SMMU也需要保证,仅增加index或wrap它的index值。

        每个实现的安全状态有一个命令队列。SMMU命令从队列中被顺序消耗。

        Event队列可以并发的接受evnts,比如从设备流量或配置错误造成的错误记录。在非安全侧,有一个全局event队列接受所有来自非安全stream和配置的事件。

        当SMMU_S_IDR1.SECURE_IMPL=1时,也存在一个安全event队列接受所有来自安全stream和配置的事件。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以在SMU的官方网站或者相关技术论坛上查找SMU技术手册。您也可以在互联网搜索引擎上搜索关键字 "SMU技术手册",以便找到相关资源。此外,您还可以咨询厂商或专业技术人员,他们可能有更详细的帮助和指导。 ### 回答2: 要查找SMaRTS手册,可以采取以下途径: 1. 网络搜索:使用搜索引擎,如谷歌或百度,在搜索栏中输入"SMaRTS技术手册"或"SMaRTS用户手册"。搜索结果中可能会出现相关文档,包括官方网站、论坛、技术社区等资源。 2. 官方网站:找到SMaRTS的官方网站,通常会提供相关的技术手册和文档。在官方网站上,可以浏览产品页面、支持页面或下载页面,寻找与SMaRTS相关的文档。一般会有用户手册、安装指南、技术规格等资源可供查阅。 3. 厂商支持:如果有购买SMaRTS的厂商联系方式,可以直接咨询他们的技术支持团队。他们通常会提供对应的技术手册和文档,或者将您引导至可以获取这些资料的地方。 4. 技术社区和论坛:参与与SMaRTS相关的技术社区和论坛,向其他用户或专家提问,询问他们是否知道如何获取SMaRTS手册。这些社区和论坛通常以技术服务为目的,会提供相关的资源和帮助。 综上所述,通过网络搜索、官方网站、厂商支持和技术社区等方式,您应该能够找到SMaRTS技术手册和相关文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值