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

drm/amd/display: Send H14b-VSIF specified in HDMI

[Why]
Current function excludes the logic to generate H14b-VSIF. Now it
constructs HF-VSIF only and causes HDMI compliace test fail.

[How]
According to HDMI spec, source devices shall utilize the H14b-VSIF
whenever the signaling capabilities of the H14b-VSIF allow this.

Here keep the logic for HF-VSIF and add H14b-VSIF construction part.

Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
Reviewed-by: Roman Li <Roman.Li@amd.com>
Acked-by: Eryk Brol <eryk.brol@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Wayne Lin and committed by
Alex Deucher
75f77aaf 8e1f47e6

+5 -16
+2 -1
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 4685 4685 update_stream_signal(stream, sink); 4686 4686 4687 4687 if (stream->signal == SIGNAL_TYPE_HDMI_TYPE_A) 4688 - mod_build_hf_vsif_infopacket(stream, &stream->vsp_infopacket, false, false); 4688 + mod_build_hf_vsif_infopacket(stream, &stream->vsp_infopacket); 4689 + 4689 4690 if (stream->link->psr_settings.psr_feature_enabled) { 4690 4691 // 4691 4692 // should decide stream support vsc sdp colorimetry capability
+1 -1
drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h
··· 37 37 struct dc_info_packet *info_packet); 38 38 39 39 void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream, 40 - struct dc_info_packet *info_packet, int ALLMEnabled, int ALLMValue); 40 + struct dc_info_packet *info_packet); 41 41 42 42 #endif
+2 -14
drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
··· 421 421 ***************************************************************************** 422 422 */ 423 423 void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream, 424 - struct dc_info_packet *info_packet, int ALLMEnabled, int ALLMValue) 424 + struct dc_info_packet *info_packet) 425 425 { 426 426 unsigned int length = 5; 427 427 bool hdmi_vic_mode = false; 428 428 uint8_t checksum = 0; 429 429 uint32_t i = 0; 430 430 enum dc_timing_3d_format format; 431 - bool bALLM = (bool)ALLMEnabled; 432 - bool bALLMVal = (bool)ALLMValue; 433 431 434 432 info_packet->valid = false; 435 433 format = stream->timing.timing_3d_format; ··· 440 442 && format == TIMING_3D_FORMAT_NONE) 441 443 hdmi_vic_mode = true; 442 444 443 - if ((format == TIMING_3D_FORMAT_NONE) && !hdmi_vic_mode && !bALLM) 445 + if ((format == TIMING_3D_FORMAT_NONE) && !hdmi_vic_mode) 444 446 return; 445 447 446 448 info_packet->sb[1] = 0x03; 447 449 info_packet->sb[2] = 0x0C; 448 450 info_packet->sb[3] = 0x00; 449 - 450 - if (bALLM) { 451 - info_packet->sb[1] = 0xD8; 452 - info_packet->sb[2] = 0x5D; 453 - info_packet->sb[3] = 0xC4; 454 - info_packet->sb[4] = HF_VSIF_VERSION; 455 - } 456 451 457 452 if (format != TIMING_3D_FORMAT_NONE) 458 453 info_packet->sb[4] = (2 << 5); ··· 480 489 info_packet->hb0 = HDMI_INFOFRAME_TYPE_VENDOR; 481 490 info_packet->hb1 = 0x01; 482 491 info_packet->hb2 = (uint8_t) (length); 483 - 484 - if (bALLM) 485 - info_packet->sb[5] = (info_packet->sb[5] & ~0x02) | (bALLMVal << 1); 486 492 487 493 checksum += info_packet->hb0; 488 494 checksum += info_packet->hb1;