From: Roman Li <[email protected]>

[Why]
Avoid unnecessary GPIO configuration attempts on dcn that doesn't
support it.

[How]
Conditionally use GPIO HPD detection or rely on hw encoder path.

Reviewed-by: Charlene Liu <[email protected]>
Signed-off-by: Roman Li <[email protected]>
Signed-off-by: Tom Chung <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/link/link_factory.c       | 8 +++++---
 drivers/gpu/drm/amd/display/dc/link/protocols/link_hpd.c | 9 +++++++--
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/link/link_factory.c 
b/drivers/gpu/drm/amd/display/dc/link/link_factory.c
index 5fbcf04c6251..6f4c3c73e113 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_factory.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_factory.c
@@ -564,9 +564,11 @@ static bool construct_phy(struct dc_link *link,
        enc_init_data.analog_engine = find_analog_engine(link, 
&enc_init_data.analog_encoder);
        enc_init_data.encoder = link_encoder;
        enc_init_data.analog_engine = link_analog_engine;
-       enc_init_data.hpd_gpio = link_get_hpd_gpio(link->ctx->dc_bios, 
link->link_id,
-                                     link->ctx->gpio_service);
-
+       if (link->ctx->dce_version <= DCN_VERSION_4_01)
+               enc_init_data.hpd_gpio = link_get_hpd_gpio(link->ctx->dc_bios, 
link->link_id,
+                                             link->ctx->gpio_service);
+       else
+               enc_init_data.hpd_gpio = NULL;
        if (enc_init_data.hpd_gpio) {
                dal_gpio_open(enc_init_data.hpd_gpio, GPIO_MODE_INTERRUPT);
                dal_gpio_unlock_pin(enc_init_data.hpd_gpio);
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_hpd.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_hpd.c
index 29f3a03687b2..b157d05b67ad 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_hpd.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_hpd.c
@@ -136,8 +136,13 @@ enum hpd_source_id get_hpd_line(struct dc_link *link)
 
                hpd_id = HPD_SOURCEID_UNKNOWN;
 
-       hpd = link_get_hpd_gpio(link->ctx->dc_bios, link->link_id,
-                          link->ctx->gpio_service);
+       /* Use GPIO path where supported, otherwise use hardware encoder path */
+       if (link->ctx && link->ctx->dce_version <= DCN_VERSION_4_01) {
+               hpd = link_get_hpd_gpio(link->ctx->dc_bios, link->link_id,
+                                  link->ctx->gpio_service);
+       } else {
+               hpd = NULL;
+       }
 
        if (hpd) {
                switch (dal_irq_get_source(hpd)) {
-- 
2.43.0

Reply via email to