Loading arch/arm64/kernel/hibernate.c +1 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,7 @@ int swsusp_arch_suspend(void) sleep_cpu = smp_processor_id(); ret = swsusp_save(); } else { place_marker("M - Image Kernel Start"); /* Clean kernel core startup/idle code to PoC*/ dcache_clean_range(__mmuoff_data_start, __mmuoff_data_end); dcache_clean_range(__idmap_text_start, __idmap_text_end); Loading drivers/soc/qcom/boot_marker.c +48 −42 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <soc/qcom/boot_stats.h> #define MAX_STRING_LEN 256 #define BOOT_MARKER_MAX_LEN 40 #define BOOT_MARKER_MAX_LEN 50 #define MSM_ARCH_TIMER_FREQ 19200000 struct boot_marker { Loading @@ -40,10 +40,6 @@ struct boot_marker { spinlock_t slock; }; #ifdef CONFIG_HIBERNATION static unsigned long long int kernel_start_at; #endif /* CONFIG_HIBERNATION */ static struct dentry *dent_bkpi, *dent_bkpi_status, *dent_mpm_timer; static struct boot_marker boot_marker_list; Loading Loading @@ -87,6 +83,39 @@ static void _create_boot_marker(const char *name, spin_unlock(&boot_marker_list.slock); } static void _update_boot_marker(const char *name, const char *new_name, unsigned long long int timer_value) { struct boot_marker *marker; struct boot_marker *temp_addr; spin_lock(&boot_marker_list.slock); list_for_each_entry_safe(marker, temp_addr, &boot_marker_list.list, list) { if (strnstr(marker->marker_name, name, strlen(marker->marker_name))) { if (new_name) strlcpy(marker->marker_name, new_name, sizeof(marker->marker_name)); marker->timer_value = timer_value; spin_unlock(&boot_marker_list.slock); return; } if (!new_name) continue; if (strnstr(marker->marker_name, new_name, strlen(marker->marker_name))) { marker->timer_value = timer_value; spin_unlock(&boot_marker_list.slock); return; } } spin_unlock(&boot_marker_list.slock); _create_boot_marker(name, timer_value); } static void set_bootloader_stats(void) { _create_boot_marker("M - APPSBL Start - ", Loading @@ -104,51 +133,28 @@ static void set_bootloader_stats(void) } #ifdef CONFIG_HIBERNATION void update_bootloader_stats(void) static void update_bootloader_stats(void) { u32 val = 0; struct boot_marker *marker; static const char * const name[] = {"D - Hiber: Start image loading - ", "D - Hiber: End image loading - ", "M - APPSBL End(Kernel Start) - "}; spin_lock(&boot_marker_list.slock); list_for_each_entry(marker, &boot_marker_list.list, list) { if (!strcmp("M - APPSBL Start - ", marker->marker_name)) { val = readl_relaxed(&boot_stats->bootloader_start); marker->timer_value = val; } if (!strcmp("D - APPSBL Kernel Load Start - ", marker->marker_name)) { strlcpy(marker->marker_name, name[0], sizeof(marker->marker_name)); val = readl_relaxed(&boot_stats->load_kernel_start); marker->timer_value = val; } if (!strcmp("D - APPSBL Kernel Load End - ", marker->marker_name)) { strlcpy(marker->marker_name, name[1], sizeof(marker->marker_name)); val = readl_relaxed(&boot_stats->load_kernel_done); marker->timer_value = val; } if (!strcmp("M - APPSBL End - ", marker->marker_name)) { strlcpy(marker->marker_name, name[2], sizeof(marker->marker_name)); marker->timer_value = kernel_start_at; } } spin_unlock(&boot_marker_list.slock); _update_boot_marker("M - APPSBL Start - ", NULL, readl_relaxed(&boot_stats->bootloader_start)); _update_boot_marker("D - APPSBL Kernel Load Start - ", "D - APPSBL Hibernation Image Load Start - ", readl_relaxed(&boot_stats->load_kernel_start)); _update_boot_marker("D - APPSBL Kernel Load End - ", "D - APPSBL Hibernation Image Load End - ", readl_relaxed(&boot_stats->load_kernel_done)); _update_boot_marker("M - APPSBL End - ", NULL, readl_relaxed(&boot_stats->bootloader_end)); } #endif /* CONFIG_HIBERNATION */ void place_marker(const char *name) { #ifdef CONFIG_HIBERNATION if (!strcmp(name, "Kernel Start")) kernel_start_at = msm_timer_get_sclk_ticks(); if (!strcmp(name, "M - Image Kernel Start")) update_bootloader_stats(); #endif /* CONFIG_HIBERNATION */ _create_boot_marker((char *) name, msm_timer_get_sclk_ticks()); _update_boot_marker((char *)name, NULL, msm_timer_get_sclk_ticks()); } EXPORT_SYMBOL(place_marker); Loading include/soc/qcom/boot_stats.h +0 −5 Original line number Diff line number Diff line Loading @@ -45,11 +45,6 @@ static inline int boot_marker_enabled(void) { return 1; } void place_marker(const char *name); void destroy_marker(const char *name); void measure_wake_up_time(void); #ifdef CONFIG_HIBERNATION void update_bootloader_stats(void); #else static inline void update_bootloader_stats(void) { return; } #endif /* CONFIG_HIBERNATION */ #else static inline void place_marker(char *name) { }; static inline void destroy_marker(const char *name) { }; Loading kernel/power/hibernate.c +6 −4 Original line number Diff line number Diff line Loading @@ -335,6 +335,7 @@ static int create_image(int platform_mode) Platform_finish: platform_finish(platform_mode); place_marker("M - Hibernation: start device resume"); dpm_resume_start(in_suspend ? (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); Loading Loading @@ -410,7 +411,7 @@ int hibernation_snapshot(int platform_mode) resume_console(); dpm_complete(msg); place_marker("M - Hibernation: end device resume"); Close: platform_end(platform_mode); return error; Loading Loading @@ -750,7 +751,7 @@ int hibernate(void) in_suspend = 0; pm_restore_gfp_mask(); } else { place_marker("PM: Image restored!"); place_marker("M - PM: Image restored!"); pm_pr_dbg("Image restored successfully.\n"); } Loading @@ -765,6 +766,7 @@ int hibernate(void) error = load_image_and_restore(); } thaw_processes(); place_marker("M - Hibernation: processes thaw done"); /* Don't bother checking whether freezer_test_done is true */ freezer_test_done = false; Loading @@ -774,7 +776,7 @@ int hibernate(void) atomic_inc(&snapshot_device_available); Unlock: unlock_system_sleep(); place_marker("PM: Hibernation Exit!"); place_marker("M - PM: Hibernation Exit!"); pr_info("hibernation exit\n"); return error; Loading Loading @@ -897,7 +899,7 @@ static int software_resume(void) goto Close_Finish; error = load_image_and_restore(); thaw_processes(); place_marker("PM: Thaw completed!"); place_marker("M - PM: Thaw processes completed!"); Finish: __pm_notifier_call_chain(PM_POST_RESTORE, nr_calls, NULL); pm_restore_console(); Loading Loading
arch/arm64/kernel/hibernate.c +1 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,7 @@ int swsusp_arch_suspend(void) sleep_cpu = smp_processor_id(); ret = swsusp_save(); } else { place_marker("M - Image Kernel Start"); /* Clean kernel core startup/idle code to PoC*/ dcache_clean_range(__mmuoff_data_start, __mmuoff_data_end); dcache_clean_range(__idmap_text_start, __idmap_text_end); Loading
drivers/soc/qcom/boot_marker.c +48 −42 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <soc/qcom/boot_stats.h> #define MAX_STRING_LEN 256 #define BOOT_MARKER_MAX_LEN 40 #define BOOT_MARKER_MAX_LEN 50 #define MSM_ARCH_TIMER_FREQ 19200000 struct boot_marker { Loading @@ -40,10 +40,6 @@ struct boot_marker { spinlock_t slock; }; #ifdef CONFIG_HIBERNATION static unsigned long long int kernel_start_at; #endif /* CONFIG_HIBERNATION */ static struct dentry *dent_bkpi, *dent_bkpi_status, *dent_mpm_timer; static struct boot_marker boot_marker_list; Loading Loading @@ -87,6 +83,39 @@ static void _create_boot_marker(const char *name, spin_unlock(&boot_marker_list.slock); } static void _update_boot_marker(const char *name, const char *new_name, unsigned long long int timer_value) { struct boot_marker *marker; struct boot_marker *temp_addr; spin_lock(&boot_marker_list.slock); list_for_each_entry_safe(marker, temp_addr, &boot_marker_list.list, list) { if (strnstr(marker->marker_name, name, strlen(marker->marker_name))) { if (new_name) strlcpy(marker->marker_name, new_name, sizeof(marker->marker_name)); marker->timer_value = timer_value; spin_unlock(&boot_marker_list.slock); return; } if (!new_name) continue; if (strnstr(marker->marker_name, new_name, strlen(marker->marker_name))) { marker->timer_value = timer_value; spin_unlock(&boot_marker_list.slock); return; } } spin_unlock(&boot_marker_list.slock); _create_boot_marker(name, timer_value); } static void set_bootloader_stats(void) { _create_boot_marker("M - APPSBL Start - ", Loading @@ -104,51 +133,28 @@ static void set_bootloader_stats(void) } #ifdef CONFIG_HIBERNATION void update_bootloader_stats(void) static void update_bootloader_stats(void) { u32 val = 0; struct boot_marker *marker; static const char * const name[] = {"D - Hiber: Start image loading - ", "D - Hiber: End image loading - ", "M - APPSBL End(Kernel Start) - "}; spin_lock(&boot_marker_list.slock); list_for_each_entry(marker, &boot_marker_list.list, list) { if (!strcmp("M - APPSBL Start - ", marker->marker_name)) { val = readl_relaxed(&boot_stats->bootloader_start); marker->timer_value = val; } if (!strcmp("D - APPSBL Kernel Load Start - ", marker->marker_name)) { strlcpy(marker->marker_name, name[0], sizeof(marker->marker_name)); val = readl_relaxed(&boot_stats->load_kernel_start); marker->timer_value = val; } if (!strcmp("D - APPSBL Kernel Load End - ", marker->marker_name)) { strlcpy(marker->marker_name, name[1], sizeof(marker->marker_name)); val = readl_relaxed(&boot_stats->load_kernel_done); marker->timer_value = val; } if (!strcmp("M - APPSBL End - ", marker->marker_name)) { strlcpy(marker->marker_name, name[2], sizeof(marker->marker_name)); marker->timer_value = kernel_start_at; } } spin_unlock(&boot_marker_list.slock); _update_boot_marker("M - APPSBL Start - ", NULL, readl_relaxed(&boot_stats->bootloader_start)); _update_boot_marker("D - APPSBL Kernel Load Start - ", "D - APPSBL Hibernation Image Load Start - ", readl_relaxed(&boot_stats->load_kernel_start)); _update_boot_marker("D - APPSBL Kernel Load End - ", "D - APPSBL Hibernation Image Load End - ", readl_relaxed(&boot_stats->load_kernel_done)); _update_boot_marker("M - APPSBL End - ", NULL, readl_relaxed(&boot_stats->bootloader_end)); } #endif /* CONFIG_HIBERNATION */ void place_marker(const char *name) { #ifdef CONFIG_HIBERNATION if (!strcmp(name, "Kernel Start")) kernel_start_at = msm_timer_get_sclk_ticks(); if (!strcmp(name, "M - Image Kernel Start")) update_bootloader_stats(); #endif /* CONFIG_HIBERNATION */ _create_boot_marker((char *) name, msm_timer_get_sclk_ticks()); _update_boot_marker((char *)name, NULL, msm_timer_get_sclk_ticks()); } EXPORT_SYMBOL(place_marker); Loading
include/soc/qcom/boot_stats.h +0 −5 Original line number Diff line number Diff line Loading @@ -45,11 +45,6 @@ static inline int boot_marker_enabled(void) { return 1; } void place_marker(const char *name); void destroy_marker(const char *name); void measure_wake_up_time(void); #ifdef CONFIG_HIBERNATION void update_bootloader_stats(void); #else static inline void update_bootloader_stats(void) { return; } #endif /* CONFIG_HIBERNATION */ #else static inline void place_marker(char *name) { }; static inline void destroy_marker(const char *name) { }; Loading
kernel/power/hibernate.c +6 −4 Original line number Diff line number Diff line Loading @@ -335,6 +335,7 @@ static int create_image(int platform_mode) Platform_finish: platform_finish(platform_mode); place_marker("M - Hibernation: start device resume"); dpm_resume_start(in_suspend ? (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); Loading Loading @@ -410,7 +411,7 @@ int hibernation_snapshot(int platform_mode) resume_console(); dpm_complete(msg); place_marker("M - Hibernation: end device resume"); Close: platform_end(platform_mode); return error; Loading Loading @@ -750,7 +751,7 @@ int hibernate(void) in_suspend = 0; pm_restore_gfp_mask(); } else { place_marker("PM: Image restored!"); place_marker("M - PM: Image restored!"); pm_pr_dbg("Image restored successfully.\n"); } Loading @@ -765,6 +766,7 @@ int hibernate(void) error = load_image_and_restore(); } thaw_processes(); place_marker("M - Hibernation: processes thaw done"); /* Don't bother checking whether freezer_test_done is true */ freezer_test_done = false; Loading @@ -774,7 +776,7 @@ int hibernate(void) atomic_inc(&snapshot_device_available); Unlock: unlock_system_sleep(); place_marker("PM: Hibernation Exit!"); place_marker("M - PM: Hibernation Exit!"); pr_info("hibernation exit\n"); return error; Loading Loading @@ -897,7 +899,7 @@ static int software_resume(void) goto Close_Finish; error = load_image_and_restore(); thaw_processes(); place_marker("PM: Thaw completed!"); place_marker("M - PM: Thaw processes completed!"); Finish: __pm_notifier_call_chain(PM_POST_RESTORE, nr_calls, NULL); pm_restore_console(); Loading