87 lines
3.9 KiB
Diff
87 lines
3.9 KiB
Diff
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
index 1291b8eb9dffa3cfa0209d26e9fa3271eb8973cc..f5c8187e0d5829399463933719c0b0cd51cfce89 100644
|
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
@@ -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;
|
|
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
|
index 6ef7f22c1152c163f106cac24954ec2550595401..af7fae7907d71ed9efb771f50acdf483b4230113 100644
|
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
|
@@ -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))");
|
|
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 ede6469c80afb2a399a40c427e8cfecb194bd089..367868ad20d7783e09028713b468f38c24d7a20d 100644
|
|
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
|
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
|
@@ -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);
|
|
}
|