Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b4e63f4 authored by Kenneth Feng's avatar Kenneth Feng Committed by Alex Deucher
Browse files

drm/amd/powerplay: change smu_read_sensor sequence in smu



change the smu_read_sensor sequence to:

asic specific sensor read -> smu v11 specific sensor read -> smu v11 common sensor read

Signed-off-by: default avatarKenneth Feng <kenneth.feng@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent bee7b51a
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -413,6 +413,9 @@ int smu_common_read_sensor(struct smu_context *smu, enum amd_pp_sensors sensor,
	struct smu_power_gate *power_gate = &smu_power->power_gate;
	struct smu_power_gate *power_gate = &smu_power->power_gate;
	int ret = 0;
	int ret = 0;


	if(!data || !size)
		return -EINVAL;

	switch (sensor) {
	switch (sensor) {
	case AMDGPU_PP_SENSOR_STABLE_PSTATE_SCLK:
	case AMDGPU_PP_SENSOR_STABLE_PSTATE_SCLK:
		*((uint32_t *)data) = smu->pstate_sclk;
		*((uint32_t *)data) = smu->pstate_sclk;
+2 −2
Original line number Original line Diff line number Diff line
@@ -634,9 +634,9 @@ struct smu_funcs
#define smu_start_thermal_control(smu) \
#define smu_start_thermal_control(smu) \
	((smu)->funcs->start_thermal_control? (smu)->funcs->start_thermal_control((smu)) : 0)
	((smu)->funcs->start_thermal_control? (smu)->funcs->start_thermal_control((smu)) : 0)
#define smu_read_sensor(smu, sensor, data, size) \
#define smu_read_sensor(smu, sensor, data, size) \
	((smu)->funcs->read_sensor? (smu)->funcs->read_sensor((smu), (sensor), (data), (size)) : 0)
#define smu_asic_read_sensor(smu, sensor, data, size) \
	((smu)->ppt_funcs->read_sensor? (smu)->ppt_funcs->read_sensor((smu), (sensor), (data), (size)) : 0)
	((smu)->ppt_funcs->read_sensor? (smu)->ppt_funcs->read_sensor((smu), (sensor), (data), (size)) : 0)
#define smu_smc_read_sensor(smu, sensor, data, size) \
	((smu)->funcs->read_sensor? (smu)->funcs->read_sensor((smu), (sensor), (data), (size)) : -EINVAL)
#define smu_get_power_profile_mode(smu, buf) \
#define smu_get_power_profile_mode(smu, buf) \
	((smu)->ppt_funcs->get_power_profile_mode ? (smu)->ppt_funcs->get_power_profile_mode((smu), buf) : 0)
	((smu)->ppt_funcs->get_power_profile_mode ? (smu)->ppt_funcs->get_power_profile_mode((smu), buf) : 0)
#define smu_set_power_profile_mode(smu, param, param_size) \
#define smu_set_power_profile_mode(smu, param, param_size) \
+4 −1
Original line number Original line Diff line number Diff line
@@ -1386,6 +1386,9 @@ static int navi10_read_sensor(struct smu_context *smu,
	struct smu_table_context *table_context = &smu->smu_table;
	struct smu_table_context *table_context = &smu->smu_table;
	PPTable_t *pptable = table_context->driver_pptable;
	PPTable_t *pptable = table_context->driver_pptable;


	if(!data || !size)
		return -EINVAL;

	switch (sensor) {
	switch (sensor) {
	case AMDGPU_PP_SENSOR_MAX_FAN_RPM:
	case AMDGPU_PP_SENSOR_MAX_FAN_RPM:
		*(uint32_t *)data = pptable->FanMaximumRpm;
		*(uint32_t *)data = pptable->FanMaximumRpm;
@@ -1407,7 +1410,7 @@ static int navi10_read_sensor(struct smu_context *smu,
		*size = 4;
		*size = 4;
		break;
		break;
	default:
	default:
		return -EINVAL;
		ret = smu_smc_read_sensor(smu, sensor, data, size);
	}
	}


	return ret;
	return ret;
+4 −4
Original line number Original line Diff line number Diff line
@@ -1230,6 +1230,10 @@ static int smu_v11_0_read_sensor(struct smu_context *smu,
				 void *data, uint32_t *size)
				 void *data, uint32_t *size)
{
{
	int ret = 0;
	int ret = 0;

	if(!data || !size)
		return -EINVAL;

	switch (sensor) {
	switch (sensor) {
	case AMDGPU_PP_SENSOR_GFX_MCLK:
	case AMDGPU_PP_SENSOR_GFX_MCLK:
		ret = smu_get_current_clk_freq(smu, SMU_UCLK, (uint32_t *)data);
		ret = smu_get_current_clk_freq(smu, SMU_UCLK, (uint32_t *)data);
@@ -1252,10 +1256,6 @@ static int smu_v11_0_read_sensor(struct smu_context *smu,
		break;
		break;
	}
	}


	/* try get sensor data by asic */
	if (ret)
		ret = smu_asic_read_sensor(smu, sensor, data, size);

	if (ret)
	if (ret)
		*size = 0;
		*size = 0;


+4 −1
Original line number Original line Diff line number Diff line
@@ -3011,6 +3011,9 @@ static int vega20_read_sensor(struct smu_context *smu,
	struct smu_table_context *table_context = &smu->smu_table;
	struct smu_table_context *table_context = &smu->smu_table;
	PPTable_t *pptable = table_context->driver_pptable;
	PPTable_t *pptable = table_context->driver_pptable;


	if(!data || !size)
		return -EINVAL;

	switch (sensor) {
	switch (sensor) {
	case AMDGPU_PP_SENSOR_MAX_FAN_RPM:
	case AMDGPU_PP_SENSOR_MAX_FAN_RPM:
		*(uint32_t *)data = pptable->FanMaximumRpm;
		*(uint32_t *)data = pptable->FanMaximumRpm;
@@ -3034,7 +3037,7 @@ static int vega20_read_sensor(struct smu_context *smu,
		*size = 4;
		*size = 4;
		break;
		break;
	default:
	default:
		return -EINVAL;
		ret = smu_smc_read_sensor(smu, sensor, data, size);
	}
	}


	return ret;
	return ret;