xiaoxiang781216 commented on a change in pull request #5192: URL: https://github.com/apache/incubator-nuttx/pull/5192#discussion_r781226655
########## File path: arch/risc-v/include/irq.h ########## @@ -31,21 +31,457 @@ /* Include chip-specific IRQ definitions (including IRQ numbers) */ +#include <nuttx/config.h> +#include <arch/types.h> + +#ifndef __ASSEMBLY__ #include <stdint.h> #include <nuttx/irq.h> #include <arch/csr.h> #include <arch/chip/irq.h> +#endif + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Configuration ************************************************************/ + +/* If this is a kernel build, how many nested system calls should we + * support? + */ + +#ifndef CONFIG_SYS_NNEST +# define CONFIG_SYS_NNEST 2 Review comment: add two space for alignment ########## File path: arch/risc-v/include/irq.h ########## @@ -31,21 +31,457 @@ /* Include chip-specific IRQ definitions (including IRQ numbers) */ +#include <nuttx/config.h> +#include <arch/types.h> + +#ifndef __ASSEMBLY__ #include <stdint.h> #include <nuttx/irq.h> #include <arch/csr.h> #include <arch/chip/irq.h> +#endif + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Configuration ************************************************************/ + +/* If this is a kernel build, how many nested system calls should we + * support? + */ + +#ifndef CONFIG_SYS_NNEST +# define CONFIG_SYS_NNEST 2 +#endif + +/* Processor PC */ + +#define REG_EPC_NDX 0 + +/* General pupose registers + * $0: Zero register does not need to be saved + * $1: ra (return address) + */ + +#define REG_X1_NDX 1 + +/* $2: Stack POinter + * $3: Global Pointer + * $4: Thread Pointer + */ + +#define REG_X2_NDX 2 +#define REG_X3_NDX 3 +#define REG_X4_NDX 4 + +/* $5-$7 = t0-t3: Temporary registers */ + +#define REG_X5_NDX 5 +#define REG_X6_NDX 6 +#define REG_X7_NDX 7 + +/* $8: s0 / fp Frame pointer */ + +#define REG_X8_NDX 8 + +/* $89 s1 Saved register */ + +#define REG_X9_NDX 9 + +/* $10-$17 = a0-a7: Argument registers */ + +#define REG_X10_NDX 10 +#define REG_X11_NDX 11 +#define REG_X12_NDX 12 +#define REG_X13_NDX 13 +#define REG_X14_NDX 14 +#define REG_X15_NDX 15 +#define REG_X16_NDX 16 +#define REG_X17_NDX 17 + +/* $18-$27 = s2-s11: Saved registers */ + +#define REG_X18_NDX 18 +#define REG_X19_NDX 19 +#define REG_X20_NDX 20 +#define REG_X21_NDX 21 +#define REG_X22_NDX 22 +#define REG_X23_NDX 23 +#define REG_X24_NDX 24 +#define REG_X25_NDX 25 +#define REG_X26_NDX 26 +#define REG_X27_NDX 27 + +/* $28-31 = t3-t6: Temporary (Volatile) registers */ + +#define REG_X28_NDX 28 +#define REG_X29_NDX 29 +#define REG_X30_NDX 30 +#define REG_X31_NDX 31 + +/* Interrupt Context register */ + +#define REG_INT_CTX_NDX 32 + +#ifdef CONFIG_ARCH_RISCV_INTXCPT_EXTREGS + #define INT_XCPT_REGS (33 + CONFIG_ARCH_RISCV_INTXCPT_EXTREGS) +#else + #define INT_XCPT_REGS 33 +#endif + +#ifdef CONFIG_ARCH_RV32 + #define INT_REG_SIZE 4 +#else + #define INT_REG_SIZE 8 +#endif + +#define INT_XCPT_SIZE (INT_REG_SIZE * INT_XCPT_REGS) + +#ifdef CONFIG_ARCH_RV32 +#if defined(CONFIG_ARCH_DPFPU) +# define FPU_REG_SIZE 2 +#elif defined(CONFIG_ARCH_QPFPU) +# define FPU_REG_SIZE 4 +#elif defined(CONFIG_ARCH_FPU) +# define FPU_REG_SIZE 1 Review comment: intent four space ########## File path: arch/risc-v/include/irq.h ########## @@ -31,20 +31,450 @@ /* Include chip-specific IRQ definitions (including IRQ numbers) */ +#include <nuttx/config.h> +#include <arch/types.h> + +#ifndef __ASSEMBLY__ #include <stdint.h> #include <nuttx/irq.h> #include <arch/csr.h> #include <arch/chip/irq.h> +#endif + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Configuration ************************************************************/ + +/* If this is a kernel build, how many nested system calls should we + * support? + */ + +#ifndef CONFIG_SYS_NNEST +# define CONFIG_SYS_NNEST 2 +#endif + +/* Processor PC */ + +#define REG_EPC_NDX 0 + +/* General pupose registers + * $0: Zero register does not need to be saved + * $1: ra (return address) + */ + +#define REG_X1_NDX 1 + +/* $2: Stack POinter + * $3: Global Pointer + * $4: Thread Pointer + */ + +#define REG_X2_NDX 2 +#define REG_X3_NDX 3 +#define REG_X4_NDX 4 + +/* $5-$7 = t0-t3: Temporary registers */ + +#define REG_X5_NDX 5 +#define REG_X6_NDX 6 +#define REG_X7_NDX 7 + +/* $8: s0 / fp Frame pointer */ + +#define REG_X8_NDX 8 + +/* $89 s1 Saved register */ + +#define REG_X9_NDX 9 + +/* $10-$17 = a0-a7: Argument registers */ + +#define REG_X10_NDX 10 +#define REG_X11_NDX 11 +#define REG_X12_NDX 12 +#define REG_X13_NDX 13 +#define REG_X14_NDX 14 +#define REG_X15_NDX 15 +#define REG_X16_NDX 16 +#define REG_X17_NDX 17 + +/* $18-$27 = s2-s11: Saved registers */ + +#define REG_X18_NDX 18 +#define REG_X19_NDX 19 +#define REG_X20_NDX 20 +#define REG_X21_NDX 21 +#define REG_X22_NDX 22 +#define REG_X23_NDX 23 +#define REG_X24_NDX 24 +#define REG_X25_NDX 25 +#define REG_X26_NDX 26 +#define REG_X27_NDX 27 + +/* $28-31 = t3-t6: Temporary (Volatile) registers */ + +#define REG_X28_NDX 28 +#define REG_X29_NDX 29 +#define REG_X30_NDX 30 +#define REG_X31_NDX 31 + +/* Interrupt Context register */ + +#define REG_INT_CTX_NDX 32 + +#ifdef CONFIG_ARCH_RISCV_INTXCPT_EXTREGS + #define INT_XCPT_REGS (33 + CONFIG_ARCH_RISCV_INTXCPT_EXTREGS) +#else + #define INT_XCPT_REGS 33 +#endif + +#ifdef CONFIG_ARCH_RV32 + #define INT_REG_SIZE 4 +#else + #define INT_REG_SIZE 8 +#endif + +#define INT_XCPT_SIZE (INT_REG_SIZE * INT_XCPT_REGS) + +#ifdef CONFIG_ARCH_RV32 +#if defined(CONFIG_ARCH_DPFPU) Review comment: let's order #if by CONFIG_ARCH_QPFPU/CONFIG_ARCH_DPFPU ########## File path: arch/risc-v/src/rv32m1/rv32m1_irq_dispatch.c ########## @@ -53,26 +53,26 @@ volatile uint32_t * g_current_regs; ****************************************************************************/ LOCATE_ITCM -void *rv32m1_dispatch_irq(uint32_t vector, uint32_t *regs) +void *rv32m1_dispatch_irq(uintptr_t vector, uintptr_t *regs) { - int vec = vector & 0x1f; - int irq = (vector >> 27) + vec; - uint32_t *mepc = regs; + uintptr_t vec = vector & 0x1f; + uintptr_t irq = (vector >> 27) + vec; + uintptr_t *mepc = regs; int irqofs = 0; /* NOTE: In case of ecall, we need to adjust mepc in the context */ if (RV32M1_IRQ_ECALL_M == irq) { - *mepc += 2; + *mepc += 4; } if (RV32M1_IRQ_INTMUX0 <= irq) { - uint32_t const chn = irq - RV32M1_IRQ_INTMUX0; - uint32_t regaddr = RV32M1_INTMUX_CH_BASE(chn) + INTMUX_CH_VEC_OFFSET; - uint32_t regval = getreg32(regaddr); + uintptr_t const chn = irq - RV32M1_IRQ_INTMUX0; Review comment: remove const ########## File path: arch/risc-v/include/irq.h ########## @@ -31,21 +31,457 @@ /* Include chip-specific IRQ definitions (including IRQ numbers) */ +#include <nuttx/config.h> +#include <arch/types.h> + +#ifndef __ASSEMBLY__ #include <stdint.h> #include <nuttx/irq.h> #include <arch/csr.h> #include <arch/chip/irq.h> +#endif + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Configuration ************************************************************/ + +/* If this is a kernel build, how many nested system calls should we + * support? + */ + +#ifndef CONFIG_SYS_NNEST +# define CONFIG_SYS_NNEST 2 +#endif + +/* Processor PC */ + +#define REG_EPC_NDX 0 + +/* General pupose registers + * $0: Zero register does not need to be saved + * $1: ra (return address) + */ + +#define REG_X1_NDX 1 + +/* $2: Stack POinter + * $3: Global Pointer + * $4: Thread Pointer + */ + +#define REG_X2_NDX 2 +#define REG_X3_NDX 3 +#define REG_X4_NDX 4 + +/* $5-$7 = t0-t3: Temporary registers */ + +#define REG_X5_NDX 5 +#define REG_X6_NDX 6 +#define REG_X7_NDX 7 + +/* $8: s0 / fp Frame pointer */ + +#define REG_X8_NDX 8 + +/* $89 s1 Saved register */ + +#define REG_X9_NDX 9 + +/* $10-$17 = a0-a7: Argument registers */ + +#define REG_X10_NDX 10 +#define REG_X11_NDX 11 +#define REG_X12_NDX 12 +#define REG_X13_NDX 13 +#define REG_X14_NDX 14 +#define REG_X15_NDX 15 +#define REG_X16_NDX 16 +#define REG_X17_NDX 17 + +/* $18-$27 = s2-s11: Saved registers */ + +#define REG_X18_NDX 18 +#define REG_X19_NDX 19 +#define REG_X20_NDX 20 +#define REG_X21_NDX 21 +#define REG_X22_NDX 22 +#define REG_X23_NDX 23 +#define REG_X24_NDX 24 +#define REG_X25_NDX 25 +#define REG_X26_NDX 26 +#define REG_X27_NDX 27 + +/* $28-31 = t3-t6: Temporary (Volatile) registers */ + +#define REG_X28_NDX 28 +#define REG_X29_NDX 29 +#define REG_X30_NDX 30 +#define REG_X31_NDX 31 + +/* Interrupt Context register */ + +#define REG_INT_CTX_NDX 32 + +#ifdef CONFIG_ARCH_RISCV_INTXCPT_EXTREGS + #define INT_XCPT_REGS (33 + CONFIG_ARCH_RISCV_INTXCPT_EXTREGS) +#else + #define INT_XCPT_REGS 33 +#endif + +#ifdef CONFIG_ARCH_RV32 + #define INT_REG_SIZE 4 +#else + #define INT_REG_SIZE 8 +#endif + +#define INT_XCPT_SIZE (INT_REG_SIZE * INT_XCPT_REGS) + +#ifdef CONFIG_ARCH_RV32 +#if defined(CONFIG_ARCH_DPFPU) +# define FPU_REG_SIZE 2 +#elif defined(CONFIG_ARCH_QPFPU) +# define FPU_REG_SIZE 4 +#elif defined(CONFIG_ARCH_FPU) +# define FPU_REG_SIZE 1 +#endif Review comment: intent two space -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org