Message ID | 20220913085320.8577-6-johan+linaro@kernel.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | drm/msm: probe deferral fixes | expand |
On 9/13/2022 1:53 AM, Johan Hovold wrote: > Device-managed resources allocated post component bind must be tied to > the lifetime of the aggregate DRM device or they will not necessarily be > released when binding of the aggregate device is deferred. > > This is specifically true for the DP IRQ, which will otherwise remain > requested so that the next bind attempt fails when requesting the IRQ a > second time. > > Since commit c3bf8e21b38a ("drm/msm/dp: Add eDP support via aux_bus") > this can happen when the aux-bus panel driver has not yet been loaded so > that probe is deferred. > > Fix this by tying the device-managed lifetime of the DP IRQ to the DRM > device so that it is released when bind fails. > > Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support") > Cc: stable@vger.kernel.org # 5.10 > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Tested-by: Kuogee Hsieh <quic_khsieh@quicinc.com> Reviewed-by: Kuogee Hsieh <quic_khsieh@quicinc.com> > --- > drivers/gpu/drm/msm/dp/dp_display.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index fbe950edaefe..ba557328710a 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -1258,7 +1258,7 @@ int dp_display_request_irq(struct msm_dp *dp_display) > return -EINVAL; > } > > - rc = devm_request_irq(&dp->pdev->dev, dp->irq, > + rc = devm_request_irq(dp_display->drm_dev->dev, dp->irq, > dp_display_irq_handler, > IRQF_TRIGGER_HIGH, "dp_display_isr", dp); > if (rc < 0) {
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index fbe950edaefe..ba557328710a 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1258,7 +1258,7 @@ int dp_display_request_irq(struct msm_dp *dp_display) return -EINVAL; } - rc = devm_request_irq(&dp->pdev->dev, dp->irq, + rc = devm_request_irq(dp_display->drm_dev->dev, dp->irq, dp_display_irq_handler, IRQF_TRIGGER_HIGH, "dp_display_isr", dp); if (rc < 0) {