Commit 6438452d authored by Matt Roper's avatar Matt Roper Committed by Joonas Lahtinen

drm/i915: Use a DRM-managed action to release the PCI bridge device

As we start supporting multiple uncore structures in future patches, the
MMIO cleanup (which may also get called mid-init if there's a failure)
will become more complicated.  Moving to DRM-managed actions will help
keep things simple.
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Reviewed-by: default avatarRadhakrishna Sripada <radhakrishna.sripada@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220906234934.3655440-8-matthew.d.roper@intel.comSigned-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
parent 4ecd56fd
...@@ -105,6 +105,12 @@ static const char irst_name[] = "INT3392"; ...@@ -105,6 +105,12 @@ static const char irst_name[] = "INT3392";
static const struct drm_driver i915_drm_driver; static const struct drm_driver i915_drm_driver;
static void i915_release_bridge_dev(struct drm_device *dev,
void *bridge)
{
pci_dev_put(bridge);
}
static int i915_get_bridge_dev(struct drm_i915_private *dev_priv) static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
{ {
int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus); int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus);
...@@ -115,7 +121,9 @@ static int i915_get_bridge_dev(struct drm_i915_private *dev_priv) ...@@ -115,7 +121,9 @@ static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
drm_err(&dev_priv->drm, "bridge device not found\n"); drm_err(&dev_priv->drm, "bridge device not found\n");
return -EIO; return -EIO;
} }
return 0;
return drmm_add_action_or_reset(&dev_priv->drm, i915_release_bridge_dev,
dev_priv->bridge_dev);
} }
/* Allocate space for the MCH regs if needed, return nonzero on error */ /* Allocate space for the MCH regs if needed, return nonzero on error */
...@@ -452,7 +460,6 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv) ...@@ -452,7 +460,6 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
err_uncore: err_uncore:
intel_teardown_mchbar(dev_priv); intel_teardown_mchbar(dev_priv);
intel_uncore_fini_mmio(&dev_priv->uncore); intel_uncore_fini_mmio(&dev_priv->uncore);
pci_dev_put(dev_priv->bridge_dev);
return ret; return ret;
} }
...@@ -465,7 +472,6 @@ static void i915_driver_mmio_release(struct drm_i915_private *dev_priv) ...@@ -465,7 +472,6 @@ static void i915_driver_mmio_release(struct drm_i915_private *dev_priv)
{ {
intel_teardown_mchbar(dev_priv); intel_teardown_mchbar(dev_priv);
intel_uncore_fini_mmio(&dev_priv->uncore); intel_uncore_fini_mmio(&dev_priv->uncore);
pci_dev_put(dev_priv->bridge_dev);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment