diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2020-12-10 09:40:31 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2020-12-10 09:40:31 -0500 |
commit | 1819edfc6c14d298ccf1ea4df37881da77523113 (patch) | |
tree | 1e3a862eb19169aef39436b790e6ab69ef6acaff | |
parent | 3c9996e61b48fff7755b4c21fb50bc4cac7d4a6e (diff) |
drm/amdgpu/display: register backlight latebacklight_wip
We previously registered the backlight interface while we
were enumerating the display topology, but that can race
with userspace attempting to use the BL interface since
we have not finished enumerating the displays in some cases.
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1337
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 |
1 files changed, 13 insertions, 2 deletions
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 85c008a0f70a..946ff449658b 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -213,6 +213,9 @@ static bool amdgpu_dm_psr_disable_all(struct amdgpu_display_manager *dm); static const struct drm_format_info * amd_get_format_info(const struct drm_mode_fb_cmd2 *cmd); +static void register_backlight_device(struct amdgpu_display_manager *dm, + struct dc_link *link); + /* * dm_vblank_get_counter * @@ -1542,7 +1545,7 @@ static int detect_mst_link_for_all_connectors(struct drm_device *dev) static int dm_late_init(void *handle) { struct amdgpu_device *adev = (struct amdgpu_device *)handle; - + struct amdgpu_display_manager *dm = &adev->dm; struct dmcu_iram_parameters params; unsigned int linear_lut[16]; int i; @@ -1577,6 +1580,15 @@ static int dm_late_init(void *handle) if (!ret) return -EINVAL; + /* register the backlight at this point */ + if (!dm->backlight_dev) { + for (i = 0; i < dm->dc->caps.max_links; i++) { + struct dc_link *link = dc_get_link_at_index(dm->dc, i); + + register_backlight_device(dm, link); + } + } + return detect_mst_link_for_all_connectors(adev_to_drm(adev)); } @@ -3501,7 +3513,6 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) } else if (dc_link_detect(link, DETECT_REASON_BOOT)) { amdgpu_dm_update_connector_after_detect(aconnector); - register_backlight_device(dm, link); if (amdgpu_dc_feature_mask & DC_PSR_MASK) amdgpu_dm_set_psr_caps(link); } |