mem-ruby: add CHI SnpRespData_SD_Fwded_SC message
This snoop reponse is not generated internally by the SLICC implementation, but is required for compatibility with classic caches which may remain in SD state while returning SC data upon receiving a converted SnpShared. Change-Id: I5270b29c8863c7afd8abc39b3c7978b95330c183
This commit is contained in:
committed by
Bobby R. Bruce
parent
f37dfc090d
commit
bc52d886a8
@@ -1950,6 +1950,7 @@ action(Send_SnpSharedFwd_ToOwner, desc="") {
|
|||||||
if (retToSrc) {
|
if (retToSrc) {
|
||||||
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SC_Fwded_SC);
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SC_Fwded_SC);
|
||||||
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SC_Fwded_SD_PD);
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SC_Fwded_SD_PD);
|
||||||
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SD_Fwded_SC);
|
||||||
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_I_Fwded_SC);
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_I_Fwded_SC);
|
||||||
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_I_Fwded_SD_PD);
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_I_Fwded_SD_PD);
|
||||||
} else {
|
} else {
|
||||||
@@ -1964,6 +1965,7 @@ action(Send_SnpSharedFwd_ToOwner, desc="") {
|
|||||||
tbe.expected_snp_resp.addExpectedRespType(CHIResponseType:SnpResp_SC_Fwded_SC);
|
tbe.expected_snp_resp.addExpectedRespType(CHIResponseType:SnpResp_SC_Fwded_SC);
|
||||||
}
|
}
|
||||||
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SC_PD_Fwded_SC);
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SC_PD_Fwded_SC);
|
||||||
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_SD_Fwded_SC);
|
||||||
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_I_PD_Fwded_SC);
|
tbe.expected_snp_resp.addExpectedDataType(CHIDataType:SnpRespData_I_PD_Fwded_SC);
|
||||||
}
|
}
|
||||||
tbe.expected_snp_resp.addExpectedCount(1);
|
tbe.expected_snp_resp.addExpectedCount(1);
|
||||||
@@ -2304,7 +2306,8 @@ action(UpdateDirState_FromSnpDataResp, desc="") {
|
|||||||
(in_msg.type == CHIDataType:SnpRespData_SC) ||
|
(in_msg.type == CHIDataType:SnpRespData_SC) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SC) ||
|
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SC) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_SC_PD_Fwded_SC)) {
|
(in_msg.type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
||||||
|
(in_msg.type == CHIDataType:SnpRespData_SD_Fwded_SC)) {
|
||||||
// the owner must have been the responder, if there was one
|
// the owner must have been the responder, if there was one
|
||||||
assert((tbe.dir_ownerExists == false) ||
|
assert((tbe.dir_ownerExists == false) ||
|
||||||
(tbe.dir_ownerExists && (tbe.dir_owner == in_msg.responder)));
|
(tbe.dir_ownerExists && (tbe.dir_owner == in_msg.responder)));
|
||||||
@@ -2313,12 +2316,16 @@ action(UpdateDirState_FromSnpDataResp, desc="") {
|
|||||||
tbe.dir_ownerIsExcl := false;
|
tbe.dir_ownerIsExcl := false;
|
||||||
if ((in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SC) ||
|
if ((in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SC) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
(in_msg.type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD)) {
|
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
||||||
|
(in_msg.type == CHIDataType:SnpRespData_SD_Fwded_SC)) {
|
||||||
tbe.dir_sharers.add(tbe.requestor);
|
tbe.dir_sharers.add(tbe.requestor);
|
||||||
}
|
}
|
||||||
if (in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) {
|
if (in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) {
|
||||||
tbe.dir_ownerExists := true;
|
tbe.dir_ownerExists := true;
|
||||||
tbe.dir_owner := tbe.requestor;
|
tbe.dir_owner := tbe.requestor;
|
||||||
|
} else if (in_msg.type == CHIDataType:SnpRespData_SD_Fwded_SC) {
|
||||||
|
tbe.dir_ownerExists := true;
|
||||||
|
tbe.dir_owner := in_msg.responder;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ((in_msg.type == CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
} else if ((in_msg.type == CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
||||||
@@ -2507,7 +2514,8 @@ action(UpdateDataState_FromSnpDataResp, desc="") {
|
|||||||
|
|
||||||
} else if ((in_msg.type == CHIDataType:SnpRespData_SD) ||
|
} else if ((in_msg.type == CHIDataType:SnpRespData_SD) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
(in_msg.type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
||||||
(in_msg.type == CHIDataType:SnpRespData_I_Fwded_SD_PD)) {
|
(in_msg.type == CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
||||||
|
(in_msg.type == CHIDataType:SnpRespData_SD_Fwded_SC)) {
|
||||||
tbe.dataDirty := true;
|
tbe.dataDirty := true;
|
||||||
tbe.dataValid := true;
|
tbe.dataValid := true;
|
||||||
tbe.dataMaybeDirtyUpstream := true;
|
tbe.dataMaybeDirtyUpstream := true;
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ void functionalRead(Addr addr, Packet *pkt, WriteMask &mask) {
|
|||||||
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_UD) ||
|
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_UD) ||
|
||||||
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
||||||
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
||||||
|
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_SD_Fwded_SC) ||
|
||||||
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
||||||
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_I_PD_Fwded_SC);
|
tbe.expected_snp_resp.receivedDataType(CHIDataType:SnpRespData_I_PD_Fwded_SC);
|
||||||
}
|
}
|
||||||
@@ -1420,6 +1421,8 @@ Event dataToEvent (CHIDataType type) {
|
|||||||
return Event:SnpRespData_SC_Fwded_SC;
|
return Event:SnpRespData_SC_Fwded_SC;
|
||||||
} else if (type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) {
|
} else if (type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) {
|
||||||
return Event:SnpRespData_SC_Fwded_SD_PD;
|
return Event:SnpRespData_SC_Fwded_SD_PD;
|
||||||
|
} else if (type == CHIDataType:SnpRespData_SD_Fwded_SC) {
|
||||||
|
return Event:SnpRespData_SD_Fwded_SC;
|
||||||
} else if (type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) {
|
} else if (type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) {
|
||||||
return Event:SnpRespData_SC_PD_Fwded_SC;
|
return Event:SnpRespData_SC_PD_Fwded_SC;
|
||||||
} else if (type == CHIDataType:SnpRespData_I_Fwded_SD_PD) {
|
} else if (type == CHIDataType:SnpRespData_I_Fwded_SD_PD) {
|
||||||
|
|||||||
@@ -1426,6 +1426,7 @@ transition(BUSY_BLKD,
|
|||||||
{SnpRespData_I_PD,SnpRespData_I,SnpRespData_SC_PD,
|
{SnpRespData_I_PD,SnpRespData_I,SnpRespData_SC_PD,
|
||||||
SnpRespData_SC,SnpRespData_SD,SnpRespData_UC,SnpRespData_UD,
|
SnpRespData_SC,SnpRespData_SD,SnpRespData_UC,SnpRespData_UD,
|
||||||
SnpRespData_SC_Fwded_SC,SnpRespData_SC_Fwded_SD_PD,
|
SnpRespData_SC_Fwded_SC,SnpRespData_SC_Fwded_SD_PD,
|
||||||
|
SnpRespData_SD_Fwded_SC,
|
||||||
SnpRespData_SC_PD_Fwded_SC,SnpRespData_I_Fwded_SD_PD,
|
SnpRespData_SC_PD_Fwded_SC,SnpRespData_I_Fwded_SD_PD,
|
||||||
SnpRespData_I_PD_Fwded_SC,SnpRespData_I_Fwded_SC}) {
|
SnpRespData_I_PD_Fwded_SC,SnpRespData_I_Fwded_SC}) {
|
||||||
Receive_SnpDataResp;
|
Receive_SnpDataResp;
|
||||||
|
|||||||
@@ -406,6 +406,7 @@ machine(MachineType:Cache, "Cache coherency protocol") :
|
|||||||
SnpRespData_UD, desc="";
|
SnpRespData_UD, desc="";
|
||||||
SnpRespData_SC_Fwded_SC, desc="";
|
SnpRespData_SC_Fwded_SC, desc="";
|
||||||
SnpRespData_SC_Fwded_SD_PD, desc="";
|
SnpRespData_SC_Fwded_SD_PD, desc="";
|
||||||
|
SnpRespData_SD_Fwded_SC, desc="";
|
||||||
SnpRespData_SC_PD_Fwded_SC, desc="";
|
SnpRespData_SC_PD_Fwded_SC, desc="";
|
||||||
SnpRespData_I_Fwded_SD_PD, desc="";
|
SnpRespData_I_Fwded_SD_PD, desc="";
|
||||||
SnpRespData_I_PD_Fwded_SC, desc="";
|
SnpRespData_I_PD_Fwded_SC, desc="";
|
||||||
|
|||||||
@@ -205,6 +205,7 @@ enumeration(CHIDataType, desc="...") {
|
|||||||
SnpRespData_SC_Fwded_SC;
|
SnpRespData_SC_Fwded_SC;
|
||||||
SnpRespData_SC_Fwded_SD_PD;
|
SnpRespData_SC_Fwded_SD_PD;
|
||||||
SnpRespData_SC_PD_Fwded_SC;
|
SnpRespData_SC_PD_Fwded_SC;
|
||||||
|
SnpRespData_SD_Fwded_SC;
|
||||||
SnpRespData_I_Fwded_SD_PD;
|
SnpRespData_I_Fwded_SD_PD;
|
||||||
SnpRespData_I_PD_Fwded_SC;
|
SnpRespData_I_PD_Fwded_SC;
|
||||||
SnpRespData_I_Fwded_SC;
|
SnpRespData_I_Fwded_SC;
|
||||||
@@ -243,6 +244,7 @@ structure(CHIDataMsg, desc="", interface="Message") {
|
|||||||
(type == CHIDataType:SnpRespData_SD) ||
|
(type == CHIDataType:SnpRespData_SD) ||
|
||||||
(type == CHIDataType:SnpRespData_UD) ||
|
(type == CHIDataType:SnpRespData_UD) ||
|
||||||
(type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
(type == CHIDataType:SnpRespData_SC_Fwded_SD_PD) ||
|
||||||
|
(type == CHIDataType:SnpRespData_SD_Fwded_SC) ||
|
||||||
(type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
(type == CHIDataType:SnpRespData_SC_PD_Fwded_SC) ||
|
||||||
(type == CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
(type == CHIDataType:SnpRespData_I_Fwded_SD_PD) ||
|
||||||
(type == CHIDataType:SnpRespData_I_PD_Fwded_SC);
|
(type == CHIDataType:SnpRespData_I_PD_Fwded_SC);
|
||||||
|
|||||||
Reference in New Issue
Block a user