• M
    RISC-V: Add support for vectored interrupts · acbbb94e
    Michael Clark 提交于
    If vectored interrupts are enabled (bits[1:0]
    of mtvec/stvec == 1) then use the following
    logic for trap entry address calculation:
    
     pc = mtvec + cause * 4
    
    In addition to adding support for vectored interrupts
    this patch simplifies the interrupt delivery logic
    by making sync/async cause decoding and encoding
    steps distinct.
    
    The cause code and the sign bit indicating sync/async
    is split at the beginning of the function and fixed
    cause is renamed to cause. The MSB setting for async
    traps is delayed until setting mcause/scause to allow
    redundant variables to be eliminated. Some variables
    are renamed for conciseness and moved so that decls
    are at the start of the block.
    
    Cc: Palmer Dabbelt <palmer@sifive.com>
    Cc: Alistair Francis <Alistair.Francis@wdc.com>
    Signed-off-by: NMichael Clark <mjc@sifive.com>
    Signed-off-by: NAlistair Francis <alistair.francis@wdc.com>
    Signed-off-by: NPalmer Dabbelt <palmer@sifive.com>
    acbbb94e
csr.c 25.8 KB