[ERD][APR-103] [COMMON]chub: add ipc magic
authorBoojin Kim <boojin.kim@samsung.com>
Tue, 11 Dec 2018 03:44:52 +0000 (12:44 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:23:22 +0000 (20:23 +0300)
Change-Id: I577b4e3d2e9cfcda3cfd30e3ded150b4d0b16a53
Signed-off-by: Boojin Kim <boojin.kim@samsung.com>
drivers/staging/nanohub/chub.c
drivers/staging/nanohub/chub_ipc.c
drivers/staging/nanohub/chub_ipc.h
drivers/staging/nanohub/main.c

index fa9da88f1f5306bfeeabe6e6bcb826e38d4f39a9..c4f0eebb0cda7c13483c1bcadd4439ed7a926766 100644 (file)
@@ -982,10 +982,8 @@ int contexthub_reset(struct contexthub_ipc_info *ipc, bool force_load, int dump)
                        else /* use previous binary */
                                ret = contexthub_download_and_check_image(ipc, IPC_REG_OS);
 
-                       if (ret) {
+                       if (ret)
                                dev_err(ipc->dev, "%s: download os fails\n", __func__);
-                               goto out;
-                       }
                } else {
                                dev_err(ipc->dev, "%s: download bl fails\n", __func__);
                                goto out;
index a314edc68726cf5e72441372bf72501a7705a4fa..4be436a39014dda7af4bb0cbc210ada99086a83d 100644 (file)
@@ -249,6 +249,7 @@ void *ipc_get_chub_map(void)
        ipc_map = ipc_addr[IPC_REG_IPC].base;
        ipc_map->logbuf.size =
            ipc_addr[IPC_REG_IPC].offset - sizeof(struct ipc_map_area) - CHUB_PERSISTBUF_SIZE;
+       strcpy(&ipc_map->magic[0], CHUB_IPC_MAGIC);
 
        ipc_addr[IPC_REG_IPC_EVT_A2C].base = &ipc_map->evt[IPC_EVT_A2C].data;
        ipc_addr[IPC_REG_IPC_EVT_A2C].offset = sizeof(struct ipc_evt);
@@ -856,6 +857,11 @@ void ipc_print_evt(enum ipc_evt_list evtq)
 
 void ipc_dump(void)
 {
+       if (strncmp(CHUB_IPC_MAGIC, ipc_map->magic, sizeof(CHUB_IPC_MAGIC))) {
+               CSP_PRINTF_INFO("%s: %s: ipc crash\n", NAME_PREFIX, __func__);
+               return;
+       }
+
        CSP_PRINTF_INFO("%s: %s: a2x event\n", NAME_PREFIX, __func__);
        ipc_print_evt(IPC_EVT_A2C);
        CSP_PRINTF_INFO("%s: %s: c2a event\n", NAME_PREFIX, __func__);
index 3b90f67692b747487393b9ed1912a7b7927e03ec..b19c3a8a6b3275e6a197b3612cb52b26add0b2a8 100644 (file)
@@ -71,6 +71,7 @@
 #define CHUB_PERSISTBUF_SIZE (96)
 
 #define OS_UPDT_MAGIC  "Nanohub OS"
+#define CHUB_IPC_MAGIC "IPC magic"
 
 #define BOOTMODE_COLD       (0x7733)
 #define BOOTMODE_PWRGATING  (0x1188)
@@ -422,6 +423,7 @@ struct ipc_debug {
 };
 
 struct ipc_map_area {
+       char magic[16];
        struct ipc_buf data[IPC_DATA_MAX];
        struct ipc_evt evt[IPC_EVT_MAX];
        struct ipc_debug dbg;
index 1d17bd83df745231ec058831ee8e7a6c7b0ed7e0..2ff3a888108b16480fe2b3c5a350a41430c5f1ed 100644 (file)
@@ -1182,6 +1182,30 @@ void nanohub_add_dump_request(struct nanohub_data *data)
                pr_err("%s: cann't get io buf\n", __func__);
        }
 }
+
+static ssize_t chub_dumpio_show(struct device *dev,
+                            struct device_attribute *attr, char *buf)
+{
+       struct nanohub_data *data = dev_get_nanohub_data(dev);
+       struct nanohub_io *io;
+       struct nanohub_buf *desc = NULL;
+       int buf_io_cnt[ID_NANOHUB_MAX] = {0, 0};
+       int free_io_cnt = 0;
+       int i;
+       int io_num;
+
+       for (i = 0; i < ID_NANOHUB_MAX; i++) {
+               io_num = i;
+               io = &data->io[i];
+               list_for_each_entry(desc, &io->buf_list, list)
+                       buf_io_cnt[i]++;
+       }
+       list_for_each_entry(desc, &data->free_pool.buf_list, list)
+               free_io_cnt++;
+
+       return sprintf(buf, "%s: sensor:%d, comms:%d, free:%d \n", __func__,
+               buf_io_cnt[ID_NANOHUB_SENSOR], buf_io_cnt[ID_NANOHUB_COMMS], free_io_cnt);
+}
 #endif
 
 static struct device_attribute attributes[] = {
@@ -1206,6 +1230,7 @@ static struct device_attribute attributes[] = {
 #ifdef CONFIG_NANOHUB_MAILBOX
        __ATTR(chipid, 0664, chub_chipid_show, chub_chipid_store),
        __ATTR(sensortype, 0775, chub_sensortype_show, chub_sensortype_store),
+       __ATTR(dumpio, 0440, chub_dumpio_show, NULL),
 #endif
 };