diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/1103-drm-amdgpu-use-PCI_D3hot-for-PX-systems-without-dGPU.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/files/1103-drm-amdgpu-use-PCI_D3hot-for-PX-systems-without-dGPU.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/1103-drm-amdgpu-use-PCI_D3hot-for-PX-systems-without-dGPU.patch b/meta-amdfalconx86/recipes-kernel/linux/files/1103-drm-amdgpu-use-PCI_D3hot-for-PX-systems-without-dGPU.patch new file mode 100644 index 00000000..887d60f4 --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/files/1103-drm-amdgpu-use-PCI_D3hot-for-PX-systems-without-dGPU.patch @@ -0,0 +1,84 @@ +From 7e67920e683191c2ef8b5f52da2573a721a11bbc Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Wed, 1 Jun 2016 13:12:25 -0400 +Subject: [PATCH 1103/1110] drm/amdgpu: use PCI_D3hot for PX systems without + dGPU power control +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On PX systems without dGPU power control, use PCI_D3hot. + +Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> +Acked-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 ++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c | 8 ++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 5 ++++- + 3 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 1c50f29..c105e68 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -2402,9 +2402,13 @@ bool amdgpu_device_is_px(struct drm_device *dev); + #if defined(CONFIG_VGA_SWITCHEROO) + void amdgpu_register_atpx_handler(void); + void amdgpu_unregister_atpx_handler(void); ++bool amdgpu_has_atpx_dgpu_power_cntl(void); ++bool amdgpu_is_atpx_hybrid(void); + #else + static inline void amdgpu_register_atpx_handler(void) {} + static inline void amdgpu_unregister_atpx_handler(void) {} ++static inline bool amdgpu_has_atpx_dgpu_power_cntl(void) { return false; } ++static inline bool amdgpu_is_atpx_hybrid(void) { return false; } + #endif + + /* +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c +index b5531b2..45d93bb 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c +@@ -28,6 +28,7 @@ struct amdgpu_atpx_functions { + struct amdgpu_atpx { + acpi_handle handle; + struct amdgpu_atpx_functions functions; ++ bool is_hybrid; + }; + + static struct amdgpu_atpx_priv { +@@ -63,6 +64,13 @@ struct atpx_mux { + bool amdgpu_has_atpx(void) { + return amdgpu_atpx_priv.atpx_detected; + } ++bool amdgpu_has_atpx_dgpu_power_cntl(void) { ++ return amdgpu_atpx_priv.atpx.functions.power_cntl; ++} ++ ++bool amdgpu_is_atpx_hybrid(void) { ++ return amdgpu_atpx_priv.atpx.is_hybrid; ++} + + /** + * amdgpu_atpx_call - call an ATPX method +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +index 30e8c46..af014c3 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -395,7 +395,10 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev) + pci_save_state(pdev); + pci_disable_device(pdev); + pci_ignore_hotplug(pdev); +- pci_set_power_state(pdev, PCI_D3cold); ++ if (amdgpu_has_atpx_dgpu_power_cntl()) ++ pci_set_power_state(pdev, PCI_D3cold); ++ else ++ pci_set_power_state(pdev, PCI_D3hot); + drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; + + return 0; +-- +2.7.4 + |