Commit b3cdb192 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-fixes-6.8-2024-03-07' of...

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: default avatarDave Airlie <airlied@redhat.com>

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240307143318.2869884-1-alexander.deucher@amd.com
parents 3a397b13 0dafaf65
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -6539,7 +6539,7 @@ static void amdgpu_dm_connector_funcs_force(struct drm_connector *connector)
	struct edid *edid;
	struct i2c_adapter *ddc;

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

				amdgpu_dm_connector->min_vfreq = range->min_vfreq;
				amdgpu_dm_connector->max_vfreq = range->max_vfreq;
				amdgpu_dm_connector->pixel_clock_mhz =
					range->pixel_clock_mhz * 10;

				connector->display_info.monitor_range.min_vfreq = range->min_vfreq;
				connector->display_info.monitor_range.max_vfreq = range->max_vfreq;

				if (edid->revision >= 4) {
					if (data->pad2 & DRM_EDID_RANGE_OFFSET_MIN_VFREQ)
						connector->display_info.monitor_range.min_vfreq += 255;
					if (data->pad2 & DRM_EDID_RANGE_OFFSET_MAX_VFREQ)
						connector->display_info.monitor_range.max_vfreq += 255;
				}

				amdgpu_dm_connector->min_vfreq =
					connector->display_info.monitor_range.min_vfreq;
				amdgpu_dm_connector->max_vfreq =
					connector->display_info.monitor_range.max_vfreq;
				amdgpu_dm_connector->pixel_clock_mhz =
					range->pixel_clock_mhz * 10;

				break;
			}

+11 −1
Original line number Diff line number Diff line
@@ -2558,6 +2558,7 @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
{
	struct amdgpu_device *adev = dev_get_drvdata(dev);
	int err, ret;
	u32 pwm_mode;
	int value;

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

	if (value == 0)
		pwm_mode = AMD_FAN_CTRL_NONE;
	else if (value == 1)
		pwm_mode = AMD_FAN_CTRL_MANUAL;
	else if (value == 2)
		pwm_mode = AMD_FAN_CTRL_AUTO;
	else
		return -EINVAL;

	ret = pm_runtime_get_sync(adev_to_drm(adev)->dev);
	if (ret < 0) {
		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
		return ret;
	}

	ret = amdgpu_dpm_set_fan_control_mode(adev, value);
	ret = amdgpu_dpm_set_fan_control_mode(adev, pwm_mode);

	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
+0 −2
Original line number Diff line number Diff line
@@ -229,8 +229,6 @@ int smu_v14_0_check_fw_version(struct smu_context *smu)
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_2;
		break;
	case IP_VERSION(14, 0, 0):
		if ((smu->smc_fw_version < 0x5d3a00))
			dev_warn(smu->adev->dev, "The PMFW version(%x) is behind in this BIOS!\n", smu->smc_fw_version);
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_0;
		break;
	default:
+4 −1
Original line number Diff line number Diff line
@@ -261,6 +261,9 @@ static int smu_v14_0_0_get_smu_metrics_data(struct smu_context *smu,
		*value = metrics->MpipuclkFrequency;
		break;
	case METRICS_AVERAGE_GFXACTIVITY:
		if ((smu->smc_fw_version > 0x5d4600))
			*value = metrics->GfxActivity;
		else
			*value = metrics->GfxActivity / 100;
		break;
	case METRICS_AVERAGE_VCNACTIVITY: