Commit 040fdcde authored by Hamza Mahfooz's avatar Hamza Mahfooz Committed by Alex Deucher
Browse files

drm/amdgpu: respect the abmlevel module parameter value if it is set



Currently, if the abmlevel module parameter is set, it is possible for
user space to override the ABM level at some point after boot. However,
that is undesirable because it means that we aren't respecting the
user's wishes with regard to the level that they want to use. So,
prevent user space from changing the ABM level if the module parameter
is set to a non-auto value.

Tested-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Signed-off-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2a3cfb9a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ extern int amdgpu_smu_pptable_id;
extern uint amdgpu_dc_feature_mask;
extern uint amdgpu_dc_debug_mask;
extern uint amdgpu_dc_visual_confirm;
extern uint amdgpu_dm_abm_level;
extern int amdgpu_dm_abm_level;
extern int amdgpu_backlight;
extern int amdgpu_damage_clips;
extern struct amdgpu_mgpu_info mgpu_info;
+6 −5
Original line number Diff line number Diff line
@@ -849,12 +849,13 @@ module_param_named(visualconfirm, amdgpu_dc_visual_confirm, uint, 0444);
 * the ABM algorithm, with 1 being the least reduction and 4 being the most
 * reduction.
 *
 * Defaults to 0, or disabled. Userspace can still override this level later
 * after boot.
 * Defaults to -1, or disabled. Userspace can only override this level after
 * boot if it's set to auto.
 */
uint amdgpu_dm_abm_level;
MODULE_PARM_DESC(abmlevel, "ABM level (0 = off (default), 1-4 = backlight reduction level) ");
module_param_named(abmlevel, amdgpu_dm_abm_level, uint, 0444);
int amdgpu_dm_abm_level = -1;
MODULE_PARM_DESC(abmlevel,
		 "ABM level (0 = off, 1-4 = backlight reduction level, -1 auto (default))");
module_param_named(abmlevel, amdgpu_dm_abm_level, int, 0444);

int amdgpu_backlight = -1;
MODULE_PARM_DESC(backlight, "Backlight control (0 = pwm, 1 = aux, -1 auto (default))");
+12 −6
Original line number Diff line number Diff line
@@ -6512,7 +6512,8 @@ static void amdgpu_dm_connector_unregister(struct drm_connector *connector)
{
	struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);

	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
	    amdgpu_dm_abm_level < 0)
		sysfs_remove_group(&connector->kdev->kobj, &amdgpu_group);

	drm_dp_aux_unregister(&amdgpu_dm_connector->dm_dp_aux.aux);
@@ -6576,9 +6577,12 @@ void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector)
		state->vcpi_slots = 0;
		state->pbn = 0;

		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
			state->abm_level = amdgpu_dm_abm_level ?:
				ABM_LEVEL_IMMEDIATE_DISABLE;
		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
			if (amdgpu_dm_abm_level <= 0)
				state->abm_level = ABM_LEVEL_IMMEDIATE_DISABLE;
			else
				state->abm_level = amdgpu_dm_abm_level;
		}

		__drm_atomic_helper_connector_reset(connector, &state->base);
	}
@@ -6616,7 +6620,8 @@ amdgpu_dm_connector_late_register(struct drm_connector *connector)
		to_amdgpu_dm_connector(connector);
	int r;

	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
	    amdgpu_dm_abm_level < 0) {
		r = sysfs_create_group(&connector->kdev->kobj,
				       &amdgpu_group);
		if (r)
@@ -7646,7 +7651,8 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
	aconnector->base.state->max_requested_bpc = aconnector->base.state->max_bpc;

	if (connector_type == DRM_MODE_CONNECTOR_eDP &&
	    (dc_is_dmcu_initialized(adev->dm.dc) || adev->dm.dc->ctx->dmub_srv)) {
	    (dc_is_dmcu_initialized(adev->dm.dc) ||
	     adev->dm.dc->ctx->dmub_srv) && amdgpu_dm_abm_level < 0) {
		drm_object_attach_property(&aconnector->base.base,
				adev->mode_info.abm_level_property, 0);
	}