Skip to content

Commit f5346a1

Browse files
Gangliang Xiealexdeucher
authored andcommitted
drm/amd/pm: add smu ras driver framework
add functions to get smu ras driver Signed-off-by: Gangliang Xie <ganglxie@amd.com> Signed-off-by: Yang Wang <kevinyang.wang@amd.com> Reviewed-by: Tao Zhou <tao.zhou1@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 77dbd7c commit f5346a1

7 files changed

Lines changed: 49 additions & 0 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,7 @@ struct amdgpu_ras {
620620

621621
/* Disable/Enable uniras switch */
622622
bool uniras_enabled;
623+
const struct ras_smu_drv *ras_smu_drv;
623624
};
624625

625626
struct ras_fs_data {

drivers/gpu/drm/amd/pm/amdgpu_dpm.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2122,3 +2122,10 @@ ssize_t amdgpu_dpm_get_xcp_metrics(struct amdgpu_device *adev, int xcp_id,
21222122

21232123
return ret;
21242124
}
2125+
2126+
const struct ras_smu_drv *amdgpu_dpm_get_ras_smu_driver(struct amdgpu_device *adev)
2127+
{
2128+
void *pp_handle = adev->powerplay.pp_handle;
2129+
2130+
return smu_get_ras_smu_driver(pp_handle);
2131+
}

drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,5 +612,6 @@ int amdgpu_dpm_reset_vcn(struct amdgpu_device *adev, uint32_t inst_mask);
612612
bool amdgpu_dpm_reset_vcn_is_supported(struct amdgpu_device *adev);
613613
bool amdgpu_dpm_is_temp_metrics_supported(struct amdgpu_device *adev,
614614
enum smu_temp_metric_type type);
615+
const struct ras_smu_drv *amdgpu_dpm_get_ras_smu_driver(struct amdgpu_device *adev);
615616

616617
#endif

drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2803,6 +2803,17 @@ const struct amdgpu_ip_block_version smu_v14_0_ip_block = {
28032803
.funcs = &smu_ip_funcs,
28042804
};
28052805

2806+
const struct ras_smu_drv *smu_get_ras_smu_driver(void *handle)
2807+
{
2808+
struct smu_context *smu = (struct smu_context *)handle;
2809+
const struct ras_smu_drv *tmp = NULL;
2810+
int ret;
2811+
2812+
ret = smu_get_ras_smu_drv(smu, &tmp);
2813+
2814+
return ret ? NULL : tmp;
2815+
}
2816+
28062817
static int smu_load_microcode(void *handle)
28072818
{
28082819
struct smu_context *smu = handle;

drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,6 +1531,12 @@ struct pptable_funcs {
15311531
int (*ras_send_msg)(struct smu_context *smu,
15321532
enum smu_message_type msg, uint32_t param, uint32_t *read_arg);
15331533

1534+
1535+
/**
1536+
* @get_ras_smu_drv: Get RAS smu driver interface
1537+
* Return: ras_smu_drv *
1538+
*/
1539+
int (*get_ras_smu_drv)(struct smu_context *smu, const struct ras_smu_drv **ras_smu_drv);
15341540
};
15351541

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

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

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3905,6 +3905,26 @@ static void smu_v13_0_6_set_temp_funcs(struct smu_context *smu)
39053905
== IP_VERSION(13, 0, 12)) ? &smu_v13_0_12_temp_funcs : NULL;
39063906
}
39073907

3908+
static int smu_v13_0_6_get_ras_smu_drv(struct smu_context *smu, const struct ras_smu_drv **ras_smu_drv)
3909+
{
3910+
if (!ras_smu_drv)
3911+
return -EINVAL;
3912+
3913+
if (amdgpu_sriov_vf(smu->adev))
3914+
return -EOPNOTSUPP;
3915+
3916+
switch (amdgpu_ip_version(smu->adev, MP1_HWIP, 0)) {
3917+
case IP_VERSION(13, 0, 12):
3918+
*ras_smu_drv = &smu_v13_0_12_ras_smu_drv;
3919+
break;
3920+
default:
3921+
*ras_smu_drv = NULL;
3922+
break;
3923+
}
3924+
3925+
return 0;
3926+
}
3927+
39083928
static const struct pptable_funcs smu_v13_0_6_ppt_funcs = {
39093929
/* init dpm */
39103930
.get_allowed_feature_mask = smu_v13_0_6_get_allowed_feature_mask,
@@ -3964,6 +3984,7 @@ static const struct pptable_funcs smu_v13_0_6_ppt_funcs = {
39643984
.dpm_reset_vcn = smu_v13_0_6_reset_vcn,
39653985
.post_init = smu_v13_0_6_post_init,
39663986
.ras_send_msg = smu_v13_0_6_ras_send_msg,
3987+
.get_ras_smu_drv = smu_v13_0_6_get_ras_smu_drv,
39673988
};
39683989

39693990
void smu_v13_0_6_set_ppt_funcs(struct smu_context *smu)

drivers/gpu/drm/amd/pm/swsmu/smu_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
#define smu_is_asic_wbrf_supported(smu) smu_ppt_funcs(is_asic_wbrf_supported, false, smu)
101101
#define smu_enable_uclk_shadow(smu, enable) smu_ppt_funcs(enable_uclk_shadow, 0, smu, enable)
102102
#define smu_set_wbrf_exclusion_ranges(smu, freq_band_range) smu_ppt_funcs(set_wbrf_exclusion_ranges, -EOPNOTSUPP, smu, freq_band_range)
103+
#define smu_get_ras_smu_drv(smu, ras_smu_drv) smu_ppt_funcs(get_ras_smu_drv, -EOPNOTSUPP, smu, ras_smu_drv)
103104

104105
#endif
105106
#endif

0 commit comments

Comments
 (0)