Skip to content

Commit ce78442

Browse files
Horatio Zhangalexdeucher
authored andcommitted
drm/amdgpu: separate ras irq from jpeg instance irq for UVD_POISON
Separate jpegbRAS poison consumption handling from the instance irq, and register dedicated ras_poison_irq src and funcs for UVD_POISON. v2: - Separate ras irq from jpeg 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 020c76d commit ce78442

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,31 @@ int amdgpu_jpeg_process_poison_irq(struct amdgpu_device *adev,
241241
return 0;
242242
}
243243

244+
int amdgpu_jpeg_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *ras_block)
245+
{
246+
int r, i;
247+
248+
r = amdgpu_ras_block_late_init(adev, ras_block);
249+
if (r)
250+
return r;
251+
252+
if (amdgpu_ras_is_supported(adev, ras_block->block)) {
253+
for (i = 0; i < adev->jpeg.num_jpeg_inst; ++i) {
254+
if (adev->jpeg.harvest_config & (1 << i))
255+
continue;
256+
257+
r = amdgpu_irq_get(adev, &adev->jpeg.inst[i].ras_poison_irq, 0);
258+
if (r)
259+
goto late_fini;
260+
}
261+
}
262+
return 0;
263+
264+
late_fini:
265+
amdgpu_ras_block_late_fini(adev, ras_block);
266+
return r;
267+
}
268+
244269
int amdgpu_jpeg_ras_sw_init(struct amdgpu_device *adev)
245270
{
246271
int err;
@@ -262,7 +287,7 @@ int amdgpu_jpeg_ras_sw_init(struct amdgpu_device *adev)
262287
adev->jpeg.ras_if = &ras->ras_block.ras_comm;
263288

264289
if (!ras->ras_block.ras_late_init)
265-
ras->ras_block.ras_late_init = amdgpu_ras_block_late_init;
290+
ras->ras_block.ras_late_init = amdgpu_jpeg_ras_late_init;
266291

267292
return 0;
268293
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ struct amdgpu_jpeg_reg{
3838
struct amdgpu_jpeg_inst {
3939
struct amdgpu_ring ring_dec;
4040
struct amdgpu_irq_src irq;
41+
struct amdgpu_irq_src ras_poison_irq;
4142
struct amdgpu_jpeg_reg external;
4243
};
4344

@@ -72,6 +73,8 @@ int amdgpu_jpeg_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout);
7273
int amdgpu_jpeg_process_poison_irq(struct amdgpu_device *adev,
7374
struct amdgpu_irq_src *source,
7475
struct amdgpu_iv_entry *entry);
76+
int amdgpu_jpeg_ras_late_init(struct amdgpu_device *adev,
77+
struct ras_common_if *ras_block);
7578
int amdgpu_jpeg_ras_sw_init(struct amdgpu_device *adev);
7679

7780
#endif /*__AMDGPU_JPEG_H__*/

0 commit comments

Comments
 (0)