summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill McVicker <willmcvicker@google.com>2023-11-03 16:23:43 -0700
committerWill McVicker <willmcvicker@google.com>2023-11-03 16:23:43 -0700
commit56c790ef1718784c9d5357f4395a0c5c9a4cd7ff (patch)
tree0f09f54948c4ec2af182a5558feb75317c21c456
parent9d017f9eea57c0b345d1e6abfee95261a662ef14 (diff)
parent9b4bb088cf8f02bcebece637f0a1a6c33f3db29d (diff)
downloadreset-android-gs-raviole-mainline.tar.gz
Merge aosp/android-gs-raviole-5.10-android14 into android-gs-raviole-mainlineandroid-gs-raviole-mainline
* aosp/android-gs-raviole-5.10-android14: power: reset: gs101: use PMU_INFORM2 for dump_gpr_mode power: reset: align all thermal shutdown scenario power: reset: align all thermal shutdown scenario power: reset: align all thermal shutdown scenario power: reset: determine reset type by reboot_mode power: reset: determine reset type by reboot_mode power: reset: power key detection only when power off power: reset: force warm_reset for thermal shutdown Change-Id: I5289a6128329ba024f2ada253112d6b030908a27 Signed-off-by: Will McVicker <willmcvicker@google.com>
-rw-r--r--exynos-gs101-reboot.c23
-rw-r--r--exynos-gs201-reboot.c4
2 files changed, 19 insertions, 8 deletions
diff --git a/exynos-gs101-reboot.c b/exynos-gs101-reboot.c
index a7b2b01..3a76e70 100644
--- a/exynos-gs101-reboot.c
+++ b/exynos-gs101-reboot.c
@@ -25,7 +25,6 @@
#include <soc/google/acpm_ipc_ctrl.h>
#endif
#include <soc/google/exynos-el3_mon.h>
-#include <soc/google/debug-snapshot.h>
#include "../../bms/google_bms.h"
struct gpio_desc *power_gpio;
@@ -33,11 +32,14 @@ struct gpio_desc *power_gpio;
#define BMS_RSBM_VALID BIT(31)
+#define DUMP_GPR_MODE (0xDAB)
+
static struct regmap *pmureg;
static u32 warm_reboot_offset, warm_reboot_trigger;
static u32 cold_reboot_offset, cold_reboot_trigger;
static u32 reboot_cmd_offset;
static u32 shutdown_offset, shutdown_trigger;
+static u32 dump_gpr_offset;
static phys_addr_t pmu_alive_base;
static bool rsbm_supported;
static bool force_warm_reboot_on_thermal_shutdown;
@@ -124,8 +126,8 @@ static void exynos_reboot_parse(const char *cmd)
value = REBOOT_MODE_DMVERITY_CORRUPTED;
} else if (!strcmp(cmd, "rescue")) {
value = REBOOT_MODE_RESCUE;
- } else if (!strcmp(cmd, "shutdown-thermal") ||
- !strcmp(cmd, "shutdown,thermal")) {
+ } else if (!strncmp(cmd, "shutdown-thermal", strlen("shutdown-thermal")) ||
+ !strncmp(cmd, "shutdown,thermal", strlen("shutdown,thermal"))) {
if (force_warm_reboot_on_thermal_shutdown)
force_warm_reboot = true;
value = REBOOT_MODE_SHUTDOWN_THERMAL;
@@ -181,9 +183,13 @@ static int exynos_restart_handler(struct notifier_block *this, unsigned long mod
/* Do S/W Reset */
pr_emerg("%s: Exynos SoC reset right now\n", __func__);
- if (s2mpg10_get_rev_id() == S2MPG10_EVT0 ||
- !rsbm_supported || !dbg_snapshot_get_reboot_status() ||
- dbg_snapshot_get_panic_status() || dbg_snapshot_get_warm_status()) {
+ if (reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT)
+ set_priv_reg(pmu_alive_base + dump_gpr_offset, DUMP_GPR_MODE);
+ else
+ set_priv_reg(pmu_alive_base + dump_gpr_offset, 0x0);
+
+ if (s2mpg10_get_rev_id() == S2MPG10_EVT0 || !rsbm_supported ||
+ reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) {
set_priv_reg(pmu_alive_base + warm_reboot_offset, warm_reboot_trigger);
} else {
pr_emerg("Set PS_HOLD Low.\n");
@@ -258,6 +264,11 @@ static int exynos_reboot_probe(struct platform_device *pdev)
reboot_cmd_offset = EXYNOS_PMU_SYSIP_DAT0;
}
+ if (of_property_read_u32(np, "dump-gpr-offset", &dump_gpr_offset) < 0) {
+ dev_err(dev, "failed to find dump-gpr-offset property\n");
+ return -EINVAL;
+ }
+
force_warm_reboot_on_thermal_shutdown = of_property_read_bool(np,
"force-warm-reboot-on-thermal-shutdown");
diff --git a/exynos-gs201-reboot.c b/exynos-gs201-reboot.c
index bb658d0..224aa2d 100644
--- a/exynos-gs201-reboot.c
+++ b/exynos-gs201-reboot.c
@@ -83,8 +83,8 @@ static void exynos_reboot_parse(const char *cmd)
value = REBOOT_MODE_DMVERITY_CORRUPTED;
} else if (!strcmp(cmd, "rescue")) {
value = REBOOT_MODE_RESCUE;
- } else if (!strcmp(cmd, "shutdown-thermal") ||
- !strcmp(cmd, "shutdown,thermal")) {
+ } else if (!strncmp(cmd, "shutdown-thermal", strlen("shutdown-thermal")) ||
+ !strncmp(cmd, "shutdown,thermal", strlen("shutdown,thermal"))) {
if (force_warm_reboot_on_thermal_shutdown)
force_warm_reboot = true;
value = REBOOT_MODE_SHUTDOWN_THERMAL;