From 7b7219a34d6f6b7828ca80811913180b3c5f02e3 Mon Sep 17 00:00:00 2001 From: Masayuki Ishikawa Date: Tue, 7 Jan 2020 16:20:24 +0900 Subject: [PATCH 1/3] arch: fe310: Fix comments --- arch/risc-v/src/fe310/fe310_clockconfig.c | 2 +- arch/risc-v/src/fe310/fe310_clockconfig.h | 2 +- arch/risc-v/src/fe310/fe310_gpio.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/risc-v/src/fe310/fe310_clockconfig.c b/arch/risc-v/src/fe310/fe310_clockconfig.c index 6adb34c289683..cb9606fb322c1 100644 --- a/arch/risc-v/src/fe310/fe310_clockconfig.c +++ b/arch/risc-v/src/fe310/fe310_clockconfig.c @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/fe310/fe310_clockconfig.c + * arch/risc-v/src/fe310/fe310_clockconfig.c * * Copyright (C) 2019 Masayuki Ishikawa. All rights reserved. * Author: Masayuki Ishikawa diff --git a/arch/risc-v/src/fe310/fe310_clockconfig.h b/arch/risc-v/src/fe310/fe310_clockconfig.h index 9ecf280beac2a..b7cda135a4450 100644 --- a/arch/risc-v/src/fe310/fe310_clockconfig.h +++ b/arch/risc-v/src/fe310/fe310_clockconfig.h @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/fe310/fe310_clockconfig.h + * arch/risc-v/src/fe310/fe310_clockconfig.h * * Copyright (C) 2019 Masayuki Ishikawa. All rights reserved. * Author: Masayuki Ishikawa diff --git a/arch/risc-v/src/fe310/fe310_gpio.c b/arch/risc-v/src/fe310/fe310_gpio.c index 71ed36f479159..c99054774106d 100644 --- a/arch/risc-v/src/fe310/fe310_gpio.c +++ b/arch/risc-v/src/fe310/fe310_gpio.c @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/fe310/fe310_gpio.c + * arch/risc-v/src/fe310/fe310_gpio.c * * Copyright (C) 2019 Masayuki Ishikawa. All rights reserved. * Author: Masayuki Ishikawa From 009d6ed25b6f5e44f50218ba5765715027976ed2 Mon Sep 17 00:00:00 2001 From: Masayuki Ishikawa Date: Tue, 7 Jan 2020 16:24:36 +0900 Subject: [PATCH 2/3] arch: fe310: Improve irq handling in fe310_serial.c --- arch/risc-v/src/fe310/fe310_serial.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/risc-v/src/fe310/fe310_serial.c b/arch/risc-v/src/fe310/fe310_serial.c index 704dc4b544776..1fca0669a1986 100644 --- a/arch/risc-v/src/fe310/fe310_serial.c +++ b/arch/risc-v/src/fe310/fe310_serial.c @@ -398,6 +398,11 @@ static int up_interrupt(int irq, void *context, FAR void *arg) status = up_serialin(priv, UART_IP_OFFSET); + if (status == 0) + { + break; + } + if (status & UART_IP_RXWM) { /* Process incoming bytes */ @@ -405,9 +410,12 @@ static int up_interrupt(int irq, void *context, FAR void *arg) uart_recvchars(dev); } - /* Process outgoing bytes */ + if (status & UART_IP_TXWM) + { + /* Process outgoing bytes */ - uart_xmitchars(dev); + uart_xmitchars(dev); + } } return OK; From c20a52dc392b86ccb331cf8add9a57295a52d381 Mon Sep 17 00:00:00 2001 From: Masayuki Ishikawa Date: Tue, 7 Jan 2020 16:25:31 +0900 Subject: [PATCH 3/3] arch: fe310: Fix initial interrupt status (mstatus) Also, removed unnecessary up_enable_irq(FE310_IRQ_ECALLM) --- arch/risc-v/include/fe310/irq.h | 1 + arch/risc-v/src/fe310/fe310_irq.c | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/risc-v/include/fe310/irq.h b/arch/risc-v/include/fe310/irq.h index f330ead01b7bd..78c60b319ce03 100644 --- a/arch/risc-v/include/fe310/irq.h +++ b/arch/risc-v/include/fe310/irq.h @@ -46,6 +46,7 @@ /* In mstatus register */ #define MSTATUS_MIE (0x1 << 3) /* Machine Interrupt Enable */ +#define MSTATUS_MPIE (0x1 << 7) /* Machine Previous Interrupt Enable */ /* In mie (machine interrupt enable) register */ diff --git a/arch/risc-v/src/fe310/fe310_irq.c b/arch/risc-v/src/fe310/fe310_irq.c index 7049599ee1bf3..7fabc9a6a23b8 100644 --- a/arch/risc-v/src/fe310/fe310_irq.c +++ b/arch/risc-v/src/fe310/fe310_irq.c @@ -100,7 +100,6 @@ void up_irqinitialize(void) /* Attach the ecall interrupt handler */ irq_attach(FE310_IRQ_ECALLM, up_swint, NULL); - up_enable_irq(FE310_IRQ_ECALLM); #ifndef CONFIG_SUPPRESS_INTERRUPTS @@ -188,13 +187,13 @@ void up_enable_irq(int irq) * Name: up_get_newintctx * * Description: - * Return a value for EPIC. But FE310 doesn't use EPIC for event control. + * Return initial mstatus when a task is created. * ****************************************************************************/ uint32_t up_get_newintctx(void) { - return 0; + return (MSTATUS_MPIE | MSTATUS_MIE); } /**************************************************************************** @@ -238,7 +237,7 @@ irqstate_t up_irq_save(void) void up_irq_restore(irqstate_t flags) { - /* Machine mode - mstatus */ + /* Write flags to mstatus */ asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); }