> -----Original Message-----
> From: amd-gfx <amd-gfx-boun...@lists.freedesktop.org> On Behalf Of
> Dave Airlie
> Sent: Sunday, September 1, 2019 11:09 PM
> To: amd-gfx@lists.freedesktop.org
> Subject: [PATCH] radeon: add option so DVI always respect HPD over DDC
> 
> From: Dave Airlie <airl...@redhat.com>
> 
> Purelink FX-D120 (DVI over fibre extendeders) drive the HPD line low on the
> GPU side when the monitor side device is unplugged or loses the connection.
> However the GPU side device seems to cache EDID in this case. Per DVI spec
> the HPD line must be driven in order for EDID to be done, but we've met
> enough broken devices (mainly
> VGA->DVI convertors) that do the wrong thing with HPD that we ignore
> it if a DDC probe succeeds.
> 
> This patch adds an option to the radeon driver to always respect HPD on DVI
> connectors such that if the HPD line isn't driven then EDID isn't probed.

Probably cleaner to make this a connector property rather than a global enable, 
but I'm not too pressed either way.

Alex

> 
> Signed-off-by: Dave Airlie <airl...@redhat.com>
> ---
>  drivers/gpu/drm/radeon/radeon.h            | 1 +
>  drivers/gpu/drm/radeon/radeon_connectors.c | 7 +++++++
>  drivers/gpu/drm/radeon/radeon_drv.c        | 4 ++++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon.h
> b/drivers/gpu/drm/radeon/radeon.h index 32808e50be12..d572e8ded9b9
> 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -117,6 +117,7 @@ extern int radeon_uvd;  extern int radeon_vce;
> extern int radeon_si_support;  extern int radeon_cik_support;
> +extern int radeon_respect_hpd;
> 
>  /*
>   * Copy from radeon_drv.h so we don't have to include both and have
> conflicting diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c
> b/drivers/gpu/drm/radeon/radeon_connectors.c
> index c60d1a44d22a..e9b3924df06e 100644
> --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> @@ -1265,6 +1265,13 @@ radeon_dvi_detect(struct drm_connector
> *connector, bool force)
>               goto exit;
>       }
> 
> +     if (radeon_respect_hpd && radeon_connector->hpd.hpd !=
> RADEON_HPD_NONE) {
> +             if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
> {
> +                     ret = connector_status_disconnected;
> +                     goto exit;
> +             }
> +     }
> +
>       if (radeon_connector->ddc_bus) {
>               dret = radeon_ddc_probe(radeon_connector, false);
> 
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
> b/drivers/gpu/drm/radeon/radeon_drv.c
> index a6cbe11f79c6..556ae381ea86 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -207,6 +207,7 @@ int radeon_auxch = -1;  int radeon_mst = 0;  int
> radeon_uvd = 1;  int radeon_vce = 1;
> +int radeon_respect_hpd = 0;
> 
>  MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch
> registers");  module_param_named(no_wb, radeon_no_wb, int, 0444); @@
> -312,6 +313,9 @@ int radeon_cik_support = 1;
> MODULE_PARM_DESC(cik_support, "CIK support (1 = enabled (default), 0 =
> disabled)");  module_param_named(cik_support, radeon_cik_support, int,
> 0444);
> 
> +MODULE_PARM_DESC(respect_hpd, "For DVI always believe HPD");
> +module_param_named(respect_hpd, radeon_respect_hpd, int, 0644);
> +
>  static struct pci_device_id pciidlist[] = {
>       radeon_PCI_IDS
>  };
> --
> 2.20.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to