You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by pk...@apache.org on 2022/05/13 07:38:56 UTC

[incubator-nuttx] branch master updated: risc-v/mpfs: apply IHC review fixes

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0a75a9556d risc-v/mpfs: apply IHC review fixes
0a75a9556d is described below

commit 0a75a9556d0338320851f879a8c21304a10a088e
Author: Eero Nurkkala <ee...@offcode.fi>
AuthorDate: Fri May 13 08:41:01 2022 +0300

    risc-v/mpfs: apply IHC review fixes
    
    PR#6249 was already merged without the review fixes. Provide the
    fixes here on a separate patch.
    
    Co-authored-by: Petro Karashchenko <pe...@gmail.com>
    Signed-off-by: Eero Nurkkala <ee...@offcode.fi>
---
 arch/risc-v/src/mpfs/mpfs_ihc.c | 93 ++++++++++++++++++++---------------------
 1 file changed, 45 insertions(+), 48 deletions(-)

diff --git a/arch/risc-v/src/mpfs/mpfs_ihc.c b/arch/risc-v/src/mpfs/mpfs_ihc.c
index 6f31ea4bd6..4f3c571dd6 100755
--- a/arch/risc-v/src/mpfs/mpfs_ihc.c
+++ b/arch/risc-v/src/mpfs/mpfs_ihc.c
@@ -117,18 +117,18 @@ struct mpfs_rptun_dev_s
 
 typedef enum
 {
-  IHC_CHANNEL_TO_HART0 = 0x00,    /* Your hart to hart 0 */
-  IHC_CHANNEL_TO_HART1 = 0x01,    /* Your hart to hart 1 */
-  IHC_CHANNEL_TO_HART2 = 0x02,    /* Your hart to hart 2 */
-  IHC_CHANNEL_TO_HART3 = 0x03,    /* Your hart to hart 3 */
-  IHC_CHANNEL_TO_HART4 = 0x04,    /* Your hart to hart 4 */
-  ihc_channel_to_contexta = 0x05, /* Your hart to context A */
-  ihc_channel_to_contextb = 0x06, /* Your hart to context B */
+  IHC_CHANNEL_TO_HART0    = 0x00, /* Your hart to hart 0 */
+  IHC_CHANNEL_TO_HART1    = 0x01, /* Your hart to hart 1 */
+  IHC_CHANNEL_TO_HART2    = 0x02, /* Your hart to hart 2 */
+  IHC_CHANNEL_TO_HART3    = 0x03, /* Your hart to hart 3 */
+  IHC_CHANNEL_TO_HART4    = 0x04, /* Your hart to hart 4 */
+  IHC_CHANNEL_TO_CONTEXTA = 0x05, /* Your hart to context A */
+  IHC_CHANNEL_TO_CONTEXTB = 0x06, /* Your hart to context B */
 } ihc_channel_t;
 
 struct mpfs_queue_table
 {
-    void *data;
+  void *data;
 };
 
 /****************************************************************************
@@ -163,19 +163,19 @@ static int mpfs_rptun_register_callback(struct rptun_dev_s *dev,
 
 uint8_t unused_filler[0x80000] __attribute__((section(".filler_area")));
 
-static struct   rpmsg_endpoint        g_mpgs_echo_ping_ept;
-static struct   mpfs_queue_table      g_mpfs_virtqueue_table[VRINGS];
-static struct   mpfs_rptun_shmem_s    g_shmem;
-static struct   rpmsg_device         *g_mpfs_rpmsg_device;
-static struct   rpmsg_virtio_device  *g_mpfs_virtio_device;
+static struct rpmsg_endpoint        g_mpgs_echo_ping_ept;
+static struct mpfs_queue_table      g_mpfs_virtqueue_table[VRINGS];
+static struct mpfs_rptun_shmem_s    g_shmem;
+static struct rpmsg_device         *g_mpfs_rpmsg_device;
+static struct rpmsg_virtio_device  *g_mpfs_virtio_device;
 
-static sem_t   g_mpfs_ack_lock      = SEM_INITIALIZER(1);
-static sem_t   g_mpfs_rx_lock       = SEM_INITIALIZER(1);
-static struct  list_node g_dev_list = LIST_INITIAL_VALUE(g_dev_list);
+static sem_t  g_mpfs_ack_lock      = SEM_INITIALIZER(1);
+static sem_t  g_mpfs_rx_sig        = SEM_INITIALIZER(1);
+static struct list_node g_dev_list = LIST_INITIAL_VALUE(g_dev_list);
 
 static uint32_t g_connected_hart_ints;
 static uint32_t g_connected_harts;
-static int      g_vq_idx = 0;
+static int      g_vq_idx;
 
 const uint32_t ihcia_remote_harts[MPFS_NUM_HARTS] =
 {
@@ -302,7 +302,7 @@ static uint32_t mpfs_ihc_context_to_remote_hart_id(ihc_channel_t channel)
 
       /* Determine context we are in */
 
