SMMU数据结构格式

电子说

1.3w人已加入

描述

就是SMMU Level 1 Stream Table Descriptor的数据格式,简称 Level1 STD

  • **[4:0] Span(跨度) **

    描述Level2 STE数组的大小和L2Ptr的有效性。

    如上图,当

  • Span为0,表明该STD是无效的,需要上报异常。

  • Span为1-11,表明该STD底下的Level STE包含2^(Span-1)个STEs

Span为12-31,Reserved,也需要上报异常。

Span必须在0到 (SMMU_STRTAB_BASE_CFG.SPLIT + 1) 的范围内,即它必须保持在Stream table split point的范围内。

传入事务StreamID所对应的STD Span如果设置为

Span == 0

Span == Reserved value

Span out of bounds value given the split point

select a valid Level 1 descriptor but are outside of the level 2 range

都会视为无效。

  • [51:6] L2Ptr

指向Level-2 STE的起始位置。L2Ptr[N:0]被SMMU视为0,其中

N == 5 + (Span - 1)

因此,SMMU将Level-2 STE的起始地址对齐到其大小。在SMMUv3.0中, L2Ptr [51:48]是RES0。超出OAS或物理地址的行为是会上报异常的。

所有导致 Stream table lookup未到达有效STE的事务都会终止,上报异常并可以记录事件 C_BAD_STREAMID (根据SMMU_(S_)CR2.RECINVSID设置)

当L1STD更改时, non-leaf CMD_CFGI_STE是使L1STD条目失效所需的最小范围invalidate命令。根据更改情况,也可能需要其他STE失效,例如:

  • 将Span == 0的inactive L1STD更改为non-zero active Span(引入新的部分Level-2 STE)仅需要使L1STD失效。
  • 将Span != 0的active L1STD更改为inactive L1STD需要使L1STD以及受影响的缓存的STE失效。需要多个non-leaf CMD_CFGI_STE命令或更广泛的命令,如CMD_CFGI_STE_RANGE或CMD_CFGI_ALL。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分