Commit 2cd5fe22 authored by Lyude Paul's avatar Lyude Paul Committed by Alex Deucher

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.
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 1513b1c9
...@@ -190,6 +190,7 @@ struct amdgpu_job; ...@@ -190,6 +190,7 @@ struct amdgpu_job;
struct amdgpu_irq_src; struct amdgpu_irq_src;
struct amdgpu_fpriv; struct amdgpu_fpriv;
struct amdgpu_bo_va_mapping; struct amdgpu_bo_va_mapping;
struct amdgpu_atif;
enum amdgpu_cp_irq { enum amdgpu_cp_irq {
AMDGPU_CP_IRQ_GFX_EOP = 0, AMDGPU_CP_IRQ_GFX_EOP = 0,
...@@ -1269,43 +1270,6 @@ struct amdgpu_vram_scratch { ...@@ -1269,43 +1270,6 @@ struct amdgpu_vram_scratch {
/* /*
* ACPI * 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 { struct amdgpu_atcs_functions {
bool get_ext_state; bool get_ext_state;
bool pcie_perf_req; bool pcie_perf_req;
...@@ -1466,7 +1430,7 @@ struct amdgpu_device { ...@@ -1466,7 +1430,7 @@ struct amdgpu_device {
#if defined(CONFIG_DEBUG_FS) #if defined(CONFIG_DEBUG_FS)
struct dentry *debugfs_regs[AMDGPU_DEBUGFS_MAX_COMPONENTS]; struct dentry *debugfs_regs[AMDGPU_DEBUGFS_MAX_COMPONENTS];
#endif #endif
struct amdgpu_atif atif; struct amdgpu_atif *atif;
struct amdgpu_atcs atcs; struct amdgpu_atcs atcs;
struct mutex srbm_mutex; struct mutex srbm_mutex;
/* GRBM index mutex. Protects concurrent access to GRBM index */ /* GRBM index mutex. Protects concurrent access to GRBM index */
......
...@@ -34,6 +34,43 @@ ...@@ -34,6 +34,43 @@
#include "amd_acpi.h" #include "amd_acpi.h"
#include "atom.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 /* Call the ATIF method
*/ */
/** /**
...@@ -292,7 +329,7 @@ static int amdgpu_atif_get_sbios_requests(acpi_handle handle, ...@@ -292,7 +329,7 @@ static int amdgpu_atif_get_sbios_requests(acpi_handle handle,
static int amdgpu_atif_handler(struct amdgpu_device *adev, static int amdgpu_atif_handler(struct amdgpu_device *adev,
struct acpi_bus_event *event) struct acpi_bus_event *event)
{ {
struct amdgpu_atif *atif = &adev->atif; struct amdgpu_atif *atif = adev->atif;
struct atif_sbios_requests req; struct atif_sbios_requests req;
acpi_handle handle; acpi_handle handle;
int count; int count;
...@@ -303,7 +340,8 @@ static int amdgpu_atif_handler(struct amdgpu_device *adev, ...@@ -303,7 +340,8 @@ static int amdgpu_atif_handler(struct amdgpu_device *adev,
if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0) if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0)
return NOTIFY_DONE; return NOTIFY_DONE;
if (!atif->notification_cfg.enabled || if (!atif ||
!atif->notification_cfg.enabled ||
event->type != atif->notification_cfg.command_code) event->type != atif->notification_cfg.command_code)
/* Not our event */ /* Not our event */
return NOTIFY_DONE; return NOTIFY_DONE;
...@@ -642,7 +680,7 @@ static int amdgpu_acpi_event(struct notifier_block *nb, ...@@ -642,7 +680,7 @@ static int amdgpu_acpi_event(struct notifier_block *nb,
int amdgpu_acpi_init(struct amdgpu_device *adev) int amdgpu_acpi_init(struct amdgpu_device *adev)
{ {
acpi_handle handle; acpi_handle handle;
struct amdgpu_atif *atif = &adev->atif; struct amdgpu_atif *atif;
struct amdgpu_atcs *atcs = &adev->atcs; struct amdgpu_atcs *atcs = &adev->atcs;
int ret; int ret;
...@@ -659,11 +697,19 @@ int amdgpu_acpi_init(struct amdgpu_device *adev) ...@@ -659,11 +697,19 @@ int amdgpu_acpi_init(struct amdgpu_device *adev)
} }
/* Call the ATIF method */ /* 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); ret = amdgpu_atif_verify_interface(handle, atif);
if (ret) { if (ret) {
DRM_DEBUG_DRIVER("Call to ATIF verify_interface failed: %d\n", ret); DRM_DEBUG_DRIVER("Call to ATIF verify_interface failed: %d\n", ret);
kfree(atif);
goto out; goto out;
} }
adev->atif = atif;
if (atif->notifications.brightness_change) { if (atif->notifications.brightness_change) {
struct drm_encoder *tmp; struct drm_encoder *tmp;
...@@ -720,4 +766,6 @@ int amdgpu_acpi_init(struct amdgpu_device *adev) ...@@ -720,4 +766,6 @@ int amdgpu_acpi_init(struct amdgpu_device *adev)
void amdgpu_acpi_fini(struct amdgpu_device *adev) void amdgpu_acpi_fini(struct amdgpu_device *adev)
{ {
unregister_acpi_notifier(&adev->acpi_nb); unregister_acpi_notifier(&adev->acpi_nb);
if (adev->atif)
kfree(adev->atif);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment