@@ -190,6 +190,13 @@ static int jpeg_v5_0_1_sw_init(struct amdgpu_ip_block *ip_block)
190190 if (r )
191191 return r ;
192192
193+ if (!amdgpu_sriov_vf (adev )) {
194+ adev -> jpeg .supported_reset = AMDGPU_RESET_TYPE_PER_QUEUE ;
195+ r = amdgpu_jpeg_sysfs_reset_mask_init (adev );
196+ if (r )
197+ return r ;
198+ }
199+
193200 return 0 ;
194201}
195202
@@ -209,6 +216,9 @@ static int jpeg_v5_0_1_sw_fini(struct amdgpu_ip_block *ip_block)
209216 if (r )
210217 return r ;
211218
219+ if (!amdgpu_sriov_vf (adev ))
220+ amdgpu_jpeg_sysfs_reset_mask_fini (adev );
221+
212222 r = amdgpu_jpeg_sw_fini (adev );
213223
214224 return r ;
@@ -650,6 +660,45 @@ static int jpeg_v5_0_1_process_interrupt(struct amdgpu_device *adev,
650660 return 0 ;
651661}
652662
663+ static void jpeg_v5_0_1_core_stall_reset (struct amdgpu_ring * ring )
664+ {
665+ struct amdgpu_device * adev = ring -> adev ;
666+ int jpeg_inst = GET_INST (JPEG , ring -> me );
667+ int reg_offset = ring -> pipe ? jpeg_v5_0_1_core_reg_offset (ring -> pipe ) : 0 ;
668+
669+ WREG32_SOC15_OFFSET (JPEG , jpeg_inst ,
670+ regUVD_JMI0_UVD_JMI_CLIENT_STALL ,
671+ reg_offset , 0x1F );
672+ SOC15_WAIT_ON_RREG (JPEG , jpeg_inst ,
673+ regUVD_JMI0_UVD_JMI_CLIENT_CLEAN_STATUS ,
674+ 0x1F , 0x1F );
675+ WREG32_SOC15_OFFSET (JPEG , jpeg_inst ,
676+ regUVD_JMI0_JPEG_LMI_DROP ,
677+ reg_offset , 0x1F );
678+ WREG32_SOC15_OFFSET (JPEG , jpeg_inst ,
679+ regJPEG_CORE_RST_CTRL ,
680+ reg_offset , 1 << ring -> pipe );
681+ WREG32_SOC15_OFFSET (JPEG , jpeg_inst ,
682+ regUVD_JMI0_UVD_JMI_CLIENT_STALL ,
683+ reg_offset , 0x00 );
684+ WREG32_SOC15_OFFSET (JPEG , jpeg_inst ,
685+ regUVD_JMI0_JPEG_LMI_DROP ,
686+ reg_offset , 0x00 );
687+ WREG32_SOC15_OFFSET (JPEG , jpeg_inst ,
688+ regJPEG_CORE_RST_CTRL ,
689+ reg_offset , 0x00 );
690+ }
691+
692+ static int jpeg_v5_0_1_ring_reset (struct amdgpu_ring * ring , unsigned int vmid )
693+ {
694+ if (amdgpu_sriov_vf (ring -> adev ))
695+ return - EOPNOTSUPP ;
696+
697+ jpeg_v5_0_1_core_stall_reset (ring );
698+ jpeg_v5_0_1_init_jrbc (ring );
699+ return amdgpu_ring_test_helper (ring );
700+ }
701+
653702static const struct amd_ip_funcs jpeg_v5_0_1_ip_funcs = {
654703 .name = "jpeg_v5_0_1" ,
655704 .early_init = jpeg_v5_0_1_early_init ,
@@ -699,6 +748,7 @@ static const struct amdgpu_ring_funcs jpeg_v5_0_1_dec_ring_vm_funcs = {
699748 .emit_wreg = jpeg_v4_0_3_dec_ring_emit_wreg ,
700749 .emit_reg_wait = jpeg_v4_0_3_dec_ring_emit_reg_wait ,
701750 .emit_reg_write_reg_wait = amdgpu_ring_emit_reg_write_reg_wait_helper ,
751+ .reset = jpeg_v5_0_1_ring_reset ,
702752};
703753
704754static void jpeg_v5_0_1_set_dec_ring_funcs (struct amdgpu_device * adev )
0 commit comments