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

drm/amdgpu/vcn: Add vcn ras poison consumption event handling

Add vcn ras poison consumption event handling

V2: Removed default poison consumption handling function cb

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
0ae99221 7e0357fc

+33
+18
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
··· 1126 1126 log_buf->wrapped = 0; 1127 1127 #endif 1128 1128 } 1129 + 1130 + int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev, 1131 + struct amdgpu_irq_src *source, 1132 + struct amdgpu_iv_entry *entry) 1133 + { 1134 + struct ras_common_if *ras_if = adev->vcn.ras_if; 1135 + struct ras_dispatch_if ih_data = { 1136 + .entry = entry, 1137 + }; 1138 + 1139 + if (!ras_if) 1140 + return 0; 1141 + 1142 + ih_data.head = *ras_if; 1143 + amdgpu_ras_interrupt_dispatch(adev, &ih_data); 1144 + 1145 + return 0; 1146 + }
+5
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
··· 375 375 void amdgpu_vcn_fwlog_init(struct amdgpu_vcn_inst *vcn); 376 376 void amdgpu_debugfs_vcn_fwlog_init(struct amdgpu_device *adev, 377 377 uint8_t i, struct amdgpu_vcn_inst *vcn); 378 + 379 + int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev, 380 + struct amdgpu_irq_src *source, 381 + struct amdgpu_iv_entry *entry); 382 + 378 383 #endif
+9
drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
··· 139 139 if (r) 140 140 return r; 141 141 } 142 + 143 + /* VCN POISON TRAP */ 144 + r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_vcns[j], 145 + VCN_2_6__SRCID_UVD_POISON, &adev->vcn.inst[j].irq); 146 + if (r) 147 + return r; 142 148 } 143 149 144 150 r = amdgpu_vcn_sw_init(adev); ··· 1860 1854 break; 1861 1855 case VCN_2_0__SRCID__UVD_ENC_LOW_LATENCY: 1862 1856 amdgpu_fence_process(&adev->vcn.inst[ip_instance].ring_enc[1]); 1857 + break; 1858 + case VCN_2_6__SRCID_UVD_POISON: 1859 + amdgpu_vcn_process_poison_irq(adev, source, entry); 1863 1860 break; 1864 1861 default: 1865 1862 DRM_ERROR("Unhandled interrupt: %d %d\n",
+1
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_UVD_POISON 160 32 33 #define VCN_2_6__SRCID_DJPEG0_POISON 161 33 34 #define VCN_2_6__SRCID_EJPEG0_POISON 162 34 35