Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/jpeg: add jpeg ras poison consumption handling

Add jpeg ras poison event callback and consumption handling

V2: Removed the default poison consumption cb handle

Signed-off-by: Mohammad Zafar Ziya <Mohammadzafar.ziya@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Mohammad Zafar Ziya and committed by
Alex Deucher
7e0357fc e91241c0

+41
+18
drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
··· 216 216 error: 217 217 return r; 218 218 } 219 + 220 + int amdgpu_jpeg_process_poison_irq(struct amdgpu_device *adev, 221 + struct amdgpu_irq_src *source, 222 + struct amdgpu_iv_entry *entry) 223 + { 224 + struct ras_common_if *ras_if = adev->jpeg.ras_if; 225 + struct ras_dispatch_if ih_data = { 226 + .entry = entry, 227 + }; 228 + 229 + if (!ras_if) 230 + return 0; 231 + 232 + ih_data.head = *ras_if; 233 + amdgpu_ras_interrupt_dispatch(adev, &ih_data); 234 + 235 + return 0; 236 + }
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h
··· 69 69 int amdgpu_jpeg_dec_ring_test_ring(struct amdgpu_ring *ring); 70 70 int amdgpu_jpeg_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout); 71 71 72 + int amdgpu_jpeg_process_poison_irq(struct amdgpu_device *adev, 73 + struct amdgpu_irq_src *source, 74 + struct amdgpu_iv_entry *entry); 75 + 72 76 #endif /*__AMDGPU_JPEG_H__*/
+16
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
··· 99 99 VCN_2_0__SRCID__JPEG_DECODE, &adev->jpeg.inst[i].irq); 100 100 if (r) 101 101 return r; 102 + 103 + /* JPEG DJPEG POISON EVENT */ 104 + r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_jpeg[i], 105 + VCN_2_6__SRCID_DJPEG0_POISON, &adev->jpeg.inst[i].irq); 106 + if (r) 107 + return r; 108 + 109 + /* JPEG EJPEG POISON EVENT */ 110 + r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_jpeg[i], 111 + VCN_2_6__SRCID_EJPEG0_POISON, &adev->jpeg.inst[i].irq); 112 + if (r) 113 + return r; 102 114 } 103 115 104 116 r = amdgpu_jpeg_sw_init(adev); ··· 584 572 switch (entry->src_id) { 585 573 case VCN_2_0__SRCID__JPEG_DECODE: 586 574 amdgpu_fence_process(&adev->jpeg.inst[ip_instance].ring_dec); 575 + break; 576 + case VCN_2_6__SRCID_DJPEG0_POISON: 577 + case VCN_2_6__SRCID_EJPEG0_POISON: 578 + amdgpu_jpeg_process_poison_irq(adev, source, entry); 587 579 break; 588 580 default: 589 581 DRM_ERROR("Unhandled interrupt: %d %d\n",
+3
drivers/gpu/drm/amd/include/ivsrcid/vcn/irqsrcs_vcn_2_0.h
··· 29 29 #define VCN_2_0__SRCID__JPEG_ENCODE 151 // 0x97 JRBC Encode interrupt 30 30 #define VCN_2_0__SRCID__JPEG_DECODE 153 // 0x99 JRBC Decode interrupt 31 31 32 + #define VCN_2_6__SRCID_DJPEG0_POISON 161 33 + #define VCN_2_6__SRCID_EJPEG0_POISON 162 34 + 32 35 #endif