From: "Mario Limonciello (AMD)" <[email protected]> [Why] Brightness caching isn't necessary when the core is changing brightness as part of the connector state.
[How] Drop all brightness and actual brightness caching Signed-off-by: Mario Limonciello (AMD) <[email protected]> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 72 +++---------------- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 13 ---- 2 files changed, 9 insertions(+), 76 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 9653cfd99c6ad..43b22ab9180e8 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -3798,12 +3798,6 @@ static int dm_resume(struct amdgpu_ip_block *ip_block) mutex_unlock(&dm->dc_lock); - /* set the backlight after a reset */ - for (i = 0; i < dm->num_of_edps; i++) { - if (dm->backlight_dev[i]) - amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]); - } - return 0; } /* Recreate dc_state - DC invalidates it when setting power state to S3. */ @@ -5388,7 +5382,7 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm, struct amdgpu_dm_backlight_caps *caps; struct dc_link *link; u32 brightness = 0; - bool rc = false, reallow_idle = false; + bool reallow_idle = false; struct drm_connector *connector; struct dc_stream_state *stream; unsigned int min, max; @@ -5399,10 +5393,8 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm, if (aconnector->bl_idx != bl_idx) continue; - /* if connector is off, save the brightness for next time it's on */ + /* if connector is off, DRM core will restore it next time it's on */ if (!aconnector->base.encoder) { - dm->brightness[bl_idx] = user_brightness; - dm->actual_brightness[bl_idx] = 0; return; } } @@ -5410,11 +5402,10 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm, amdgpu_dm_update_backlight_caps(dm, bl_idx); caps = &dm->backlight_caps[bl_idx]; - dm->brightness[bl_idx] = user_brightness; /* update scratch register */ if (bl_idx == 0) - amdgpu_atombios_scratch_regs_set_backlight_level(dm->adev, dm->brightness[bl_idx]); - brightness = convert_brightness_from_user(caps, dm->brightness[bl_idx]); + amdgpu_atombios_scratch_regs_set_backlight_level(dm->adev, user_brightness); + brightness = convert_brightness_from_user(caps, user_brightness); link = (struct dc_link *)dm->backlight_link[bl_idx]; /* Apply brightness quirk */ @@ -5440,14 +5431,14 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm, } if (caps->aux_support) { - rc = mod_power_set_backlight_nits(dm->power_module, stream, brightness, + mod_power_set_backlight_nits(dm->power_module, stream, brightness, AUX_BL_DEFAULT_TRANSITION_TIME_MS, false, true); } else { /* power module uses millipercent */ get_brightness_range(caps, &min, &max); brightness = DIV_ROUND_CLOSEST(brightness * 100, (max - min)) * 1000; - rc = mod_power_set_backlight_percent(dm->power_module, stream, - brightness, 0, false); + mod_power_set_backlight_percent(dm->power_module, stream, + brightness, 0, false); } /* @@ -5472,9 +5463,6 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm, dc_allow_idle_optimizations(dm->dc, true); mutex_unlock(&dm->dc_lock); - - if (rc) - dm->actual_brightness[bl_idx] = user_brightness; } static int amdgpu_dm_backlight_update_status(struct backlight_device *bd) @@ -5522,7 +5510,7 @@ static int amdgpu_dm_backlight_get_level(struct amdgpu_display_manager *dm, static int amdgpu_dm_backlight_get_brightness(struct backlight_device *bd) { struct amdgpu_display_manager *dm = bl_get_data(bd); - int i, ret; + int i; for (i = 0; i < dm->num_of_edps; i++) { if (bd == dm->backlight_dev[i]) @@ -5531,11 +5519,7 @@ static int amdgpu_dm_backlight_get_brightness(struct backlight_device *bd) if (i >= AMDGPU_DM_MAX_NUM_EDP) i = 0; - ret = amdgpu_dm_backlight_get_level(dm, i); - if (ret < 0) - return dm->brightness[i]; - - return ret; + return amdgpu_dm_backlight_get_level(dm, i); } static const struct backlight_ops amdgpu_dm_backlight_ops = { @@ -5553,8 +5537,6 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) struct amdgpu_dm_backlight_caps *caps; char bl_name[16]; int min, max; - int real_brightness; - int init_brightness; int r; if (aconnector->bl_idx == -1) @@ -5580,8 +5562,6 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) } else props.brightness = props.max_brightness = MAX_BACKLIGHT_LEVEL; - init_brightness = props.brightness; - if (caps->data_points && !(amdgpu_dc_debug_mask & DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE)) { drm_info(drm, "Using custom brightness curve\n"); props.scale = BACKLIGHT_SCALE_NON_LINEAR; @@ -5595,7 +5575,6 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) dm->backlight_dev[aconnector->bl_idx] = backlight_device_register(bl_name, aconnector->base.kdev, dm, &amdgpu_dm_backlight_ops, &props); - dm->brightness[aconnector->bl_idx] = props.brightness; if (IS_ERR(dm->backlight_dev[aconnector->bl_idx])) { r = PTR_ERR(dm->backlight_dev[aconnector->bl_idx]); @@ -5604,18 +5583,6 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) return r; } - /* - * dm->brightness[x] can be inconsistent just after startup until - * ops.get_brightness is called. - */ - real_brightness = - amdgpu_dm_backlight_ops.get_brightness(dm->backlight_dev[aconnector->bl_idx]); - - if (real_brightness != init_brightness) { - dm->actual_brightness[aconnector->bl_idx] = real_brightness; - dm->brightness[aconnector->bl_idx] = real_brightness; - } - /* Link the registered backlight device to the DRM connector. If * drm_backlight_alloc() failed earlier in init_helper, * aconnector->base.backlight is NULL and drm_backlight_link() is a @@ -10894,7 +10861,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_commit *state, bool mode_set_reset_required = false; u32 i; struct dc_commit_streams_params params = {dc_state->streams, dc_state->stream_count}; - bool set_backlight_level = false; /* Disable writeback */ for_each_old_connector_in_state(state, connector, old_con_state, i) { @@ -11016,7 +10982,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_commit *state, acrtc->hw_mode = new_crtc_state->mode; crtc->hwmode = new_crtc_state->mode; mode_set_reset_required = true; - set_backlight_level = true; } else if (modereset_required(new_crtc_state)) { drm_dbg_atomic(dev, "Atomic commit: RESET. crtc id %d:[%p]\n", @@ -11085,18 +11050,6 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_commit *state, } } - /* During boot up and resume the DC layer will reset the panel brightness - * to fix a flicker issue. - * It will cause the dm->actual_brightness is not the current panel brightness - * level. (the dm->brightness is the correct panel level) - * So we set the backlight level with dm->brightness value after set mode - */ - if (set_backlight_level) { - for (i = 0; i < dm->num_of_edps; i++) { - if (dm->backlight_dev[i]) - amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]); - } - } } static void dm_set_writeback(struct amdgpu_display_manager *dm, @@ -11604,13 +11557,6 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_commit *state) /* Update audio instances for each connector. */ amdgpu_dm_commit_audio(dev, state); - /* restore the backlight level */ - for (i = 0; i < dm->num_of_edps; i++) { - if (dm->backlight_dev[i] && - (dm->actual_brightness[i] != dm->brightness[i])) - amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]); - } - /* * send vblank event on all events not handled in flip and * mark consumed event for drm_atomic_helper_commit_hw_done diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h index dd199e0b79226..1aeb223256fa7 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -645,19 +645,6 @@ struct amdgpu_display_manager { struct completion dmub_aux_transfer_done; struct workqueue_struct *delayed_hpd_wq; - /** - * @brightness: - * - * cached backlight values. - */ - u32 brightness[AMDGPU_DM_MAX_NUM_EDP]; - /** - * @actual_brightness: - * - * last successfully applied backlight values. - */ - u32 actual_brightness[AMDGPU_DM_MAX_NUM_EDP]; - /** * @aux_hpd_discon_quirk: * -- 2.43.0
