drm/amd/display: Fix for access for ddc pin and aux engine.
authorMeenakshikumar Somasundaram <meenakshikumar.somasundaram@amd.com>
Fri, 13 Aug 2021 17:09:25 +0000 (13:09 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 6 Oct 2021 19:52:48 +0000 (15:52 -0400)
[Why & How]
1. Remove unnecessary dummy interrupt source for USB4 HPD & HPD RX
2. Adjust parameter for DPCD writing of link training process of DPIA link
3. Adjust specific AUX defer delay for DPIA link

Reviewed-by: Jimmy Kizito <Jimmy.Kizito@amd.com>
Acked-by: Wayne Lin <Wayne.Lin@amd.com>
Acked-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Meenakshikumar Somasundaram <meenakshikumar.somasundaram@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/core/dc_link_dpia.c
drivers/gpu/drm/amd/display/dc/dce/dce_aux.c
drivers/gpu/drm/amd/display/dc/irq_types.h

index 6b5ddf0a29c12846d2e0835fc04cf8b68fa6b63f..ca5dc3c168ecf98dd03828697d7bf822b34127fe 100644 (file)
@@ -1709,9 +1709,9 @@ static bool dc_link_construct_dpia(struct dc_link *link,
 
        DC_LOGGER_INIT(dc_ctx->logger);
 
-       /* Initialized dummy hpd and hpd rx */
-       link->irq_source_hpd = DC_IRQ_SOURCE_USB4_DMUB_HPD;
-       link->irq_source_hpd_rx = DC_IRQ_SOURCE_USB4_DMUB_HPDRX;
+       /* Initialized irq source for hpd and hpd rx */
+       link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
+       link->irq_source_hpd_rx = DC_IRQ_SOURCE_INVALID;
        link->link_status.dpcd_caps = &link->dpcd_caps;
 
        link->dc = init_params->dc;
index 9c620b61f64e6ba074a4495d13c14fe8065314f7..6936b9d549e57a95991ccd15db66b3cf10203288 100644 (file)
@@ -234,7 +234,7 @@ static enum dc_status dpcd_set_lt_pattern(struct dc_link *link,
        }
 
        status = core_link_write_dpcd(link,
-                                     DP_TRAINING_PATTERN_SET,
+                                     dpcd_tps_offset,
                                      &dpcd_pattern.raw,
                                      sizeof(dpcd_pattern.raw));
 
@@ -796,7 +796,7 @@ static enum dc_status dpcd_clear_lt_pattern(struct dc_link *link, uint32_t hop)
                        ((DP_REPEATER_CONFIGURATION_AND_STATUS_SIZE) * (hop - 1));
 
        status = core_link_write_dpcd(link,
-                       DP_TRAINING_PATTERN_SET,
+                       dpcd_tps_offset,
                        &dpcd_pattern.raw,
                        sizeof(dpcd_pattern.raw));
 
@@ -906,7 +906,7 @@ enum link_training_result dc_link_dpia_perform_link_training(struct dc_link *lin
        enum link_training_result result;
        struct link_training_settings lt_settings;
        uint8_t repeater_cnt = 0; /* Number of hops/repeaters in display path. */
-       uint8_t repeater_id; /* Current hop. */
+       int8_t repeater_id; /* Current hop. */
 
        /* Configure link as prescribed in link_setting and set LTTPR mode. */
        result = dpia_configure_link(link, link_setting, &lt_settings);
index 5666543f095bc1b5e8f54270fff595bcf0a45136..95cb4d7cc76ae35f1bf4ee015761bebfc306e7ac 100644 (file)
@@ -627,6 +627,7 @@ int dce_aux_transfer_dmub_raw(struct ddc_service *ddc,
 #define AUX_MAX_I2C_DEFER_RETRIES 7
 #define AUX_MAX_INVALID_REPLY_RETRIES 2
 #define AUX_MAX_TIMEOUT_RETRIES 3
+#define AUX_DEFER_DELAY_FOR_DPIA 4 /*ms*/
 
 static void dce_aux_log_payload(const char *payload_name,
        unsigned char *payload, uint32_t length, uint32_t max_length_to_log)
@@ -772,6 +773,8 @@ bool dce_aux_transfer_with_retries(struct ddc_service *ddc,
                                /* polling_timeout_period is in us */
                                if (aux110)
                                        defer_time_in_ms += aux110->polling_timeout_period / 1000;
+                               else
+                                       defer_time_in_ms += AUX_DEFER_DELAY_FOR_DPIA;
                                ++aux_defer_retries;
                                fallthrough;
                        case AUX_TRANSACTION_REPLY_I2C_OVER_AUX_DEFER:
index 7a9f667d5edb465968af130b370186ba54cea7e1..530c2578db406d68e7db326c6dc053b21ba49eb0 100644 (file)
@@ -153,10 +153,7 @@ enum dc_irq_source {
        DC_IRQ_SOURCE_DMCUB_OUTBOX,
        DC_IRQ_SOURCE_DMCUB_OUTBOX0,
        DC_IRQ_SOURCE_DMCUB_GENERAL_DATAOUT,
-       DAL_IRQ_SOURCES_NUMBER,
-       /* Dummy interrupt source for USB4 HPD & HPD RX */
-       DC_IRQ_SOURCE_USB4_DMUB_HPD,
-       DC_IRQ_SOURCE_USB4_DMUB_HPDRX,
+       DAL_IRQ_SOURCES_NUMBER
 };
 
 enum irq_type