电子说
就是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
都会视为无效。
指向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失效,例如:
全部0条评论
快来发表一下你的评论吧 !