drm/amdgpu/apci: don't call sbios request function if it's not supported
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 19 Jul 2018 14:17:02 +0000 (09:17 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 20 Jul 2018 19:24:35 +0000 (14:24 -0500)
Check the supported functions mask before calling the bios
requests method.

Reviewed-by: Jim Qu <Jim.Qu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c

index 0d8c3fc6eacefcfd71788e4442cc541a031a5416..455617813ec4d5a0326052f1267ff6214387af8c 100644 (file)
@@ -364,7 +364,6 @@ static int amdgpu_atif_handler(struct amdgpu_device *adev,
                               struct acpi_bus_event *event)
 {
        struct amdgpu_atif *atif = adev->atif;
-       struct atif_sbios_requests req;
        int count;
 
        DRM_DEBUG_DRIVER("event, device_class = %s, type = %#x\n",
@@ -379,42 +378,46 @@ static int amdgpu_atif_handler(struct amdgpu_device *adev,
                /* Not our event */
                return NOTIFY_DONE;
 
-       /* Check pending SBIOS requests */
-       count = amdgpu_atif_get_sbios_requests(atif, &req);
+       if (atif->functions.sbios_requests) {
+               struct atif_sbios_requests req;
 
-       if (count <= 0)
-               return NOTIFY_DONE;
+               /* Check pending SBIOS requests */
+               count = amdgpu_atif_get_sbios_requests(atif, &req);
+
+               if (count <= 0)
+                       return NOTIFY_DONE;
 
-       DRM_DEBUG_DRIVER("ATIF: %d pending SBIOS requests\n", count);
+               DRM_DEBUG_DRIVER("ATIF: %d pending SBIOS requests\n", count);
 
-       if (req.pending & ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST) {
-               struct amdgpu_encoder *enc = atif->encoder_for_bl;
+               if (req.pending & ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST) {
+                       struct amdgpu_encoder *enc = atif->encoder_for_bl;
 
-               if (enc) {
-                       struct amdgpu_encoder_atom_dig *dig = enc->enc_priv;
+                       if (enc) {
+                               struct amdgpu_encoder_atom_dig *dig = enc->enc_priv;
 
-                       DRM_DEBUG_DRIVER("Changing brightness to %d\n",
-                                       req.backlight_level);
+                               DRM_DEBUG_DRIVER("Changing brightness to %d\n",
+                                                req.backlight_level);
 
-                       amdgpu_display_backlight_set_level(adev, enc, req.backlight_level);
+                               amdgpu_display_backlight_set_level(adev, enc, req.backlight_level);
 
 #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
-                       backlight_force_update(dig->bl_dev,
-                                              BACKLIGHT_UPDATE_HOTKEY);
+                               backlight_force_update(dig->bl_dev,
+                                                      BACKLIGHT_UPDATE_HOTKEY);
 #endif
+                       }
                }
-       }
-       if (req.pending & ATIF_DGPU_DISPLAY_EVENT) {
-               if ((adev->flags & AMD_IS_PX) &&
-                   amdgpu_atpx_dgpu_req_power_for_displays()) {
-                       pm_runtime_get_sync(adev->ddev->dev);
-                       /* Just fire off a uevent and let userspace tell us what to do */
-                       drm_helper_hpd_irq_event(adev->ddev);
-                       pm_runtime_mark_last_busy(adev->ddev->dev);
-                       pm_runtime_put_autosuspend(adev->ddev->dev);
+               if (req.pending & ATIF_DGPU_DISPLAY_EVENT) {
+                       if ((adev->flags & AMD_IS_PX) &&
+                           amdgpu_atpx_dgpu_req_power_for_displays()) {
+                               pm_runtime_get_sync(adev->ddev->dev);
+                               /* Just fire off a uevent and let userspace tell us what to do */
+                               drm_helper_hpd_irq_event(adev->ddev);
+                               pm_runtime_mark_last_busy(adev->ddev->dev);
+                               pm_runtime_put_autosuspend(adev->ddev->dev);
+                       }
                }
+               /* TODO: check other events */
        }
-       /* TODO: check other events */
 
        /* We've handled the event, stop the notifier chain. The ACPI interface
         * overloads ACPI_VIDEO_NOTIFY_PROBE, we don't want to send that to