Skip to content

Commit 9561e5c

Browse files
authored
MSHR: return data when RetToSrc = 1 and snoop is SnpUnique* (#136)
1 parent 7de7520 commit 9561e5c

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/main/scala/coupledL2/tl2chi/MSHR.scala

+6-2
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,17 @@ class MSHR(implicit p: Parameters) extends TL2CHIL2Module {
179179
req_chiOpcode === SnpCleanShared ||
180180
req_chiOpcode === SnpCleanInvalid
181181
)
182-
val doRespData_retToSrc_fwd = req.retToSrc.get && isSnpToBFwd(req_chiOpcode)
183-
val doRespData_retToSrc_nonFwd = req.retToSrc.get && meta.state === BRANCH && isSnpToBNonFwd(req_chiOpcode)
182+
val doRespData_retToSrc_fwd = req.retToSrc.get && (isSnpToBFwd(req_chiOpcode) || isSnpToNFwd(req_chiOpcode))
183+
val doRespData_retToSrc_nonFwd = req.retToSrc.get && meta.state === BRANCH && (isSnpToBNonFwd(req_chiOpcode) || isSnpToNNonFwd(req_chiOpcode))
184184
val doRespData = Mux(
185185
dirResult.hit,
186186
doRespData_dirty || doRespData_retToSrc_fwd || doRespData_retToSrc_nonFwd,
187187
req.snpHitRelease && req.snpHitReleaseWithData
188188
)
189+
dontTouch(doRespData_dirty)
190+
dontTouch(doRespData_retToSrc_fwd)
191+
dontTouch(doRespData_retToSrc_nonFwd)
192+
189193
/**
190194
* About which snoop should echo SnpResp[Data]Fwded instead of SnpResp[Data]:
191195
* 1. When the snoop opcode is Snp*Fwd and the snooped block is valid.

src/main/scala/coupledL2/tl2chi/chi/Opcode.scala

+10
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ object CHIOpcode {
186186
opcode === SnpSharedFwd
187187
}
188188

189+
def isSnpToNNonFwd(opcode: UInt): Bool = {
190+
widthCheck(opcode)
191+
opcode === SnpUnique || opcode === SnpUniqueStash
192+
}
193+
194+
def isSnpToNFwd(opcode: UInt): Bool = {
195+
widthCheck(opcode)
196+
opcode === SnpUniqueFwd
197+
}
198+
189199
def isSnpUniqueX(opcode: UInt): Bool = {
190200
widthCheck(opcode)
191201
opcode === SnpUnique || opcode === SnpUniqueFwd || opcode === SnpUniqueStash

0 commit comments

Comments
 (0)