Commit 0ae99221 authored by Mohammad Zafar Ziya's avatar Mohammad Zafar Ziya Committed by Alex Deucher
Browse files

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: default avatarMohammad Zafar Ziya <Mohammadzafar.ziya@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarTao Zhou <tao.zhou1@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7e0357fc
Loading
Loading
Loading
Loading
+18 −0
Original line number Original line Diff line number Diff line
@@ -1126,3 +1126,21 @@ void amdgpu_vcn_fwlog_init(struct amdgpu_vcn_inst *vcn)
	log_buf->wrapped = 0;
	log_buf->wrapped = 0;
#endif
#endif
}
}

int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev,
				struct amdgpu_irq_src *source,
				struct amdgpu_iv_entry *entry)
{
	struct ras_common_if *ras_if = adev->vcn.ras_if;
	struct ras_dispatch_if ih_data = {
		.entry = entry,
	};

	if (!ras_if)
		return 0;

	ih_data.head = *ras_if;
	amdgpu_ras_interrupt_dispatch(adev, &ih_data);

	return 0;
}
+5 −0
Original line number Original line Diff line number Diff line
@@ -375,4 +375,9 @@ void amdgpu_vcn_setup_ucode(struct amdgpu_device *adev);
void amdgpu_vcn_fwlog_init(struct amdgpu_vcn_inst *vcn);
void amdgpu_vcn_fwlog_init(struct amdgpu_vcn_inst *vcn);
void amdgpu_debugfs_vcn_fwlog_init(struct amdgpu_device *adev,
void amdgpu_debugfs_vcn_fwlog_init(struct amdgpu_device *adev,
                                   uint8_t i, struct amdgpu_vcn_inst *vcn);
                                   uint8_t i, struct amdgpu_vcn_inst *vcn);

int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev,
			struct amdgpu_irq_src *source,
			struct amdgpu_iv_entry *entry);

#endif
#endif
+9 −0
Original line number Original line Diff line number Diff line
@@ -139,6 +139,12 @@ static int vcn_v2_5_sw_init(void *handle)
			if (r)
			if (r)
				return r;
				return r;
		}
		}

		/* VCN POISON TRAP */
		r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_vcns[j],
			VCN_2_6__SRCID_UVD_POISON, &adev->vcn.inst[j].irq);
		if (r)
			return r;
	}
	}


	r = amdgpu_vcn_sw_init(adev);
	r = amdgpu_vcn_sw_init(adev);
@@ -1855,6 +1861,9 @@ static int vcn_v2_5_process_interrupt(struct amdgpu_device *adev,
	case VCN_2_0__SRCID__UVD_ENC_LOW_LATENCY:
	case VCN_2_0__SRCID__UVD_ENC_LOW_LATENCY:
		amdgpu_fence_process(&adev->vcn.inst[ip_instance].ring_enc[1]);
		amdgpu_fence_process(&adev->vcn.inst[ip_instance].ring_enc[1]);
		break;
		break;
	case VCN_2_6__SRCID_UVD_POISON:
		amdgpu_vcn_process_poison_irq(adev, source, entry);
		break;
	default:
	default:
		DRM_ERROR("Unhandled interrupt: %d %d\n",
		DRM_ERROR("Unhandled interrupt: %d %d\n",
			  entry->src_id, entry->src_data[0]);
			  entry->src_id, entry->src_data[0]);
+1 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@
#define VCN_2_0__SRCID__JPEG_ENCODE					151		// 0x97 JRBC Encode interrupt
#define VCN_2_0__SRCID__JPEG_ENCODE					151		// 0x97 JRBC Encode interrupt
#define VCN_2_0__SRCID__JPEG_DECODE					153		// 0x99 JRBC Decode interrupt
#define VCN_2_0__SRCID__JPEG_DECODE					153		// 0x99 JRBC Decode interrupt


#define VCN_2_6__SRCID_UVD_POISON					160
#define VCN_2_6__SRCID_DJPEG0_POISON					161
#define VCN_2_6__SRCID_DJPEG0_POISON					161
#define VCN_2_6__SRCID_EJPEG0_POISON					162
#define VCN_2_6__SRCID_EJPEG0_POISON					162