Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/amdgpu: add additional page fault settings for gfx11

Add three additional page fault settings.

V2: move reg offset definition to header file. (Alex)
V3: add all shift/mask definitions of used reg. (Hawking)

Signed-off-by: Chengming Gui <Jack.Gui@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Chengming Gui and committed by
Alex Deucher
7c8e4a25 53bd83df

+56 -4
+28 -4
drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0.c
··· 26 26 27 27 #include "gc/gc_11_0_0_offset.h" 28 28 #include "gc/gc_11_0_0_sh_mask.h" 29 + #include "gc/gc_11_0_0_default.h" 29 30 #include "navi10_enum.h" 30 31 #include "soc15_common.h" 31 - 32 - #define regGCVM_L2_CNTL3_DEFAULT 0x80100007 33 - #define regGCVM_L2_CNTL4_DEFAULT 0x000000c1 34 - #define regGCVM_L2_CNTL5_DEFAULT 0x00003fe0 35 32 36 33 static const char *gfxhub_client_ids[] = { 37 34 "CB/DB", ··· 411 414 { 412 415 u32 tmp; 413 416 417 + /* NO halt CP when page fault */ 418 + tmp = RREG32_SOC15(GC, 0, regCP_DEBUG); 419 + tmp = REG_SET_FIELD(tmp, CP_DEBUG, CPG_UTCL1_ERROR_HALT_DISABLE, 1); 420 + WREG32_SOC15(GC, 0, regCP_DEBUG, tmp); 421 + 422 + /** 423 + * Set GRBM_GFX_INDEX in broad cast mode 424 + * before programming GL1C_UTCL0_CNTL1 and SQG_CONFIG 425 + */ 426 + WREG32_SOC15(GC, 0, regGRBM_GFX_INDEX, regGRBM_GFX_INDEX_DEFAULT); 427 + 428 + /** 429 + * Retry respond mode: RETRY 430 + * Error (no retry) respond mode: SUCCESS 431 + */ 432 + tmp = RREG32_SOC15(GC, 0, regGL1C_UTCL0_CNTL1); 433 + tmp = REG_SET_FIELD(tmp, GL1C_UTCL0_CNTL1, RESP_MODE, 0); 434 + tmp = REG_SET_FIELD(tmp, GL1C_UTCL0_CNTL1, RESP_FAULT_MODE, 0x2); 435 + WREG32_SOC15(GC, 0, regGL1C_UTCL0_CNTL1, tmp); 436 + 414 437 /* These registers are not accessible to VF-SRIOV. 415 438 * The PF will program them instead. 416 439 */ 417 440 if (amdgpu_sriov_vf(adev)) 418 441 return; 442 + 443 + /* Disable SQ XNACK interrupt for all VMIDs */ 444 + tmp = RREG32_SOC15(GC, 0, regSQG_CONFIG); 445 + tmp = REG_SET_FIELD(tmp, SQG_CONFIG, XNACK_INTR_MASK, 446 + SQG_CONFIG__XNACK_INTR_MASK_MASK >> 447 + SQG_CONFIG__XNACK_INTR_MASK__SHIFT); 448 + WREG32_SOC15(GC, 0, regSQG_CONFIG, tmp); 419 449 420 450 tmp = RREG32_SOC15(GC, 0, regGCVM_L2_PROTECTION_FAULT_CNTL); 421 451 tmp = REG_SET_FIELD(tmp, GCVM_L2_PROTECTION_FAULT_CNTL,
+3
drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h
··· 4221 4221 #define regCP_ECC_FIRSTOCCURRENCE_RING1_BASE_IDX 0 4222 4222 #define regGB_EDC_MODE 0x1e1e 4223 4223 #define regGB_EDC_MODE_BASE_IDX 0 4224 + #define regCP_DEBUG 0x1e1f 4224 4225 #define regCP_DEBUG_BASE_IDX 0 4225 4226 #define regCP_CPC_DEBUG 0x1e21 4226 4227 #define regCP_CPC_DEBUG_BASE_IDX 0 ··· 8307 8306 #define regGL1I_GL1R_REP_FGCG_OVERRIDE_BASE_IDX 1 8308 8307 #define regGL1C_STATUS 0x2d41 8309 8308 #define regGL1C_STATUS_BASE_IDX 1 8309 + #define regGL1C_UTCL0_CNTL1 0x2d42 8310 + #define regGL1C_UTCL0_CNTL1_BASE_IDX 1 8310 8311 #define regGL1C_UTCL0_CNTL2 0x2d43 8311 8312 #define regGL1C_UTCL0_CNTL2_BASE_IDX 1 8312 8313 #define regGL1C_UTCL0_STATUS 0x2d44
+25
drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_sh_mask.h
··· 29424 29424 #define GL1C_STATUS__TAG_EVICT_MASK 0x04000000L 29425 29425 #define GL1C_STATUS__TAG_REQUEST_STATE_OPERATION_MASK 0x78000000L 29426 29426 #define GL1C_STATUS__TRACKER_LAST_SET_MATCHES_CURRENT_SET_MASK 0x80000000L 29427 + //GL1C_UTCL0_CNTL1 29428 + #define GL1C_UTCL0_CNTL1__FORCE_4K_L2_RESP__SHIFT 0x0 29429 + #define GL1C_UTCL0_CNTL1__GPUVM_64K_DEF__SHIFT 0x1 29430 + #define GL1C_UTCL0_CNTL1__GPUVM_PERM_MODE__SHIFT 0x2 29431 + #define GL1C_UTCL0_CNTL1__RESP_MODE__SHIFT 0x3 29432 + #define GL1C_UTCL0_CNTL1__RESP_FAULT_MODE__SHIFT 0x5 29433 + #define GL1C_UTCL0_CNTL1__CLIENTID__SHIFT 0x7 29434 + #define GL1C_UTCL0_CNTL1__REG_INV_VMID__SHIFT 0x13 29435 + #define GL1C_UTCL0_CNTL1__REG_INV_TOGGLE__SHIFT 0x18 29436 + #define GL1C_UTCL0_CNTL1__FORCE_MISS__SHIFT 0x1a 29437 + #define GL1C_UTCL0_CNTL1__FORCE_IN_ORDER__SHIFT 0x1b 29438 + #define GL1C_UTCL0_CNTL1__REDUCE_FIFO_DEPTH_BY_2__SHIFT 0x1c 29439 + #define GL1C_UTCL0_CNTL1__REDUCE_CACHE_SIZE_BY_2__SHIFT 0x1e 29440 + #define GL1C_UTCL0_CNTL1__FORCE_4K_L2_RESP_MASK 0x00000001L 29441 + #define GL1C_UTCL0_CNTL1__GPUVM_64K_DEF_MASK 0x00000002L 29442 + #define GL1C_UTCL0_CNTL1__GPUVM_PERM_MODE_MASK 0x00000004L 29443 + #define GL1C_UTCL0_CNTL1__RESP_MODE_MASK 0x00000018L 29444 + #define GL1C_UTCL0_CNTL1__RESP_FAULT_MODE_MASK 0x00000060L 29445 + #define GL1C_UTCL0_CNTL1__CLIENTID_MASK 0x0000FF80L 29446 + #define GL1C_UTCL0_CNTL1__REG_INV_VMID_MASK 0x00780000L 29447 + #define GL1C_UTCL0_CNTL1__REG_INV_TOGGLE_MASK 0x01000000L 29448 + #define GL1C_UTCL0_CNTL1__FORCE_MISS_MASK 0x04000000L 29449 + #define GL1C_UTCL0_CNTL1__FORCE_IN_ORDER_MASK 0x06000000L 29450 + #define GL1C_UTCL0_CNTL1__REDUCE_FIFO_DEPTH_BY_2_MASK 0x30000000L 29451 + #define GL1C_UTCL0_CNTL1__REDUCE_CACHE_SIZE_BY_2_MASK 0xC0000000L 29427 29452 //GL1C_UTCL0_CNTL2 29428 29453 #define GL1C_UTCL0_CNTL2__SPARE__SHIFT 0x0 29429 29454 #define GL1C_UTCL0_CNTL2__COMP_SYNC_DISABLE__SHIFT 0x8