drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c
Extension
.c
Size
14139 bytes
Lines
387
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

else if (source_id == SOC15_INTSRC_SQ_INTERRUPT_MSG) {
			encoding = REG_GET_FIELD(context_id1,
						SQ_INTERRUPT_WORD_WAVE_CTXID1, ENCODING);
			switch (encoding) {
			case SQ_INTERRUPT_WORD_ENCODING_AUTO:
				dev_dbg_ratelimited(
					dev->adev->dev,
					"sq_intr: auto, se %d, ttrace %d, wlt %d, ttrac_buf0_full %d, ttrac_buf1_full %d, ttrace_utc_err %d\n",
					REG_GET_FIELD(
						context_id1,
						SQ_INTERRUPT_WORD_AUTO_CTXID1,
						SE_ID),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_AUTO_CTXID0,
						THREAD_TRACE),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_AUTO_CTXID0,
						WLT),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_AUTO_CTXID0,
						THREAD_TRACE_BUF0_FULL),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_AUTO_CTXID0,
						THREAD_TRACE_BUF1_FULL),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_AUTO_CTXID0,
						THREAD_TRACE_UTC_ERROR));
				break;
			case SQ_INTERRUPT_WORD_ENCODING_INST:
				dev_dbg_ratelimited(
					dev->adev->dev,
					"sq_intr: inst, se %d, data 0x%x, sa %d, priv %d, wave_id %d, simd_id %d, wgp_id %d\n",
					REG_GET_FIELD(
						context_id1,
						SQ_INTERRUPT_WORD_WAVE_CTXID1,
						SE_ID),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,
						DATA),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,
						SA_ID),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,
						PRIV),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,
						WAVE_ID),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,
						SIMD_ID),
					REG_GET_FIELD(
						context_id1,
						SQ_INTERRUPT_WORD_WAVE_CTXID1,
						WGP_ID));
				if (context_id0 & SQ_INTERRUPT_WORD_WAVE_CTXID0__PRIV_MASK) {
					if (kfd_set_dbg_ev_from_interrupt(dev, pasid,
							KFD_DEBUG_DOORBELL_ID(context_id0),
							KFD_DEBUG_TRAP_CODE(context_id0),
							NULL, 0))
						return;
				}
				break;
			case SQ_INTERRUPT_WORD_ENCODING_ERROR:
				sq_intr_err_type = REG_GET_FIELD(context_id0, KFD_CTXID0,
								ERR_TYPE);
				dev_warn_ratelimited(
					dev->adev->dev,
					"sq_intr: error, se %d, data 0x%x, sa %d, priv %d, wave_id %d, simd_id %d, wgp_id %d, err_type %d\n",
					REG_GET_FIELD(
						context_id1,
						SQ_INTERRUPT_WORD_WAVE_CTXID1,
						SE_ID),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,
						DATA),
					REG_GET_FIELD(
						context_id0,
						SQ_INTERRUPT_WORD_WAVE_CTXID0,

Annotation

Implementation Notes