mideleg

Machine Interrupt Delegation

Controls exception delegation from M-mode to HS/S-mode

By default, all traps at any privilege level are handled in machine mode, though a machine-mode handler can redirect traps back to the appropriate level with the MRET instruction. To increase performance, implementations can provide individual read/write bits within mideleg to indicate that certain exceptions and interrupts should be processed directly by a lower privilege level.

In harts with S-mode, the mideleg register must exist, and setting a bit mideleg will delegate the corresponding trap, when occurring in S-mode or U-mode, to the S-mode trap handler <%- if ext?(:H) -%> (which could further be delegated to VS-mode through hideleg) <%- end -%> . <%- if ext?(:S, "> 1.9.1") -%> In harts without S-mode, the mideleg register should not exist.

In versions 1.9.1 and earlier , this register existed but was hardwired to zero in M-mode only, or M/U without N harts. There is no reason to require they return zero in those cases, as the misa register indicates whether they exist.

<%- else -%> In harts without S-mode, the mideleg register is read-only zero. <%- end -%>

An implementation can choose to subset the delegatable traps, with the supported delegatable bits found by writing one to every bit location, then reading back the value in mideleg to see which bit positions hold a one.

Version 1.11 and earlier prohibited having any bits of mideleg be read-only one. Platform standards may always add such restrictions.

Traps never transition from a more-privileged mode to a less-privileged mode. For example, if M-mode has delegated illegal-instruction exceptions to S-mode, and M-mode software later executes an illegal instruction, the trap is taken in M-mode, rather than being delegated to S-mode. By contrast, traps may be taken horizontally. Using the same example, if M-mode has delegated illegal-instruction exceptions to S-mode, and S-mode software later executes an illegal instruction, the trap is taken in S-mode.

Delegated interrupts result in the interrupt being masked at the delegator privilege level. For example, if the supervisor timer interrupt (STI) is delegated to S-mode by setting mideleg[5], STIs will not be taken when executing in M-mode. By contrast, if mideleg[5] is clear, STIs can be taken in any mode and regardless of current mode will transfer control to M-mode.

mideleg holds trap delegation bits for individual interrupts, with the layout of bits matching those in the mip register (i.e., STIP interrupt delegation control is located in bit 5).

For exceptions that cannot occur in less privileged modes, the corresponding medeleg bits should be read-only zero. In particular, medeleg[11] is read-only zero.

The medeleg[16] is read-only zero as double trap is not delegatable.

Attributes

Defining Extension

  • oneOf:

    • Sm, version ⇐ 1.9.1

    • allOf:

      • S, version > 1.9.1

      • Sm, version > 1.9.1

CSR Address

0x303

Length

#<ConfiguredArchitecture:0x00007f75efbd67c8>-bit

Privilege Mode

M

Format

This CSR format changes dynamically.

mideleg Format when CSR[misa].MXL == 0
Figure 1. mideleg Format when CSR[misa].MXL == 0
mideleg Format when CSR[misa].MXL == 1
Figure 2. mideleg Format when CSR[misa].MXL == 1

Field Summary

Name Location Type Reset Value

mideleg.SSI

1

RW

0

mideleg.VSSI

2

RO

1

mideleg.MSI

3

RO

0

mideleg.STI

5

RW

0

mideleg.VSTI

6

RO

1

mideleg.MTI

7

RO

0

mideleg.SEI

9

RW

0

mideleg.VSEI

10

RO

1

mideleg.MEI

11

RO

0

mideleg.SGEI

12

RO

1

mideleg.LCOFI

13

RW

0

Fields

SSI

Location

1

Description

Supervisor Software Interrupt delegation

When 1, Supervisor Software interrupts are delegated to HS/S-mode.

Type

RW

Reset value

0

VSSI

Location

2

Description

Virtual Supervisor Software Interrupt delegation

When 1, Virtual Supervisor Software interrupts are delegated to HS-mode.

Virtual Supervisor Software Interrupts are always delegated to HS-mode, so this field is read-only one.

Type

RO

Reset value

1

MSI

Location

3

Description

Machine Software interrupt delegation

Since M-mode interrupts cannot be delegated, this field is read-only zero.

Type

RO

Reset value

0

STI

Location

5

Description

Supervisor Timer interrupt delegation

When 1, Supervisor Timer interrupts are delegated to HS/S-mode.

Type

RW

Reset value

0

VSTI

Location

6

Description

Virtual Supervisor Timer interrupt delegation

When 1, Virtual Supervisor Timer interrupts are delegated to HS-mode.

Virtual Supervisor Time Interrupts are always delegated to HS-mode, so this field is read-only one.

Type

RO

Reset value

1

MTI

Location

7

Description

Machine Timer interrupt delegation

Since M-mode interrupts cannot be delegated, this field is read-only zero.

Type

RO

Reset value

0

SEI

Location

9

Description

Supervisor External interrupt delegation

When 1, Supervisor External interrupts are delegated to HS/S-mode.

Type

RW

Reset value

0

VSEI

Location

10

Description

Virtual Supervisor External interrupt delegation

Virtual Supervisor External Interrupts are always delegated to HS-mode, so this field is read-only one.

Type

RO

Reset value

1

MEI

Location

11

Description

Machine External interrupt delegation

Since M-mode interrupts cannot be delegated, this field is read-only zero.

Type

RO

Reset value

0

SGEI

Location

12

Description

Supervisor Guest External Interrupt delegation

Supervisor Guest External interrupts are always delegated to HS-mode, so this field is read-only one.

Type

RO

Reset value

1

LCOFI

Location

13

Description

Local Counter Overflow Interrupt delegation

When 1, local counter overflow interrupts are delegated to (H)S-mode.

Type

RW

Reset value

0