require(!m.supportsGet||m.supportsGet.contains(allSizes),s"MemoryMap region ${m.name} only supports ${m.supportsGet} Get, but must support ${allSizes}")
require(!m.supportsPutFull||m.supportsPutFull.contains(allSizes),s"MemoryMap region ${m.name} only supports ${m.supportsPutFull} PutFull, but must support ${allSizes}")
require(!m.supportsAcquireB||m.supportsAcquireB.contains(xferSizes),s"MemoryMap region ${m.name} only supports ${m.supportsAcquireB} AcquireB, but must support ${xferSizes}")
require(!m.supportsAcquireT||m.supportsAcquireT.contains(xferSizes),s"MemoryMap region ${m.name} only supports ${m.supportsAcquireT} AcquireT, but must support ${xferSizes}")
require(!m.supportsLogical||m.supportsLogical.contains(amoSizes),s"MemoryMap region ${m.name} only supports ${m.supportsLogical} Logical, but must support ${amoSizes}")
require(!m.supportsArithmetic||m.supportsArithmetic.contains(amoSizes),s"MemoryMap region ${m.name} only supports ${m.supportsArithmetic} Arithmetic, but must support ${amoSizes}")
require(m.supportsAcquireT||!m.supportsAcquireB,s"MemoryMap region ${m.name} supports AcquireB (cached read) but not AcquireT (cached write)... and rocket assumes this")
(m.address,TLBFixedPermissions(
r=m.supportsGet||m.supportsAcquireB,// if cached, never uses Get
w=m.supportsPutFull||m.supportsAcquireT,// if cached, never uses Put