arch/risc-v: Merge mcause.h into irq.h

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
This commit is contained in:
Huang Qi 2022-01-21 23:39:28 +08:00 committed by Xiang Xiao
parent eec94132c4
commit b803919b9d
5 changed files with 25 additions and 81 deletions

View File

@ -66,6 +66,8 @@
#define RISCV_IRQ_RESERVED (14) /* Reserved */ #define RISCV_IRQ_RESERVED (14) /* Reserved */
#define RISCV_IRQ_SROREPF (15) /* Store/AMO page fault */ #define RISCV_IRQ_SROREPF (15) /* Store/AMO page fault */
#define RISCV_MAX_EXCEPTION (15)
/* IRQ 16- : (async event:interrupt=1) */ /* IRQ 16- : (async event:interrupt=1) */
#define RISCV_IRQ_ASYNC (16) #define RISCV_IRQ_ASYNC (16)
@ -77,6 +79,16 @@
#define RISCV_IRQ_MEXT (RISCV_IRQ_ASYNC + 11) /* Machine External Int */ #define RISCV_IRQ_MEXT (RISCV_IRQ_ASYNC + 11) /* Machine External Int */
#define RISCV_IRQ_HPMOV (RISCV_IRQ_ASYNC + 17) /* HPM Overflow Int */ #define RISCV_IRQ_HPMOV (RISCV_IRQ_ASYNC + 17) /* HPM Overflow Int */
/* IRQ bit and IRQ mask */
#ifdef CONFIG_ARCH_RV32
# define RISCV_IRQ_BIT (1 << 31)
#else
# define RISCV_IRQ_BIT (1 << 63)
#endif
#define RISCV_IRQ_MASK (~RISCV_IRQ_BIT)
/* Configuration ************************************************************/ /* Configuration ************************************************************/
/* If this is a kernel build, how many nested system calls should we /* If this is a kernel build, how many nested system calls should we

View File

@ -1,63 +0,0 @@
/****************************************************************************
* arch/risc-v/include/mcause.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_RISCV_INCLUDE_MCAUSE_H
#define __ARCH_RISCV_INCLUDE_MCAUSE_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Interrupt(BIT31) or Exception(0) */
#define MCAUSE_INTERRUPT (1 << 31)
#define MCAUSE_INTERRUPT_MASK (~MCAUSE_INTERRUPT)
/* Exception values *********************************************************/
#define MCAUSE_ADDE_MISALIGNED (0) /* Instruction address misaligned */
#define MCAUSE_INST_ACCESS_FAULT (1) /* Instruction access fault */
#define MCAUSE_ILLEGAL_INST (2) /* Illegal instruction */
#define MCAUSE_BREAKPOINT (3) /* Breakpoint */
#define MCAUSE_LOAD_MISALIGNED (4) /* Load address misaligned */
#define MCAUSE_LOAD_ACCESS_FAULT (5) /* Load access fault */
#define MCAUSE_STORE_MISALIGNED (6) /* Store/AMO address misaligned */
#define MCAUSE_STORE_ACCESS_FAULT (7) /* Store/AMO access fault */
#define MCAUSE_ECALL_U (8) /* Environment call from U-mode */
#define MCAUSE_ECALL_S (9) /* Environment call from S-mode */
#define MCAUSE_RESERVED (10) /* Reserved */
#define MCAUSE_ECALL_M (11) /* Environment call from M-mode */
#define MCAUSE_INST_PAGE_FAULT (12) /* Instruction page fault */
#define MCAUSE_LOAD_PAGE_FAULT (13) /* Load page fault */
#define MCAUSE_RESERVED (14) /* Reserved */
#define MCAUSE_STORE_PAGE_FAULT (15) /* Store/AMO page fault */
/* Max RISC-V defined mcause exception values. */
#define MCAUSE_MAX_EXCEPTION (15)
#endif /* __ARCH_RISCV_INCLUDE_MCAUSE_H */

View File

@ -25,7 +25,7 @@
* Included Files * Included Files
****************************************************************************/ ****************************************************************************/
#include <arch/mcause.h> #include <arch/irq.h>
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions

View File

