<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Have you tried a much later kernel btw? I saw you mentioned 4.19.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Den tis 16 juni 2020 kl 02:50 skrev Aaron Chou <<a href="mailto:zhoubb.aaron@gmail.com">zhoubb.aaron@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Yes, I agree.<br>
<br>
On Tue, Jun 16, 2020 at 3:08 AM Alex Deucher <<a href="mailto:alexdeucher@gmail.com" target="_blank">alexdeucher@gmail.com</a>> wrote:<br>
><br>
> On Mon, Jun 15, 2020 at 5:30 AM Aaron Chou <<a href="mailto:zhoubb.aaron@gmail.com" target="_blank">zhoubb.aaron@gmail.com</a>> wrote:<br>
> ><br>
> > About one month ago, I have asked a question about HDMI hotplug, the link is:<br>
> ><br>
> > <a href="https://gitlab.freedesktop.org/drm/amd/-/issues/1135#note_492460" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/drm/amd/-/issues/1135#note_492460</a><br>
> ><br>
> > And I have put one patch to fix this, as follows:<br>
> ><br>
> >  39 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> >  40 index f355d9a752d2..ee657db9a228 100644<br>
> >  41 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> >  42 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> >  43 @@ -973,7 +973,7 @@ amdgpu_connector_dvi_detect(struct<br>
> > drm_connector *connector, bool force)<br>
> >  44         const struct drm_encoder_helper_funcs *encoder_funcs;<br>
> >  45         int r;<br>
> >  46         enum drm_connector_status ret =<br>
> > connector_status_disconnected;<br>
> >  47 -       bool dret = false, broken_edid = false;<br>
> >  48 +       bool dret = false, broken_edid = false, undefined_flag =<br>
> > false;<br>
> >  49<br>
> >  50         if (!drm_kms_helper_is_poll_worker()) {<br>
> >  51                 r = pm_runtime_get_sync(connector->dev->dev);<br>
> >  52 @@ -988,7 +988,12 @@ amdgpu_connector_dvi_detect(struct<br>
> > drm_connector *connector, bool force)<br>
> >  53<br>
> >  54         if (amdgpu_connector->ddc_bus)<br>
> >  55                 dret = amdgpu_display_ddc_probe(amdgpu_connector,<br>
> > false);<br>
> >  56 -       if (dret) {<br>
> >  57 +<br>
> >  58 +       /* Check the HDMI HPD pin status again */<br>
> >  59 +       if (!amdgpu_display_hpd_sense(adev,<br>
> > amdgpu_connector->hpd.hpd))<br>
> >  60 +               undefined_flag = true;<br>
> >  61 +<br>
> >  62 +       if (dret && !undefined_flag) {<br>
> >  63                 amdgpu_connector->detected_by_load = false;<br>
> >  64                 amdgpu_connector_free_edid(connector);<br>
> >  65                 amdgpu_connector_get_edid(connector);<br>
> ><br>
> > Maybe the fix is sloppy, so I write the another patch:<br>
> ><br>
> >  16 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> >  17 index c770d73352a7..bb59ebc9a6c8 100644<br>
> >  18 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> >  19 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c<br>
> >  20 @@ -991,6 +991,7 @@ amdgpu_connector_dvi_detect(struct<br>
> > drm_connector *connector, bool force)<br>
> >  21         if (amdgpu_connector->ddc_bus)<br>
> >  22                 dret = amdgpu_display_ddc_probe(amdgpu_connector,<br>
> > false);<br>
> >  23         if (dret) {<br>
> >  24 +               schedule_work(&adev->hotplug_work);<br>
> >  25                 amdgpu_connector->detected_by_load = false;<br>
> >  26                 amdgpu_connector_free_edid(connector);<br>
> >  27                 amdgpu_connector_get_edid(connector);<br>
> ><br>
> > Which is better, or neither?<br>
><br>
> As per the last discussion:<br>
><br>
> "This is the part I don't understand.  The logic already checks the HPD<br>
> status in amdgpu_connector_check_hpd_status_unchanged().  Does it<br>
> still report connected at that point?  After that it tries to read the<br>
> EDID in amdgpu_display_ddc_probe().  If the monitor is disconnected,<br>
> there should be no EDID so dret should be false.  We should try and<br>
> figure out why the first HPD check reports connected and the EDID<br>
> probe returns true."<br>
><br>
> There is already an HPD probe in the current logic.  We should try and<br>
> understand why we need a second one rather than just adding one.  Does<br>
> a delay at the top of that function help?<br>
><br>
> Alex<br>
><br>
> ><br>
> > --<br>
> > Regards,<br>
> > Aaron<br>
> > _______________________________________________<br>
> > amd-gfx mailing list<br>
> > <a href="mailto:amd-gfx@lists.freedesktop.org" target="_blank">amd-gfx@lists.freedesktop.org</a><br>
> > <a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
_______________________________________________<br>
amd-gfx mailing list<br>
<a href="mailto:amd-gfx@lists.freedesktop.org" target="_blank">amd-gfx@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
</blockquote></div>