@@ -1810,15 +1810,51 @@ static int smu_v13_0_0_set_df_cstate(struct smu_context *smu,
1810
1810
NULL );
1811
1811
}
1812
1812
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
+
1813
1831
static int smu_v13_0_0_mode1_reset (struct smu_context * smu )
1814
1832
{
1815
1833
int ret ;
1834
+ uint32_t param ;
1816
1835
struct amdgpu_device * adev = smu -> adev ;
1817
1836
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 :
1821
1855
ret = smu_cmn_send_smc_msg (smu , SMU_MSG_Mode1Reset , NULL );
1856
+ break ;
1857
+ }
1822
1858
1823
1859
if (!ret )
1824
1860
msleep (SMU13_MODE1_RESET_WAIT_TIME_IN_MS );
0 commit comments