diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4670-drm-amdgpu-Make-struct-amdgpu_atif-private-to-amdgpu.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4670-drm-amdgpu-Make-struct-amdgpu_atif-private-to-amdgpu.patch | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4670-drm-amdgpu-Make-struct-amdgpu_atif-private-to-amdgpu.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4670-drm-amdgpu-Make-struct-amdgpu_atif-private-to-amdgpu.patch new file mode 100644 index 00000000..0fbc3999 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4670-drm-amdgpu-Make-struct-amdgpu_atif-private-to-amdgpu.patch @@ -0,0 +1,194 @@ +From d25afa620bfe37623b8a9c12b95f0e06381bc4ef Mon Sep 17 00:00:00 2001 +From: Lyude Paul <lyude@redhat.com> +Date: Mon, 25 Jun 2018 21:09:04 -0400 +Subject: [PATCH 4670/5725] drm/amdgpu: Make struct amdgpu_atif private to + amdgpu_acpi.c + +Currently, there is nothing in amdgpu that actually uses these structs +other than amdgpu_acpi.c. Additionally, since we're about to start +saving the correct ACPI handle to use for calling ATIF in this struct +this saves us from having to handle making sure that the acpi_handle +(and by proxy, the type definition for acpi_handle and all of the other +acpi headers) doesn't need to be included within the amdgpu_drv struct +itself. This follows the example set by amdgpu_atpx_handler.c. + +Change-Id: I921f6d54341ded383c5d587137124bdfb969a800 +Signed-off-by: Lyude Paul <lyude@redhat.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 | 40 ++--------------------- + drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 54 ++++++++++++++++++++++++++++++-- + 2 files changed, 53 insertions(+), 41 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index dbd7a8c..c76a95c 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -193,6 +193,7 @@ struct amdgpu_irq_src; + struct amdgpu_fpriv; + struct amdgpu_bo_va_mapping; + struct kfd_vm_fault_info; ++struct amdgpu_atif; + + enum amdgpu_cp_irq { + AMDGPU_CP_IRQ_GFX_EOP = 0, +@@ -1307,43 +1308,6 @@ struct amdgpu_vram_scratch { + /* + * ACPI + */ +-struct amdgpu_atif_notification_cfg { +- bool enabled; +- int command_code; +-}; +- +-struct amdgpu_atif_notifications { +- bool display_switch; +- bool expansion_mode_change; +- bool thermal_state; +- bool forced_power_state; +- bool system_power_state; +- bool display_conf_change; +- bool px_gfx_switch; +- bool brightness_change; +- bool dgpu_display_event; +-}; +- +-struct amdgpu_atif_functions { +- bool system_params; +- bool sbios_requests; +- bool select_active_disp; +- bool lid_state; +- bool get_tv_standard; +- bool set_tv_standard; +- bool get_panel_expansion_mode; +- bool set_panel_expansion_mode; +- bool temperature_change; +- bool graphics_device_types; +-}; +- +-struct amdgpu_atif { +- struct amdgpu_atif_notifications notifications; +- struct amdgpu_atif_functions functions; +- struct amdgpu_atif_notification_cfg notification_cfg; +- struct amdgpu_encoder *encoder_for_bl; +-}; +- + struct amdgpu_atcs_functions { + bool get_ext_state; + bool pcie_perf_req; +@@ -1526,7 +1490,7 @@ struct amdgpu_device { + #if defined(CONFIG_DEBUG_FS) + struct dentry *debugfs_regs[AMDGPU_DEBUGFS_MAX_COMPONENTS]; + #endif +- struct amdgpu_atif atif; ++ struct amdgpu_atif *atif; + struct amdgpu_atcs atcs; + struct mutex srbm_mutex; + /* GRBM index mutex. Protects concurrent access to GRBM index */ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +index 8fa850a..22c7e8e 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +@@ -34,6 +34,43 @@ + #include "amd_acpi.h" + #include "atom.h" + ++struct amdgpu_atif_notification_cfg { ++ bool enabled; ++ int command_code; ++}; ++ ++struct amdgpu_atif_notifications { ++ bool display_switch; ++ bool expansion_mode_change; ++ bool thermal_state; ++ bool forced_power_state; ++ bool system_power_state; ++ bool display_conf_change; ++ bool px_gfx_switch; ++ bool brightness_change; ++ bool dgpu_display_event; ++}; ++ ++struct amdgpu_atif_functions { ++ bool system_params; ++ bool sbios_requests; ++ bool select_active_disp; ++ bool lid_state; ++ bool get_tv_standard; ++ bool set_tv_standard; ++ bool get_panel_expansion_mode; ++ bool set_panel_expansion_mode; ++ bool temperature_change; ++ bool graphics_device_types; ++}; ++ ++struct amdgpu_atif { ++ struct amdgpu_atif_notifications notifications; ++ struct amdgpu_atif_functions functions; ++ struct amdgpu_atif_notification_cfg notification_cfg; ++ struct amdgpu_encoder *encoder_for_bl; ++}; ++ + /* Call the ATIF method + */ + /** +@@ -292,7 +329,7 @@ static int amdgpu_atif_get_sbios_requests(acpi_handle handle, + static int amdgpu_atif_handler(struct amdgpu_device *adev, + struct acpi_bus_event *event) + { +- struct amdgpu_atif *atif = &adev->atif; ++ struct amdgpu_atif *atif = adev->atif; + struct atif_sbios_requests req; + acpi_handle handle; + int count; +@@ -303,7 +340,8 @@ static int amdgpu_atif_handler(struct amdgpu_device *adev, + if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0) + return NOTIFY_DONE; + +- if (!atif->notification_cfg.enabled || ++ if (!atif || ++ !atif->notification_cfg.enabled || + event->type != atif->notification_cfg.command_code) + /* Not our event */ + return NOTIFY_DONE; +@@ -642,7 +680,7 @@ static int amdgpu_acpi_event(struct notifier_block *nb, + int amdgpu_acpi_init(struct amdgpu_device *adev) + { + acpi_handle handle; +- struct amdgpu_atif *atif = &adev->atif; ++ struct amdgpu_atif *atif; + struct amdgpu_atcs *atcs = &adev->atcs; + int ret; + +@@ -659,11 +697,19 @@ int amdgpu_acpi_init(struct amdgpu_device *adev) + } + + /* Call the ATIF method */ ++ atif = kzalloc(sizeof(*atif), GFP_KERNEL); ++ if (!atif) { ++ DRM_WARN("Not enough memory to initialize ATIF\n"); ++ goto out; ++ } ++ + ret = amdgpu_atif_verify_interface(handle, atif); + if (ret) { + DRM_DEBUG_DRIVER("Call to ATIF verify_interface failed: %d\n", ret); ++ kfree(atif); + goto out; + } ++ adev->atif = atif; + + if (atif->notifications.brightness_change) { + struct drm_encoder *tmp; +@@ -720,4 +766,6 @@ int amdgpu_acpi_init(struct amdgpu_device *adev) + void amdgpu_acpi_fini(struct amdgpu_device *adev) + { + unregister_acpi_notifier(&adev->acpi_nb); ++ if (adev->atif) ++ kfree(adev->atif); + } +-- +2.7.4 + |