Commit f5346a17 authored by Gangliang Xie's avatar Gangliang Xie Committed by Alex Deucher
Browse files

drm/amd/pm: add smu ras driver framework



add functions to get smu ras driver

Signed-off-by: default avatarGangliang Xie <ganglxie@amd.com>
Signed-off-by: default avatarYang Wang <kevinyang.wang@amd.com>
Reviewed-by: default avatarTao Zhou <tao.zhou1@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 77dbd7c0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -620,6 +620,7 @@ struct amdgpu_ras {

	/* Disable/Enable uniras switch */
	bool uniras_enabled;
	const struct ras_smu_drv *ras_smu_drv;
};

struct ras_fs_data {
+7 −0
Original line number Diff line number Diff line
@@ -2122,3 +2122,10 @@ ssize_t amdgpu_dpm_get_xcp_metrics(struct amdgpu_device *adev, int xcp_id,

	return ret;
}

const struct ras_smu_drv *amdgpu_dpm_get_ras_smu_driver(struct amdgpu_device *adev)
{
	void *pp_handle = adev->powerplay.pp_handle;

	return smu_get_ras_smu_driver(pp_handle);
}
+1 −0
Original line number Diff line number Diff line
@@ -612,5 +612,6 @@ int amdgpu_dpm_reset_vcn(struct amdgpu_device *adev, uint32_t inst_mask);
bool amdgpu_dpm_reset_vcn_is_supported(struct amdgpu_device *adev);
bool amdgpu_dpm_is_temp_metrics_supported(struct amdgpu_device *adev,
					  enum smu_temp_metric_type type);
const struct ras_smu_drv *amdgpu_dpm_get_ras_smu_driver(struct amdgpu_device *adev);

#endif
+11 −0
Original line number Diff line number Diff line
@@ -2803,6 +2803,17 @@ const struct amdgpu_ip_block_version smu_v14_0_ip_block = {
	.funcs = &smu_ip_funcs,
};

const struct ras_smu_drv *smu_get_ras_smu_driver(void *handle)
{
	struct smu_context *smu = (struct smu_context *)handle;
	const struct ras_smu_drv *tmp = NULL;
	int ret;

	ret = smu_get_ras_smu_drv(smu, &tmp);

	return ret ? NULL : tmp;
}

static int smu_load_microcode(void *handle)
{
	struct smu_context *smu = handle;
+7 −0
Original line number Diff line number Diff line
@@ -1531,6 +1531,12 @@ struct pptable_funcs {
	int (*ras_send_msg)(struct smu_context *smu,
			    enum smu_message_type msg, uint32_t param, uint32_t *read_arg);


	/**
	 * @get_ras_smu_drv: Get RAS smu driver interface
	 * Return: ras_smu_drv *
	 */
	int (*get_ras_smu_drv)(struct smu_context *smu, const struct ras_smu_drv **ras_smu_drv);
};

typedef enum {
@@ -1795,6 +1801,7 @@ int smu_set_pm_policy(struct smu_context *smu, enum pp_pm_policy p_type,
		      int level);
ssize_t smu_get_pm_policy_info(struct smu_context *smu,
			       enum pp_pm_policy p_type, char *sysbuf);
const struct ras_smu_drv *smu_get_ras_smu_driver(void *handle);

int amdgpu_smu_ras_send_msg(struct amdgpu_device *adev, enum smu_message_type msg,
			    uint32_t param, uint32_t *readarg);
Loading