-      if (channel == ihc_channel_to_contexta)
+      if (channel == IHC_CHANNEL_TO_CONTEXTA)
         {
           harts_in_context = LIBERO_SETTING_CONTEXT_A_HART_EN;
         }
@@ -336,7 +336,7 @@ static uint32_t mpfs_ihc_context_to_remote_hart_id(ihc_channel_t channel)
  * Description:
  *   This handles the received information and either lets the vq to proceed
  *   via posting g_mpfs_ack_lock, or lets the mpfs_rptun_thread() run as it
- *   waits for the g_mpfs_rx_lock.  virtqueue_notification() cannot be called
+ *   waits for the g_mpfs_rx_sig.  virtqueue_notification() cannot be called
  *   from the interrupt context, thus the thread that will perform it.
  *
  * Input Parameters:
@@ -350,7 +350,7 @@ static uint32_t mpfs_ihc_context_to_remote_hart_id(ihc_channel_t channel)
 
 static void mpfs_ihc_rx_handler(uint32_t *message, bool is_ack)
 {
-  if (is_ack == true)
+  if (is_ack)
     {
       /* Received the ack */
 
@@ -362,7 +362,7 @@ static void mpfs_ihc_rx_handler(uint32_t *message, bool is_ack)
 
       DEBUGASSERT(g_vq_idx < VRINGS);
 
-      nxsem_post(&g_mpfs_rx_lock);
+      nxsem_post(&g_mpfs_rx_sig);
     }
 }
 
@@ -388,17 +388,17 @@ static void mpfs_ihc_rx_message(ihc_channel_t channel, bool is_ack)
   uint32_t rhartid  = mpfs_ihc_context_to_remote_hart_id(channel);
   uint32_t ctrl_reg = getreg32(MPFS_IHC_CTRL(mhartid, rhartid));
 
-  if (is_ack == true)
+  if (is_ack)
     {
       mpfs_ihc_rx_handler((uint32_t *)MPFS_IHC_MSG_IN(mhartid, rhartid),
-                           is_ack);
+                          is_ack);
     }
   else if (MP_MESSAGE_PRESENT == (ctrl_reg & MP_MASK))
     {
       /* Check if we have a message */
 
       mpfs_ihc_rx_handler((uint32_t *)MPFS_IHC_MSG_IN(mhartid, rhartid),
-                           is_ack);
+                          is_ack);
 
       /* Set MP to 0. Note this generates an interrupt on the other hart
        * if it has RMPIE bit set in the control register
@@ -452,7 +452,7 @@ static void mpfs_ihc_message_present_isr(void)
 
       mpfs_ihc_rx_message(origin_hart, is_ack);
 
-      if (is_ack == true)
+      if (is_ack)
         {
           /* Clear the ack */
 
@@ -591,7 +591,7 @@ static uint32_t mpfs_ihc_context_to_local_hart_id(ihc_channel_t channel)
     }
   else
     {
-      if (channel == ihc_channel_to_contexta)
+      if (channel == IHC_CHANNEL_TO_CONTEXTA)
         {
           /* We are context B */
 
@@ -942,7 +942,7 @@ static int mpfs_rptun_notify(struct rptun_dev_s *dev, uint32_t notifyid)
       tx_msg[1] = 0;
     }
 
-  return mpfs_ihc_tx_message(ihc_channel_to_contexta, tx_msg);
+  return mpfs_ihc_tx_message(IHC_CHANNEL_TO_CONTEXTA, tx_msg);
 }
 
 /****************************************************************************
@@ -1014,6 +1014,7 @@ static int mpfs_rptun_init(const char *shmemname, const char *cpuname)
   ret = rptun_initialize(&dev->rptun);
   if (ret < 0)
     {
+      list_remove_tail(&g_dev_list);
       kmm_free(dev);
     }
 
@@ -1039,9 +1040,8 @@ static int mpfs_rptun_init(const char *shmemname, const char *cpuname)
  *
  ****************************************************************************/
 
