File tree Expand file tree Collapse file tree
drivers/gpu/drm/amd/display Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3240,6 +3240,23 @@ static int dm_suspend(struct amdgpu_ip_block *ip_block)
32403240
32413241 hpd_rx_irq_work_suspend (dm );
32423242
3243+ /* On a full machine shutdown (not suspend/resume), notify any connected
3244+ * HDMI FRL sinks to stop expecting an FRL signal. This allows the sink
3245+ * to fall back to TMDS immediately rather than waiting for a timeout.
3246+ * Skip during suspend/resume — we will retrain FRL on resume anyway.
3247+ */
3248+ if (adev -> mp1_state == PP_MP1_STATE_UNLOAD ) {
3249+ int i ;
3250+
3251+ for (i = 0 ; i < dm -> dc -> link_count ; i ++ ) {
3252+ struct dc_link * link = dm -> dc -> links [i ];
3253+
3254+ if (dc_is_hdmi_frl_signal (link -> connector_signal ) &&
3255+ link -> local_sink )
3256+ dm -> dc -> link_srv -> hdmi_frl_disable (link );
3257+ }
3258+ }
3259+
32433260 dc_set_power_state (dm -> dc , DC_ACPI_CM_POWER_STATE_D3 );
32443261
32453262 if (dm -> dc -> caps .ips_support && adev -> in_s0ix )
Original file line number Diff line number Diff line change @@ -347,5 +347,8 @@ struct link_service {
347347 uint64_t (* dp_trace_get_edp_poweroff_timestamp )(struct dc_link * link );
348348 void (* dp_trace_source_sequence )(
349349 struct dc_link * link , uint8_t dp_test_mode );
350+
351+ /*************************** HDMI FRL *********************************/
352+ void (* hdmi_frl_disable )(struct dc_link * link );
350353};
351354#endif /* __DC_LINK_HPD_H__ */
Original file line number Diff line number Diff line change 4343#include "protocols/link_edp_panel_control.h"
4444#include "protocols/link_dp_panel_replay.h"
4545#include "protocols/link_hpd.h"
46+ #include "protocols/link_frl_training.h"
4647#include "gpio_service_interface.h"
4748#include "atomfirmware.h"
4849
@@ -259,6 +260,11 @@ static void construct_link_service_dp_cts(struct link_service *link_srv)
259260/* link dp trace implements tracing interfaces for tracking major dp sequences
260261 * including execution status and timestamps
261262 */
263+ static void construct_link_service_hdmi_frl (struct link_service * link_srv )
264+ {
265+ link_srv -> hdmi_frl_disable = dc_link_disable_frl ;
266+ }
267+
262268static void construct_link_service_dp_trace (struct link_service * link_srv )
263269{
264270 link_srv -> dp_trace_is_initialized = dp_trace_is_initialized ;
@@ -298,6 +304,7 @@ static void construct_link_service(struct link_service *link_srv)
298304 construct_link_service_dp_panel_replay (link_srv );
299305 construct_link_service_dp_cts (link_srv );
300306 construct_link_service_dp_trace (link_srv );
307+ construct_link_service_hdmi_frl (link_srv );
301308}
302309
303310struct link_service * link_create_link_service (void )
You can’t perform that action at this time.
0 commit comments