pmpcfg9

PMP Configuration Register 9

PMP entry configuration

Attributes

Defining Extension

  • Smpmp, version >= 0

CSR Address

0x3a9

Length

32-bit

Privilege Mode

M

Format

pmpcfg9 format
Figure 1. pmpcfg9 format

Field Summary

Name Location Type Reset Value

pmpcfg9.pmp36cfg

7:0

[when,"(NUM_PMP_ENTRIES > 36)"] RW-R [when,"(NUM_PMP_ENTRIES ⇐ 36)"] RO

[when,"(NUM_PMP_ENTRIES > 36)"] UNDEFINED_LEGAL [when,"(NUM_PMP_ENTRIES ⇐ 36)"] 0

pmpcfg9.pmp37cfg

15:8

[when,"(NUM_PMP_ENTRIES > 37)"] RW-R [when,"(NUM_PMP_ENTRIES ⇐ 37)"] RO

[when,"(NUM_PMP_ENTRIES > 37)"] UNDEFINED_LEGAL [when,"(NUM_PMP_ENTRIES ⇐ 37)"] 0

pmpcfg9.pmp38cfg

23:16

[when,"(NUM_PMP_ENTRIES > 38)"] RW-R [when,"(NUM_PMP_ENTRIES ⇐ 38)"] RO

[when,"(NUM_PMP_ENTRIES > 38)"] UNDEFINED_LEGAL [when,"(NUM_PMP_ENTRIES ⇐ 38)"] 0

pmpcfg9.pmp39cfg

31:24

[when,"(NUM_PMP_ENTRIES > 39)"] RW-R [when,"(NUM_PMP_ENTRIES ⇐ 39)"] RO

[when,"(NUM_PMP_ENTRIES > 39)"] UNDEFINED_LEGAL [when,"(NUM_PMP_ENTRIES ⇐ 39)"] 0

Fields

pmp36cfg

Location

7:0

Description

PMP configuration for entry 36

The bits are as follows:

Name Location Description

L

7

Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.

-

6:5

Reserved Writes shall be ignored.

A

4:3

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) - Naturally aligned power of two
[when="PMP_GRANULARITY >= 2"]
* *OFF* (0) - Null region (disabled)
* *TOR* (1) - Top of range
* *NAPOT* (3) - Naturally aligned power of two

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

X

2

When clear, instruction fetches cause an Access Fault for the matching region and privilege mode.

W

1

When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.

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

pmp37cfg

Location

15:8

Description

PMP configuration for entry 37

The bits are as follows:

Name Location Description

L

15

Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.

-

14:13

Reserved Writes shall be ignored.

A

12:11

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) - Naturally aligned power of two
[when="PMP_GRANULARITY >= 2"]
* *OFF* (0) - Null region (disabled)
* *TOR* (1) - Top of range
* *NAPOT* (3) - Naturally aligned power of two

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

X

10

When clear, instruction fetches cause an Access Fault for the matching region and privilege mode.

W

9

When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.

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

pmp38cfg

Location

23:16

Description

PMP configuration for entry 38

The bits are as follows:

Name Location Description

L

23

Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.

-

22:21

Reserved Writes shall be ignored.

A

20:19

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) - Naturally aligned power of two
[when="PMP_GRANULARITY >= 2"]
* *OFF* (0) - Null region (disabled)
* *TOR* (1) - Top of range
* *NAPOT* (3) - Naturally aligned power of two

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

X

18

When clear, instruction fetches cause an Access Fault for the matching region and privilege mode.

W

17

When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.

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

pmp39cfg

Location

31:24

Description

PMP configuration for entry 39

The bits are as follows:

Name Location Description

L

31

Locks the entry from further modification. Additionally, when set, PMP checks also apply to M-mode for the entry.

-

30:29

Reserved Writes shall be ignored.

A

28:27

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) - Naturally aligned power of two
[when="PMP_GRANULARITY >= 2"]
* *OFF* (0) - Null region (disabled)
* *TOR* (1) - Top of range
* *NAPOT* (3) - Naturally aligned power of two

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

X

26

When clear, instruction fetches cause an Access Fault for the matching region and privilege mode.

W

25

When clear, stores and AMOs cause an Access Fault for the matching region and privilege mode.

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

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:

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

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

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

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