@ -33,13 +33,12 @@
#include <nuttx/arch.h> #include <nuttx/arch.h>
#include <nuttx/board.h> #include <nuttx/board.h>
#include <nuttx/syslog/syslog.h> #include <nuttx/syslog/syslog.h>
#include <arch/mcause.h> #include <arch/irq.h>
#include "riscv_arch.h" #include "riscv_arch.h"
#include "riscv_internal.h" #include "riscv_internal.h"
#ifdef CONFIG_DEBUG_INFO static const char *g_reasons_str[RISCV_MAX_EXCEPTION + 1] =
static const char *g_reasons_str[MCAUSE_MAX_EXCEPTION + 1] =
{ {
"Instruction address misaligned", "Instruction address misaligned",
"Instruction access fault", "Instruction access fault",
@ -58,7 +57,6 @@ static const char *g_reasons_str[MCAUSE_MAX_EXCEPTION + 1] =
"Reserved", "Reserved",
"Store/AMO page fault" "Store/AMO page fault"
}; };
#endif
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
@ -74,21 +72,19 @@ static const char *g_reasons_str[MCAUSE_MAX_EXCEPTION + 1] =
void riscv_exception(uintptr_t mcause, uintptr_t *regs) void riscv_exception(uintptr_t mcause, uintptr_t *regs)
{ {
uintptr_t cause = mcause & MCAUSE_INTERRUPT_MASK; uintptr_t cause = mcause & RISCV_IRQ_MASK;
#ifdef CONFIG_DEBUG_INFO if (mcause > RISCV_MAX_EXCEPTION)
if (mcause > MCAUSE_MAX_EXCEPTION)
{ {
_alert("EXCEPTION: Unknown. MCAUSE: %08" PRIx32 "\n", cause); _alert("EXCEPTION: Unknown. MCAUSE: %" PRIxREG "\n", cause);
} }
else else
{ {
_alert("EXCEPTION: %s. MCAUSE: %08" PRIx32 "\n", _alert("EXCEPTION: %s. MCAUSE: %" PRIxREG "\n",
g_reasons_str[cause], cause); g_reasons_str[cause], cause);
} }
#endif
_alert("PANIC!!! Exception = %08" PRIx32 "\n", cause); _alert("PANIC!!! Exception = %" PRIxREG "\n", cause);
up_irq_save(); up_irq_save();
CURRENT_REGS = regs; CURRENT_REGS = regs;
PANIC(); PANIC();

View File

@ -34,7 +34,6 @@
#include <arch/board/board.h> #include <arch/board/board.h>
#include <arch/irq.h> #include <arch/irq.h>
#include <arch/mcause.h>
#include "riscv_internal.h" #include "riscv_internal.h"
#include "hardware/esp32c3_interrupt.h" #include "hardware/esp32c3_interrupt.h"
@ -378,8 +377,8 @@ IRAM_ATTR uintptr_t *esp32c3_dispatch_irq(uintptr_t mcause, uintptr_t *regs)
int irq; int irq;
uintptr_t *mepc = regs; uintptr_t *mepc = regs;
if (((MCAUSE_INTERRUPT & mcause) == 0) && if (((RISCV_IRQ_BIT & mcause) == 0) &&
(mcause != MCAUSE_ECALL_M)) (mcause != RISCV_IRQ_ECALLM))
{ {
#ifdef CONFIG_ESP32C3_EXCEPTION_ENABLE_CACHE #ifdef CONFIG_ESP32C3_EXCEPTION_ENABLE_CACHE
if (!spi_flash_cache_enabled()) if (!spi_flash_cache_enabled())
@ -406,9 +405,9 @@ IRAM_ATTR uintptr_t *esp32c3_dispatch_irq(uintptr_t mcause, uintptr_t *regs)
board_autoled_on(LED_INIRQ); board_autoled_on(LED_INIRQ);
if ((MCAUSE_INTERRUPT & mcause) != 0) if ((RISCV_IRQ_BIT & mcause) != 0)
{ {
uint8_t cpuint = mcause & MCAUSE_INTERRUPT_MASK; uint8_t cpuint = mcause & RISCV_IRQ_MASK;
DEBUGASSERT(cpuint <= ESP32C3_CPUINT_MAX); DEBUGASSERT(cpuint <= ESP32C3_CPUINT_MAX);
@ -427,7 +426,7 @@ IRAM_ATTR uintptr_t *esp32c3_dispatch_irq(uintptr_t mcause, uintptr_t *regs)
} }
else else
{ {
if (mcause == MCAUSE_ECALL_M) if (mcause == RISCV_IRQ_ECALLM)
{ {
*mepc += 4; *mepc += 4;
irq_dispatch(ESP32C3_IRQ_ECALL_M, regs); irq_dispatch(ESP32C3_IRQ_ECALL_M, regs);