@@ -15,6 +15,11 @@ def init(self):
15
15
self .adev .regRCC_DEV0_EPF0_RCC_DOORBELL_APER_EN .write (0x1 )
16
16
def set_clockgating_state (self ): self .adev .regHDP_MEM_POWER_CTRL .update (atomic_mem_power_ctrl_en = 1 , atomic_mem_power_ds_en = 1 )
17
17
18
+ def doorbell_enable (self , port , awid = 0 , awaddr_31_28_value = 0 , offset = 0 , size = 0 ):
19
+ self .adev .reg (f"regS2A_DOORBELL_ENTRY_{ port } _CTRL" ).update (** {f"s2a_doorbell_port{ port } _enable" : 1 , f"s2a_doorbell_port{ port } _awid" : awid ,
20
+ f"s2a_doorbell_port{ port } _awaddr_31_28_value" : awaddr_31_28_value , f"s2a_doorbell_port{ port } _range_offset" : offset ,
21
+ f"s2a_doorbell_port{ port } _range_size" : size })
22
+
18
23
class AM_GMC (AM_IP ):
19
24
def __init__ (self , adev ):
20
25
super ().__init__ (adev )
@@ -171,8 +176,8 @@ def init(self):
171
176
self .adev .regTCP_CNTL .write (self .adev .regTCP_CNTL .read () | 0x20000000 )
172
177
self .adev .regRLC_SRM_CNTL .update (srm_enable = 1 , auto_incr_addr = 1 )
173
178
174
- self .adev .regS2A_DOORBELL_ENTRY_0_CTRL . write ( s2a_doorbell_port0_enable = 1 , s2a_doorbell_port0_awid = 0x3 , s2a_doorbell_port0_awaddr_31_28_value = 0x3 )
175
- self .adev .regS2A_DOORBELL_ENTRY_3_CTRL . write ( s2a_doorbell_port3_enable = 1 , s2a_doorbell_port3_awid = 0x6 , s2a_doorbell_port3_awaddr_31_28_value = 0x3 )
179
+ self .adev .soc . doorbell_enable ( port = 0 , awid = 0x3 , awaddr_31_28_value = 0x3 )
180
+ self .adev .soc . doorbell_enable ( port = 3 , awid = 0x6 , awaddr_31_28_value = 0x3 )
176
181
177
182
self .adev .regGRBM_CNTL .update (read_timeout = 0xff )
178
183
for i in range (0 , 16 ):
@@ -308,8 +313,7 @@ def init(self):
308
313
for _ , rwptr_vm , suf , ring_id in self .rings :
309
314
self .adev .reg (f"regIH_RB_CNTL{ suf } " ).update (rb_enable = 1 , ** ({'enable_intr' : 1 } if ring_id == 0 else {}))
310
315
311
- self .adev .regS2A_DOORBELL_ENTRY_1_CTRL .update (s2a_doorbell_port1_enable = 1 , s2a_doorbell_port1_awid = 0x0 , s2a_doorbell_port1_awaddr_31_28_value = 0x0 ,
312
- s2a_doorbell_port1_range_offset = am .AMDGPU_NAVI10_DOORBELL_IH * 2 , s2a_doorbell_port1_range_size = 2 )
316
+ self .adev .soc .doorbell_enable (port = 1 , awid = 0x0 , awaddr_31_28_value = 0x0 , offset = am .AMDGPU_NAVI10_DOORBELL_IH * 2 , size = 2 )
313
317
314
318
class AM_SDMA (AM_IP ):
315
319
def setup_ring (self , ring_addr :int , ring_size :int , rptr_addr :int , wptr_addr :int , doorbell :int , pipe :int , queue :int ):
@@ -334,8 +338,7 @@ def init(self):
334
338
self .adev .reg (f"regSDMA{ pipe } _UTCL1_PAGE" ).update (rd_l2_policy = 0x2 , wr_l2_policy = 0x3 , llc_noalloc = 1 ) # rd=noa, wr=bypass
335
339
self .adev .reg (f"regSDMA{ pipe } _F32_CNTL" ).update (halt = 0 , th1_reset = 0 )
336
340
self .adev .reg (f"regSDMA{ pipe } _CNTL" ).update (ctxempty_int_enable = 1 , trap_enable = 1 )
337
- self .adev .regS2A_DOORBELL_ENTRY_2_CTRL .update (s2a_doorbell_port2_enable = 1 , s2a_doorbell_port2_awid = 0xe , s2a_doorbell_port2_awaddr_31_28_value = 0x3 ,
338
- s2a_doorbell_port2_range_offset = am .AMDGPU_NAVI10_DOORBELL_sDMA_ENGINE0 * 2 , s2a_doorbell_port2_range_size = 4 )
341
+ self .adev .soc .doorbell_enable (port = 2 , awid = 0xe , awaddr_31_28_value = 0x3 , offset = am .AMDGPU_NAVI10_DOORBELL_sDMA_ENGINE0 * 2 , size = 4 )
339
342
340
343
def fini (self ):
341
344
self .adev .regSDMA0_QUEUE0_RB_CNTL .update (rb_enable = 0 )
0 commit comments