diff options
author | Rafael Sene <rafael@riscv.org> | 2023-04-17 17:30:54 -0300 |
---|---|---|
committer | Rafael Sene <rafael@riscv.org> | 2023-04-17 17:40:09 -0300 |
commit | 68d1b358803efd32e2897552b6f6ad3a3afa8ae2 (patch) | |
tree | a2a929802cacf1f056c897f4030cfb0d957dd7e2 /src/rnmi.tex | |
parent | b71f77e8c8cc670a23a90c06cafe8d0f91134a33 (diff) | |
download | riscv-isa-manual-68d1b358803efd32e2897552b6f6ad3a3afa8ae2.zip riscv-isa-manual-68d1b358803efd32e2897552b6f6ad3a3afa8ae2.tar.gz riscv-isa-manual-68d1b358803efd32e2897552b6f6ad3a3afa8ae2.tar.bz2 |
Add the capability to build the Latex version of ISA
Signed-off-by: Rafael Sene <rafael@riscv.org>
Diffstat (limited to 'src/rnmi.tex')
-rw-r--r-- | src/rnmi.tex | 234 |
1 files changed, 0 insertions, 234 deletions
diff --git a/src/rnmi.tex b/src/rnmi.tex deleted file mode 100644 index d5821de..0000000 --- a/src/rnmi.tex +++ /dev/null @@ -1,234 +0,0 @@ -\chapter{``Smrnmi'' Standard Extension for Resumable Non-Maskable Interrupts, Version 0.4} -\label{chap:rnmi} - -{\bf Warning! This draft specification may change before being -accepted as standard by RISC-V International.} - -The base machine-level architecture supports only -unresumable non-maskable interrupts (UNMIs), where the NMI jumps to a -handler in machine mode, overwriting the current {\tt mepc} and {\tt mcause} -register values. If the hart had been executing machine-mode code in -a trap handler, the previous values in {\tt mepc} and {\tt mcause} would not -be recoverable and so execution is not generally resumable. - -The Smrnmi extension adds support for resumable non-maskable interrupts -(RNMIs) to RISC-V. The extension adds four new CSRs ({\tt mnepc}, -{\tt mncause}, {\tt mnstatus}, and {\tt mnscratch}) to hold the interrupted state, -and one new instruction, MNRET, to resume from the RNMI handler. - -\section{RNMI Interrupt Signals} - -The {\tt rnmi} interrupt signals are inputs to -the hart. These interrupts have higher priority than any other -interrupt or exception on the hart and cannot be disabled by software. -Specifically, they are not disabled by clearing the {\tt mstatus}.MIE -register. - -\section{RNMI Handler Addresses} - -The RNMI interrupt trap handler address is implementation-defined. - -RNMI also has an associated exception trap handler address, which is -implementation defined. - -\section{RNMI CSRs} - -This proposal adds additional M-mode CSRs to enable a resumable -non-maskable interrupt (RNMI). - -\begin{figure*}[h!] -{\footnotesize -\begin{center} -\setlength{\tabcolsep}{4pt} -\begin{tabular}{J} -\instbitrange{MXLEN-1}{0} \\ -\hline -\multicolumn{1}{|c|}{\tt mnscratch} \\ -\hline -MXLEN \\ -\end{tabular} -\end{center} -} -\vspace{-0.1in} -\caption{Resumable NMI scratch register {\tt mnscratch}.} -\label{fig:mnscratch} -\end{figure*} - -The {\tt mnscratch} CSR holds an MXLEN-bit read-write register which -enables the NMI trap handler to save and restore the context that was -interrupted. - -\begin{figure*}[h!] -{\footnotesize -\begin{center} -\setlength{\tabcolsep}{4pt} -\begin{tabular}{J} -\instbitrange{MXLEN-1}{0} \\ -\hline -\multicolumn{1}{|c|}{{\tt mnepc} (\warl)} \\ -\hline -MXLEN \\ -\end{tabular} -\end{center} -} -\vspace{-0.1in} -\caption{Resumable NMI program counter {\tt mnepc}.} -\label{fig:mnepc} -\end{figure*} - -The {\tt mnepc} CSR is an MXLEN-bit read-write register which on entry -to the NMI trap handler holds the PC of the instruction that took the -interrupt. - -The low bit of {\tt mnepc} ({\tt mnepc[0]}) is -always zero. On implementations that support only IALIGN=32, the two low bits -({\tt mnepc[1:0]}) are always zero. - -If an implementation allows IALIGN to be either 16 or 32 (by -changing CSR {\tt misa}, for example), then, whenever IALIGN=32, bit -{\tt mnepc[1]} is masked on reads so that it appears to be 0. This -masking occurs also for the implicit read by the MRET instruction. -Though masked, {\tt mnepc[1]} remains writable when IALIGN=32. - -{\tt mnepc} is a \warl\ register that must be able to hold all valid -virtual addresses. It need not be capable of holding all possible invalid -addresses. -Prior to writing {\tt mnepc}, implementations may convert an invalid address -into some other invalid address that {\tt mnepc} is capable of holding. - - -\begin{figure*}[h!] -{\footnotesize -\begin{center} -\setlength{\tabcolsep}{4pt} -\begin{tabular}{cU} -\instbit{MXLEN-1} & -\instbitrange{MXLEN-2}{0} \\ -\hline -\multicolumn{1}{|c|}{1} & -\multicolumn{1}{c|}{NMI Cause (\warl)} \\ -\hline -1 & MXLEN-1 \\ -\end{tabular} -\end{center} -} -\vspace{-0.1in} -\caption{Resumable NMI cause {\tt mncause}.} -\label{fig:mncause} -\end{figure*} - -The {\tt mncause} CSR holds the reason for the NMI, with bit MXLEN-1 set to -1, and the NMI cause encoded in the least-significant bits or zero if -NMI causes are not supported. - -\begin{figure*}[h!] -{\footnotesize -\begin{center} -\setlength{\tabcolsep}{4pt} -\begin{tabular}{TRFcFcF} -\instbitrange{MXLEN-1}{13} & -\instbitrange{12}{11} & -\instbitrange{10}{8} & -\instbit{7} & -\instbitrange{6}{4} & -\instbit{3} & -\instbitrange{2}{0} \\ -\hline -\multicolumn{1}{|c|}{\em Reserved} & -\multicolumn{1}{c|}{MNPP (\warl)} & -\multicolumn{1}{c|}{\em Reserved} & -\multicolumn{1}{c|}{MNPV (\warl)} & -\multicolumn{1}{c|}{\em Reserved} & -\multicolumn{1}{c|}{NMIE} & -\multicolumn{1}{c|}{\em Reserved} \\ -\hline -MXLEN-13 & 2 & 3 & 1 & 3 & 1 & 3 \\ -\end{tabular} -\end{center} -} -\vspace{-0.1in} -\caption{Resumable NMI status register {\tt mnstatus}.} -\label{fig:mnstatus} -\end{figure*} - -The {\tt mnstatus} CSR holds a two-bit field, MNPP, which on entry to the trap -handler holds the privilege mode of the interrupted context, encoded -in the same manner as {\tt mstatus}.MPP. -It also holds a one-bit field, MNPV, which on entry to the trap handler holds -the virtualization mode of the interrupted context, encoded in the same -manner as {\tt mstatus}.MPV. - -{\tt mnstatus} also holds the NMIE bit. -When NMIE=1, nonmaskable interrupts are enabled. -When NMIE=0, {\em all} interrupts are disabled. - -When NMIE=0, the hart behaves as though {\tt mstatus}.MPRV were clear, -regardless of the current setting of {\tt mstatus}.MPRV. - -Upon reset, NMIE contains the value 0. - -\begin{commentary} -RNMIs are masked out of reset to give software the opportunity to initialize -data structures and devices for subsequent RNMI handling. -\end{commentary} - -Software can set NMIE to 1, but attempts to clear NMIE have no effect. - -\begin{commentary} -Normally, only reset sequences will explicitly set the NMIE bit. -\end{commentary} -\begin{commentary} -That the NMIE bit is settable does not suffice to support the nesting of -RNMIs. -To support this feature in a direct manner would have required allowing -software to clear the NMIE bit---a design choice that would have contravened -the concept of non-maskability. - -Software that wishes to minimize the latency until the next RNMI is taken can -follow the top-half/bottom-half model, where the RNMI handler itself only -enqueues a task to a task queue then returns. -The bulk of the interrupt servicing is performed later, with RNMIs enabled. -\end{commentary} - -For the purposes of the WFI instruction, NMIE is a global interrupt enable, -meaning that the setting of NMIE does not affect the operation of the WFI -instruction. - -The other -bits in {\tt mnstatus} are {\em reserved}; software should write zeros and -hardware implementations should return zeros. - -\section{MNRET Instruction} - -MNRET is an M-mode-only instruction that uses the values in {\tt mnepc} and -{\tt mnstatus} to return to the program counter, privilege mode, -and virtualization mode of the interrupted context. -This instruction also sets {\tt mnstatus}.NMIE. - -\section{RNMI Operation} - -When an RNMI interrupt is detected, the interrupted PC is written to -the {\tt mnepc} CSR, the type of RNMI to the {\tt mncause} CSR, and the -privilege mode of the interrupted context to the {\tt mnstatus} CSR. -The {\tt mnstatus}.NMIE bit is cleared, masking all interrupts. - -The hart then enters machine-mode and jumps to the RNMI trap handler -address. - -The RNMI handler can resume original execution using the new MNRET -instruction, which restores the PC from {\tt mnepc}, the privilege mode -from {\tt mnstatus}, and also sets {\tt mnstatus}.NMIE, which -re-enables interrupts. - -If the hart encounters an exception while the {\tt mnstatus}.NMIE bit is -clear, the actions taken are the same as if the exception had occurred while -{\tt mnstatus}.NMIE were set, except that the program counter is set to the -RNMI exception trap handler address (rather than the address specified by -{\tt mtvec}). - -\begin{commentary} -The Smrnmi extension does not change the behavior of the MRET and SRET -instructions. -In particular, MRET and SRET are unaffected by the {\tt mnstatus}.NMIE bit, -and their execution does not alter the {\tt mnstatus}.NMIE bit. -\end{commentary} |