Commit 048b9b0f authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher
Browse files

drm/amd/powerplay: support BOOTUP_DEFAULT power profile mode



This can avoid unexpected profile mode change after running
compute workload.

Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent baf3c982
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -127,12 +127,13 @@ enum amd_pp_task {
};

enum PP_SMC_POWER_PROFILE {
	PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x0,
	PP_SMC_POWER_PROFILE_POWERSAVING  = 0x1,
	PP_SMC_POWER_PROFILE_VIDEO        = 0x2,
	PP_SMC_POWER_PROFILE_VR           = 0x3,
	PP_SMC_POWER_PROFILE_COMPUTE      = 0x4,
	PP_SMC_POWER_PROFILE_CUSTOM       = 0x5,
	PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT = 0x0,
	PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x1,
	PP_SMC_POWER_PROFILE_POWERSAVING  = 0x2,
	PP_SMC_POWER_PROFILE_VIDEO        = 0x3,
	PP_SMC_POWER_PROFILE_VR           = 0x4,
	PP_SMC_POWER_PROFILE_COMPUTE      = 0x5,
	PP_SMC_POWER_PROFILE_CUSTOM       = 0x6,
};

enum {
+13 −11
Original line number Diff line number Diff line
@@ -64,17 +64,19 @@ static int ci_set_asic_special_caps(struct pp_hwmgr *hwmgr);

static void hwmgr_init_workload_prority(struct pp_hwmgr *hwmgr)
{
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_FULLSCREEN3D] = 2;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_POWERSAVING] = 0;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_VIDEO] = 1;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_VR] = 3;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_COMPUTE] = 4;

	hwmgr->workload_setting[0] = PP_SMC_POWER_PROFILE_POWERSAVING;
	hwmgr->workload_setting[1] = PP_SMC_POWER_PROFILE_VIDEO;
	hwmgr->workload_setting[2] = PP_SMC_POWER_PROFILE_FULLSCREEN3D;
	hwmgr->workload_setting[3] = PP_SMC_POWER_PROFILE_VR;
	hwmgr->workload_setting[4] = PP_SMC_POWER_PROFILE_COMPUTE;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT] = 0;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_FULLSCREEN3D] = 1;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_POWERSAVING] = 2;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_VIDEO] = 3;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_VR] = 4;
	hwmgr->workload_prority[PP_SMC_POWER_PROFILE_COMPUTE] = 5;

	hwmgr->workload_setting[0] = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
	hwmgr->workload_setting[1] = PP_SMC_POWER_PROFILE_FULLSCREEN3D;
	hwmgr->workload_setting[2] = PP_SMC_POWER_PROFILE_POWERSAVING;
	hwmgr->workload_setting[3] = PP_SMC_POWER_PROFILE_VIDEO;
	hwmgr->workload_setting[4] = PP_SMC_POWER_PROFILE_VR;
	hwmgr->workload_setting[5] = PP_SMC_POWER_PROFILE_COMPUTE;
}

int hwmgr_early_init(struct pp_hwmgr *hwmgr)
+5 −3
Original line number Diff line number Diff line
@@ -77,8 +77,9 @@
#define PCIE_BUS_CLK                10000
#define TCLK                        (PCIE_BUS_CLK / 10)

static const struct profile_mode_setting smu7_profiling[6] =
					{{1, 0, 100, 30, 1, 0, 100, 10},
static const struct profile_mode_setting smu7_profiling[7] =
					{{0, 0, 0, 0, 0, 0, 0, 0},
					 {1, 0, 100, 30, 1, 0, 100, 10},
					 {1, 10, 0, 30, 0, 0, 0, 0},
					 {0, 0, 0, 0, 1, 10, 16, 31},
					 {1, 0, 11, 50, 1, 0, 100, 10},
@@ -4885,7 +4886,8 @@ static int smu7_get_power_profile_mode(struct pp_hwmgr *hwmgr, char *buf)
	uint32_t i, size = 0;
	uint32_t len;

	static const char *profile_name[6] = {"3D_FULL_SCREEN",
	static const char *profile_name[7] = {"BOOTUP_DEFAULT",
					"3D_FULL_SCREEN",
					"POWER_SAVING",
					"VIDEO",
					"VR",
+7 −5
Original line number Diff line number Diff line
@@ -804,9 +804,9 @@ static int vega10_hwmgr_backend_init(struct pp_hwmgr *hwmgr)

	hwmgr->backend = data;

	hwmgr->workload_mask = 1 << hwmgr->workload_prority[PP_SMC_POWER_PROFILE_VIDEO];
	hwmgr->power_profile_mode = PP_SMC_POWER_PROFILE_VIDEO;
	hwmgr->default_power_profile_mode = PP_SMC_POWER_PROFILE_VIDEO;
	hwmgr->workload_mask = 1 << hwmgr->workload_prority[PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT];
	hwmgr->power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
	hwmgr->default_power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;

	vega10_set_default_registry_data(hwmgr);
	data->disable_dpm_mask = 0xff;
@@ -4664,13 +4664,15 @@ static int vega10_get_power_profile_mode(struct pp_hwmgr *hwmgr, char *buf)
{
	struct vega10_hwmgr *data = hwmgr->backend;
	uint32_t i, size = 0;
	static const uint8_t profile_mode_setting[5][4] = {{70, 60, 1, 3,},
	static const uint8_t profile_mode_setting[6][4] = {{70, 60, 0, 0,},
						{70, 60, 1, 3,},
						{90, 60, 0, 0,},
						{70, 60, 0, 0,},
						{70, 90, 0, 0,},
						{30, 60, 0, 6,},
						};
	static const char *profile_name[6] = {"3D_FULL_SCREEN",
	static const char *profile_name[7] = {"BOOTUP_DEFAULT",
					"3D_FULL_SCREEN",
					"POWER_SAVING",
					"VIDEO",
					"VR",
+7 −3
Original line number Diff line number Diff line
@@ -390,9 +390,9 @@ static int vega20_hwmgr_backend_init(struct pp_hwmgr *hwmgr)

	hwmgr->backend = data;

	hwmgr->workload_mask = 1 << hwmgr->workload_prority[PP_SMC_POWER_PROFILE_VIDEO];
	hwmgr->power_profile_mode = PP_SMC_POWER_PROFILE_VIDEO;
	hwmgr->default_power_profile_mode = PP_SMC_POWER_PROFILE_VIDEO;
	hwmgr->workload_mask = 1 << hwmgr->workload_prority[PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT];
	hwmgr->power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
	hwmgr->default_power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;

	vega20_set_default_registry_data(hwmgr);

@@ -3251,6 +3251,9 @@ static int conv_power_profile_to_pplib_workload(int power_profile)
	int pplib_workload = 0;

	switch (power_profile) {
	case PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT:
		pplib_workload = WORKLOAD_DEFAULT_BIT;
		break;
	case PP_SMC_POWER_PROFILE_FULLSCREEN3D:
		pplib_workload = WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT;
		break;
@@ -3280,6 +3283,7 @@ static int vega20_get_power_profile_mode(struct pp_hwmgr *hwmgr, char *buf)
	uint32_t i, size = 0;
	uint16_t workload_type = 0;
	static const char *profile_name[] = {
					"BOOTUP_DEFAULT",
					"3D_FULL_SCREEN",
					"POWER_SAVING",
					"VIDEO",
Loading