drivers: power: reset: Import Xiaomi changes

* From dagu-s-oss

Change-Id: If5039e51dc3983df6a62da6a96d861c579cb2172
This commit is contained in:
Sebastiano Barezzi
2022-11-15 16:33:39 +01:00
committed by Sebastiano Barezzi
parent 82d5fe68fe
commit 191a864379
2 changed files with 31 additions and 0 deletions

View File

@@ -47,6 +47,7 @@
#define KASLR_OFFSET_PROP "qcom,msm-imem-kaslr_offset"
#define KASLR_OFFSET_BIT_MASK 0x00000000FFFFFFFF
#define DISPLAY_CONFIG_OFFSET_PROP "qcom,msm-imem-display_config_offset"
static int restart_mode;
static void *restart_reason, *dload_type_addr;
@@ -280,6 +281,25 @@ static void store_kaslr_offset(void)
}
#endif /* CONFIG_RANDOMIZE_BASE */
/*
* set display config imem first 4 bytes to 0xdead4ead, because imem context
* will not lost when warm reset. if panic, xbl ramdump will display orange
* screen, and framebuffer addr is determined by these four bytes in
* MDP_GetDisplayBootConfig function. so set these four bytes to a invalid
* value and let the framebuffer of orange screen use
* RAMDUMP_FRAME_BUFFER_ADDRESS(0xb0400000)
*/
static void clear_display_config(void)
{
void *display_config_imem_addr = map_prop_mem(DISPLAY_CONFIG_OFFSET_PROP);
if (display_config_imem_addr) {
__raw_writel(0xdead4ead, display_config_imem_addr);
iounmap(display_config_imem_addr);
}
pr_err("%s clear display config\n", __func__);
}
static void setup_dload_mode_support(void)
{
int ret;
@@ -294,6 +314,7 @@ static void setup_dload_mode_support(void)
emergency_dload_mode_addr = map_prop_mem(EDL_MODE_PROP);
store_kaslr_offset();
clear_display_config();
dload_type_addr = map_prop_mem(IMEM_DL_TYPE_PROP);
if (!dload_type_addr)
@@ -504,6 +525,10 @@ static void msm_restart_prepare(const char *cmd)
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_RECOVERY);
__raw_writel(0x77665502, restart_reason);
} else if (!strncmp(cmd, "exaid", 5)) {
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_EXAID);
__raw_writel(0x77665502, restart_reason);
} else if (!strcmp(cmd, "rtc")) {
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_RTC);
@@ -531,8 +556,12 @@ static void msm_restart_prepare(const char *cmd)
} else if (!strncmp(cmd, "edl", 3)) {
enable_emergency_dload_mode();
} else {
qpnp_pon_set_restart_reason(PON_RESTART_REASON_NORMAL);
__raw_writel(0x77665501, restart_reason);
}
} else {
qpnp_pon_set_restart_reason(PON_RESTART_REASON_NORMAL);
__raw_writel(0x77665501, restart_reason);
}
flush_cache_all();

View File

@@ -54,6 +54,8 @@ enum pon_restart_reason {
PON_RESTART_REASON_DMVERITY_CORRUPTED = 0x04,
PON_RESTART_REASON_DMVERITY_ENFORCE = 0x05,
PON_RESTART_REASON_KEYS_CLEAR = 0x06,
PON_RESTART_REASON_EXAID = 0x07,
PON_RESTART_REASON_NORMAL = 0x20,
};
#ifdef CONFIG_INPUT_QPNP_POWER_ON