Merge tag 'topic/drm-device-pdev-2021-02-02' of git://anongit.freedesktop.org/drm...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / i915_drv.c
index 320856b..df165db 100644 (file)
@@ -58,6 +58,7 @@
 #include "display/intel_hotplug.h"
 #include "display/intel_overlay.h"
 #include "display/intel_pipe_crc.h"
+#include "display/intel_pps.h"
 #include "display/intel_sprite.h"
 #include "display/intel_vga.h"
 
@@ -91,7 +92,7 @@ static const struct drm_driver driver;
 
 static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
 {
-       int domain = pci_domain_nr(dev_priv->drm.pdev->bus);
+       int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus);
 
        dev_priv->bridge_dev =
                pci_get_domain_bus_and_slot(domain, 0, PCI_DEVFN(0, 0));
@@ -410,6 +411,7 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
 
        /* Try to make sure MCHBAR is enabled before poking at it */
        intel_setup_mchbar(dev_priv);
+       intel_device_info_runtime_init(dev_priv);
 
        ret = intel_gt_init_mmio(&dev_priv->gt);
        if (ret)
@@ -458,7 +460,6 @@ static void intel_sanitize_options(struct drm_i915_private *dev_priv)
  */
 static int i915_set_dma_info(struct drm_i915_private *i915)
 {
-       struct pci_dev *pdev = i915->drm.pdev;
        unsigned int mask_size = INTEL_INFO(i915)->dma_mask_size;
        int ret;
 
@@ -468,9 +469,9 @@ static int i915_set_dma_info(struct drm_i915_private *i915)
         * We don't have a max segment size, so set it to the max so sg's
         * debugging layer doesn't complain
         */
-       dma_set_max_seg_size(&pdev->dev, UINT_MAX);
+       dma_set_max_seg_size(i915->drm.dev, UINT_MAX);
 
-       ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(mask_size));
+       ret = dma_set_mask(i915->drm.dev, DMA_BIT_MASK(mask_size));
        if (ret)
                goto mask_err;
 
@@ -490,7 +491,7 @@ static int i915_set_dma_info(struct drm_i915_private *i915)
        if (IS_I965G(i915) || IS_I965GM(i915))
                mask_size = 32;
 
-       ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(mask_size));
+       ret = dma_set_coherent_mask(i915->drm.dev, DMA_BIT_MASK(mask_size));
        if (ret)
                goto mask_err;
 
@@ -510,14 +511,12 @@ mask_err:
  */
 static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
 {
-       struct pci_dev *pdev = dev_priv->drm.pdev;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
        int ret;
 
        if (i915_inject_probe_failure(dev_priv))
                return -ENODEV;
 
-       intel_device_info_runtime_init(dev_priv);
-
        if (HAS_PPGTT(dev_priv)) {
                if (intel_vgpu_active(dev_priv) &&
                    !intel_vgpu_has_full_ppgtt(dev_priv)) {
@@ -578,8 +577,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
 
        pci_set_master(pdev);
 
-       cpu_latency_qos_add_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE);
-
        intel_gt_init_workarounds(dev_priv);
 
        /* On the 945G/GM, the chipset reports the MSI capability on the
@@ -611,14 +608,15 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
                goto err_msi;
 
        intel_opregion_setup(dev_priv);
+
+       intel_pcode_init(dev_priv);
+
        /*
-        * Fill the dram structure to get the system raw bandwidth and
-        * dram info. This will be used for memory latency calculation.
+        * Fill the dram structure to get the system dram info. This will be
+        * used for memory latency calculation.
         */
        intel_dram_detect(dev_priv);
 
-       intel_pcode_init(dev_priv);
-
        intel_bw_init_hw(dev_priv);
 
        return 0;
@@ -626,7 +624,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
 err_msi:
        if (pdev->msi_enabled)
                pci_disable_msi(pdev);
-       cpu_latency_qos_remove_request(&dev_priv->pm_qos);
 err_mem_regions:
        intel_memory_regions_driver_release(dev_priv);
 err_ggtt:
@@ -642,14 +639,12 @@ err_perf:
  */
 static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
 {
-       struct pci_dev *pdev = dev_priv->drm.pdev;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
 
        i915_perf_fini(dev_priv);
 
        if (pdev->msi_enabled)
                pci_disable_msi(pdev);
-
-       cpu_latency_qos_remove_request(&dev_priv->pm_qos);
 }
 
 /**
@@ -738,6 +733,7 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv)
         * events.
         */
        drm_kms_helper_poll_fini(&dev_priv->drm);
+       drm_atomic_helper_shutdown(&dev_priv->drm);
 
        intel_gt_driver_unregister(&dev_priv->gt);
        acpi_video_unregister();
@@ -940,8 +936,6 @@ void i915_driver_remove(struct drm_i915_private *i915)
 
        i915_gem_suspend(i915);
 
-       drm_atomic_helper_shutdown(&i915->drm);
-
        intel_gvt_driver_remove(i915);
 
        intel_modeset_driver_remove(i915);
@@ -1052,6 +1046,8 @@ static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
 
 void i915_driver_shutdown(struct drm_i915_private *i915)
 {
+       disable_rpm_wakeref_asserts(&i915->runtime_pm);
+
        i915_gem_suspend(i915);
 
        drm_kms_helper_poll_disable(&i915->drm);
@@ -1065,6 +1061,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
 
        intel_suspend_encoders(i915);
        intel_shutdown_encoders(i915);
+
+       enable_rpm_wakeref_asserts(&i915->runtime_pm);
 }
 
 static bool suspend_to_idle(struct drm_i915_private *dev_priv)
@@ -1094,7 +1092,7 @@ static int i915_drm_prepare(struct drm_device *dev)
 static int i915_drm_suspend(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
-       struct pci_dev *pdev = dev_priv->drm.pdev;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
        pci_power_t opregion_target_state;
 
        disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
@@ -1151,7 +1149,7 @@ get_suspend_mode(struct drm_i915_private *dev_priv, bool hibernate)
 static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
-       struct pci_dev *pdev = dev_priv->drm.pdev;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
        struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
        int ret;
 
@@ -1281,7 +1279,7 @@ static int i915_drm_resume(struct drm_device *dev)
 static int i915_drm_resume_early(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
-       struct pci_dev *pdev = dev_priv->drm.pdev;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
        int ret;
 
        /*