forked from Minki/linux
drm/i915: make enable/disable rpm assert function use the rpm structure
With this all the rpm assert-related functions consistently work on the i915_runtime_pm structure Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Imre Deak <imre.deak@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190613232156.34940-4-daniele.ceraolospurio@intel.com
This commit is contained in:
parent
87b391b951
commit
9102650fb9
@ -1889,7 +1889,7 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (ret < 0)
|
||||
goto out_pci_disable;
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
ret = i915_driver_init_mmio(dev_priv);
|
||||
if (ret < 0)
|
||||
@ -1905,7 +1905,7 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
i915_driver_register(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
i915_welcome_messages(dev_priv);
|
||||
|
||||
@ -1917,7 +1917,7 @@ out_cleanup_hw:
|
||||
out_cleanup_mmio:
|
||||
i915_driver_cleanup_mmio(dev_priv);
|
||||
out_runtime_pm_put:
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
i915_driver_cleanup_early(dev_priv);
|
||||
out_pci_disable:
|
||||
pci_disable_device(pdev);
|
||||
@ -1932,7 +1932,7 @@ void i915_driver_unload(struct drm_device *dev)
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct pci_dev *pdev = dev_priv->drm.pdev;
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
i915_driver_unregister(dev_priv);
|
||||
|
||||
@ -1971,21 +1971,21 @@ void i915_driver_unload(struct drm_device *dev)
|
||||
|
||||
i915_driver_cleanup_hw(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
}
|
||||
|
||||
static void i915_driver_release(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
i915_gem_fini(dev_priv);
|
||||
|
||||
i915_ggtt_cleanup_hw(dev_priv);
|
||||
i915_driver_cleanup_mmio(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
intel_runtime_pm_cleanup(dev_priv);
|
||||
|
||||
i915_driver_cleanup_early(dev_priv);
|
||||
@ -2080,7 +2080,7 @@ static int i915_drm_suspend(struct drm_device *dev)
|
||||
struct pci_dev *pdev = dev_priv->drm.pdev;
|
||||
pci_power_t opregion_target_state;
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
/* We do a lot of poking in a lot of registers, make sure they work
|
||||
* properly. */
|
||||
@ -2114,7 +2114,7 @@ static int i915_drm_suspend(struct drm_device *dev)
|
||||
|
||||
intel_csr_ucode_suspend(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2137,7 +2137,7 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
|
||||
struct pci_dev *pdev = dev_priv->drm.pdev;
|
||||
int ret;
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
i915_gem_suspend_late(dev_priv);
|
||||
|
||||
@ -2178,7 +2178,7 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
|
||||
pci_set_power_state(pdev, PCI_D3hot);
|
||||
|
||||
out:
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
if (!dev_priv->uncore.user_forcewake.count)
|
||||
intel_runtime_pm_cleanup(dev_priv);
|
||||
|
||||
@ -2214,7 +2214,7 @@ static int i915_drm_resume(struct drm_device *dev)
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
int ret;
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
intel_sanitize_gt_powersave(dev_priv);
|
||||
|
||||
i915_gem_sanitize(dev_priv);
|
||||
@ -2274,7 +2274,7 @@ static int i915_drm_resume(struct drm_device *dev)
|
||||
|
||||
intel_power_domains_enable(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2329,7 +2329,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
|
||||
ret = vlv_resume_prepare(dev_priv, false);
|
||||
@ -2354,7 +2354,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
|
||||
|
||||
intel_gt_sanitize(dev_priv, true);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2889,6 +2889,7 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||
struct pci_dev *pdev = to_pci_dev(kdev);
|
||||
struct drm_device *dev = pci_get_drvdata(pdev);
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct i915_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||
int ret;
|
||||
|
||||
if (WARN_ON_ONCE(!(dev_priv->gt_pm.rc6.enabled && HAS_RC6(dev_priv))))
|
||||
@ -2899,7 +2900,7 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||
|
||||
DRM_DEBUG_KMS("Suspending device\n");
|
||||
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(rpm);
|
||||
|
||||
/*
|
||||
* We are safe here against re-faults, since the fault handler takes
|
||||
@ -2937,18 +2938,18 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||
i915_gem_init_swizzling(dev_priv);
|
||||
i915_gem_restore_fences(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(rpm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(rpm);
|
||||
intel_runtime_pm_cleanup(dev_priv);
|
||||
|
||||
if (intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore))
|
||||
DRM_ERROR("Unclaimed access detected prior to suspending\n");
|
||||
|
||||
dev_priv->runtime_pm.suspended = true;
|
||||
rpm->suspended = true;
|
||||
|
||||
/*
|
||||
* FIXME: We really should find a document that references the arguments
|
||||
@ -2987,6 +2988,7 @@ static int intel_runtime_resume(struct device *kdev)
|
||||
struct pci_dev *pdev = to_pci_dev(kdev);
|
||||
struct drm_device *dev = pci_get_drvdata(pdev);
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct i915_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||
int ret = 0;
|
||||
|
||||
if (WARN_ON_ONCE(!HAS_RUNTIME_PM(dev_priv)))
|
||||
@ -2994,11 +2996,11 @@ static int intel_runtime_resume(struct device *kdev)
|
||||
|
||||
DRM_DEBUG_KMS("Resuming device\n");
|
||||
|
||||
WARN_ON_ONCE(atomic_read(&dev_priv->runtime_pm.wakeref_count));
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
WARN_ON_ONCE(atomic_read(&rpm->wakeref_count));
|
||||
disable_rpm_wakeref_asserts(rpm);
|
||||
|
||||
intel_opregion_notify_adapter(dev_priv, PCI_D0);
|
||||
dev_priv->runtime_pm.suspended = false;
|
||||
rpm->suspended = false;
|
||||
if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
|
||||
DRM_DEBUG_DRIVER("Unclaimed access during suspend, bios?\n");
|
||||
|
||||
@ -3048,7 +3050,7 @@ static int intel_runtime_resume(struct device *kdev)
|
||||
|
||||
intel_enable_ipc(dev_priv);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(rpm);
|
||||
|
||||
if (ret)
|
||||
DRM_ERROR("Runtime resume failed, disabling it (%d)\n", ret);
|
||||
|
@ -2186,7 +2186,7 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
do {
|
||||
u32 iir, gt_iir, pm_iir;
|
||||
@ -2257,7 +2257,7 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
|
||||
valleyview_pipestat_irq_handler(dev_priv, pipe_stats);
|
||||
} while (0);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2272,7 +2272,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
do {
|
||||
u32 master_ctl, iir;
|
||||
@ -2338,7 +2338,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
|
||||
valleyview_pipestat_irq_handler(dev_priv, pipe_stats);
|
||||
} while (0);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2692,7 +2692,7 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
/* disable master interrupt before clearing iir */
|
||||
de_ier = I915_READ(DEIER);
|
||||
@ -2744,7 +2744,7 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
|
||||
I915_WRITE(SDEIER, sde_ier);
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -3011,9 +3011,9 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg)
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
if (master_ctl & ~GEN8_GT_IRQS) {
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
gen8_de_irq_handler(dev_priv, master_ctl);
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
}
|
||||
|
||||
gen8_master_intr_enable(regs);
|
||||
@ -3212,13 +3212,13 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg)
|
||||
if (master_ctl & GEN11_DISPLAY_IRQ) {
|
||||
const u32 disp_ctl = raw_reg_read(regs, GEN11_DISPLAY_INT_CTL);
|
||||
|
||||
disable_rpm_wakeref_asserts(i915);
|
||||
disable_rpm_wakeref_asserts(&i915->runtime_pm);
|
||||
/*
|
||||
* GEN11_DISPLAY_INT_CTL has same format as GEN8_MASTER_IRQ
|
||||
* for the display related bits.
|
||||
*/
|
||||
gen8_de_irq_handler(i915, disp_ctl);
|
||||
enable_rpm_wakeref_asserts(i915);
|
||||
enable_rpm_wakeref_asserts(&i915->runtime_pm);
|
||||
}
|
||||
|
||||
gu_misc_iir = gen11_gu_misc_irq_ack(i915, master_ctl);
|
||||
@ -4442,7 +4442,7 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
do {
|
||||
u32 pipe_stats[I915_MAX_PIPES] = {};
|
||||
@ -4473,7 +4473,7 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
|
||||
i8xx_pipestat_irq_handler(dev_priv, iir, pipe_stats);
|
||||
} while (0);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -4547,7 +4547,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
do {
|
||||
u32 pipe_stats[I915_MAX_PIPES] = {};
|
||||
@ -4586,7 +4586,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
|
||||
i915_pipestat_irq_handler(dev_priv, iir, pipe_stats);
|
||||
} while (0);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -4695,7 +4695,7 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
do {
|
||||
u32 pipe_stats[I915_MAX_PIPES] = {};
|
||||
@ -4736,7 +4736,7 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
||||
i965_pipestat_irq_handler(dev_priv, iir, pipe_stats);
|
||||
} while (0);
|
||||
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1669,7 +1669,7 @@ assert_rpm_wakelock_held(struct i915_runtime_pm *rpm)
|
||||
|
||||
/**
|
||||
* disable_rpm_wakeref_asserts - disable the RPM assert checks
|
||||
* @i915: i915 device instance
|
||||
* @rpm: the i915_runtime_pm structure
|
||||
*
|
||||
* This function disable asserts that check if we hold an RPM wakelock
|
||||
* reference, while keeping the device-not-suspended checks still enabled.
|
||||
@ -1686,15 +1686,15 @@ assert_rpm_wakelock_held(struct i915_runtime_pm *rpm)
|
||||
* enable_rpm_wakeref_asserts().
|
||||
*/
|
||||
static inline void
|
||||
disable_rpm_wakeref_asserts(struct drm_i915_private *i915)
|
||||
disable_rpm_wakeref_asserts(struct i915_runtime_pm *rpm)
|
||||
{
|
||||
atomic_add(INTEL_RPM_WAKELOCK_BIAS + 1,
|
||||
&i915->runtime_pm.wakeref_count);
|
||||
&rpm->wakeref_count);
|
||||
}
|
||||
|
||||
/**
|
||||
* enable_rpm_wakeref_asserts - re-enable the RPM assert checks
|
||||
* @i915: i915 device instance
|
||||
* @rpm: the i915_runtime_pm structure
|
||||
*
|
||||
* This function re-enables the RPM assert checks after disabling them with
|
||||
* disable_rpm_wakeref_asserts. It's meant to be used only in special
|
||||
@ -1704,10 +1704,10 @@ disable_rpm_wakeref_asserts(struct drm_i915_private *i915)
|
||||
* disable_rpm_wakeref_asserts().
|
||||
*/
|
||||
static inline void
|
||||
enable_rpm_wakeref_asserts(struct drm_i915_private *i915)
|
||||
enable_rpm_wakeref_asserts(struct i915_runtime_pm *rpm)
|
||||
{
|
||||
atomic_sub(INTEL_RPM_WAKELOCK_BIAS + 1,
|
||||
&i915->runtime_pm.wakeref_count);
|
||||
&rpm->wakeref_count);
|
||||
}
|
||||
|
||||
#endif /* __INTEL_DRV_H__ */
|
||||
|
@ -1461,8 +1461,8 @@ static void intel_uncore_fw_domains_init(struct intel_uncore *uncore)
|
||||
static int i915_pmic_bus_access_notifier(struct notifier_block *nb,
|
||||
unsigned long action, void *data)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = container_of(nb,
|
||||
struct drm_i915_private, uncore.pmic_bus_access_nb);
|
||||
struct intel_uncore *uncore = container_of(nb,
|
||||
struct intel_uncore, pmic_bus_access_nb);
|
||||
|
||||
switch (action) {
|
||||
case MBI_PMIC_BUS_ACCESS_BEGIN:
|
||||
@ -1479,12 +1479,12 @@ static int i915_pmic_bus_access_notifier(struct notifier_block *nb,
|
||||
* wake reference -> disable wakeref asserts for the time of
|
||||
* the access.
|
||||
*/
|
||||
disable_rpm_wakeref_asserts(dev_priv);
|
||||
intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
enable_rpm_wakeref_asserts(dev_priv);
|
||||
disable_rpm_wakeref_asserts(uncore->rpm);
|
||||
intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL);
|
||||
enable_rpm_wakeref_asserts(uncore->rpm);
|
||||
break;
|
||||
case MBI_PMIC_BUS_ACCESS_END:
|
||||
intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user