pmpcfg2

PMP Configuration Register 2

PMP entry configuration

Attributes

Defining Extension

  • Smpmp, version >= 0

CSR Address

0x3a2

Length

32-bit

64-bit

Privilege Mode

M

Format

This CSR format changes dynamically.

svg
svg

Field Summary

Name Location Type Reset Value

pmp8cfg

7:0

RW-R
RO
UNDEFINED_LEGAL
0

pmp9cfg

15:8

RW-R
RO
UNDEFINED_LEGAL
0

pmp10cfg

23:16

RW-R
RO
UNDEFINED_LEGAL
0

pmp11cfg

31:24

RW-R
RO
UNDEFINED_LEGAL
0

pmp12cfg

39:32

RW-R
RO
UNDEFINED_LEGAL
0

pmp13cfg

47:40

RW-R
RO
UNDEFINED_LEGAL
0

pmp14cfg

55:48

RW-R
RO
UNDEFINED_LEGAL
0

pmp15cfg

63:56

RW-R
RO
UNDEFINED_LEGAL
0

Fields

pmp8cfg

Location

7:0

Description

PMP configuration for entry 8

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 7 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 6:5 ! Reserved Writes shall be ignored.
h! A ! 4:3
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 2 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 1 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 0 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp9cfg

Location

15:8

Description

PMP configuration for entry 9

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 15 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 14:13 ! Reserved Writes shall be ignored.
h! A ! 12:11
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 10 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 9 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 8 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp10cfg

Location

23:16

Description

PMP configuration for entry 10

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 23 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 22:21 ! Reserved Writes shall be ignored.
h! A ! 20:19
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 18 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 17 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 16 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp11cfg

Location

31:24

Description

PMP configuration for entry 11

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 31 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 30:29 ! Reserved Writes shall be ignored.
h! A ! 28:27
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 26 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 25 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 24 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp12cfg

pmp12cfg is only defined in RV64 (CSR[misa].MXL == 1)
Location

39:32

Description

PMP configuration for entry 12

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 39 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 38:37 ! Reserved Writes shall be ignored.
h! A ! 36:35
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 34 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 33 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 32 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp13cfg

pmp13cfg is only defined in RV64 (CSR[misa].MXL == 1)
Location

47:40

Description

PMP configuration for entry 13

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 47 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 46:45 ! Reserved Writes shall be ignored.
h! A ! 44:43
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 42 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 41 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 40 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp14cfg

pmp14cfg is only defined in RV64 (CSR[misa].MXL == 1)
Location

55:48

Description

PMP configuration for entry 14

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 55 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 54:53 ! Reserved Writes shall be ignored.
h! A ! 52:51
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 50 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 49 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 48 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

pmp15cfg

pmp15cfg is only defined in RV64 (CSR[misa].MXL == 1)
Location

63:56

Description

PMP configuration for entry 15

The bits are as follows:

[separator="!",%autowidth]
!===
! Name ! Location ! Description

h! L ! 63 ! Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.
h! - ! 62:61 ! Reserved Writes shall be ignored.
h! A ! 60:59
a! Address matching mode. One of:

[when="PMP_GRANULARITY < 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NA4 (2) - Naturally aligned four-byte region

  • NAPOT (3) - Natrually aligned power of two
    + [when="PMP_GRANULARITY >= 2"]

  • OFF (0) - Null region (disabled)

  • TOR (1) - Top of range

  • NAPOT (3) - Natrually aligned power of two

    [when="PMP_GRANULARITY >= 2"]
    Naturally aligned four-byte region, NA4 (2), is not valid (not needed when the PMP granularity is larger than 4 bytes).

    h! X ! 58 ! When clear, instruction fetchs cause an Access Fault for the matching region and privilege mode.
    h! W ! 57 ! When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.
    h! R ! 56 ! When clear, loads cause an Access Fault for the matching region and privilege mode.
    !===

    The combination of R = 0, W = 1 is reserved.

Type
RW-R
RO
Reset value
UNDEFINED_LEGAL
0

Software write

This CSR may store a value that is different from what software attempts to write.

When a software write occurs (e.g., through csrrw), the following determines the written value:

pmp8cfg = if ((CSR[pmpcfg2].pmp8cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp8cfg & 0x1) == 0) && ((csr_value.pmp8cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp8cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp8cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp8cfg;

pmp9cfg = if ((CSR[pmpcfg2].pmp9cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp9cfg & 0x1) == 0) && ((csr_value.pmp9cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp9cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp9cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp9cfg;

pmp10cfg = if ((CSR[pmpcfg2].pmp10cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp10cfg & 0x1) == 0) && ((csr_value.pmp10cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp10cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp10cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp10cfg;

pmp11cfg = if ((CSR[pmpcfg2].pmp11cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp11cfg & 0x1) == 0) && ((csr_value.pmp11cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp11cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp11cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp11cfg;

pmp12cfg = if ((CSR[pmpcfg2].pmp12cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp12cfg & 0x1) == 0) && ((csr_value.pmp12cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp12cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp12cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp12cfg;

pmp13cfg = if ((CSR[pmpcfg2].pmp13cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp13cfg & 0x1) == 0) && ((csr_value.pmp13cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp13cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp13cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp13cfg;

pmp14cfg = if ((CSR[pmpcfg2].pmp14cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp14cfg & 0x1) == 0) && ((csr_value.pmp14cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp14cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp14cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp14cfg;

pmp15cfg = if ((CSR[pmpcfg2].pmp15cfg & 0x80) == 0) {
  # entry is not locked
  if (!(((csr_value.pmp15cfg & 0x1) == 0) && ((csr_value.pmp15cfg & 0x2) == 0x2))) {
    # not R = 0, W =1, which is reserved
    if ((PMP_GRANULARITY < 2) ||
        ((csr_value.pmp15cfg & 0x18) != 0x10)) {
      # NA4 is not allowed when PMP granularity is larger than 4 bytes
      return csr_value.pmp15cfg;
    }
  }
}
# fall through: keep old value
return CSR[pmpcfg2].pmp15cfg;