diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-04-03 06:24:47 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-04-03 06:24:47 -0700 |
| commit | 3e6592af2d9d8af7fd2309670eaa3381c6e7f8b7 (patch) | |
| tree | 5182aff248ae9d068bc019a1f30aeabea9119cef | |
| parent | 3b63b7a021bf07ca0172535c1b7344fef1b38d28 (diff) | |
| parent | 943920d41d893f6eaac91f710a6e947397d93457 (diff) | |
Merge "msm_11ad: copy FW crash dump before starting SSR flow"
| -rw-r--r-- | drivers/platform/msm/msm_11ad/msm_11ad.c | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/drivers/platform/msm/msm_11ad/msm_11ad.c b/drivers/platform/msm/msm_11ad/msm_11ad.c index 61a870c9928b..c6009d767db5 100644 --- a/drivers/platform/msm/msm_11ad/msm_11ad.c +++ b/drivers/platform/msm/msm_11ad/msm_11ad.c @@ -750,6 +750,25 @@ static int msm_11ad_ssr_powerup(const struct subsys_desc *subsys) return rc; } +static int msm_11ad_ssr_copy_ramdump(struct msm11ad_ctx *ctx) +{ + if (ctx->rops.ramdump && ctx->wil_handle) { + int rc = ctx->rops.ramdump(ctx->wil_handle, ctx->ramdump_addr, + WIGIG_RAMDUMP_SIZE); + if (rc) { + dev_err(ctx->dev, "ramdump failed : %d\n", rc); + return -EINVAL; + } + } + + ctx->dump_data.version = WIGIG_DUMP_FORMAT_VER; + strlcpy(ctx->dump_data.name, WIGIG_SUBSYS_NAME, + sizeof(ctx->dump_data.name)); + + ctx->dump_data.magic = WIGIG_DUMP_MAGIC_VER_V1; + return 0; +} + static int msm_11ad_ssr_ramdump(int enable, const struct subsys_desc *subsys) { int rc; @@ -766,13 +785,10 @@ static int msm_11ad_ssr_ramdump(int enable, const struct subsys_desc *subsys) if (!enable) return 0; - if (ctx->rops.ramdump && ctx->wil_handle) { - rc = ctx->rops.ramdump(ctx->wil_handle, ctx->ramdump_addr, - WIGIG_RAMDUMP_SIZE); - if (rc) { - dev_err(ctx->dev, "ramdump failed : %d\n", rc); - return -EINVAL; - } + if (!ctx->recovery_in_progress) { + rc = msm_11ad_ssr_copy_ramdump(ctx); + if (rc) + return rc; } memset(&segment, 0, sizeof(segment)); @@ -784,7 +800,6 @@ static int msm_11ad_ssr_ramdump(int enable, const struct subsys_desc *subsys) static void msm_11ad_ssr_crash_shutdown(const struct subsys_desc *subsys) { - int rc; struct platform_device *pdev; struct msm11ad_ctx *ctx; @@ -796,19 +811,8 @@ static void msm_11ad_ssr_crash_shutdown(const struct subsys_desc *subsys) return; } - if (ctx->rops.ramdump && ctx->wil_handle) { - rc = ctx->rops.ramdump(ctx->wil_handle, ctx->ramdump_addr, - WIGIG_RAMDUMP_SIZE); - if (rc) - dev_err(ctx->dev, "ramdump failed : %d\n", rc); - /* continue */ - } - - ctx->dump_data.version = WIGIG_DUMP_FORMAT_VER; - strlcpy(ctx->dump_data.name, WIGIG_SUBSYS_NAME, - sizeof(ctx->dump_data.name)); - - ctx->dump_data.magic = WIGIG_DUMP_MAGIC_VER_V1; + if (!ctx->recovery_in_progress) + (void)msm_11ad_ssr_copy_ramdump(ctx); } static void msm_11ad_ssr_deinit(struct msm11ad_ctx *ctx) @@ -1305,6 +1309,7 @@ static int msm_11ad_notify_crash(struct msm11ad_ctx *ctx) if (ctx->subsys) { dev_info(ctx->dev, "SSR requested\n"); + (void)msm_11ad_ssr_copy_ramdump(ctx); ctx->recovery_in_progress = true; rc = subsystem_restart_dev(ctx->subsys); if (rc) { |
