Re: [PATCH AUTOSEL 5.4 143/350] drm/nouveau: Resume hotplug interrupts earlier
From: Lyude Paul
Date: Tue Dec 10 2019 - 16:30:14 EST
huh? Not sure how this got put in the stable queue, but this probably should
be dropped. this was prepatory work for some MST functionality that got added
recently, not a fix.
On Tue, 2019-12-10 at 16:04 -0500, Sasha Levin wrote:
> From: Lyude Paul <lyude@xxxxxxxxxx>
>
> [ Upstream commit ac0de16a38a9ec7026ca96132e3883c564497068 ]
>
> Currently, we enable hotplug detection only after we re-enable the
> display. However, this is too late if we're planning on sending sideband
> messages during the resume process - which we'll need to do in order to
> reprobe the topology on resume.
>
> So, enable hotplug events before reinitializing the display.
>
> Cc: Juston Li <juston.li@xxxxxxxxx>
> Cc: Imre Deak <imre.deak@xxxxxxxxx>
> Cc: Ville SyrjÃlà <ville.syrjala@xxxxxxxxxxxxxxx>
> Cc: Harry Wentland <hwentlan@xxxxxxx>
> Cc: Daniel Vetter <daniel.vetter@xxxxxxxx>
> Reviewed-by: Sean Paul <sean@xxxxxxxxxx>
> Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx>
> Link:
> https://patchwork.freedesktop.org/patch/msgid/20191022023641.8026-11-lyude@xxxxxxxxxx
> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> ---
> drivers/gpu/drm/nouveau/nouveau_display.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c
> b/drivers/gpu/drm/nouveau/nouveau_display.c
> index 6f038511a03a9..53f9bceaf17a5 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> @@ -407,6 +407,17 @@ nouveau_display_init(struct drm_device *dev, bool
> resume, bool runtime)
> struct drm_connector_list_iter conn_iter;
> int ret;
>
> + /*
> + * Enable hotplug interrupts (done as early as possible, since we need
> + * them for MST)
> + */
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + nouveau_for_each_non_mst_connector_iter(connector, &conn_iter) {
> + struct nouveau_connector *conn = nouveau_connector(connector);
> + nvif_notify_get(&conn->hpd);
> + }
> + drm_connector_list_iter_end(&conn_iter);
> +
> ret = disp->init(dev, resume, runtime);
> if (ret)
> return ret;
> @@ -416,14 +427,6 @@ nouveau_display_init(struct drm_device *dev, bool
> resume, bool runtime)
> */
> drm_kms_helper_poll_enable(dev);
>
> - /* enable hotplug interrupts */
> - drm_connector_list_iter_begin(dev, &conn_iter);
> - nouveau_for_each_non_mst_connector_iter(connector, &conn_iter) {
> - struct nouveau_connector *conn = nouveau_connector(connector);
> - nvif_notify_get(&conn->hpd);
> - }
> - drm_connector_list_iter_end(&conn_iter);
> -
> return ret;
> }
>
--
Cheers,
Lyude Paul