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

Commit 25c63fa3 authored by Lijuan Gao's avatar Lijuan Gao
Browse files

drivers: power: reset: Do cold reset when doing oem reboot



As the IMEM approach to store reset reason is deprecated, so use
the spare register in PMIC power-on peripheral to store the oem
restart reason.

Bit-2 to bit-7 of SOFT_RB_SPARE for hard reset reason, so divide
existing range into regions, value 0 to 31 for common defined features
and 32 to 63 values are for OEMs/ODMs specific features.

Change-Id: Ib8e64d6dd5a335325d0469280e41e9d10ec9b893
Signed-off-by: default avatarLijuan Gao <lijuang@codeaurora.org>
parent 4f8f0737
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -328,11 +328,28 @@ static void msm_restart_prepare(const char *cmd)
			__raw_writel(0x7766550a, restart_reason);
		} else if (!strncmp(cmd, "oem-", 4)) {
			unsigned long code;
			unsigned long reset_reason;
			int ret;
			ret = kstrtoul(cmd + 4, 16, &code);
			if (!ret)
			if (!ret) {
				/* Bit-2 to bit-7 of SOFT_RB_SPARE for hard
				 * reset reason:
				 * Value 0 to 31 for common defined features
				 * Value 32 to 63 for oem specific features
				 */
				reset_reason = code +
						PON_RESTART_REASON_OEM_MIN;
				if (reset_reason > PON_RESTART_REASON_OEM_MAX ||
				   reset_reason < PON_RESTART_REASON_OEM_MIN) {
					pr_err("Invalid oem reset reason: %lx\n",
						reset_reason);
				} else {
					qpnp_pon_set_restart_reason(
						reset_reason);
				}
				__raw_writel(0x6f656d00 | (code & 0xff),
					     restart_reason);
			}
		} else if (!strncmp(cmd, "edl", 3)) {
			enable_emergency_dload_mode();
		} else {
+5 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ enum pon_power_off_type {
};

enum pon_restart_reason {
	/* 0 ~ 31 for common defined features */
	PON_RESTART_REASON_UNKNOWN		= 0x00,
	PON_RESTART_REASON_RECOVERY		= 0x01,
	PON_RESTART_REASON_BOOTLOADER		= 0x02,
@@ -58,6 +59,10 @@ enum pon_restart_reason {
	PON_RESTART_REASON_DMVERITY_CORRUPTED	= 0x04,
	PON_RESTART_REASON_DMVERITY_ENFORCE	= 0x05,
	PON_RESTART_REASON_KEYS_CLEAR		= 0x06,

	/* 32 ~ 63 for OEMs/ODMs secific features */
	PON_RESTART_REASON_OEM_MIN		= 0x20,
	PON_RESTART_REASON_OEM_MAX		= 0x3f,
};

#ifdef CONFIG_INPUT_QPNP_POWER_ON