From: Paulo Zanoni <[email protected]>

This function is used to discover which swsci callbacks the machine
supports. It calls swsci() 3 times, and usually takes a considerable
number of milliseconds to finish.

I don't see a reason for a change on the supported callbacks between
boot and resume, so use the values retrieved at boot time forever,
making resume a little bit faster.

Signed-off-by: Paulo Zanoni <[email protected]>
---
 drivers/gpu/drm/i915/i915_dma.c       | 1 +
 drivers/gpu/drm/i915/i915_drv.h       | 2 ++
 drivers/gpu/drm/i915/intel_opregion.c | 8 ++++----
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 258b1be..f57e220 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1616,6 +1616,7 @@ int i915_driver_load(struct drm_device *dev, unsigned 
long flags)
        intel_setup_mchbar(dev);
        intel_setup_gmbus(dev);
        intel_opregion_setup(dev);
+       intel_swsci_setup(dev);
 
        intel_setup_bios(dev);
 
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 728b9c3..4f65e12 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2507,6 +2507,7 @@ extern int intel_opregion_notify_encoder(struct 
intel_encoder *intel_encoder,
                                         bool enable);
 extern int intel_opregion_notify_adapter(struct drm_device *dev,
                                         pci_power_t state);
+extern void intel_swsci_setup(struct drm_device *dev);
 #else
 static inline void intel_opregion_init(struct drm_device *dev) { return; }
 static inline void intel_opregion_fini(struct drm_device *dev) { return; }
@@ -2521,6 +2522,7 @@ intel_opregion_notify_adapter(struct drm_device *dev, 
pci_power_t state)
 {
        return 0;
 }
+static inline void intel_swsci_setup(struct drm_device *dev) { return; }
 #endif
 
 /* intel_acpi.c */
diff --git a/drivers/gpu/drm/i915/intel_opregion.c 
b/drivers/gpu/drm/i915/intel_opregion.c
index 6845960..579bf24 100644
--- a/drivers/gpu/drm/i915/intel_opregion.c
+++ b/drivers/gpu/drm/i915/intel_opregion.c
@@ -780,13 +780,16 @@ void intel_opregion_fini(struct drm_device *dev)
        opregion->lid_state = NULL;
 }
 
-static void swsci_setup(struct drm_device *dev)
+void intel_swsci_setup(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_opregion *opregion = &dev_priv->opregion;
        bool requested_callbacks = false;
        u32 tmp;
 
+       if (!opregion->swsci)
+               return;
+
        /* Sub-function code 0 is okay, let's allow them. */
        opregion->swsci_gbda_sub_functions = 1;
        opregion->swsci_sbcb_sub_functions = 1;
@@ -836,8 +839,6 @@ static void swsci_setup(struct drm_device *dev)
                         opregion->swsci_gbda_sub_functions,
                         opregion->swsci_sbcb_sub_functions);
 }
-#else /* CONFIG_ACPI */
-static inline void swsci_setup(struct drm_device *dev) {}
 #endif  /* CONFIG_ACPI */
 
 int intel_opregion_setup(struct drm_device *dev)
@@ -885,7 +886,6 @@ int intel_opregion_setup(struct drm_device *dev)
        if (mboxes & MBOX_SWSCI) {
                DRM_DEBUG_DRIVER("SWSCI supported\n");
                opregion->swsci = base + OPREGION_SWSCI_OFFSET;
-               swsci_setup(dev);
        }
        if (mboxes & MBOX_ASLE) {
                DRM_DEBUG_DRIVER("ASLE supported\n");
-- 
1.8.5.3

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to