diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0793-Revert-drm-amd-display-Switch-to-DRM-helpers-in-s3.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0793-Revert-drm-amd-display-Switch-to-DRM-helpers-in-s3.patch | 310 |
1 files changed, 0 insertions, 310 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0793-Revert-drm-amd-display-Switch-to-DRM-helpers-in-s3.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0793-Revert-drm-amd-display-Switch-to-DRM-helpers-in-s3.patch deleted file mode 100644 index d9c1f03d..00000000 --- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0793-Revert-drm-amd-display-Switch-to-DRM-helpers-in-s3.patch +++ /dev/null @@ -1,310 +0,0 @@ -From 0d84d8cdd6c1975fc8e838410443a058bacf835c Mon Sep 17 00:00:00 2001 -From: Jim Qu <Jim.Qu@amd.com> -Date: Tue, 14 Mar 2017 13:17:19 +0800 -Subject: [PATCH 0793/4131] Revert "drm/amd/display: Switch to DRM helpers in - s3." - -This reverts commit e3046faa65a225291e38d81dac6f3b9226be9a80. - -Change-Id: I2ed2aab669612e2882ef5d25626be36947244db2 - - Conflicts: - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h ---- - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 161 ++++++++++++++++++++-- - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 4 - - drivers/gpu/drm/amd/display/dc/core/dc.c | 8 +- - drivers/gpu/drm/amd/display/dc/dc.h | 3 +- - drivers/gpu/drm/amd/display/dc/inc/core_dc.h | 4 + - 5 files changed, 160 insertions(+), 20 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -index f87c788..fe8a240 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -@@ -545,17 +545,28 @@ static int dm_suspend(void *handle) - struct amdgpu_device *adev = handle; - struct amdgpu_display_manager *dm = &adev->dm; - int ret = 0; -+ struct drm_crtc *crtc; - - s3_handle_mst(adev->ddev, true); - -- amdgpu_dm_irq_suspend(adev); -+ /* flash all pending vblank events and turn interrupt off -+ * before disabling CRTCs. They will be enabled back in -+ * dm_display_resume -+ */ -+ drm_modeset_lock_all(adev->ddev); -+ list_for_each_entry(crtc, &adev->ddev->mode_config.crtc_list, head) { -+ struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); -+ if (acrtc->stream) -+ drm_crtc_vblank_off(crtc); -+ } -+ drm_modeset_unlock_all(adev->ddev); - -- adev->dm.cached_state = drm_atomic_helper_suspend(adev->ddev); -+ amdgpu_dm_irq_suspend(adev); - - dc_set_power_state( - dm->dc, -- DC_ACPI_CM_POWER_STATE_D3 -- ); -+ DC_ACPI_CM_POWER_STATE_D3, -+ DC_VIDEO_POWER_SUSPEND); - - return ret; - } -@@ -587,6 +598,124 @@ struct amdgpu_connector *amdgpu_dm_find_first_crct_matching_connector( - return NULL; - } - -+static int dm_display_resume(struct drm_device *ddev) -+{ -+ int ret = 0; -+ struct drm_connector *connector; -+ -+ struct drm_atomic_state *state = drm_atomic_state_alloc(ddev); -+ struct drm_plane *plane; -+ struct drm_crtc *crtc; -+ struct amdgpu_connector *aconnector; -+ struct drm_connector_state *conn_state; -+ -+ if (!state) -+ return ENOMEM; -+ -+ state->acquire_ctx = ddev->mode_config.acquire_ctx; -+ -+ /* Construct an atomic state to restore previous display setting */ -+ -+ /* -+ * Attach connectors to drm_atomic_state -+ * Should be done in the first place in order to make connectors -+ * available in state during crtc state processing. It is used for -+ * making decision if crtc should be disabled in case sink got -+ * disconnected. -+ * -+ * Connectors state crtc with NULL dc_sink should be cleared, because it -+ * will fail validation during commit -+ */ -+ list_for_each_entry(connector, &ddev->mode_config.connector_list, head) { -+ aconnector = to_amdgpu_connector(connector); -+ conn_state = drm_atomic_get_connector_state(state, connector); -+ -+ ret = PTR_ERR_OR_ZERO(conn_state); -+ if (ret) -+ goto err; -+ } -+ -+ /* Attach crtcs to drm_atomic_state*/ -+ list_for_each_entry(crtc, &ddev->mode_config.crtc_list, head) { -+ struct drm_crtc_state *crtc_state = -+ drm_atomic_get_crtc_state(state, crtc); -+ -+ ret = PTR_ERR_OR_ZERO(crtc_state); -+ if (ret) -+ goto err; -+ -+ /* force a restore */ -+ crtc_state->mode_changed = true; -+ } -+ -+ -+ /* Attach planes to drm_atomic_state */ -+ list_for_each_entry(plane, &ddev->mode_config.plane_list, head) { -+ -+ struct drm_crtc *crtc; -+ struct drm_gem_object *obj; -+ struct drm_framebuffer *fb; -+ struct amdgpu_framebuffer *afb; -+ struct amdgpu_bo *rbo; -+ int r; -+ struct drm_plane_state *plane_state = drm_atomic_get_plane_state(state, plane); -+ -+ ret = PTR_ERR_OR_ZERO(plane_state); -+ if (ret) -+ goto err; -+ -+ crtc = plane_state->crtc; -+ fb = plane_state->fb; -+ -+ if (!crtc || !crtc->state || !crtc->state->active) -+ continue; -+ -+ if (!fb) { -+ DRM_DEBUG_KMS("No FB bound\n"); -+ return 0; -+ } -+ -+ /* -+ * Pin back the front buffers, cursor buffer was already pinned -+ * back in amdgpu_resume_kms -+ */ -+ -+ afb = to_amdgpu_framebuffer(fb); -+ -+ obj = afb->obj; -+ rbo = gem_to_amdgpu_bo(obj); -+ r = amdgpu_bo_reserve(rbo, false); -+ if (unlikely(r != 0)) -+ return r; -+ -+ r = amdgpu_bo_pin(rbo, AMDGPU_GEM_DOMAIN_VRAM, NULL); -+ -+ amdgpu_bo_unreserve(rbo); -+ -+ if (unlikely(r != 0)) { -+ DRM_ERROR("Failed to pin framebuffer\n"); -+ return r; -+ } -+ -+ } -+ -+ -+ /* Call commit internally with the state we just constructed */ -+ ret = drm_atomic_commit(state); -+ if (!ret) -+ return 0; -+ -+err: -+ DRM_ERROR("Restoring old state failed with %i\n", ret); -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) -+ drm_atomic_state_free(state); -+#else -+ drm_atomic_state_put(state); -+#endif -+ -+ return ret; -+} -+ - static int dm_resume(void *handle) - { - struct amdgpu_device *adev = handle; -@@ -595,8 +724,8 @@ static int dm_resume(void *handle) - /* power on hardware */ - dc_set_power_state( - dm->dc, -- DC_ACPI_CM_POWER_STATE_D0 -- ); -+ DC_ACPI_CM_POWER_STATE_D0, -+ DC_VIDEO_POWER_ON); - - return 0; - } -@@ -607,10 +736,8 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev ) - struct amdgpu_display_manager *dm = &adev->dm; - struct amdgpu_connector *aconnector; - struct drm_connector *connector; -- struct drm_crtc *crtc; -- struct drm_crtc_state *crtc_state; - int ret = 0; -- int i; -+ struct drm_crtc *crtc; - - /* program HPD filter */ - dc_resume(dm->dc); -@@ -624,6 +751,14 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev ) - */ - amdgpu_dm_irq_resume_early(adev); - -+ drm_modeset_lock_all(ddev); -+ list_for_each_entry(crtc, &ddev->mode_config.crtc_list, head) { -+ struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); -+ if (acrtc->stream) -+ drm_crtc_vblank_on(crtc); -+ } -+ drm_modeset_unlock_all(ddev); -+ - /* Do detection*/ - list_for_each_entry(connector, - &ddev->mode_config.connector_list, head) { -@@ -643,11 +778,9 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev ) - mutex_unlock(&aconnector->hpd_lock); - } - -- /* Force mode set in atomic comit */ -- for_each_crtc_in_state(adev->dm.cached_state, crtc, crtc_state, i) -- crtc_state->active_changed = true; -- -- ret = drm_atomic_helper_resume(ddev, adev->dm.cached_state); -+ drm_modeset_lock_all(ddev); -+ ret = dm_display_resume(ddev); -+ drm_modeset_unlock_all(ddev); - - amdgpu_dm_irq_resume_late(adev); - -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h -index e0a5632..54acbb5 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h -@@ -138,10 +138,6 @@ struct amdgpu_display_manager { - - struct mod_freesync *freesync_module; - -- /** -- * Caches device atomic state for suspend/resume -- */ -- struct drm_atomic_state *cached_state; - #ifdef ENABLE_FBC - struct dm_comressor_info compressor; - #endif -diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c -index b69a726..c2c379a 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c -@@ -1797,16 +1797,22 @@ void dc_interrupt_ack(struct dc *dc, enum dc_irq_source src) - - void dc_set_power_state( - struct dc *dc, -- enum dc_acpi_cm_power_state power_state) -+ enum dc_acpi_cm_power_state power_state, -+ enum dc_video_power_state video_power_state) - { - struct core_dc *core_dc = DC_TO_CORE(dc); - int ref_count; - -+ core_dc->previous_power_state = core_dc->current_power_state; -+ core_dc->current_power_state = video_power_state; -+ - switch (power_state) { - case DC_ACPI_CM_POWER_STATE_D0: - core_dc->hwss.init_hw(core_dc); - break; - default: -+ /* NULL means "reset/release all DC streams" */ -+ dc_commit_streams(dc, NULL, 0); - - core_dc->hwss.power_down(core_dc); - -diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h -index cac92bf..4605179 100644 ---- a/drivers/gpu/drm/amd/display/dc/dc.h -+++ b/drivers/gpu/drm/amd/display/dc/dc.h -@@ -957,7 +957,8 @@ enum dc_irq_source dc_get_hpd_irq_source_at_index( - - void dc_set_power_state( - struct dc *dc, -- enum dc_acpi_cm_power_state power_state); -+ enum dc_acpi_cm_power_state power_state, -+ enum dc_video_power_state video_power_state); - void dc_resume(const struct dc *dc); - - /* -diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_dc.h b/drivers/gpu/drm/amd/display/dc/inc/core_dc.h -index 1ecb546..408ed3a 100644 ---- a/drivers/gpu/drm/amd/display/dc/inc/core_dc.h -+++ b/drivers/gpu/drm/amd/display/dc/inc/core_dc.h -@@ -25,6 +25,10 @@ struct core_dc { - struct validate_context *current_context; - struct resource_pool *res_pool; - -+ /*Power State*/ -+ enum dc_video_power_state previous_power_state; -+ enum dc_video_power_state current_power_state; -+ - /* Display Engine Clock levels */ - struct dm_pp_clock_levels sclk_lvls; - --- -2.7.4 - |