chub: disable silent-reset
authorBoojin Kim <boojin.kim@samsung.com>
Wed, 4 Jul 2018 10:08:56 +0000 (19:08 +0900)
committerBoojin Kim <boojin.kim@samsung.com>
Wed, 4 Jul 2018 10:11:09 +0000 (19:11 +0900)
Change-Id: I08c37f8053b7dd60c664f5ce952a72eaef6094c3
Signed-off-by: Boojin Kim <boojin.kim@samsung.com>
drivers/staging/nanohub/chub.c
drivers/staging/nanohub/chub.h
drivers/staging/nanohub/main.c

index 58965bfc463da922d3132329047e4fc8395c7031..5fad14964679737f8a5b697cddd0a3a9129fa511 100644 (file)
@@ -913,6 +913,7 @@ do_reset:
        /* dump hw & sram into file */
        chub_dbg_dump_hw(ipc, err);
        if (need_reset) {
+#ifdef CHUB_RESET_ENABLE
                ret = contexthub_reset(ipc);
                if (ret)
                        dev_warn(ipc->dev, "%s: fails to reset %d.\n",
@@ -925,6 +926,9 @@ do_reset:
                                if (ipc->irq_wdt)
                                        enable_irq(ipc->irq_wdt);
                }
+#else
+               atomic_set(&ipc->chub_status, CHUB_ST_HANG);
+#endif
        } else {
                /* dump log into file: DO NOT logbuf dueto sram corruption */
                log_dump_all(err);
@@ -1043,7 +1047,7 @@ static irqreturn_t contexthub_irq_handler(int irq, void *data)
        return IRQ_HANDLED;
 }
 
-#ifdef WDT_ENABLE
+#ifdef CHUB_RESET_ENABLE
 static irqreturn_t contexthub_irq_wdt_handler(int irq, void *data)
 {
        struct contexthub_ipc_info *ipc = data;
@@ -1175,7 +1179,7 @@ static __init int contexthub_ipc_hw_init(struct platform_device *pdev,
                return ret;
        }
 
-#ifdef WDT_ENABLE
+#ifdef CHUB_RESET_ENABLE
        /* get wdt interrupt optionally */
        chub->irq_wdt = irq_of_parse_and_map(node, 1);
        if (chub->irq_wdt > 0) {
index aa080694b23d43dc0376e016c62829c9294d0f07..adf573e9850482796466b4a429063f2012611b04 100644 (file)
@@ -92,6 +92,7 @@ enum chub_status {
        CHUB_ST_RUN,
        CHUB_ST_SHUTDOWN,
        CHUB_ST_NO_RESPONSE,
+       CHUB_ST_HANG,
 };
 
 struct read_wait {
index 2435a1dd42e29e31b98099d8d335e52c7e005f91..a3878dac6ec37e78f1fd86179542ad8617495969 100644 (file)
@@ -721,7 +721,11 @@ static int nanohub_hw_reset(struct nanohub_data *data)
                nanohub_wakeup_unlock(data);
        }
 #elif defined(CONFIG_NANOHUB_MAILBOX)
+#ifdef CHUB_RESET_ENABLE
        ret = contexthub_reset(data->pdata->mailbox_client);
+#else
+       ret = -EINVAL;
+#endif
 #endif
        return ret;
 }
@@ -1376,6 +1380,11 @@ static int nanohub_kthread(void *arg)
        static const struct sched_param param = {
                .sched_priority = (MAX_USER_RT_PRIO/2)-1,
        };
+#ifdef CONFIG_NANOHUB_MAILBOX
+#ifndef CHUB_RESET_ENABLE
+       struct contexthub_ipc_info *ipc;
+#endif
+#endif
 
        data->kthread_err_cnt = 0;
        sched_setscheduler(current, SCHED_FIFO, &param);
@@ -1405,6 +1414,15 @@ static int nanohub_kthread(void *arg)
                        }
                        msleep_interruptible(WAKEUP_TIMEOUT_MS);
                        nanohub_set_state(data, ST_RUNNING);
+#ifdef CONFIG_NANOHUB_MAILBOX
+#ifndef CHUB_RESET_ENABLE
+                       if (ret) {
+                               dev_warn(data->io[ID_NANOHUB_SENSOR].dev,
+                                       "%s fails. nanohub isn't running\n", __func__);
+                               return 0;
+                       }
+#endif
+#endif
                        break;
                case ST_RUNNING:
                        break;