From: Boojin Kim Date: Fri, 16 Nov 2018 08:09:46 +0000 (+0900) Subject: [ERD][APR-103] [COMMON]chub: stop send message to AP in suspend mode X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=53241d36c7ddc8bae6755dfa2eb7505591b01a8e;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git [ERD][APR-103] [COMMON]chub: stop send message to AP in suspend mode Change-Id: I4ce8006221e7ffe4c9db6f4a074d0609f185b1e4 Signed-off-by: Sukwon Ryoo --- diff --git a/drivers/staging/nanohub/chub.c b/drivers/staging/nanohub/chub.c index 2514bbbbb779..7e0d8bcf23fa 100644 --- a/drivers/staging/nanohub/chub.c +++ b/drivers/staging/nanohub/chub.c @@ -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); } diff --git a/drivers/staging/nanohub/chub.h b/drivers/staging/nanohub/chub.h index 595d0c4c7890..e7605af62119 100644 --- a/drivers/staging/nanohub/chub.h +++ b/drivers/staging/nanohub/chub.h @@ -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) diff --git a/drivers/staging/nanohub/chub_dbg.c b/drivers/staging/nanohub/chub_dbg.c index ebe7f58513c6..4d03a0d29312 100644 --- a/drivers/staging/nanohub/chub_dbg.c +++ b/drivers/staging/nanohub/chub_dbg.c @@ -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); } } diff --git a/drivers/staging/nanohub/chub_ipc.c b/drivers/staging/nanohub/chub_ipc.c index 5be63038ddeb..d3451e7c8202 100644 --- a/drivers/staging/nanohub/chub_ipc.c +++ b/drivers/staging/nanohub/chub_ipc.c @@ -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) { diff --git a/drivers/staging/nanohub/chub_ipc.h b/drivers/staging/nanohub/chub_ipc.h index 1d3973301f4e..f59fb04bf381 100644 --- a/drivers/staging/nanohub/chub_ipc.h +++ b/drivers/staging/nanohub/chub_ipc.h @@ -78,8 +78,11 @@ #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);