@@ -770,6 +770,33 @@ static void vcn_v2_5_enable_clock_gating(struct amdgpu_device *adev)
770
770
}
771
771
}
772
772
773
+ static void vcn_v2_6_enable_ras (struct amdgpu_device * adev , int inst_idx ,
774
+ bool indirect )
775
+ {
776
+ uint32_t tmp ;
777
+
778
+ if (adev -> ip_versions [UVD_HWIP ][0 ] != IP_VERSION (2 , 6 , 0 ))
779
+ return ;
780
+
781
+ tmp = VCN_RAS_CNTL__VCPU_VCODEC_REARM_MASK |
782
+ VCN_RAS_CNTL__VCPU_VCODEC_IH_EN_MASK |
783
+ VCN_RAS_CNTL__VCPU_VCODEC_PMI_EN_MASK |
784
+ VCN_RAS_CNTL__VCPU_VCODEC_STALL_EN_MASK ;
785
+ WREG32_SOC15_DPG_MODE (inst_idx ,
786
+ SOC15_DPG_MODE_OFFSET (VCN , 0 , mmVCN_RAS_CNTL ),
787
+ tmp , 0 , indirect );
788
+
789
+ tmp = UVD_VCPU_INT_EN__RASCNTL_VCPU_VCODEC_EN_MASK ;
790
+ WREG32_SOC15_DPG_MODE (inst_idx ,
791
+ SOC15_DPG_MODE_OFFSET (VCN , 0 , mmUVD_VCPU_INT_EN ),
792
+ tmp , 0 , indirect );
793
+
794
+ tmp = UVD_SYS_INT_EN__RASCNTL_VCPU_VCODEC_EN_MASK ;
795
+ WREG32_SOC15_DPG_MODE (inst_idx ,
796
+ SOC15_DPG_MODE_OFFSET (VCN , 0 , mmUVD_SYS_INT_EN ),
797
+ tmp , 0 , indirect );
798
+ }
799
+
773
800
static int vcn_v2_5_start_dpg_mode (struct amdgpu_device * adev , int inst_idx , bool indirect )
774
801
{
775
802
volatile struct amdgpu_fw_shared * fw_shared = adev -> vcn .inst [inst_idx ].fw_shared .cpu_addr ;
@@ -849,6 +876,8 @@ static int vcn_v2_5_start_dpg_mode(struct amdgpu_device *adev, int inst_idx, boo
849
876
WREG32_SOC15_DPG_MODE (inst_idx , SOC15_DPG_MODE_OFFSET (
850
877
VCN , 0 , mmUVD_LMI_CTRL2 ), 0 , 0 , indirect );
851
878
879
+ vcn_v2_6_enable_ras (adev , inst_idx , indirect );
880
+
852
881
/* unblock VCPU register access */
853
882
WREG32_SOC15_DPG_MODE (inst_idx , SOC15_DPG_MODE_OFFSET (
854
883
VCN , 0 , mmUVD_RB_ARB_CTRL ), 0 , 0 , indirect );
0 commit comments