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

drm/amdgpu: Add error message when programing registers fails

Squash in warning fix (Alex)

Signed-off-by: Roy Sun <Roy.Sun@amd.com>
Reviewed-by: Zhou pengju <pengju.zhou@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Roy Sun and committed by
Alex Deucher
4067cdb1 1a4772d9

+22 -4
+22 -4
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
··· 56 56 #define GFX10_NUM_GFX_RINGS_Sienna_Cichlid 1 57 57 #define GFX10_MEC_HPD_SIZE 2048 58 58 59 + #define RLCG_INTERFACE_NOT_ENABLED 0x4000000 60 + #define RLCG_WRONG_OPERATION_TYPE 0x2000000 61 + #define RLCG_NOT_IN_RANGE 0x1000000 62 + 59 63 #define F32_CE_PROGRAM_RAM_SIZE 65536 60 64 #define RLCG_UCODE_LOADING_START_ADDRESS 0x00002000L 61 65 ··· 184 180 #define GFX_RLCG_GC_WRITE (0x0 << 28) 185 181 #define GFX_RLCG_GC_READ (0x1 << 28) 186 182 #define GFX_RLCG_MMHUB_WRITE (0x2 << 28) 183 + 184 + #define RLCG_ERROR_REPORT_ENABLED(adev) \ 185 + (amdgpu_sriov_reg_indirect_mmhub(adev) || amdgpu_sriov_reg_indirect_gc(adev)) 187 186 188 187 MODULE_FIRMWARE("amdgpu/navi10_ce.bin"); 189 188 MODULE_FIRMWARE("amdgpu/navi10_pfp.bin"); ··· 1493 1486 uint32_t i = 0; 1494 1487 uint32_t retries = 50000; 1495 1488 u32 ret = 0; 1489 + u32 tmp; 1496 1490 1497 1491 scratch_reg0 = adev->rmmio + 1498 1492 (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0) * 4; ··· 1527 1519 writel(v, scratch_reg0); 1528 1520 writel(offset | flag, scratch_reg1); 1529 1521 writel(1, spare_int); 1530 - for (i = 0; i < retries; i++) { 1531 - u32 tmp; 1532 1522 1523 + for (i = 0; i < retries; i++) { 1533 1524 tmp = readl(scratch_reg1); 1534 1525 if (!(tmp & flag)) 1535 1526 break; ··· 1536 1529 udelay(10); 1537 1530 } 1538 1531 1539 - if (i >= retries) 1540 - pr_err("timeout: rlcg program reg:0x%05x failed !\n", offset); 1532 + if (i >= retries) { 1533 + if (RLCG_ERROR_REPORT_ENABLED(adev)) { 1534 + if (tmp & RLCG_INTERFACE_NOT_ENABLED) 1535 + pr_err("The interface is not enabled, program reg:0x%05x failed!\n", offset); 1536 + else if (tmp & RLCG_WRONG_OPERATION_TYPE) 1537 + pr_err("Wrong operation type, program reg:0x%05x failed!\n", offset); 1538 + else if (tmp & RLCG_NOT_IN_RANGE) 1539 + pr_err("The register is not in range, program reg:0x%05x failed!\n", offset); 1540 + else 1541 + pr_err("Unknown error type, program reg:0x%05x failed!\n", offset); 1542 + } else 1543 + pr_err("timeout: rlcg program reg:0x%05x failed!\n", offset); 1544 + } 1541 1545 } 1542 1546 1543 1547 ret = readl(scratch_reg0);