Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e6592af authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm_11ad: copy FW crash dump before starting SSR flow"

parents 3b63b7a0 943920d4
Loading
Loading
Loading
Loading
+26 −21
Original line number Diff line number Diff line
@@ -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) {