diff options
author | Will McVicker <willmcvicker@google.com> | 2023-11-03 16:23:43 -0700 |
---|---|---|
committer | Will McVicker <willmcvicker@google.com> | 2023-11-03 16:23:43 -0700 |
commit | 56c790ef1718784c9d5357f4395a0c5c9a4cd7ff (patch) | |
tree | 0f09f54948c4ec2af182a5558feb75317c21c456 | |
parent | 9d017f9eea57c0b345d1e6abfee95261a662ef14 (diff) | |
parent | 9b4bb088cf8f02bcebece637f0a1a6c33f3db29d (diff) | |
download | reset-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.c | 23 | ||||
-rw-r--r-- | exynos-gs201-reboot.c | 4 |
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; |