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

Commit c5a44849 authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher
Browse files

drm/amd/pp: Add OVERDRIVE support on Vega10 (v2)



when bit14 in module parameter ppfeaturemask was set.
od feature will be enabled on Vega10 except vbios not support.

user can read od range by reading sysfs pp_od_clk_voltage,
cat pp_od_clk_voltage
OD_SCLK:
0:        852Mhz        800mV
1:        991Mhz        900mV
2:       1138Mhz        950mV
3:       1269Mhz       1000mV
4:       1348Mhz       1050mV
5:       1399Mhz       1100mV
6:       1440Mhz       1150mV
7:       1500Mhz       1200mV
OD_MCLK:
0:        167Mhz        800mV
1:        500Mhz        800mV
2:        800Mhz        950mV
3:        945Mhz       1000mV
OD_RANGE:
SCLK:     852MHz       2200MHz
MCLK:     167MHz       1500MHz
VDDC:     800mV        1200mV

and can configure the clock/voltage by writing pp_od_clk_voltage
for example:

echo "s 0 900 820">pp_od_clk_voltage to change the sclk/vddc
to 900MHz and 820 mV in dpm level0.

echo "r" to change the clk/voltage to  default value.

echo "c">pp_od_clk_voltage
to commit the change

v2: squash in warning fix (Alex)

Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarRex Zhu <Rex.Zhu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ba9ca088
Loading
Loading
Loading
Loading
+375 −344

File changed.

Preview size limit exceeded, changes collapsed.

+14 −12
Original line number Diff line number Diff line
@@ -282,15 +282,21 @@ struct vega10_registry_data {

struct vega10_odn_clock_voltage_dependency_table {
	uint32_t count;
	struct phm_ppt_v1_clock_voltage_dependency_record
		entries[MAX_REGULAR_DPM_NUMBER];
	struct phm_ppt_v1_clock_voltage_dependency_record entries[MAX_REGULAR_DPM_NUMBER];
};

struct vega10_odn_vddc_lookup_table {
	uint32_t count;
	struct phm_ppt_v1_voltage_lookup_record entries[MAX_REGULAR_DPM_NUMBER];
};

struct vega10_odn_dpm_table {
	struct phm_odn_clock_levels		odn_core_clock_dpm_levels;
	struct phm_odn_clock_levels		odn_memory_clock_dpm_levels;
	struct vega10_odn_clock_voltage_dependency_table		vdd_dependency_on_sclk;
	struct vega10_odn_clock_voltage_dependency_table		vdd_dependency_on_mclk;
	struct vega10_odn_clock_voltage_dependency_table vdd_dep_on_sclk;
	struct vega10_odn_clock_voltage_dependency_table vdd_dep_on_mclk;
	struct vega10_odn_clock_voltage_dependency_table vdd_dep_on_socclk;
	struct vega10_odn_vddc_lookup_table vddc_lookup_table;
	uint32_t max_vddc;
	uint32_t min_vddc;
};

struct vega10_odn_fan_table {
@@ -368,12 +374,8 @@ struct vega10_hwmgr {
	bool                           need_long_memory_training;

	/* Internal settings to apply the application power optimization parameters */
	bool                           apply_optimized_settings;
	uint32_t                       disable_dpm_mask;

	/* ---- Overdrive next setting ---- */
	uint32_t                       apply_overdrive_next_settings_mask;

	/* ---- SMU9 ---- */
	struct smu_features            smu_features[GNLD_FEATURES_MAX];
	struct vega10_smc_state_table  smc_state_table;
+1 −5
Original line number Diff line number Diff line
@@ -377,11 +377,7 @@ struct phm_clocks {
#define DPMTABLE_UPDATE_SCLK        0x00000004
#define DPMTABLE_UPDATE_MCLK        0x00000008
#define DPMTABLE_OD_UPDATE_VDDC     0x00000010

/* To determine if sclk and mclk are in overdrive state */
#define SCLK_OVERDRIVE_ENABLED           0x00000001
#define MCLK_OVERDRIVE_ENABLED           0x00000002
#define VDDC_OVERDRIVE_ENABLED           0x00000010
#define DPMTABLE_UPDATE_SOCCLK      0x00000020

struct phm_odn_performance_level {
	uint32_t clock;