Skip to content

Commit a621c78

Browse files
committed
drm/amd/pm: Support RAS fatal error mode1 reset on smu v13_0_0 and v13_0_10
Support RAS fatal error mode1 reset on smu v13_0_0 and v13_0_10. Signed-off-by: Candice Li <[email protected]> Reviewed-by: Evan Quan <[email protected]> Reviewed-by: Hawking Zhang <[email protected]>
1 parent 51c078d commit a621c78

File tree

3 files changed

+48
-3
lines changed

3 files changed

+48
-3
lines changed

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

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1810,15 +1810,51 @@ static int smu_v13_0_0_set_df_cstate(struct smu_context *smu,
18101810
NULL);
18111811
}
18121812

1813+
static void smu_v13_0_0_set_mode1_reset_param(struct smu_context *smu,
1814+
uint32_t supported_version,
1815+
uint32_t *param)
1816+
{
1817+
uint32_t smu_version;
1818+
struct amdgpu_device *adev = smu->adev;
1819+
struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
1820+
1821+
smu_cmn_get_smc_version(smu, NULL, &smu_version);
1822+
1823+
if ((smu_version >= supported_version) &&
1824+
ras && atomic_read(&ras->in_recovery))
1825+
/* Set RAS fatal error reset flag */
1826+
*param = 1 << 16;
1827+
else
1828+
*param = 0;
1829+
}
1830+
18131831
static int smu_v13_0_0_mode1_reset(struct smu_context *smu)
18141832
{
18151833
int ret;
1834+
uint32_t param;
18161835
struct amdgpu_device *adev = smu->adev;
18171836

1818-
if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 10))
1819-
ret = smu_cmn_send_debug_smc_msg(smu, DEBUGSMC_MSG_Mode1Reset);
1820-
else
1837+
switch (adev->ip_versions[MP1_HWIP][0]) {
1838+
case IP_VERSION(13, 0, 0):
1839+
/* SMU 13_0_0 PMFW supports RAS fatal error reset from 78.77 */
1840+
smu_v13_0_0_set_mode1_reset_param(smu, 0x004e4d00, &param);
1841+
1842+
ret = smu_cmn_send_smc_msg_with_param(smu,
1843+
SMU_MSG_Mode1Reset, param, NULL);
1844+
break;
1845+
1846+
case IP_VERSION(13, 0, 10):
1847+
/* SMU 13_0_10 PMFW supports RAS fatal error reset from 80.28 */
1848+
smu_v13_0_0_set_mode1_reset_param(smu, 0x00501c00, &param);
1849+
1850+
ret = smu_cmn_send_debug_smc_msg_with_param(smu,
1851+
DEBUGSMC_MSG_Mode1Reset, param);
1852+
break;
1853+
1854+
default:
18211855
ret = smu_cmn_send_smc_msg(smu, SMU_MSG_Mode1Reset, NULL);
1856+
break;
1857+
}
18221858

18231859
if (!ret)
18241860
msleep(SMU13_MODE1_RESET_WAIT_TIME_IN_MS);

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,12 @@ int smu_cmn_send_debug_smc_msg(struct smu_context *smu,
404404
return __smu_cmn_send_debug_msg(smu, msg, 0);
405405
}
406406

407+
int smu_cmn_send_debug_smc_msg_with_param(struct smu_context *smu,
408+
uint32_t msg, uint32_t param)
409+
{
410+
return __smu_cmn_send_debug_msg(smu, msg, param);
411+
}
412+
407413
int smu_cmn_to_asic_specific_index(struct smu_context *smu,
408414
enum smu_cmn2asic_mapping_type type,
409415
uint32_t index)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ int smu_cmn_send_smc_msg(struct smu_context *smu,
4545
int smu_cmn_send_debug_smc_msg(struct smu_context *smu,
4646
uint32_t msg);
4747

48+
int smu_cmn_send_debug_smc_msg_with_param(struct smu_context *smu,
49+
uint32_t msg, uint32_t param);
50+
4851
int smu_cmn_wait_for_response(struct smu_context *smu);
4952

5053
int smu_cmn_to_asic_specific_index(struct smu_context *smu,

0 commit comments

Comments
 (0)