From: Tao.Huang Date: Mon, 6 May 2019 08:26:54 +0000 (+0800) Subject: drm/amd/display: fix resource saving missing when power state switch X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=540c122924bd260c5124534d16bd75c0b62f5856;p=openwrt%2Fstaging%2Fblogic.git drm/amd/display: fix resource saving missing when power state switch Signed-off-by: Tao.Huang Reviewed-by: Jun Lei Acked-by: Bhawanpreet Lakha Signed-off-by: Alex Deucher --- diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index d89a29bd8785..0bff546d3727 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -1930,6 +1930,12 @@ void dc_set_power_state( enum dc_acpi_cm_power_state power_state) { struct kref refcount; + struct display_mode_lib *dml = kzalloc(sizeof(struct display_mode_lib), + GFP_KERNEL); + + ASSERT(dml); + if (!dml) + return; switch (power_state) { case DC_ACPI_CM_POWER_STATE_D0: @@ -1946,15 +1952,20 @@ void dc_set_power_state( /* Preserve refcount */ refcount = dc->current_state->refcount; + /* Preserve display mode lib */ + memcpy(dml, &dc->current_state->bw_ctx.dml, sizeof(struct display_mode_lib)); + dc_resource_state_destruct(dc->current_state); memset(dc->current_state, 0, sizeof(*dc->current_state)); dc->current_state->refcount = refcount; + dc->current_state->bw_ctx.dml = *dml; break; } + kfree(dml); } void dc_resume(struct dc *dc)