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
