@@ -297,13 +297,19 @@ static int vpe_early_init(void *handle)
297
297
case IP_VERSION (6 , 1 , 0 ):
298
298
vpe_v6_1_set_funcs (vpe );
299
299
break ;
300
+ case IP_VERSION (6 , 1 , 1 ):
301
+ vpe_v6_1_set_funcs (vpe );
302
+ vpe -> collaborate_mode = true;
303
+ break ;
300
304
default :
301
305
return - EINVAL ;
302
306
}
303
307
304
308
vpe_set_ring_funcs (adev );
305
309
vpe_set_regs (vpe );
306
310
311
+ dev_info (adev -> dev , "VPE: collaborate mode %s" , vpe -> collaborate_mode ? "true" : "false" );
312
+
307
313
return 0 ;
308
314
}
309
315
@@ -493,8 +499,6 @@ static void vpe_ring_emit_fence(struct amdgpu_ring *ring, uint64_t addr,
493
499
{
494
500
int i = 0 ;
495
501
496
- vpe_ring_emit_pred_exec (ring , 0 , 10 );
497
-
498
502
do {
499
503
/* write the fence */
500
504
amdgpu_ring_write (ring , VPE_CMD_HEADER (VPE_CMD_OPCODE_FENCE , 0 ));
@@ -705,16 +709,22 @@ static void vpe_ring_set_wptr(struct amdgpu_ring *ring)
705
709
upper_32_bits (ring -> wptr << 2 ));
706
710
atomic64_set ((atomic64_t * )ring -> wptr_cpu_addr , ring -> wptr << 2 );
707
711
WDOORBELL64 (ring -> doorbell_index , ring -> wptr << 2 );
712
+ if (vpe -> collaborate_mode )
713
+ WDOORBELL64 (ring -> doorbell_index + 4 , ring -> wptr << 2 );
708
714
} else {
709
- dev_dbg (adev -> dev , "Not using doorbell, \
710
- regVPEC_QUEUE0_RB_WPTR == 0x%08x, \
711
- regVPEC_QUEUE0_RB_WPTR_HI == 0x%08x\n" ,
712
- lower_32_bits (ring -> wptr << 2 ),
713
- upper_32_bits (ring -> wptr << 2 ));
714
- WREG32 (vpe_get_reg_offset (vpe , ring -> me , vpe -> regs .queue0_rb_wptr_lo ),
715
- lower_32_bits (ring -> wptr << 2 ));
716
- WREG32 (vpe_get_reg_offset (vpe , ring -> me , vpe -> regs .queue0_rb_wptr_hi ),
717
- upper_32_bits (ring -> wptr << 2 ));
715
+ int i ;
716
+
717
+ for (i = 0 ; i < vpe -> num_instances ; i ++ ) {
718
+ dev_dbg (adev -> dev , "Not using doorbell, \
719
+ regVPEC_QUEUE0_RB_WPTR == 0x%08x, \
720
+ regVPEC_QUEUE0_RB_WPTR_HI == 0x%08x\n" ,
721
+ lower_32_bits (ring -> wptr << 2 ),
722
+ upper_32_bits (ring -> wptr << 2 ));
723
+ WREG32 (vpe_get_reg_offset (vpe , i , vpe -> regs .queue0_rb_wptr_lo ),
724
+ lower_32_bits (ring -> wptr << 2 ));
725
+ WREG32 (vpe_get_reg_offset (vpe , i , vpe -> regs .queue0_rb_wptr_hi ),
726
+ upper_32_bits (ring -> wptr << 2 ));
727
+ }
718
728
}
719
729
}
720
730
0 commit comments