-static int mpfs_echo_ping_ept_cb(FAR struct rpmsg_endpoint *ept,
-                                 FAR void *data, size_t len, uint32_t src,
-                                 FAR void *priv)
+static int mpfs_echo_ping_ept_cb(struct rpmsg_endpoint *ept, void *data,
+                                 size_t len, uint32_t src, void *priv)
 {
   /* This is simply echoes the data back */
 
@@ -1065,8 +1065,8 @@ static int mpfs_echo_ping_ept_cb(FAR struct rpmsg_endpoint *ept,
  *
  ****************************************************************************/
 
-static int mpfs_echo_ping_init(FAR struct rpmsg_device *rdev,
-                               FAR struct rpmsg_endpoint *ept)
+static int mpfs_echo_ping_init(struct rpmsg_device *rdev,
+                               struct rpmsg_endpoint *ept)
 {
   return rpmsg_create_ept(ept, rdev, MPFS_RPTUN_PING_EPT_NAME,
                           RPMSG_ADDR_ANY, 0,
@@ -1090,8 +1090,7 @@ static int mpfs_echo_ping_init(FAR struct rpmsg_device *rdev,
  *
  ****************************************************************************/
 
-static void mpfs_rpmsg_device_created(FAR struct rpmsg_device *rdev,
-                                      FAR void *priv_)
+static void mpfs_rpmsg_device_created(struct rpmsg_device *rdev, void *priv_)
 {
   struct rpmsg_virtio_device *vdev = container_of(rdev,
                                                   struct rpmsg_virtio_device,
@@ -1110,7 +1109,7 @@ static void mpfs_rpmsg_device_created(FAR struct rpmsg_device *rdev,
  * Name: mpfs_rptun_thread
  *
  * Description:
- *   This is used to listen to the g_mpfs_rx_lock semaphore and then
+ *   This is used to listen to the g_mpfs_rx_sig semaphore and then
  *   notifying the associated virtqueue.  The virtqueue_notification()
  *   cannot be called from irq context.
  *
@@ -1123,13 +1122,13 @@ static void mpfs_rpmsg_device_created(FAR struct rpmsg_device *rdev,
  *
  ****************************************************************************/
 
-static int mpfs_rptun_thread(int argc, FAR char *argv[])
+static int mpfs_rptun_thread(int argc, char *argv[])
 {
   struct mpfs_queue_table *info;
 
   while (1)
     {
-      nxsem_wait(&g_mpfs_rx_lock);
+      nxsem_wait(&g_mpfs_rx_sig);
 
       info = &g_mpfs_virtqueue_table[g_vq_idx];
       virtqueue_notification((struct virtqueue *)info->data);
@@ -1161,8 +1160,8 @@ static int mpfs_rptun_thread(int argc, FAR char *argv[])
 
 int mpfs_ihc_init(void)
 {
-  uint64_t  mhartid = riscv_mhartid();
-  FAR char *argv[3];
+  uint32_t  mhartid = (uint32_t)riscv_mhartid();
+  char     *argv[3];
   char      arg1[19];
   uint32_t  rhartid;
   int       ret;
@@ -1177,8 +1176,8 @@ int mpfs_ihc_init(void)
 
   /* Initialize IHC FPGA module registers to a known state */
 
-  mpfs_ihc_local_context_init((uint32_t)mhartid);
-  mpfs_ihc_local_remote_config((uint32_t)mhartid, rhartid);
+  mpfs_ihc_local_context_init(mhartid);
+  mpfs_ihc_local_remote_config(mhartid, rhartid);
 
   /* Attach and enable the applicable irq */
 
@@ -1212,7 +1211,7 @@ int mpfs_ihc_init(void)
 
   snprintf(arg1, sizeof(arg1), "0x%" PRIxPTR,
           (uintptr_t)g_mpfs_virtqueue_table);
-  argv[0] = (void *)"mpfs_ihc_thread";
+  argv[0] = "mpfs_ihc_thread";
   argv[1] = arg1;
   argv[2] = NULL;
 
@@ -1248,11 +1247,9 @@ init_error:
  *
  ****************************************************************************/
 
-uintptr_t up_addrenv_va_to_pa(FAR void *va_)
+uintptr_t up_addrenv_va_to_pa(void *va)
 {
-  uintptr_t va = (uintptr_t)va_;
-
-  return va;
+  return (uintptr_t)va;
 }
 
 /****************************************************************************
@@ -1270,7 +1267,7 @@ uintptr_t up_addrenv_va_to_pa(FAR void *va_)
  *
  ****************************************************************************/
 
-FAR void *up_addrenv_pa_to_va(uintptr_t pa)
+void *up_addrenv_pa_to_va(uintptr_t pa)
 {
-  return (FAR void *)pa;
+  return (void *)pa;
 }