46
46
MODULE_FIRMWARE ("amdgpu/sdma_4_4_2.bin" );
47
47
MODULE_FIRMWARE ("amdgpu/sdma_4_4_5.bin" );
48
48
49
+ static const struct amdgpu_hwip_reg_entry sdma_reg_list_4_4_2 [] = {
50
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_STATUS_REG ),
51
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_STATUS1_REG ),
52
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_STATUS2_REG ),
53
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_STATUS3_REG ),
54
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UCODE_CHECKSUM ),
55
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RB_RPTR_FETCH_HI ),
56
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RB_RPTR_FETCH ),
57
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UTCL1_RD_STATUS ),
58
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UTCL1_WR_STATUS ),
59
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UTCL1_RD_XNACK0 ),
60
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UTCL1_RD_XNACK1 ),
61
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UTCL1_WR_XNACK0 ),
62
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_UTCL1_WR_XNACK1 ),
63
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_RB_CNTL ),
64
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_RB_RPTR ),
65
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_RB_RPTR_HI ),
66
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_RB_WPTR ),
67
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_RB_WPTR_HI ),
68
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_IB_OFFSET ),
69
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_IB_BASE_LO ),
70
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_IB_BASE_HI ),
71
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_IB_CNTL ),
72
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_IB_RPTR ),
73
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_IB_SUB_REMAIN ),
74
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_GFX_DUMMY_REG ),
75
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_RB_CNTL ),
76
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_RB_RPTR ),
77
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_RB_RPTR_HI ),
78
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_RB_WPTR ),
79
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_RB_WPTR_HI ),
80
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_IB_OFFSET ),
81
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_IB_BASE_LO ),
82
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_IB_BASE_HI ),
83
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_PAGE_DUMMY_REG ),
84
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_RB_CNTL ),
85
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_RB_RPTR ),
86
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_RB_RPTR_HI ),
87
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_RB_WPTR ),
88
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_RB_WPTR_HI ),
89
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_IB_OFFSET ),
90
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_IB_BASE_LO ),
91
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_IB_BASE_HI ),
92
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_RLC0_DUMMY_REG ),
93
+ SOC15_REG_ENTRY_STR (GC , 0 , regSDMA_VM_CNTL )
94
+ };
95
+
49
96
#define mmSMNAID_AID0_MCA_SMU 0x03b30400
50
97
51
98
#define WREG32_SDMA (instance , offset , value ) \
@@ -1291,6 +1338,8 @@ static int sdma_v4_4_2_sw_init(void *handle)
1291
1338
int r , i ;
1292
1339
struct amdgpu_device * adev = (struct amdgpu_device * )handle ;
1293
1340
u32 aid_id ;
1341
+ uint32_t reg_count = ARRAY_SIZE (sdma_reg_list_4_4_2 );
1342
+ uint32_t * ptr ;
1294
1343
1295
1344
/* SDMA trap event */
1296
1345
for (i = 0 ; i < adev -> sdma .num_inst_per_aid ; i ++ ) {
@@ -1386,6 +1435,13 @@ static int sdma_v4_4_2_sw_init(void *handle)
1386
1435
return - EINVAL ;
1387
1436
}
1388
1437
1438
+ /* Allocate memory for SDMA IP Dump buffer */
1439
+ ptr = kcalloc (adev -> sdma .num_instances * reg_count , sizeof (uint32_t ), GFP_KERNEL );
1440
+ if (ptr )
1441
+ adev -> sdma .ip_dump = ptr ;
1442
+ else
1443
+ DRM_ERROR ("Failed to allocated memory for SDMA IP Dump\n" );
1444
+
1389
1445
return r ;
1390
1446
}
1391
1447
@@ -1406,6 +1462,8 @@ static int sdma_v4_4_2_sw_fini(void *handle)
1406
1462
else
1407
1463
amdgpu_sdma_destroy_inst_ctx (adev , false);
1408
1464
1465
+ kfree (adev -> sdma .ip_dump );
1466
+
1409
1467
return 0 ;
1410
1468
}
1411
1469
@@ -1799,6 +1857,27 @@ static void sdma_v4_4_2_get_clockgating_state(void *handle, u64 *flags)
1799
1857
* flags |= AMD_CG_SUPPORT_SDMA_LS ;
1800
1858
}
1801
1859
1860
+ static void sdma_v4_4_2_dump_ip_state (void * handle )
1861
+ {
1862
+ struct amdgpu_device * adev = (struct amdgpu_device * )handle ;
1863
+ int i , j ;
1864
+ uint32_t instance_offset ;
1865
+ uint32_t reg_count = ARRAY_SIZE (sdma_reg_list_4_4_2 );
1866
+
1867
+ if (!adev -> sdma .ip_dump )
1868
+ return ;
1869
+
1870
+ amdgpu_gfx_off_ctrl (adev , false);
1871
+ for (i = 0 ; i < adev -> sdma .num_instances ; i ++ ) {
1872
+ instance_offset = i * reg_count ;
1873
+ for (j = 0 ; j < reg_count ; j ++ )
1874
+ adev -> sdma .ip_dump [instance_offset + j ] =
1875
+ RREG32 (sdma_v4_4_2_get_reg_offset (adev , i ,
1876
+ sdma_reg_list_4_4_2 [j ].reg_offset ));
1877
+ }
1878
+ amdgpu_gfx_off_ctrl (adev , true);
1879
+ }
1880
+
1802
1881
const struct amd_ip_funcs sdma_v4_4_2_ip_funcs = {
1803
1882
.name = "sdma_v4_4_2" ,
1804
1883
.early_init = sdma_v4_4_2_early_init ,
@@ -1815,6 +1894,7 @@ const struct amd_ip_funcs sdma_v4_4_2_ip_funcs = {
1815
1894
.set_clockgating_state = sdma_v4_4_2_set_clockgating_state ,
1816
1895
.set_powergating_state = sdma_v4_4_2_set_powergating_state ,
1817
1896
.get_clockgating_state = sdma_v4_4_2_get_clockgating_state ,
1897
+ .dump_ip_state = sdma_v4_4_2_dump_ip_state ,
1818
1898
};
1819
1899
1820
1900
static const struct amdgpu_ring_funcs sdma_v4_4_2_ring_funcs = {
0 commit comments