@@ -1242,6 +1242,24 @@ static void init_interrupts(struct device_queue_manager *dqm)
1242
1242
dqm -> dev -> kfd2kgd -> init_interrupts (dqm -> dev -> adev , i );
1243
1243
}
1244
1244
1245
+ static void init_sdma_bitmaps (struct device_queue_manager * dqm )
1246
+ {
1247
+ unsigned int num_sdma_queues =
1248
+ min_t (unsigned int , sizeof (dqm -> sdma_bitmap )* 8 ,
1249
+ get_num_sdma_queues (dqm ));
1250
+ unsigned int num_xgmi_sdma_queues =
1251
+ min_t (unsigned int , sizeof (dqm -> xgmi_sdma_bitmap )* 8 ,
1252
+ get_num_xgmi_sdma_queues (dqm ));
1253
+
1254
+ if (num_sdma_queues )
1255
+ dqm -> sdma_bitmap = GENMASK_ULL (num_sdma_queues - 1 , 0 );
1256
+ if (num_xgmi_sdma_queues )
1257
+ dqm -> xgmi_sdma_bitmap = GENMASK_ULL (num_xgmi_sdma_queues - 1 , 0 );
1258
+
1259
+ dqm -> sdma_bitmap &= ~get_reserved_sdma_queues_bitmap (dqm );
1260
+ pr_info ("sdma_bitmap: %llx\n" , dqm -> sdma_bitmap );
1261
+ }
1262
+
1245
1263
static int initialize_nocpsch (struct device_queue_manager * dqm )
1246
1264
{
1247
1265
int pipe , queue ;
@@ -1270,11 +1288,7 @@ static int initialize_nocpsch(struct device_queue_manager *dqm)
1270
1288
1271
1289
memset (dqm -> vmid_pasid , 0 , sizeof (dqm -> vmid_pasid ));
1272
1290
1273
- dqm -> sdma_bitmap = ~0ULL >> (64 - get_num_sdma_queues (dqm ));
1274
- dqm -> sdma_bitmap &= ~(get_reserved_sdma_queues_bitmap (dqm ));
1275
- pr_info ("sdma_bitmap: %llx\n" , dqm -> sdma_bitmap );
1276
-
1277
- dqm -> xgmi_sdma_bitmap = ~0ULL >> (64 - get_num_xgmi_sdma_queues (dqm ));
1291
+ init_sdma_bitmaps (dqm );
1278
1292
1279
1293
return 0 ;
1280
1294
}
@@ -1452,9 +1466,6 @@ static int set_sched_resources(struct device_queue_manager *dqm)
1452
1466
1453
1467
static int initialize_cpsch (struct device_queue_manager * dqm )
1454
1468
{
1455
- uint64_t num_sdma_queues ;
1456
- uint64_t num_xgmi_sdma_queues ;
1457
-
1458
1469
pr_debug ("num of pipes: %d\n" , get_pipes_per_mec (dqm ));
1459
1470
1460
1471
mutex_init (& dqm -> lock_hidden );
@@ -1463,24 +1474,10 @@ static int initialize_cpsch(struct device_queue_manager *dqm)
1463
1474
dqm -> active_cp_queue_count = 0 ;
1464
1475
dqm -> gws_queue_count = 0 ;
1465
1476
dqm -> active_runlist = false;
1466
-
1467
- num_sdma_queues = get_num_sdma_queues (dqm );
1468
- if (num_sdma_queues >= BITS_PER_TYPE (dqm -> sdma_bitmap ))
1469
- dqm -> sdma_bitmap = ULLONG_MAX ;
1470
- else
1471
- dqm -> sdma_bitmap = (BIT_ULL (num_sdma_queues ) - 1 );
1472
-
1473
- dqm -> sdma_bitmap &= ~(get_reserved_sdma_queues_bitmap (dqm ));
1474
- pr_info ("sdma_bitmap: %llx\n" , dqm -> sdma_bitmap );
1475
-
1476
- num_xgmi_sdma_queues = get_num_xgmi_sdma_queues (dqm );
1477
- if (num_xgmi_sdma_queues >= BITS_PER_TYPE (dqm -> xgmi_sdma_bitmap ))
1478
- dqm -> xgmi_sdma_bitmap = ULLONG_MAX ;
1479
- else
1480
- dqm -> xgmi_sdma_bitmap = (BIT_ULL (num_xgmi_sdma_queues ) - 1 );
1481
-
1482
1477
INIT_WORK (& dqm -> hw_exception_work , kfd_process_hw_exception );
1483
1478
1479
+ init_sdma_bitmaps (dqm );
1480
+
1484
1481
return 0 ;
1485
1482
}
1486
1483
0 commit comments