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

drm/amd/pm: disable pcie speed switching on Intel platform for smu v14.0.2/3



disable pcie speed switching on Intel platform for smu v14.0.2/3
based on Intel's requirement.
v2: align the setting with smu v13.

Signed-off-by: default avatarKenneth Feng <kenneth.feng@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.11.x
parent cdc6705f
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -1465,15 +1465,35 @@ static int smu_v14_0_2_update_pcie_parameters(struct smu_context *smu,
	struct smu_14_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
	struct smu_14_0_pcie_table *pcie_table =
				&dpm_context->dpm_tables.pcie_table;
	int num_of_levels = pcie_table->num_of_link_levels;
	uint32_t smu_pcie_arg;
	int ret, i;

	for (i = 0; i < pcie_table->num_of_link_levels; i++) {
	if (!num_of_levels)
		return 0;

	if (!(smu->adev->pm.pp_feature & PP_PCIE_DPM_MASK)) {
		if (pcie_table->pcie_gen[num_of_levels - 1] < pcie_gen_cap)
			pcie_gen_cap = pcie_table->pcie_gen[num_of_levels - 1];

		if (pcie_table->pcie_lane[num_of_levels - 1] < pcie_width_cap)
			pcie_width_cap = pcie_table->pcie_lane[num_of_levels - 1];

		/* Force all levels to use the same settings */
		for (i = 0; i < num_of_levels; i++) {
			pcie_table->pcie_gen[i] = pcie_gen_cap;
			pcie_table->pcie_lane[i] = pcie_width_cap;
		}
	} else {
		for (i = 0; i < num_of_levels; i++) {
			if (pcie_table->pcie_gen[i] > pcie_gen_cap)
				pcie_table->pcie_gen[i] = pcie_gen_cap;
			if (pcie_table->pcie_lane[i] > pcie_width_cap)
				pcie_table->pcie_lane[i] = pcie_width_cap;
		}
	}

	for (i = 0; i < num_of_levels; i++) {
		smu_pcie_arg = i << 16;
		smu_pcie_arg |= pcie_table->pcie_gen[i] << 8;
		smu_pcie_arg |= pcie_table->pcie_lane[i];