上圖就是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所對應的STDSpan如果設置為
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。
審核編輯:劉清
-
STD
+關注
關注
0文章
36瀏覽量
14367
原文標題:SMMU數據結構格式之 Level 1 Stream Table Descriptor
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論