Merge tag 'drm-intel-fixes-2022-06-29' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
drm/i915 fixes for v5.19-rc5: - Fix ioctl argument error return - Fix d3cold disable to allow PCI upstream bridge D3 transition - Fix setting cache_dirty for dma-buf objects on discrete Signed-off-by: Dave Airlie <airlied@redhat.com> From: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/871qv7rblv.fsf@intel.com
This commit is contained in:
commit
8cdf1b56cc
|
@ -933,8 +933,9 @@ static int set_proto_ctx_param(struct drm_i915_file_private *fpriv,
|
||||||
case I915_CONTEXT_PARAM_PERSISTENCE:
|
case I915_CONTEXT_PARAM_PERSISTENCE:
|
||||||
if (args->size)
|
if (args->size)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
ret = proto_context_set_persistence(fpriv->dev_priv, pc,
|
else
|
||||||
args->value);
|
ret = proto_context_set_persistence(fpriv->dev_priv, pc,
|
||||||
|
args->value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case I915_CONTEXT_PARAM_PROTECTED_CONTENT:
|
case I915_CONTEXT_PARAM_PROTECTED_CONTENT:
|
||||||
|
|
|
@ -35,12 +35,12 @@ bool i915_gem_cpu_write_needs_clflush(struct drm_i915_gem_object *obj)
|
||||||
if (obj->cache_dirty)
|
if (obj->cache_dirty)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (IS_DGFX(i915))
|
if (IS_DGFX(i915))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE))
|
||||||
|
return true;
|
||||||
|
|
||||||
/* Currently in use by HW (display engine)? Keep flushed. */
|
/* Currently in use by HW (display engine)? Keep flushed. */
|
||||||
return i915_gem_object_is_framebuffer(obj);
|
return i915_gem_object_is_framebuffer(obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -530,6 +530,7 @@ static int i915_set_dma_info(struct drm_i915_private *i915)
|
||||||
static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||||
|
struct pci_dev *root_pdev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (i915_inject_probe_failure(dev_priv))
|
if (i915_inject_probe_failure(dev_priv))
|
||||||
|
@ -641,6 +642,15 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||||
|
|
||||||
intel_bw_init_hw(dev_priv);
|
intel_bw_init_hw(dev_priv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
|
||||||
|
* This should be totally removed when we handle the pci states properly
|
||||||
|
* on runtime PM and on s2idle cases.
|
||||||
|
*/
|
||||||
|
root_pdev = pcie_find_root_port(pdev);
|
||||||
|
if (root_pdev)
|
||||||
|
pci_d3cold_disable(root_pdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_msi:
|
err_msi:
|
||||||
|
@ -664,11 +674,16 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||||
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
|
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||||
|
struct pci_dev *root_pdev;
|
||||||
|
|
||||||
i915_perf_fini(dev_priv);
|
i915_perf_fini(dev_priv);
|
||||||
|
|
||||||
if (pdev->msi_enabled)
|
if (pdev->msi_enabled)
|
||||||
pci_disable_msi(pdev);
|
pci_disable_msi(pdev);
|
||||||
|
|
||||||
|
root_pdev = pcie_find_root_port(pdev);
|
||||||
|
if (root_pdev)
|
||||||
|
pci_d3cold_enable(root_pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1193,14 +1208,6 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
|
|
||||||
* This should be totally removed when we handle the pci states properly
|
|
||||||
* on runtime PM and on s2idle cases.
|
|
||||||
*/
|
|
||||||
if (suspend_to_idle(dev_priv))
|
|
||||||
pci_d3cold_disable(pdev);
|
|
||||||
|
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
/*
|
/*
|
||||||
* During hibernation on some platforms the BIOS may try to access
|
* During hibernation on some platforms the BIOS may try to access
|
||||||
|
@ -1365,8 +1372,6 @@ static int i915_drm_resume_early(struct drm_device *dev)
|
||||||
|
|
||||||
pci_set_master(pdev);
|
pci_set_master(pdev);
|
||||||
|
|
||||||
pci_d3cold_enable(pdev);
|
|
||||||
|
|
||||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||||
|
|
||||||
ret = vlv_resume_prepare(dev_priv, false);
|
ret = vlv_resume_prepare(dev_priv, false);
|
||||||
|
@ -1543,7 +1548,6 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
||||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
|
if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
|
||||||
|
@ -1589,12 +1593,6 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||||
drm_err(&dev_priv->drm,
|
drm_err(&dev_priv->drm,
|
||||||
"Unclaimed access detected prior to suspending\n");
|
"Unclaimed access detected prior to suspending\n");
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
|
|
||||||
* This should be totally removed when we handle the pci states properly
|
|
||||||
* on runtime PM and on s2idle cases.
|
|
||||||
*/
|
|
||||||
pci_d3cold_disable(pdev);
|
|
||||||
rpm->suspended = true;
|
rpm->suspended = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1633,7 +1631,6 @@ static int intel_runtime_resume(struct device *kdev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
||||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
|
if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
|
||||||
|
@ -1646,7 +1643,6 @@ static int intel_runtime_resume(struct device *kdev)
|
||||||
|
|
||||||
intel_opregion_notify_adapter(dev_priv, PCI_D0);
|
intel_opregion_notify_adapter(dev_priv, PCI_D0);
|
||||||
rpm->suspended = false;
|
rpm->suspended = false;
|
||||||
pci_d3cold_enable(pdev);
|
|
||||||
if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
|
if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
|
||||||
drm_dbg(&dev_priv->drm,
|
drm_dbg(&dev_priv->drm,
|
||||||
"Unclaimed access during suspend, bios?\n");
|
"Unclaimed access during suspend, bios?\n");
|
||||||
|
|
Loading…
Reference in New Issue