Skip to content

Commit ac1d8e2

Browse files
hongkzha-amdalexdeucher
authored andcommitted
drm/amdgpu: separate ras irq from vcn instance irq for UVD_POISON
Separate vcn RAS poison consumption handling from the instance irq, and register dedicated ras_poison_irq src and funcs for UVD_POISON. v2: - Separate ras irq from vcn instance irq - Improve the subject and code comments v3: - Split the patch into three parts - Improve the code comments Suggested-by: Hawking Zhang <[email protected]> Signed-off-by: Horatio Zhang <[email protected]> Reviewed-by: Tao Zhou <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 8e1b45c commit ac1d8e2

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,6 +1181,31 @@ int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev,
11811181
return 0;
11821182
}
11831183

1184+
int amdgpu_vcn_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *ras_block)
1185+
{
1186+
int r, i;
1187+
1188+
r = amdgpu_ras_block_late_init(adev, ras_block);
1189+
if (r)
1190+
return r;
1191+
1192+
if (amdgpu_ras_is_supported(adev, ras_block->block)) {
1193+
for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
1194+
if (adev->vcn.harvest_config & (1 << i))
1195+
continue;
1196+
1197+
r = amdgpu_irq_get(adev, &adev->vcn.inst[i].ras_poison_irq, 0);
1198+
if (r)
1199+
goto late_fini;
1200+
}
1201+
}
1202+
return 0;
1203+
1204+
late_fini:
1205+
amdgpu_ras_block_late_fini(adev, ras_block);
1206+
return r;
1207+
}
1208+
11841209
int amdgpu_vcn_ras_sw_init(struct amdgpu_device *adev)
11851210
{
11861211
int err;
@@ -1202,7 +1227,7 @@ int amdgpu_vcn_ras_sw_init(struct amdgpu_device *adev)
12021227
adev->vcn.ras_if = &ras->ras_block.ras_comm;
12031228

12041229
if (!ras->ras_block.ras_late_init)
1205-
ras->ras_block.ras_late_init = amdgpu_ras_block_late_init;
1230+
ras->ras_block.ras_late_init = amdgpu_vcn_ras_late_init;
12061231

12071232
return 0;
12081233
}

drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ struct amdgpu_vcn_inst {
234234
struct amdgpu_ring ring_enc[AMDGPU_VCN_MAX_ENC_RINGS];
235235
atomic_t sched_score;
236236
struct amdgpu_irq_src irq;
237+
struct amdgpu_irq_src ras_poison_irq;
237238
struct amdgpu_vcn_reg external;
238239
struct amdgpu_bo *dpg_sram_bo;
239240
struct dpg_pause_state pause_state;
@@ -400,6 +401,8 @@ void amdgpu_debugfs_vcn_fwlog_init(struct amdgpu_device *adev,
400401
int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev,
401402
struct amdgpu_irq_src *source,
402403
struct amdgpu_iv_entry *entry);
404+
int amdgpu_vcn_ras_late_init(struct amdgpu_device *adev,
405+
struct ras_common_if *ras_block);
403406
int amdgpu_vcn_ras_sw_init(struct amdgpu_device *adev);
404407

405408
#endif

0 commit comments

Comments
 (0)