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;
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);
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__);
#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)
};
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;
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[] = {
#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
};