On 2026-07-15 11:46, Zuo, Jerry wrote:
> AMD General
>
> It may not be necessary to identify whether it is FRL when creating the
> queue. FRL is not determined until link detection. Whether make the queue
> active or not is dynamically determined by whether an active FRL stream
> presents.
>
This checks whether the HW has any FRL capable encoders and only
creates the workqueue if it does. The workqueue is still created
regardless whether or not an FRL-capable device is plugged in.
Harry
>> -----Original Message-----
>> From: amd-gfx <[email protected]> On Behalf Of Timur
>> Kristóf
>> Sent: Saturday, July 11, 2026 07:30
>> To: [email protected]; Deucher, Alexander
>> <[email protected]>; Tvrtko Ursulin <[email protected]>;
>> Natalie Vock <[email protected]>; Melissa Wen <[email protected]>;
>> Limonciello, Mario <[email protected]>; Hung, Alex
>> <[email protected]>; Wentland, Harry <[email protected]>
>> Cc: Timur Kristóf <[email protected]>
>> Subject: [PATCH 2/2] drm/amd/display: Check HDMI FRL support before
>> creating polling workqueue
>>
>> The workqueue is not necessary when FRL is not supported or when it's
>> disabled. Add a helper to tell when the current board has any HDMI FRL
>> capable connectors and call that before creating the workqueue.
>>
>> Signed-off-by: Timur Kristóf <[email protected]>
>> ---
>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
>> drivers/gpu/drm/amd/display/dc/core/dc.c | 26 +++++++++++++++++++
>> drivers/gpu/drm/amd/display/dc/dc.h | 2 ++
>> 3 files changed, 29 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> index 6299f0e384f1..87d7b60ceb3f 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -827,7 +827,7 @@ static int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>>
>> dc_init_callbacks(adev->dm.dc, &init_params);
>> }
>> - if (adev->dm.dc->caps.max_links > 0) {
>> + if (dc_is_hdmi_frl_supported(adev->dm.dc)) {
>> adev->dm.hdmi_frl_status_polling_wq =
>>
>> create_singlethread_workqueue("hdmi_frl_status_polling_wq");
>> if (!adev->dm.hdmi_frl_status_polling_wq)
>> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c
>> b/drivers/gpu/drm/amd/display/dc/core/dc.c
>> index 1b6627a92d24..1a7073abb8ba 100644
>> --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
>> +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
>> @@ -6592,6 +6592,32 @@ void
>> dc_mclk_switch_using_fw_based_vblank_stretch_shut_down(struct dc *dc)
>> dc->current_state-
>>> bw_ctx.bw.dcn.clk.fw_based_mclk_switching_shut_down = true; }
>>
>> +/**
>> + * dc_is_hdmi_frl_supported() - Check HDMI FRL support
>> + *
>> + * @dc: [in] dc structure
>> + *
>> + * Return:
>> + * True if the current board has any HDMI FRL capable connectors,
>> + * False otherwise.
>> + */
>> +bool dc_is_hdmi_frl_supported(struct dc *dc) {
>> + int i;
>> +
>> + if (!dc->config.enable_frl)
>> + return false;
>> +
>> + for (i = 0; i < dc->link_count; ++i) {
>> + if (dc->links[i] &&
>> + dc->links[i]->link_enc &&
>> + dc->links[i]->link_enc-
>>> features.flags.bits.IS_HDMI_FRL_CAPABLE)
>> + return true;
>> + }
>> +
>> + return false;
>> +}
>> +
>> /**
>> * dc_is_dmub_outbox_supported - Check if DMUB firmware support outbox
>> notification
>> *
>> diff --git a/drivers/gpu/drm/amd/display/dc/dc.h
>> b/drivers/gpu/drm/amd/display/dc/dc.h
>> index 13c1f7cd9d7d..d27c7437ee7a 100644
>> --- a/drivers/gpu/drm/amd/display/dc/dc.h
>> +++ b/drivers/gpu/drm/amd/display/dc/dc.h
>> @@ -3056,6 +3056,8 @@ bool dc_set_ips_disable(struct dc *dc, unsigned int
>> disable_ips); void dc_z10_restore(const struct dc *dc); void
>> dc_z10_save_init(struct dc *dc);
>>
>> +bool dc_is_hdmi_frl_supported(struct dc *dc);
>> +
>> bool dc_is_dmub_outbox_supported(struct dc *dc); bool
>> dc_enable_dmub_notifications(struct dc *dc);
>>
>> --
>> 2.55.0
>