Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amd/display: Add extra T3 delay

[Why]
For some special panel, it will have an invalid HPD high cause driver
DPCD read/write fail.

[How]
Add extra T3 delay as a monitor patch in dce110_edp_wait_for_hpd_ready

Signed-off-by: Lewis Huang <Lewis.Huang@amd.com>
Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Lewis Huang and committed by
Alex Deucher
6798d042 bcc6aa61

+10
+1
drivers/gpu/drm/amd/display/dc/dc_types.h
··· 233 233 unsigned int skip_scdc_overwrite; 234 234 unsigned int delay_ignore_msa; 235 235 unsigned int disable_fec; 236 + unsigned int extra_t3_ms; 236 237 }; 237 238 238 239 struct dc_edid_caps {
+9
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
··· 720 720 struct dc_context *ctx = link->ctx; 721 721 struct graphics_object_id connector = link->link_enc->connector; 722 722 struct gpio *hpd; 723 + struct dc_sink *sink = link->local_sink; 723 724 bool edp_hpd_high = false; 724 725 uint32_t time_elapsed = 0; 725 726 uint32_t timeout = power_up ? ··· 751 750 if (!hpd) { 752 751 BREAK_TO_DEBUGGER(); 753 752 return; 753 + } 754 + 755 + if (sink != NULL) { 756 + if (sink->edid_caps.panel_patch.extra_t3_ms > 0) { 757 + int extra_t3_in_ms = sink->edid_caps.panel_patch.extra_t3_ms; 758 + 759 + msleep(extra_t3_in_ms); 760 + } 754 761 } 755 762 756 763 dal_gpio_open(hpd, GPIO_MODE_INTERRUPT);