ACE和CHI協(xié)議都支持MTE特性,不過(guò)ACE協(xié)議里只有ACE5-Lite,ACE5-LiteDVM (Basic only)和AXI5支持MTE,因此其實(shí)ACE里無(wú)法保證多master之間allocation tag的一致性。
只有CHI協(xié)議的MTE規(guī)范才支持allocation tag的一致性。不過(guò)我們這次只講當(dāng)tag operation為match的情況下,ACE和CHI的行為。 ?
ACE writes with tags and Tag operation is Match
ACE中,當(dāng)write操作帶有logical tag,且AWTAGOP=0b11(Match)時(shí),寫(xiě)操作攜帶logical tag與allocation tag之間的比較是打算放在下游slave去做。順便提下logical tag可以理解是request攜帶的鑰匙,allocation tag可以理解是這個(gè)address的鎖,只有鑰匙和鎖檢查匹配上,address才可以正確的訪問(wèn)。如果不匹配上,通常會(huì)報(bào)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后,需要返回兩部分響應(yīng):
Completion response:用于指示這筆write request已經(jīng)是可見(jiàn)的。
Match response:用于指示logical tag和allocation tag比較是否成功。
這兩部分響應(yīng)使得具有獨(dú)立data和tag存儲(chǔ)的組件能夠獨(dú)立返回響應(yīng),也可以將這兩部分合成1個(gè)響應(yīng)。另外這兩部分響應(yīng)可以按任意順序返回的。 ?
如果comp resp和match resp分兩次返回
Completion response
Completion response指示當(dāng)前write操作對(duì)其它Master是可見(jiàn)的,且要遵循以下幾點(diǎn)規(guī)則:
BCOMP域段必須為1;
BTAGMATCH域段必須為0b01,表示Match operation的結(jié)構(gòu)在match response里;
BID必須和AWID一致;
如果支持loopback指示,那么BLOOP域段必須和AWLOOP域段的值一致;
BRESP域段可以有OKAY, EXOKAY, SLVERR和DECERR;
Completion響應(yīng)必須遵循正常的response保序規(guī)則;
當(dāng)收到這個(gè)響應(yīng)后,ID值就可以被后續(xù)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必須遵循以下規(guī)則: ?
BCOMP域段必須為0;
BTAGMATCH域段必須是0b11 (Pass)或0b10 (Fail);
BID和AWID的值必須一樣;
BLOOP域段可以是任意值,不需要和AWLOOP域段的值一樣;
BRESP域段可以有OKAY, SLVERR或DECERR;
Match response沒(méi)有任何保序要求,它可以超前或被超前其它任何response響應(yīng)的; ?
如果comp resp和match resp一塊返回
slave可以根據(jù)情況將comp resp和match resp打包到一起,并一塊返回給master。這樣需要遵循以下規(guī)則: ?
BCOMP域段必須為1;
BTAGMATCH域段必須是0b11 (Pass)和0b10 (Fail);
BID和AWID的值必須一致;
如果支持loopback指示,那么BLOOP域段必須和AWLOOP域段的值一致;
BRESP域段可以有OKAY, EXOKAY, SLVERR和DECERR;
Completion響應(yīng)必須遵循正常的response保序規(guī)則;
當(dāng)收到這個(gè)響應(yīng)后,ID值就可以被后續(xù)transaction重用了; ? ?
其實(shí)我們看下BCOMP和BTAGMATCH這兩個(gè)域段的定義:
我們就可以總結(jié)出對(duì)于write with tag match operation來(lái)說(shuō),可能的response有:
另外一點(diǎn)要注意的是,只要沒(méi)有返回response錯(cuò)誤,那么即使tagmatch表示fail了,write data也仍然會(huì)寫(xiě)到slave的memory里去。 ?
CHI writes with tags and Tag operation is Match
在CHI中,當(dāng)write和atomic transaction操作攜帶的TagOp值為Match,下游Completer必須返回Tag match operation的結(jié)果,這個(gè)結(jié)果是通過(guò)TagMatch response傳遞的。不管Tag match結(jié)果如何,write和atomic transaction都必須正常處理。且就算WriteData被canceled或Tag Match沒(méi)有執(zhí)行,也要返回TagMatch response,否則就破壞了CHI協(xié)議了??偟脕?lái)說(shuō),下游Completer不僅要返回comp響應(yīng),也要根據(jù)Tag Match operation的結(jié)果,返回TagMatch響應(yīng)。
在TagMatch response的Resp域段里攜帶了Tag Match是否成功,它的值根據(jù):
如果不支持MTE,那么必須是Fail;
如果支持MTE,但Tag Match沒(méi)有被執(zhí)行,返回Pass。例如Exclusive write fail且Tag match還沒(méi)有被執(zhí)行。
如果支持MTE,且Tag Match執(zhí)行了,要返回精確的執(zhí)行結(jié)果狀態(tài)。
CHI write操作伴隨著tagOp為Match操作時(shí),如果下游slave不支持,那么下游slave可以不等待writedata就返回tagmatch failed信息。如果支持的話,一定要等writedata里的tagOp,因?yàn)閞eq和write data channel的TagOp不一致的話,要用write data channel的。
ACE和CHI都支持讓下游Completer進(jìn)行Tag match operation,并返回結(jié)果。其中ACE的comp resp和match resp可以分開(kāi),也可以一起返回。但是CHI里comp resp和match resp必須分開(kāi)返回的。CHI里對(duì)其的解釋是“使用單獨(dú)的TagMatch響應(yīng)會(huì)增加write和atomic transaction的復(fù)雜度和額外消息的開(kāi)銷,但優(yōu)點(diǎn)是它提供了足夠準(zhǔn)確的響應(yīng)機(jī)制,且使用單獨(dú)的TagMatch響應(yīng)不會(huì)導(dǎo)致Comp響應(yīng)的延遲發(fā)送”。
審核編輯:劉清
評(píng)論
查看更多