Skip to content

Commit 53c3685

Browse files
leo-sunli1alexdeucher
authored andcommitted
drm/amd/display: Lock DC and exit IPS when changing backlight
Backlight updates require aux and/or register access. Therefore, driver needs to disallow IPS beforehand. So, acquire the dc lock before calling into dc to update backlight - we should be doing this regardless of IPS. Then, while the lock is held, disallow IPS before calling into dc, then allow IPS afterwards (if it was previously allowed). Reviewed-by: Aurabindo Pillai <[email protected]> Reviewed-by: Roman Li <[email protected]> Signed-off-by: Leo Li <[email protected]> Signed-off-by: Hamza Mahfooz <[email protected]> Signed-off-by: Alex Deucher <[email protected]> (cherry picked from commit 988fe28) Cc: [email protected] # 6.10+
1 parent 4de34b0 commit 53c3685

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4516,7 +4516,7 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
45164516
struct amdgpu_dm_backlight_caps caps;
45174517
struct dc_link *link;
45184518
u32 brightness;
4519-
bool rc;
4519+
bool rc, reallow_idle = false;
45204520

45214521
amdgpu_dm_update_backlight_caps(dm, bl_idx);
45224522
caps = dm->backlight_caps[bl_idx];
@@ -4529,6 +4529,12 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
45294529
link = (struct dc_link *)dm->backlight_link[bl_idx];
45304530

45314531
/* Change brightness based on AUX property */
4532+
mutex_lock(&dm->dc_lock);
4533+
if (dm->dc->caps.ips_support && dm->dc->ctx->dmub_srv->idle_allowed) {
4534+
dc_allow_idle_optimizations(dm->dc, false);
4535+
reallow_idle = true;
4536+
}
4537+
45324538
if (caps.aux_support) {
45334539
rc = dc_link_set_backlight_level_nits(link, true, brightness,
45344540
AUX_BL_DEFAULT_TRANSITION_TIME_MS);
@@ -4540,6 +4546,11 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
45404546
DRM_DEBUG("DM: Failed to update backlight on eDP[%d]\n", bl_idx);
45414547
}
45424548

4549+
if (dm->dc->caps.ips_support && reallow_idle)
4550+
dc_allow_idle_optimizations(dm->dc, true);
4551+
4552+
mutex_unlock(&dm->dc_lock);
4553+
45434554
if (rc)
45444555
dm->actual_brightness[bl_idx] = user_brightness;
45454556
}

0 commit comments

Comments
 (0)