diff options
author | Andrey Grodzovsky <andrey.grodzovsky@amd.com> | 2018-06-18 11:15:10 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-07-05 17:38:26 -0400 |
commit | d9e222b460b195a47b30fd9057fbb131fcbd7bac (patch) | |
tree | c012badb8f330fef569e575cad7d23aacb906869 /drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |
parent | b374d82dca4721c534eb940b599dd4d45ba3a18f (diff) |
drm/amdgpu: Polish SQ IH.
Switch to using reg fields defines istead of magic values.
Add SH_ID and PRIV fields reading for instr. and err cases.
Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 807ee0dd623c..1d99a4205958 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -6961,10 +6961,11 @@ static int gfx_v8_0_sq_irq(struct amdgpu_device *adev, | |||
6961 | { | 6961 | { |
6962 | u8 enc, se_id; | 6962 | u8 enc, se_id; |
6963 | char type[20]; | 6963 | char type[20]; |
6964 | unsigned ih_data = entry->src_data[0]; | ||
6964 | 6965 | ||
6965 | /* Parse all fields according to SQ_INTERRUPT* registers */ | 6966 | |
6966 | enc = (entry->src_data[0] >> 26) & 0x3; | 6967 | enc = REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_CMN, ENCODING); |
6967 | se_id = (entry->src_data[0] >> 24) & 0x3; | 6968 | se_id = REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_CMN, SE_ID); |
6968 | 6969 | ||
6969 | switch (enc) { | 6970 | switch (enc) { |
6970 | case 0: | 6971 | case 0: |
@@ -6974,14 +6975,14 @@ static int gfx_v8_0_sq_irq(struct amdgpu_device *adev, | |||
6974 | "reg_timestamp %d, thread_trace_buff_full %d," | 6975 | "reg_timestamp %d, thread_trace_buff_full %d," |
6975 | "wlt %d, thread_trace %d.\n", | 6976 | "wlt %d, thread_trace %d.\n", |
6976 | se_id, | 6977 | se_id, |
6977 | (entry->src_data[0] >> 7) & 0x1, | 6978 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, IMMED_OVERFLOW), |
6978 | (entry->src_data[0] >> 6) & 0x1, | 6979 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, HOST_REG_OVERFLOW), |
6979 | (entry->src_data[0] >> 5) & 0x1, | 6980 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, HOST_CMD_OVERFLOW), |
6980 | (entry->src_data[0] >> 4) & 0x1, | 6981 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, CMD_TIMESTAMP), |
6981 | (entry->src_data[0] >> 3) & 0x1, | 6982 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, REG_TIMESTAMP), |
6982 | (entry->src_data[0] >> 2) & 0x1, | 6983 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, THREAD_TRACE_BUF_FULL), |
6983 | (entry->src_data[0] >> 1) & 0x1, | 6984 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, WLT), |
6984 | entry->src_data[0] & 0x1 | 6985 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_AUTO, THREAD_TRACE) |
6985 | ); | 6986 | ); |
6986 | break; | 6987 | break; |
6987 | case 1: | 6988 | case 1: |
@@ -6994,12 +6995,15 @@ static int gfx_v8_0_sq_irq(struct amdgpu_device *adev, | |||
6994 | 6995 | ||
6995 | DRM_INFO( | 6996 | DRM_INFO( |
6996 | "SQ %s detected: " | 6997 | "SQ %s detected: " |
6997 | "se_id %d, cu_id %d, simd_id %d, wave_id %d, vm_id %d\n", | 6998 | "se_id %d, cu_id %d, simd_id %d, wave_id %d, vm_id %d\n" |
6999 | "trap %s, sh_id %d. ", | ||
6998 | type, se_id, | 7000 | type, se_id, |
6999 | (entry->src_data[0] >> 20) & 0xf, | 7001 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_WAVE, CU_ID), |
7000 | (entry->src_data[0] >> 18) & 0x3, | 7002 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_WAVE, SIMD_ID), |
7001 | (entry->src_data[0] >> 14) & 0xf, | 7003 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_WAVE, WAVE_ID), |
7002 | (entry->src_data[0] >> 10) & 0xf | 7004 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_WAVE, VM_ID), |
7005 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_WAVE, PRIV) ? "true" : "false", | ||
7006 | REG_GET_FIELD(ih_data, SQ_INTERRUPT_WORD_WAVE, SH_ID) | ||
7003 | ); | 7007 | ); |
7004 | break; | 7008 | break; |
7005 | default: | 7009 | default: |