[ERD][APR-103] [COMMON]chub: stop send message to AP in suspend mode
authorBoojin Kim <boojin.kim@samsung.com>
Fri, 16 Nov 2018 08:09:46 +0000 (17:09 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:23:22 +0000 (20:23 +0300)
Change-Id: I4ce8006221e7ffe4c9db6f4a074d0609f185b1e4
Signed-off-by: Sukwon Ryoo <sw.ryoo@samsung.com>
drivers/staging/nanohub/chub.c
drivers/staging/nanohub/chub.h
drivers/staging/nanohub/chub_dbg.c
drivers/staging/nanohub/chub_ipc.c
drivers/staging/nanohub/chub_ipc.h

index 2514bbbbb779ac0d9bdb39c93eee55ba91fb2317..7e0d8bcf23fa5449dfbb32f255c9170861d5c92f 100644 (file)
@@ -571,6 +571,7 @@ static int contexthub_hw_reset(struct contexthub_ipc_info *ipc,
        ipc_hw_write_shared_reg(AP, ipc->os_load, SR_BOOT_MODE);
        ipc_set_chub_clk((u32)ipc->clkrate);
        ipc_set_chub_bootmode(BOOTMODE_COLD);
+       ipc_set_chub_kernel_log(KERNEL_LOG_ON);
 
        switch (event) {
        case MAILBOX_EVT_POWER_ON:
@@ -580,8 +581,8 @@ static int contexthub_hw_reset(struct contexthub_ipc_info *ipc,
                if (atomic_read(&ipc->chub_status) == CHUB_ST_NO_POWER) {
                        atomic_set(&ipc->chub_status, CHUB_ST_POWER_ON);
 
-                       /* enable Dump GRP */
-                       IPC_HW_WRITE_DUMPGPR_CTRL(ipc->chub_dumpgrp, 0x1);
+                       /* enable Dump gpr */
+                       IPC_HW_WRITE_DUMPGPR_CTRL(ipc->chub_dumpgpr, 0x1);
 
 #if defined(CONFIG_SOC_EXYNOS9610)
                        /* cmu cm4 clock - gating */
@@ -922,8 +923,8 @@ int contexthub_reset(struct contexthub_ipc_info *ipc, bool force_load, int dump)
        int ret;
        int trycnt = 0;
 
-       dev_info(ipc->dev, "%s: force:%d, status:%d, in-reset:%d, user:%d\n",
-               __func__, force_load, atomic_read(&ipc->chub_status), atomic_read(&ipc->in_reset), atomic_read(&ipc->in_use_ipc));
+       dev_info(ipc->dev, "%s: force:%d, status:%d, in-reset:%d, dump:%d, user:%d\n",
+               __func__, force_load, atomic_read(&ipc->chub_status), atomic_read(&ipc->in_reset), dump, atomic_read(&ipc->in_use_ipc));
        mutex_lock(&reset_mutex);
        if (!force_load && (atomic_read(&ipc->chub_status) == CHUB_ST_RUN)) {
                mutex_unlock(&reset_mutex);
@@ -935,7 +936,7 @@ int contexthub_reset(struct contexthub_ipc_info *ipc, bool force_load, int dump)
        do {
                msleep(WAIT_CHUB_MS);
                if (++trycnt > RESET_WAIT_TRY_CNT) {
-                       dev_info(ipc->dev, "%s: cann't get lock. force reset: %d\n", __func__, atomic_read(&ipc->in_use_ipc));
+                       dev_info(ipc->dev, "%s: can't get lock. in_use_ipc: %d\n", __func__, atomic_read(&ipc->in_use_ipc));
                        atomic_dec(&ipc->in_reset);
                        mutex_unlock(&reset_mutex);
                        return -EINVAL;
@@ -957,7 +958,7 @@ int contexthub_reset(struct contexthub_ipc_info *ipc, bool force_load, int dump)
        dev_info(ipc->dev, "%s: enter shutdown\n", __func__);
        ret = contexthub_ipc_write_event(ipc, MAILBOX_EVT_SHUTDOWN);
        if (ret) {
-               dev_err(ipc->dev, "%s: shutdonw fails, ret:%d\n", __func__, ret);
+               dev_err(ipc->dev, "%s: shutdown fails, ret:%d\n", __func__, ret);
                goto out;
        }
        dev_info(ipc->dev, "%s: out shutdown\n", __func__);
@@ -1123,7 +1124,7 @@ static irqreturn_t contexthub_irq_wdt_handler(int irq, void *data)
 {
        struct contexthub_ipc_info *ipc = data;
 
-       dev_info(ipc->dev, "%s calledn", __func__);
+       dev_info(ipc->dev, "%s called\n", __func__);
        disable_irq_nosync(ipc->irq_wdt);
        ipc->irq_wdt_disabled = 1;
        request_debug_work(ipc, CHUB_ERR_FW_WDT, 1);
@@ -1266,17 +1267,17 @@ static __init int contexthub_ipc_hw_init(struct platform_device *pdev,
 
        /* get chub gpr base */
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dumpgpr");
-       chub->chub_dumpgrp = devm_ioremap_resource(dev, res);
-       if (IS_ERR(chub->chub_dumpgrp)) {
-               dev_err(dev, "fails to get dumpgrp\n");
-               return PTR_ERR(chub->chub_dumpgrp);
+       chub->chub_dumpgpr = devm_ioremap_resource(dev, res);
+       if (IS_ERR(chub->chub_dumpgpr)) {
+               dev_err(dev, "fails to get dumpgpr\n");
+               return PTR_ERR(chub->chub_dumpgpr);
        }
 
        /* get pmu reset base */
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "chub_reset");
        chub->pmu_chub_reset = devm_ioremap_resource(dev, res);
        if (IS_ERR(chub->pmu_chub_reset)) {
-               dev_err(dev, "fails to get dumpgrp\n");
+               dev_err(dev, "fails to get dumpgpr\n");
                return PTR_ERR(chub->pmu_chub_reset);
        }
 
@@ -1503,6 +1504,9 @@ static int contexthub_suspend(struct device *dev)
        struct contexthub_ipc_info *ipc = dev_get_drvdata(dev);
        struct nanohub_data *data = ipc->data;
 
+       pr_info("nanohub log to kernel off\n");
+       ipc_set_chub_kernel_log(KERNEL_LOG_OFF);
+
        return nanohub_suspend(data->iio_dev);
 }
 
@@ -1511,6 +1515,9 @@ static int contexthub_resume(struct device *dev)
        struct contexthub_ipc_info *ipc = dev_get_drvdata(dev);
        struct nanohub_data *data = ipc->data;
 
+       pr_info("nanohub log to kernel on\n");
+       ipc_set_chub_kernel_log(KERNEL_LOG_ON);
+
        return nanohub_resume(data->iio_dev);
 }
 
index 595d0c4c789008087fa3cbf2b65fe8fb32510d1c..e7605af621197a8e9ec246011c5aa470127d22d1 100644 (file)
@@ -163,7 +163,7 @@ struct contexthub_ipc_info {
        struct chub_alive chub_alive_lock;
        void __iomem *sram;
        void __iomem *mailbox;
-       void __iomem *chub_dumpgrp;
+       void __iomem *chub_dumpgpr;
        void __iomem *chub_baaw;
        void __iomem *pmu_chub_reset;
        void __iomem *pmu_chub_cpu;
@@ -242,7 +242,7 @@ struct contexthub_ipc_info {
 #define ENABLE BIT(0)
 #endif
 
-/*     CHUB dump GRP Registers : CHUB BASE + 0x1f000000 */
+/*     CHUB dump gpr Registers : CHUB BASE + 0x1f000000 */
 #define REG_CHUB_DUMPGPR_CTRL (0x0)
 #define REG_CHUB_DUMPGPR_PCR  (0x4)
 #define REG_CHUB_DUMPGPR_GP0R (0x10)
index ebe7f58513c69b3ac5358c638411d97d0097e24d..4d03a0d29312046e935afbf8a3499d1da281ea7d 100644 (file)
@@ -54,14 +54,14 @@ static void chub_dbg_dump_gpr(struct contexthub_ipc_info *ipc)
                int i;
                struct dbg_dump *p_dump = p_dbg_dump;
 
-               IPC_HW_WRITE_DUMPGPR_CTRL(ipc->chub_dumpgrp, 0x1);
+               IPC_HW_WRITE_DUMPGPR_CTRL(ipc->chub_dumpgpr, 0x1);
                /* dump GPR */
                for (i = 0; i <= GPR_PC_INDEX - 1; i++)
                        p_dump->gpr[i] =
-                           readl(ipc->chub_dumpgrp + REG_CHUB_DUMPGPR_GP0R +
+                           readl(ipc->chub_dumpgpr + REG_CHUB_DUMPGPR_GP0R +
                                  i * 4);
                p_dump->gpr[GPR_PC_INDEX] =
-                   readl(ipc->chub_dumpgrp + REG_CHUB_DUMPGPR_PCR);
+                   readl(ipc->chub_dumpgpr + REG_CHUB_DUMPGPR_PCR);
        }
 }
 
index 5be63038ddeb6eadd757c8573e85489854402773..d3451e7c82023fca326148c87fc911e43d2462f5 100644 (file)
@@ -118,20 +118,34 @@ u32 ipc_get_chub_clk(void)
        return map->chubclk;
 }
 
-void ipc_set_chub_bootmode(u32 bootmode)
+void ipc_set_chub_bootmode(u16 bootmode)
 {
        struct chub_bootargs *map = ipc_get_base(IPC_REG_BL_MAP);
 
        map->bootmode = bootmode;
 }
 
-u32 ipc_get_chub_bootmode(void)
+u16 ipc_get_chub_bootmode(void)
 {
        struct chub_bootargs *map = ipc_get_base(IPC_REG_BL_MAP);
 
        return map->bootmode;
 }
 
+void ipc_set_chub_kernel_log(u16 kernel_log)
+{
+       struct chub_bootargs *map = ipc_get_base(IPC_REG_BL_MAP);
+
+       map->kernel_log = kernel_log;
+}
+
+u16 ipc_get_chub_kernel_log(void)
+{
+       struct chub_bootargs *map = ipc_get_base(IPC_REG_BL_MAP);
+
+       return map->kernel_log;
+}
+
 #if defined(LOCAL_POWERGATE)
 u32 *ipc_get_chub_psp(void)
 {
index 1d3973301f4e6f703c1ff4498098bc1a3b45ee74..f59fb04bf381200ad36958b1bdecf96930b1e870 100644 (file)
 
 #define OS_UPDT_MAGIC  "Nanohub OS"
 
-#define BOOTMODE_COLD       (0x77773333)
-#define BOOTMODE_PWRGATING  (0x11118888)
+#define BOOTMODE_COLD       (0x7733)
+#define BOOTMODE_PWRGATING  (0x1188)
+
+#define KERNEL_LOG_ON          (0x1)
+#define KERNEL_LOG_OFF         (0x0)
 
 #define READY_TO_GO 99
 
@@ -99,7 +102,8 @@ struct chub_bootargs {
        u32 dump_start;
        u32 dump_end;
        u32 chubclk;
-       u32 bootmode;
+       u16 bootmode;
+       u16 kernel_log;
 #if defined(LOCAL_POWERGATE)
        u32 psp;
        u32 msp;
@@ -455,8 +459,10 @@ u64 ipc_read_val(enum ipc_owner owner);
 void ipc_write_val(enum ipc_owner owner, u64 result);
 void ipc_set_chub_clk(u32 clk);
 u32 ipc_get_chub_clk(void);
-void ipc_set_chub_bootmode(u32 bootmode);
-u32 ipc_get_chub_bootmode(void);
+void ipc_set_chub_bootmode(u16 bootmode);
+u16 ipc_get_chub_bootmode(void);
+void ipc_set_chub_kernel_log(u16 kernel_log);
+u16 ipc_get_chub_kernel_log(void);
 void ipc_dump(void);
 #if defined(LOCAL_POWERGATE)
 u32 *ipc_get_chub_psp(void);