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

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu: Add amdgpu_vcn_sched_mask debugfs

Add debugfs entry to enable or disable job submission to
specific vcn instances. The entry is created only when
there is more than an instance and is unified queue type.

Signed-off-by: Sathishkumar S <sathishkumar.sundararaju@amd.com>
Reviewed-by: Jesse Zhang <jesse.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Sathishkumar S and committed by
Alex Deucher
de258d06 9db3aed8

+70
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
··· 2095 2095 if (amdgpu_umsch_mm & amdgpu_umsch_mm_fwlog) 2096 2096 amdgpu_debugfs_umsch_fwlog_init(adev, &adev->umsch_mm); 2097 2097 2098 + amdgpu_debugfs_vcn_sched_mask_init(adev); 2098 2099 amdgpu_debugfs_jpeg_sched_mask_init(adev); 2099 2100 amdgpu_debugfs_gfx_sched_mask_init(adev); 2100 2101 amdgpu_debugfs_compute_sched_mask_init(adev);
+68
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
··· 1320 1320 device_remove_file(adev->dev, &dev_attr_vcn_reset_mask); 1321 1321 } 1322 1322 } 1323 + 1324 + /* 1325 + * debugfs to enable/disable vcn job submission to specific core or 1326 + * instance. It is created only if the queue type is unified. 1327 + */ 1328 + #if defined(CONFIG_DEBUG_FS) 1329 + static int amdgpu_debugfs_vcn_sched_mask_set(void *data, u64 val) 1330 + { 1331 + struct amdgpu_device *adev = (struct amdgpu_device *)data; 1332 + u32 i; 1333 + u64 mask; 1334 + struct amdgpu_ring *ring; 1335 + 1336 + if (!adev) 1337 + return -ENODEV; 1338 + 1339 + mask = (1ULL << adev->vcn.num_vcn_inst) - 1; 1340 + if ((val & mask) == 0) 1341 + return -EINVAL; 1342 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1343 + ring = &adev->vcn.inst[i].ring_enc[0]; 1344 + if (val & (1ULL << i)) 1345 + ring->sched.ready = true; 1346 + else 1347 + ring->sched.ready = false; 1348 + } 1349 + /* publish sched.ready flag update effective immediately across smp */ 1350 + smp_rmb(); 1351 + return 0; 1352 + } 1353 + 1354 + static int amdgpu_debugfs_vcn_sched_mask_get(void *data, u64 *val) 1355 + { 1356 + struct amdgpu_device *adev = (struct amdgpu_device *)data; 1357 + u32 i; 1358 + u64 mask = 0; 1359 + struct amdgpu_ring *ring; 1360 + 1361 + if (!adev) 1362 + return -ENODEV; 1363 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1364 + ring = &adev->vcn.inst[i].ring_enc[0]; 1365 + if (ring->sched.ready) 1366 + mask |= 1ULL << i; 1367 + } 1368 + *val = mask; 1369 + return 0; 1370 + } 1371 + 1372 + DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_debugfs_vcn_sched_mask_fops, 1373 + amdgpu_debugfs_vcn_sched_mask_get, 1374 + amdgpu_debugfs_vcn_sched_mask_set, "%llx\n"); 1375 + #endif 1376 + 1377 + void amdgpu_debugfs_vcn_sched_mask_init(struct amdgpu_device *adev) 1378 + { 1379 + #if defined(CONFIG_DEBUG_FS) 1380 + struct drm_minor *minor = adev_to_drm(adev)->primary; 1381 + struct dentry *root = minor->debugfs_root; 1382 + char name[32]; 1383 + 1384 + if (adev->vcn.num_vcn_inst <= 1 || !adev->vcn.using_unified_queue) 1385 + return; 1386 + sprintf(name, "amdgpu_vcn_sched_mask"); 1387 + debugfs_create_file(name, 0600, root, adev, 1388 + &amdgpu_debugfs_vcn_sched_mask_fops); 1389 + #endif 1390 + }
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
··· 523 523 int amdgpu_vcn_save_vcpu_bo(struct amdgpu_device *adev); 524 524 int amdgpu_vcn_sysfs_reset_mask_init(struct amdgpu_device *adev); 525 525 void amdgpu_vcn_sysfs_reset_mask_fini(struct amdgpu_device *adev); 526 + void amdgpu_debugfs_vcn_sched_mask_init(struct amdgpu_device *adev); 526 527 527 528 #endif