diff --git a/riscv-tools b/riscv-tools index 3aeba958..e15160d1 160000 --- a/riscv-tools +++ b/riscv-tools @@ -1 +1 @@ -Subproject commit 3aeba95847a80f92bed639d0b76f4dfbd13a6ee0 +Subproject commit e15160d13aca4c007bcab70375eb438d7a204562 diff --git a/src/main/scala/rocket/PMP.scala b/src/main/scala/rocket/PMP.scala index bc9b0db7..e6f25d9e 100644 --- a/src/main/scala/rocket/PMP.scala +++ b/src/main/scala/rocket/PMP.scala @@ -89,8 +89,11 @@ class PMP(implicit p: Parameters) extends PMPReg { private def rangeHomogeneous(x: UInt, pgLevel: UInt, prev: PMP) = { val beginsAfterLower = !(x < prev.comparand) val beginsAfterUpper = !(x < comparand) - val endsBeforeLower = pgLevelMap { idxBits => (x >> idxBits) < (prev.comparand >> idxBits) } (pgLevel) - val endsBeforeUpper = pgLevelMap { idxBits => (x >> idxBits) < (comparand >> idxBits) } (pgLevel) + + val pgMask = pgLevelMap { idxBits => ((BigInt(1) << paddrBits) - (BigInt(1) << idxBits)).U } (pgLevel) + val endsBeforeLower = (x & pgMask) < (prev.comparand & pgMask) + val endsBeforeUpper = (x & pgMask) < (comparand & pgMask) + endsBeforeLower || beginsAfterUpper || (beginsAfterLower && endsBeforeUpper) }