Commit bbc16008 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher
Browse files

drm/amdgpu: Add gmc interface to request NPS mode



Add a common interface in GMC to request NPS mode through PSP. Also add
a variable in hive and gmc control to track the last requested mode.

Signed-off-by: default avatarRajneesh Bhardwaj <rajneesh.bhardwaj@amd.com>
Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarFeifei Xu <Feifei.Xu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b1cf3ddc
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -1235,3 +1235,19 @@ int amdgpu_gmc_get_nps_memranges(struct amdgpu_device *adev,

	return ret;
}

int amdgpu_gmc_request_memory_partition(struct amdgpu_device *adev,
					int nps_mode)
{
	/* Not supported on VF devices and APUs */
	if (amdgpu_sriov_vf(adev) || (adev->flags & AMD_IS_APU))
		return -EOPNOTSUPP;

	if (!adev->psp.funcs) {
		dev_err(adev->dev,
			"PSP interface not available for nps mode change request");
		return -EINVAL;
	}

	return psp_memory_partition(&adev->psp, nps_mode);
}
+6 −0
Original line number Diff line number Diff line
@@ -161,6 +161,9 @@ struct amdgpu_gmc_funcs {

	enum amdgpu_memory_partition (*query_mem_partition_mode)(
		struct amdgpu_device *adev);
	/* Request NPS mode */
	int (*request_mem_partition_mode)(struct amdgpu_device *adev,
					  int nps_mode);
};

struct amdgpu_xgmi_ras {
@@ -304,6 +307,7 @@ struct amdgpu_gmc {
	struct amdgpu_mem_partition_info *mem_partitions;
	uint8_t num_mem_partitions;
	const struct amdgpu_gmc_funcs	*gmc_funcs;
	enum amdgpu_memory_partition	requested_nps_mode;

	struct amdgpu_xgmi xgmi;
	struct amdgpu_irq_src	ecc_irq;
@@ -454,4 +458,6 @@ int amdgpu_gmc_get_nps_memranges(struct amdgpu_device *adev,
				 struct amdgpu_mem_partition_info *mem_ranges,
				 int exp_ranges);

int amdgpu_gmc_request_memory_partition(struct amdgpu_device *adev,
					int nps_mode);
#endif
+1 −0
Original line number Diff line number Diff line
@@ -667,6 +667,7 @@ struct amdgpu_hive_info *amdgpu_get_xgmi_hive(struct amdgpu_device *adev)
	task_barrier_init(&hive->tb);
	hive->pstate = AMDGPU_XGMI_PSTATE_UNKNOWN;
	hive->hi_req_gpu = NULL;
	atomic_set(&hive->requested_nps_mode, UNKNOWN_MEMORY_PARTITION_MODE);

	/*
	 * hive pstate on boot is high in vega20 so we have to go to low
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ struct amdgpu_hive_info {
	atomic_t ras_recovery;
	struct ras_event_manager event_mgr;
	struct work_struct reset_on_init_work;
	atomic_t requested_nps_mode;
};

struct amdgpu_pcs_ras_field {