一筆輸入的transaction會(huì)經(jīng)過(guò)以下幾個(gè)邏輯步驟:
1. 如果SMMU全局禁用(例如,剛結(jié)束復(fù)位SMMU_CR0.SMMUEN == 0),則transaction將通過(guò)SMMU而不進(jìn)行任何地址轉(zhuǎn)換。全局屬性,例如 memory type或Shareability,可能從SMMU的SMMU_GBPA寄存器應(yīng)用,或者SMMU_GBPA寄存器可以配置為abort所有transactions。
2. 如果SMMU沒(méi)有全局禁用或者全局bypass,則首先確定VA->PA轉(zhuǎn)換的配置:
?索引到STE。
?如果STE啟用了stage2轉(zhuǎn)換,則STE包含stage2 translation table base。
?如果STE啟用了stage1轉(zhuǎn)換,則繼續(xù)索引CD。如果STE啟用了stage2轉(zhuǎn)換,則從IPA空間獲取CD,否則從PA空間獲取CD。
3. 如果配置有效(STE+CD),則執(zhí)行VA->PA轉(zhuǎn)換。
?如果配置了stage1轉(zhuǎn)換,則CD包含一個(gè)translation table base,否則bypass stage1轉(zhuǎn)換,并將輸入地址直接提供給stage2。
?如果配置了stage2轉(zhuǎn)換,則STE包含一個(gè)translation table base用于stage2(輸入可能是VA,也可能是stage1的輸出IPA)。如果沒(méi)有配置stage2,則輸入就會(huì)直接作為輸出地址(bypass)。
4. 具有有效配置且在VA->PA轉(zhuǎn)換過(guò)程中未發(fā)生fault的transaction將輸出地址以及memory attributes。
上面步驟展示了Non-secure stream transaction 處理的流程,如果支持 Secure stream,則流程也是類似的。過(guò)程中使用到的寄存器有所區(qū)別:
SMMU_S_CR0.SMMUEN
SMMU_S_GBPA
實(shí)現(xiàn)可能會(huì)根據(jù)需要cache這些步驟中的任何數(shù)據(jù)。此外,在處理過(guò)程中的幾個(gè)stage可能會(huì)發(fā)生 fault。如果transaction未能找到有效配置,則會(huì)
terminated with an abort, and an event might be recorded。
如果transaction進(jìn)展到transaction(已經(jīng)找到了有效的配置),則fault可能出現(xiàn)在transaction的任一stage。如果發(fā)生了fault,其后的行為取決于使用的CD和STE的配置,確定是否terminated或者stalled。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5295瀏覽量
119823 -
STE
+關(guān)注
關(guān)注
0文章
8瀏覽量
9191 -
cache技術(shù)
+關(guān)注
關(guān)注
0文章
41瀏覽量
1043
原文標(biāo)題:SMMU VA->PA的轉(zhuǎn)換流程
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論