Skip to content

Commit b3cdb19

Browse files
committed
Merge tag 'amd-drm-fixes-6.8-2024-03-07' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-6.8-2024-03-07: amdgpu: - SMU14 fix - Fix possible NULL pointer - VRR fix - pwm fix Signed-off-by: Dave Airlie <[email protected]> From: Alex Deucher <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 3a397b1 + 0dafaf6 commit b3cdb19

File tree

4 files changed

+30
-10
lines changed

4 files changed

+30
-10
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6539,7 +6539,7 @@ static void amdgpu_dm_connector_funcs_force(struct drm_connector *connector)
65396539
struct edid *edid;
65406540
struct i2c_adapter *ddc;
65416541

6542-
if (dc_link->aux_mode)
6542+
if (dc_link && dc_link->aux_mode)
65436543
ddc = &aconnector->dm_dp_aux.aux.ddc;
65446544
else
65456545
ddc = &aconnector->i2c->base;
@@ -11169,14 +11169,23 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
1116911169
if (range->flags != 1)
1117011170
continue;
1117111171

11172-
amdgpu_dm_connector->min_vfreq = range->min_vfreq;
11173-
amdgpu_dm_connector->max_vfreq = range->max_vfreq;
11174-
amdgpu_dm_connector->pixel_clock_mhz =
11175-
range->pixel_clock_mhz * 10;
11176-
1117711172
connector->display_info.monitor_range.min_vfreq = range->min_vfreq;
1117811173
connector->display_info.monitor_range.max_vfreq = range->max_vfreq;
1117911174

11175+
if (edid->revision >= 4) {
11176+
if (data->pad2 & DRM_EDID_RANGE_OFFSET_MIN_VFREQ)
11177+
connector->display_info.monitor_range.min_vfreq += 255;
11178+
if (data->pad2 & DRM_EDID_RANGE_OFFSET_MAX_VFREQ)
11179+
connector->display_info.monitor_range.max_vfreq += 255;
11180+
}
11181+
11182+
amdgpu_dm_connector->min_vfreq =
11183+
connector->display_info.monitor_range.min_vfreq;
11184+
amdgpu_dm_connector->max_vfreq =
11185+
connector->display_info.monitor_range.max_vfreq;
11186+
amdgpu_dm_connector->pixel_clock_mhz =
11187+
range->pixel_clock_mhz * 10;
11188+
1118011189
break;
1118111190
}
1118211191

drivers/gpu/drm/amd/pm/amdgpu_pm.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2558,6 +2558,7 @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
25582558
{
25592559
struct amdgpu_device *adev = dev_get_drvdata(dev);
25602560
int err, ret;
2561+
u32 pwm_mode;
25612562
int value;
25622563

25632564
if (amdgpu_in_reset(adev))
@@ -2569,13 +2570,22 @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
25692570
if (err)
25702571
return err;
25712572

2573+
if (value == 0)
2574+
pwm_mode = AMD_FAN_CTRL_NONE;
2575+
else if (value == 1)
2576+
pwm_mode = AMD_FAN_CTRL_MANUAL;
2577+
else if (value == 2)
2578+
pwm_mode = AMD_FAN_CTRL_AUTO;
2579+
else
2580+
return -EINVAL;
2581+
25722582
ret = pm_runtime_get_sync(adev_to_drm(adev)->dev);
25732583
if (ret < 0) {
25742584
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
25752585
return ret;
25762586
}
25772587

2578-
ret = amdgpu_dpm_set_fan_control_mode(adev, value);
2588+
ret = amdgpu_dpm_set_fan_control_mode(adev, pwm_mode);
25792589

25802590
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
25812591
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);

drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,6 @@ int smu_v14_0_check_fw_version(struct smu_context *smu)
229229
smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_2;
230230
break;
231231
case IP_VERSION(14, 0, 0):
232-
if ((smu->smc_fw_version < 0x5d3a00))
233-
dev_warn(smu->adev->dev, "The PMFW version(%x) is behind in this BIOS!\n", smu->smc_fw_version);
234232
smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_0;
235233
break;
236234
default:

drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,10 @@ static int smu_v14_0_0_get_smu_metrics_data(struct smu_context *smu,
261261
*value = metrics->MpipuclkFrequency;
262262
break;
263263
case METRICS_AVERAGE_GFXACTIVITY:
264-
*value = metrics->GfxActivity / 100;
264+
if ((smu->smc_fw_version > 0x5d4600))
265+
*value = metrics->GfxActivity;
266+
else
267+
*value = metrics->GfxActivity / 100;
265268
break;
266269
case METRICS_AVERAGE_VCNACTIVITY:
267270
*value = metrics->VcnActivity / 100;

0 commit comments

Comments
 (0)