drivers: power: reset: Import Xiaomi changes
* From dagu-s-oss Change-Id: If5039e51dc3983df6a62da6a96d861c579cb2172
This commit is contained in:
committed by
Sebastiano Barezzi
parent
82d5fe68fe
commit
191a864379
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user