tilelink: it is now legal to support Acquire for UNCACHED regions
These cases exist: GET_EFFECTS, PUT_EFFECTS, UNCACHEABLE && !supportsAcquire: MMIO UNCACHED && !supportsAcquire: speculation ok and may be cached UNCACHED && supportsAcquire: LLC/CacheCork applied (slave never probes) CACHED, TRACKED && supportsAcquire: slave might probe
This commit is contained in:
parent
0ab5cb67b3
commit
651da73d89
@ -20,9 +20,8 @@ class TLCacheCork(unsafe: Boolean = false)(implicit p: Parameters) extends LazyM
|
||||
mp.copy(
|
||||
endSinkId = 1,
|
||||
managers = mp.managers.map { m => m.copy(
|
||||
regionType = if (m.regionType == RegionType.UNCACHED) RegionType.TRACKED else m.regionType,
|
||||
supportsAcquireB = m.supportsGet,
|
||||
supportsAcquireT = m.supportsPutFull)})})
|
||||
supportsAcquireB = if (m.regionType == RegionType.UNCACHED) m.supportsGet else m.supportsAcquireB,
|
||||
supportsAcquireT = if (m.regionType == RegionType.UNCACHED) m.supportsPutFull else m.supportsAcquireT)})})
|
||||
|
||||
lazy val module = new LazyModuleImp(this) {
|
||||
val io = new Bundle {
|
||||
@ -37,6 +36,7 @@ class TLCacheCork(unsafe: Boolean = false)(implicit p: Parameters) extends LazyM
|
||||
require (caches.size <= 1 || unsafe, "Only one caching client allowed")
|
||||
edgeOut.manager.managers.foreach { case m =>
|
||||
require (!m.supportsAcquireB || unsafe, "Cannot support caches beyond the Cork")
|
||||
require (m.regionType <= RegionType.UNCACHED)
|
||||
}
|
||||
|
||||
// The Cork turns [Acquire=>Get] => [AccessAckData=>GrantData]
|
||||
|
@ -38,8 +38,9 @@ case class TLManagerParameters(
|
||||
require (supportsAcquireB.contains(supportsAcquireT))
|
||||
|
||||
// Make sure that the regionType agrees with the capabilities
|
||||
require ((regionType == RegionType.CACHED || regionType == RegionType.TRACKED) != supportsAcquireB.none)
|
||||
require (regionType != RegionType.UNCACHED || supportsGet)
|
||||
require (!supportsAcquireB || regionType >= RegionType.UNCACHED) // acquire -> uncached, tracked, cached
|
||||
require (regionType <= RegionType.UNCACHED || supportsAcquireB) // tracked, cached -> acquire
|
||||
require (regionType != RegionType.UNCACHED || supportsGet) // uncached -> supportsGet
|
||||
|
||||
val name = nodePath.lastOption.map(_.lazyModule.name).getOrElse("disconnected")
|
||||
val maxTransfer = List( // Largest supported transfer of all types
|
||||
|
Loading…
Reference in New Issue
Block a user