ACE和CHI協議都支持MTE特性,不過ACE協議里只有ACE5-Lite,ACE5-LiteDVM (Basic only)和AXI5支持MTE,因此其實ACE里無法保證多master之間allocation tag的一致性。
只有CHI協議的MTE規范才支持allocation tag的一致性。不過我們這次只講當tag operation為match的情況下,ACE和CHI的行為。 ?
ACE writes with tags and Tag operation is Match
ACE中,當write操作帶有logical tag,且AWTAGOP=0b11(Match)時,寫操作攜帶logical tag與allocation tag之間的比較是打算放在下游slave去做。順便提下logical tag可以理解是request攜帶的鑰匙,allocation tag可以理解是這個address的鎖,只有鑰匙和鎖檢查匹配上,address才可以正確的訪問。如果不匹配上,通常會報fault給Core,具體是sync還是async的fault,取決于Arm architecture里SCTLR.TCF/TCF0寄存器域段。 ?
從ACE里看到支持tag match operation的write transactions有WriteNoSnoop和Atomic transaction。ACE slave收到tag match operation的request后,需要返回兩部分響應:
Completion response:用于指示這筆write request已經是可見的。
Match response:用于指示logical tag和allocation tag比較是否成功。
這兩部分響應使得具有獨立data和tag存儲的組件能夠獨立返回響應,也可以將這兩部分合成1個響應。另外這兩部分響應可以按任意順序返回的。 ?
如果comp resp和match resp分兩次返回
Completion response
Completion response指示當前write操作對其它Master是可見的,且要遵循以下幾點規則:
BCOMP域段必須為1;
BTAGMATCH域段必須為0b01,表示Match operation的結構在match response里;
BID必須和AWID一致;
如果支持loopback指示,那么BLOOP域段必須和AWLOOP域段的值一致;
BRESP域段可以有OKAY, EXOKAY, SLVERR和DECERR;
Completion響應必須遵循正常的response保序規則;
當收到這個響應后,ID值就可以被后續transaction重用了; ?
Match response
Match response用于指示這筆write操作的tag比較成功與否,如果該筆transaction里所有data transfer上的WTAG都和memory里存的allocation tag匹配上了,那么response是pass。如果transaction里有任何1筆data transfer的WTAG與memory里存的allocation tag不一致,那么response是fail。
Match response必須遵循以下規則: ?
BCOMP域段必須為0;
BTAGMATCH域段必須是0b11 (Pass)或0b10 (Fail);
BID和AWID的值必須一樣;
BLOOP域段可以是任意值,不需要和AWLOOP域段的值一樣;
BRESP域段可以有OKAY, SLVERR或DECERR;
Match response沒有任何保序要求,它可以超前或被超前其它任何response響應的; ?
如果comp resp和match resp一塊返回
slave可以根據情況將comp resp和match resp打包到一起,并一塊返回給master。這樣需要遵循以下規則: ?
BCOMP域段必須為1;
BTAGMATCH域段必須是0b11 (Pass)和0b10 (Fail);
BID和AWID的值必須一致;
如果支持loopback指示,那么BLOOP域段必須和AWLOOP域段的值一致;
BRESP域段可以有OKAY, EXOKAY, SLVERR和DECERR;
Completion響應必須遵循正常的response保序規則;
當收到這個響應后,ID值就可以被后續transaction重用了; ? ?
其實我們看下BCOMP和BTAGMATCH這兩個域段的定義:
我們就可以總結出對于write with tag match operation來說,可能的response有:
另外一點要注意的是,只要沒有返回response錯誤,那么即使tagmatch表示fail了,write data也仍然會寫到slave的memory里去。 ?
CHI writes with tags and Tag operation is Match
在CHI中,當write和atomic transaction操作攜帶的TagOp值為Match,下游Completer必須返回Tag match operation的結果,這個結果是通過TagMatch response傳遞的。不管Tag match結果如何,write和atomic transaction都必須正常處理。且就算WriteData被canceled或Tag Match沒有執行,也要返回TagMatch response,否則就破壞了CHI協議了。總得來說,下游Completer不僅要返回comp響應,也要根據Tag Match operation的結果,返回TagMatch響應。
在TagMatch response的Resp域段里攜帶了Tag Match是否成功,它的值根據:
如果不支持MTE,那么必須是Fail;
如果支持MTE,但Tag Match沒有被執行,返回Pass。例如Exclusive write fail且Tag match還沒有被執行。
如果支持MTE,且Tag Match執行了,要返回精確的執行結果狀態。
CHI write操作伴隨著tagOp為Match操作時,如果下游slave不支持,那么下游slave可以不等待writedata就返回tagmatch failed信息。如果支持的話,一定要等writedata里的tagOp,因為req和write data channel的TagOp不一致的話,要用write data channel的。
ACE和CHI都支持讓下游Completer進行Tag match operation,并返回結果。其中ACE的comp resp和match resp可以分開,也可以一起返回。但是CHI里comp resp和match resp必須分開返回的。CHI里對其的解釋是“使用單獨的TagMatch響應會增加write和atomic transaction的復雜度和額外消息的開銷,但優點是它提供了足夠準確的響應機制,且使用單獨的TagMatch響應不會導致Comp響應的延遲發送”。
審核編輯:劉清
評論
查看更多