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

Commit 7bb0613e authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu/powerplay: enable LEDs on Fiji boards

This enables the LEDs that light up based on DPM states
on some Fiji boards.

bug:
https://bugs.freedesktop.org/show_bug.cgi?id=97590



Reviewed-by: default avatarHuang Rui <ray.huang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ea323f88
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -377,6 +377,7 @@ typedef uint16_t PPSMC_Result;
#define PPSMC_MSG_DisableAvfs                 ((uint16_t) 0x26B)

#define PPSMC_MSG_PerformBtc                  ((uint16_t) 0x26C)
#define PPSMC_MSG_LedConfig                   ((uint16_t) 0x274)
#define PPSMC_MSG_VftTableIsValid             ((uint16_t) 0x275)
#define PPSMC_MSG_UseNewGPIOScheme            ((uint16_t) 0x277)
#define PPSMC_MSG_GetEnabledPsm               ((uint16_t) 0x400)
+34 −0
Original line number Diff line number Diff line
@@ -1758,6 +1758,36 @@ static int fiji_save_default_power_profile(struct pp_hwmgr *hwmgr)

	return 0;
}

static int fiji_setup_dpm_led_config(struct pp_hwmgr *hwmgr)
{
	pp_atomctrl_voltage_table param_led_dpm;
	int result = 0;
	u32 mask = 0;

	result = atomctrl_get_voltage_table_v3(hwmgr,
					       VOLTAGE_TYPE_LEDDPM, VOLTAGE_OBJ_GPIO_LUT,
					       &param_led_dpm);
	if (result == 0) {
		int i, j;
		u32 tmp = param_led_dpm.mask_low;

		for (i = 0, j = 0; i < 32; i++) {
			if (tmp & 1) {
				mask |= (i << (8 * j));
				if (++j >= 3)
					break;
			}
			tmp >>= 1;
		}
	}
	if (mask)
		smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
						    PPSMC_MSG_LedConfig,
						    mask);
	return 0;
}

/**
* Initializes the SMC table and uploads it
*
@@ -1972,6 +2002,10 @@ int fiji_init_smc_table(struct pp_hwmgr *hwmgr)
	PP_ASSERT_WITH_CODE(0 == result,
			"Failed to  populate PM fuses to SMC memory!", return result);

	result = fiji_setup_dpm_led_config(hwmgr);
	PP_ASSERT_WITH_CODE(0 == result,
			    "Failed to setup dpm led config", return result);

	fiji_save_default_power_profile(hwmgr);

	return 0;