Message ID | 20240821214052.6800-1-wahrenst@gmx.net |
---|---|
Headers | show |
Series | ARM: bcm2835: Implement initial S2Idle for Raspberry Pi | expand |
Hi Stefan, On 8/21/24 18:40, Stefan Wahren wrote: > The commit 0f5251339eda ("drm/vc4: hdmi: Make sure the controller is > powered in detect") introduced the necessary power management handling > to avoid register access while controller is powered down. > Unfortunately it just print a warning if pm_runtime_resume_and_get() > fails and proceed anyway. > > This could happen during suspend to idle. So we must assume it is unsafe > to access the HDMI register. So bail out properly. > > Fixes: 0f5251339eda ("drm/vc4: hdmi: Make sure the controller is powered in detect") > Signed-off-by: Stefan Wahren <wahrenst@gmx.net> > Reviewed-by: Maíra Canal <mcanal@igalia.com> > Acked-by: Maxime Ripard <mripard@kernel.org> Applied to drm/kernel/drm-misc-next! Best Regards, - Maíra > --- > drivers/gpu/drm/vc4/vc4_hdmi.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index d57c4a5948c8..cb424604484f 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -429,6 +429,7 @@ static int vc4_hdmi_connector_detect_ctx(struct drm_connector *connector, > { > struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector); > enum drm_connector_status status = connector_status_disconnected; > + int ret; > > /* > * NOTE: This function should really take vc4_hdmi->mutex, but > @@ -441,7 +442,12 @@ static int vc4_hdmi_connector_detect_ctx(struct drm_connector *connector, > * the lock for now. > */ > > - WARN_ON(pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev)); > + ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev); > + if (ret) { > + drm_err_once(connector->dev, "Failed to retain HDMI power domain: %d\n", > + ret); > + return connector_status_unknown; > + } > > if (vc4_hdmi->hpd_gpio) { > if (gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio)) > -- > 2.34.1 >
Hi Stefan, On 8/21/24 18:40, Stefan Wahren wrote: > Common pattern of handling deferred probe can be simplified with > dev_err_probe() and devm_clk_get_optional(). This results in much > less code. > > Signed-off-by: Stefan Wahren <wahrenst@gmx.net> > Reviewed-by: Maíra Canal <mcanal@igalia.com> Applied to drm/misc/kernel/drm-misc-next! Best Regards, - Maíra > --- > drivers/gpu/drm/vc4/vc4_v3d.c | 18 +++--------------- > 1 file changed, 3 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c > index 6e566584afbf..bf5c4e36c94e 100644 > --- a/drivers/gpu/drm/vc4/vc4_v3d.c > +++ b/drivers/gpu/drm/vc4/vc4_v3d.c > @@ -441,21 +441,9 @@ static int vc4_v3d_bind(struct device *dev, struct device *master, void *data) > vc4->v3d = v3d; > v3d->vc4 = vc4; > > - v3d->clk = devm_clk_get(dev, NULL); > - if (IS_ERR(v3d->clk)) { > - int ret = PTR_ERR(v3d->clk); > - > - if (ret == -ENOENT) { > - /* bcm2835 didn't have a clock reference in the DT. */ > - ret = 0; > - v3d->clk = NULL; > - } else { > - if (ret != -EPROBE_DEFER) > - dev_err(dev, "Failed to get V3D clock: %d\n", > - ret); > - return ret; > - } > - } > + v3d->clk = devm_clk_get_optional(dev, NULL); > + if (IS_ERR(v3d->clk)) > + return dev_err_probe(dev, PTR_ERR(v3d->clk), "Failed to get V3D clock\n"); > > ret = platform_get_irq(pdev, 0); > if (ret < 0) > -- > 2.34.1 >