From 8af50b7a86ff9b0b610be447180bddc742c4dc3f Mon Sep 17 00:00:00 2001 From: Boojin Kim Date: Tue, 11 Dec 2018 12:44:52 +0900 Subject: [PATCH] [ERD][APR-103] [COMMON]chub: add ipc magic Change-Id: I577b4e3d2e9cfcda3cfd30e3ded150b4d0b16a53 Signed-off-by: Boojin Kim --- drivers/staging/nanohub/chub.c | 4 +--- drivers/staging/nanohub/chub_ipc.c | 6 ++++++ drivers/staging/nanohub/chub_ipc.h | 2 ++ drivers/staging/nanohub/main.c | 25 +++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/drivers/staging/nanohub/chub.c b/drivers/staging/nanohub/chub.c index fa9da88f1f53..c4f0eebb0cda 100644 --- a/drivers/staging/nanohub/chub.c +++ b/drivers/staging/nanohub/chub.c @@ -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; diff --git a/drivers/staging/nanohub/chub_ipc.c b/drivers/staging/nanohub/chub_ipc.c index a314edc68726..4be436a39014 100644 --- a/drivers/staging/nanohub/chub_ipc.c +++ b/drivers/staging/nanohub/chub_ipc.c @@ -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__); diff --git a/drivers/staging/nanohub/chub_ipc.h b/drivers/staging/nanohub/chub_ipc.h index 3b90f67692b7..b19c3a8a6b32 100644 --- a/drivers/staging/nanohub/chub_ipc.h +++ b/drivers/staging/nanohub/chub_ipc.h @@ -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; diff --git a/drivers/staging/nanohub/main.c b/drivers/staging/nanohub/main.c index 1d17bd83df74..2ff3a888108b 100644 --- a/drivers/staging/nanohub/main.c +++ b/drivers/staging/nanohub/main.c @@ -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 }; -- 2.20.1