You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/02/28 08:09:14 UTC

[incubator-nuttx] 02/02: arch: imx6: Remove sem_t from imx_serial.c

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 56e0e6a5ec988024bbc7cd8b8e02a0f19b75c83d
Author: Masayuki Ishikawa <ma...@gmail.com>
AuthorDate: Mon Feb 28 10:59:26 2022 +0900

    arch: imx6: Remove sem_t from imx_serial.c
    
    Summary:
    - I noticed that when exiting getprime, DEBUGASSERT happens in
      nxsem_wait()
    - Finally, I found that up_putc() uses nxsem_wait()
    - This commit fixes this issue by removing the semaphore.
    - Also, up_putc() now calls imx_lowputc()
    
    Impact:
    - None
    
    Testing:
    - Tested with sabre-6quad:netknsh (not merged yet)
    
    Signed-off-by: Masayuki Ishikawa <Ma...@jp.sony.com>
---
 arch/arm/src/imx6/imx_serial.c | 34 ++--------------------------------
 1 file changed, 2 insertions(+), 32 deletions(-)

diff --git a/arch/arm/src/imx6/imx_serial.c b/arch/arm/src/imx6/imx_serial.c
index 239c4121..9f4100d 100644
--- a/arch/arm/src/imx6/imx_serial.c
+++ b/arch/arm/src/imx6/imx_serial.c
@@ -42,7 +42,6 @@
 #include <nuttx/spinlock.h>
 #include <nuttx/init.h>
 #include <nuttx/fs/ioctl.h>
-#include <nuttx/semaphore.h>
 #include <nuttx/serial/serial.h>
 
 #include "chip.h"
@@ -239,10 +238,6 @@ static bool imx_txempty(struct uart_dev_s *dev);
  * Private Data
  ****************************************************************************/
 
-/* Used to assure mutually exclusive access up_putc() */
-
-static sem_t g_putc_lock = SEM_INITIALIZER(1);
-
 /* Serial driver UART operations */
 
 static const struct uart_ops_s g_uart_ops =
@@ -1123,30 +1118,12 @@ int up_putc(int ch)
 {
   struct imx_uart_s *priv = (struct imx_uart_s *)CONSOLE_DEV.priv;
   uint32_t ier;
-  bool locked;
-  int ret;
-
-  /* Only one thread may enter up_putc at a time. */
-
-  locked = false;
-
-  if (!up_interrupt_context() && g_nx_initstate >= OSINIT_HARDWARE)
-    {
-      ret = nxsem_wait(&g_putc_lock);
-      if (ret < 0)
-        {
-          return ret;
-        }
-
-      locked = true;
-    }
 
   /* Disable UART interrupts and wait until the hardware is ready to send
    * a byte.
    */
 
   imx_disableuartint(priv, &ier);
-  imx_waittxready(priv);
 
   /* Check for LF */
 
@@ -1154,19 +1131,12 @@ int up_putc(int ch)
     {
       /* Add CR */
 
-      imx_serialout(priv, UART_TXD_OFFSET, (uint32_t)'\r');
-      imx_waittxready(priv);
+      imx_lowputc('\r');
     }
 
-  imx_serialout(priv, UART_TXD_OFFSET, (uint32_t)ch);
-  imx_waittxready(priv);
+  imx_lowputc(ch);
   imx_restoreuartint(priv, ier);
 
-  if (locked)
-    {
-      nxsem_post(&g_putc_lock);
-    }
-
   return ch;
 }