diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4473-drm-amd-display-Add-fullscreen-transitions-to-log.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4473-drm-amd-display-Add-fullscreen-transitions-to-log.patch | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4473-drm-amd-display-Add-fullscreen-transitions-to-log.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4473-drm-amd-display-Add-fullscreen-transitions-to-log.patch new file mode 100644 index 00000000..6276c931 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4473-drm-amd-display-Add-fullscreen-transitions-to-log.patch @@ -0,0 +1,250 @@ +From 2a956fb9850033bf9f0d01a393f47e5baf5c1f4c Mon Sep 17 00:00:00 2001 +From: Anthony Koo <Anthony.Koo@amd.com> +Date: Thu, 26 Apr 2018 10:03:44 -0400 +Subject: [PATCH 4473/5725] drm/amd/display: Add fullscreen transitions to log + +Signed-off-by: Anthony Koo <Anthony.Koo@amd.com> +Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + .../gpu/drm/amd/display/modules/inc/mod_stats.h | 4 + + drivers/gpu/drm/amd/display/modules/stats/stats.c | 137 +++++++++++++++++---- + 2 files changed, 114 insertions(+), 27 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_stats.h b/drivers/gpu/drm/amd/display/modules/inc/mod_stats.h +index 3230e2a..3812094 100644 +--- a/drivers/gpu/drm/amd/display/modules/inc/mod_stats.h ++++ b/drivers/gpu/drm/amd/display/modules/inc/mod_stats.h +@@ -46,6 +46,10 @@ void mod_stats_dump(struct mod_stats *mod_stats); + + void mod_stats_reset_data(struct mod_stats *mod_stats); + ++void mod_stats_update_event(struct mod_stats *mod_stats, ++ char *event_string, ++ unsigned int length); ++ + void mod_stats_update_flip(struct mod_stats *mod_stats, + unsigned long timestamp_in_ns); + +diff --git a/drivers/gpu/drm/amd/display/modules/stats/stats.c b/drivers/gpu/drm/amd/display/modules/stats/stats.c +index 45acdbc..4b00bae 100644 +--- a/drivers/gpu/drm/amd/display/modules/stats/stats.c ++++ b/drivers/gpu/drm/amd/display/modules/stats/stats.c +@@ -36,9 +36,14 @@ + #define DAL_STATS_ENTRIES_REGKEY_DEFAULT 0x00350000 + #define DAL_STATS_ENTRIES_REGKEY_MAX 0x01000000 + ++#define DAL_STATS_EVENT_ENTRIES_DEFAULT 0x00000100 ++ + #define MOD_STATS_NUM_VSYNCS 5 ++#define MOD_STATS_EVENT_STRING_MAX 512 + + struct stats_time_cache { ++ unsigned int entry_id; ++ + unsigned long flip_timestamp_in_ns; + unsigned long vupdate_timestamp_in_ns; + +@@ -63,15 +68,26 @@ struct stats_time_cache { + unsigned int flags; + }; + ++struct stats_event_cache { ++ unsigned int entry_id; ++ char event_string[MOD_STATS_EVENT_STRING_MAX]; ++}; ++ + struct core_stats { + struct mod_stats public; + struct dc *dc; + ++ bool enabled; ++ unsigned int entries; ++ unsigned int event_entries; ++ unsigned int entry_id; ++ + struct stats_time_cache *time; + unsigned int index; + +- bool enabled; +- unsigned int entries; ++ struct stats_event_cache *events; ++ unsigned int event_index; ++ + }; + + #define MOD_STATS_TO_CORE(mod_stats)\ +@@ -125,9 +141,18 @@ struct mod_stats *mod_stats_create(struct dc *dc) + else + core_stats->entries = reg_data; + } ++ core_stats->time = kzalloc( ++ sizeof(struct stats_time_cache) * ++ core_stats->entries, ++ GFP_KERNEL); + +- core_stats->time = kzalloc(sizeof(struct stats_time_cache) * core_stats->entries, ++ ++ core_stats->event_entries = DAL_STATS_EVENT_ENTRIES_DEFAULT; ++ core_stats->events = kzalloc( ++ sizeof(struct stats_event_cache) * ++ core_stats->event_entries, + GFP_KERNEL); ++ + } else { + core_stats->entries = 0; + } +@@ -139,6 +164,10 @@ struct mod_stats *mod_stats_create(struct dc *dc) + * handle calculation cases that depend on previous flip data. + */ + core_stats->index = 1; ++ core_stats->event_index = 0; ++ ++ // Keeps track of ordering within the different stats structures ++ core_stats->entry_id = 0; + + return &core_stats->public; + +@@ -167,6 +196,9 @@ void mod_stats_dump(struct mod_stats *mod_stats) + struct dal_logger *logger = NULL; + struct core_stats *core_stats = NULL; + struct stats_time_cache *time = NULL; ++ struct stats_event_cache *events = NULL; ++ unsigned int time_index = 1; ++ unsigned int event_index = 0; + unsigned int index = 0; + struct log_entry log_entry; + +@@ -177,6 +209,7 @@ void mod_stats_dump(struct mod_stats *mod_stats) + dc = core_stats->dc; + logger = dc->ctx->logger; + time = core_stats->time; ++ events = core_stats->events; + + DISPLAY_STATS_BEGIN(log_entry); + +@@ -196,30 +229,39 @@ void mod_stats_dump(struct mod_stats *mod_stats) + "vSyncTime1", "vSyncTime2", "vSyncTime3", + "vSyncTime4", "vSyncTime5", "flags"); + +- for (int i = 0; i < core_stats->index && i < core_stats->entries; i++) { +- DISPLAY_STATS("%10u %10u %10u %10u %10u" +- " %11u %11u %17u %10u %14u" +- " %10u %10u %10u %10u %10u" +- " %10u %10u %10u %10u\n", +- time[i].render_time_in_us, +- time[i].avg_render_time_in_us_last_ten, +- time[i].min_window, +- time[i].lfc_mid_point_in_us, +- time[i].max_window, +- time[i].vsync_to_flip_time_in_us, +- time[i].flip_to_vsync_time_in_us, +- time[i].num_vsync_between_flips, +- time[i].num_frames_inserted, +- time[i].inserted_duration_in_us, +- time[i].v_total_min, +- time[i].v_total_max, +- time[i].event_triggers, +- time[i].v_sync_time_in_us[0], +- time[i].v_sync_time_in_us[1], +- time[i].v_sync_time_in_us[2], +- time[i].v_sync_time_in_us[3], +- time[i].v_sync_time_in_us[4], +- time[i].flags); ++ for (int i = 0; i < core_stats->entry_id; i++) { ++ if (event_index < core_stats->event_index && ++ i == events[event_index].entry_id) { ++ DISPLAY_STATS("%s\n", events[event_index].event_string); ++ event_index++; ++ } else if (time_index < core_stats->index && ++ i == time[time_index].entry_id) { ++ DISPLAY_STATS("%10u %10u %10u %10u %10u" ++ " %11u %11u %17u %10u %14u" ++ " %10u %10u %10u %10u %10u" ++ " %10u %10u %10u %10u\n", ++ time[time_index].render_time_in_us, ++ time[time_index].avg_render_time_in_us_last_ten, ++ time[time_index].min_window, ++ time[time_index].lfc_mid_point_in_us, ++ time[time_index].max_window, ++ time[time_index].vsync_to_flip_time_in_us, ++ time[time_index].flip_to_vsync_time_in_us, ++ time[time_index].num_vsync_between_flips, ++ time[time_index].num_frames_inserted, ++ time[time_index].inserted_duration_in_us, ++ time[time_index].v_total_min, ++ time[time_index].v_total_max, ++ time[time_index].event_triggers, ++ time[time_index].v_sync_time_in_us[0], ++ time[time_index].v_sync_time_in_us[1], ++ time[time_index].v_sync_time_in_us[2], ++ time[time_index].v_sync_time_in_us[3], ++ time[time_index].v_sync_time_in_us[4], ++ time[time_index].flags); ++ ++ time_index++; ++ } + } + + DISPLAY_STATS_END(log_entry); +@@ -239,7 +281,46 @@ void mod_stats_reset_data(struct mod_stats *mod_stats) + memset(core_stats->time, 0, + sizeof(struct stats_time_cache) * core_stats->entries); + ++ memset(core_stats->events, 0, ++ sizeof(struct stats_event_cache) * core_stats->event_entries); ++ + core_stats->index = 1; ++ core_stats->event_index = 0; ++ ++ // Keeps track of ordering within the different stats structures ++ core_stats->entry_id = 0; ++} ++ ++void mod_stats_update_event(struct mod_stats *mod_stats, ++ char *event_string, ++ unsigned int length) ++{ ++ struct core_stats *core_stats = NULL; ++ struct stats_event_cache *events = NULL; ++ unsigned int index = 0; ++ unsigned int copy_length = 0; ++ ++ if (mod_stats == NULL) ++ return; ++ ++ core_stats = MOD_STATS_TO_CORE(mod_stats); ++ ++ if (core_stats->index >= core_stats->entries) ++ return; ++ ++ events = core_stats->events; ++ index = core_stats->event_index; ++ ++ copy_length = length; ++ if (length > MOD_STATS_EVENT_STRING_MAX) ++ copy_length = MOD_STATS_EVENT_STRING_MAX; ++ ++ memcpy(&events[index].event_string, event_string, copy_length); ++ events[index].event_string[copy_length - 1] = '\0'; ++ ++ events[index].entry_id = core_stats->entry_id; ++ core_stats->event_index++; ++ core_stats->entry_id++; + } + + void mod_stats_update_flip(struct mod_stats *mod_stats, +@@ -280,7 +361,9 @@ void mod_stats_update_flip(struct mod_stats *mod_stats, + (timestamp_in_ns - + time[index - 1].vupdate_timestamp_in_ns) / 1000; + ++ time[index].entry_id = core_stats->entry_id; + core_stats->index++; ++ core_stats->entry_id++; + } + + void mod_stats_update_vupdate(struct mod_stats *mod_stats, +-- +2.7.4 + |