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

Commit fbf34e78 authored by Raghavendra Rao Ananta's avatar Raghavendra Rao Ananta
Browse files

power: reset: Add force warm reboot support



Some entities, such as PCIe on the LE pltforms, do not want
to lose the communication link on a system reboot. As a result,
add support to force warm reboot of the system and preserve the
link.

Change-Id: Ib0c3435f92393eae31afee9c144d2aaf2abcb512
Signed-off-by: default avatarRaghavendra Rao Ananta <rananta@codeaurora.org>
parent 55c3d32b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -9,6 +9,10 @@ Required Properties:
-compatible: "qcom,pshold"
-reg: Specifies the physical address of the ps-hold register

Optional Properties:
-qcom,force-warm-reboot: Issue a warm reboot, even for the traditional cases
				where hard reboot is issued.

Example:

	restart@fc4ab000 {
+10 −2
Original line number Diff line number Diff line
/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -83,6 +83,8 @@ static void *kaslr_imem_addr;
#endif
static bool scm_dload_supported;

static bool force_warm_reboot;

static int dload_set(const char *val, const struct kernel_param *kp);
/* interface for exporting attributes */
struct reset_attribute {
@@ -286,8 +288,11 @@ static void msm_restart_prepare(const char *cmd)
				(cmd != NULL && cmd[0] != '\0'));
	}

	if (force_warm_reboot)
		pr_info("Forcing a warm reset of the system\n");

	/* Hard reset the PMIC unless memory contents must be maintained. */
	if (need_warm_reset)
	if (force_warm_reboot || need_warm_reset)
		qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
	else
		qpnp_pon_system_pwr_off(PON_POWER_OFF_HARD_RESET);
@@ -649,6 +654,9 @@ static int msm_restart_probe(struct platform_device *pdev)
	if (!download_mode)
		scm_disable_sdi();

	force_warm_reboot = of_property_read_bool(dev->of_node,
						"qcom,force-warm-reboot");

	return 0;

err_restart_reason: