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

drm/amdgpu: rework IP block registration (v2)

This makes it easier to replace specific IP blocks on
asics for handling virtual_dce, DAL, etc. and for building
IP lists for hw or tables. This also stored the status
information in the same structure.

v2: split out spelling fix into a separate patch
add a function to add IPs to the list

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

+924 -1935
+25 -17
drivers/gpu/drm/amd/amdgpu/amdgpu.h
··· 195 195 bool amdgpu_is_idle(struct amdgpu_device *adev, 196 196 enum amd_ip_block_type block_type); 197 197 198 + #define AMDGPU_MAX_IP_NUM 16 199 + 200 + struct amdgpu_ip_block_status { 201 + bool valid; 202 + bool sw; 203 + bool hw; 204 + bool late_initialized; 205 + bool hang; 206 + }; 207 + 198 208 struct amdgpu_ip_block_version { 199 - enum amd_ip_block_type type; 200 - u32 major; 201 - u32 minor; 202 - u32 rev; 209 + const enum amd_ip_block_type type; 210 + const u32 major; 211 + const u32 minor; 212 + const u32 rev; 203 213 const struct amd_ip_funcs *funcs; 214 + }; 215 + 216 + struct amdgpu_ip_block { 217 + struct amdgpu_ip_block_status status; 218 + const struct amdgpu_ip_block_version *version; 204 219 }; 205 220 206 221 int amdgpu_ip_block_version_cmp(struct amdgpu_device *adev, 207 222 enum amd_ip_block_type type, 208 223 u32 major, u32 minor); 209 224 210 - const struct amdgpu_ip_block_version * amdgpu_get_ip_block( 211 - struct amdgpu_device *adev, 212 - enum amd_ip_block_type type); 225 + struct amdgpu_ip_block * amdgpu_get_ip_block(struct amdgpu_device *adev, 226 + enum amd_ip_block_type type); 227 + 228 + int amdgpu_ip_block_add(struct amdgpu_device *adev, 229 + const struct amdgpu_ip_block_version *ip_block_version); 213 230 214 231 /* provided by hw blocks that can move/clear data. e.g., gfx or sdma */ 215 232 struct amdgpu_buffer_funcs { ··· 1288 1271 typedef uint32_t (*amdgpu_block_rreg_t)(struct amdgpu_device*, uint32_t, uint32_t); 1289 1272 typedef void (*amdgpu_block_wreg_t)(struct amdgpu_device*, uint32_t, uint32_t, uint32_t); 1290 1273 1291 - struct amdgpu_ip_block_status { 1292 - bool valid; 1293 - bool sw; 1294 - bool hw; 1295 - bool late_initialized; 1296 - bool hang; 1297 - }; 1298 - 1299 1274 struct amdgpu_device { 1300 1275 struct device *dev; 1301 1276 struct drm_device *ddev; ··· 1443 1434 /* GDS */ 1444 1435 struct amdgpu_gds gds; 1445 1436 1446 - const struct amdgpu_ip_block_version *ip_blocks; 1437 + struct amdgpu_ip_block ip_blocks[AMDGPU_MAX_IP_NUM]; 1447 1438 int num_ip_blocks; 1448 - struct amdgpu_ip_block_status *ip_block_status; 1449 1439 struct mutex mn_lock; 1450 1440 DECLARE_HASHTABLE(mn_hash, 7); 1451 1441
+13 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
··· 265 265 266 266 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 267 267 268 - const struct amdgpu_ip_block_version *ip_version = 268 + const struct amdgpu_ip_block *ip_block = 269 269 amdgpu_get_ip_block(adev, AMD_IP_BLOCK_TYPE_ACP); 270 270 271 - if (!ip_version) 271 + if (!ip_block) 272 272 return -EINVAL; 273 273 274 274 r = amd_acp_hw_init(adev->acp.cgs_device, 275 - ip_version->major, ip_version->minor); 275 + ip_block->version->major, ip_block->version->minor); 276 276 /* -ENODEV means board uses AZ rather than ACP */ 277 277 if (r == -ENODEV) 278 278 return 0; ··· 456 456 return 0; 457 457 } 458 458 459 - const struct amd_ip_funcs acp_ip_funcs = { 459 + static const struct amd_ip_funcs acp_ip_funcs = { 460 460 .name = "acp_ip", 461 461 .early_init = acp_early_init, 462 462 .late_init = NULL, ··· 471 471 .soft_reset = acp_soft_reset, 472 472 .set_clockgating_state = acp_set_clockgating_state, 473 473 .set_powergating_state = acp_set_powergating_state, 474 + }; 475 + 476 + const struct amdgpu_ip_block_version acp_ip_block = 477 + { 478 + .type = AMD_IP_BLOCK_TYPE_ACP, 479 + .major = 2, 480 + .minor = 2, 481 + .rev = 0, 482 + .funcs = &acp_ip_funcs, 474 483 };
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_acp.h
··· 37 37 struct acp_pm_domain *acp_genpd; 38 38 }; 39 39 40 - extern const struct amd_ip_funcs acp_ip_funcs; 40 + extern const struct amdgpu_ip_block_version acp_ip_block; 41 41 42 42 #endif /* __AMDGPU_ACP_H__ */
+6 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
··· 626 626 int i, r = -1; 627 627 628 628 for (i = 0; i < adev->num_ip_blocks; i++) { 629 - if (!adev->ip_block_status[i].valid) 629 + if (!adev->ip_blocks[i].status.valid) 630 630 continue; 631 631 632 - if (adev->ip_blocks[i].type == block_type) { 633 - r = adev->ip_blocks[i].funcs->set_clockgating_state( 632 + if (adev->ip_blocks[i].version->type == block_type) { 633 + r = adev->ip_blocks[i].version->funcs->set_clockgating_state( 634 634 (void *)adev, 635 635 state); 636 636 break; ··· 647 647 int i, r = -1; 648 648 649 649 for (i = 0; i < adev->num_ip_blocks; i++) { 650 - if (!adev->ip_block_status[i].valid) 650 + if (!adev->ip_blocks[i].status.valid) 651 651 continue; 652 652 653 - if (adev->ip_blocks[i].type == block_type) { 654 - r = adev->ip_blocks[i].funcs->set_powergating_state( 653 + if (adev->ip_blocks[i].version->type == block_type) { 654 + r = adev->ip_blocks[i].version->funcs->set_powergating_state( 655 655 (void *)adev, 656 656 state); 657 657 break;
+138 -122
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 1133 1133 int i, r = 0; 1134 1134 1135 1135 for (i = 0; i < adev->num_ip_blocks; i++) { 1136 - if (!adev->ip_block_status[i].valid) 1136 + if (!adev->ip_blocks[i].status.valid) 1137 1137 continue; 1138 - if (adev->ip_blocks[i].type == block_type) { 1139 - r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, 1140 - state); 1138 + if (adev->ip_blocks[i].version->type == block_type) { 1139 + r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1140 + state); 1141 1141 if (r) 1142 1142 return r; 1143 1143 break; ··· 1153 1153 int i, r = 0; 1154 1154 1155 1155 for (i = 0; i < adev->num_ip_blocks; i++) { 1156 - if (!adev->ip_block_status[i].valid) 1156 + if (!adev->ip_blocks[i].status.valid) 1157 1157 continue; 1158 - if (adev->ip_blocks[i].type == block_type) { 1159 - r = adev->ip_blocks[i].funcs->set_powergating_state((void *)adev, 1160 - state); 1158 + if (adev->ip_blocks[i].version->type == block_type) { 1159 + r = adev->ip_blocks[i].version->funcs->set_powergating_state((void *)adev, 1160 + state); 1161 1161 if (r) 1162 1162 return r; 1163 1163 break; ··· 1172 1172 int i, r; 1173 1173 1174 1174 for (i = 0; i < adev->num_ip_blocks; i++) { 1175 - if (!adev->ip_block_status[i].valid) 1175 + if (!adev->ip_blocks[i].status.valid) 1176 1176 continue; 1177 - if (adev->ip_blocks[i].type == block_type) { 1178 - r = adev->ip_blocks[i].funcs->wait_for_idle((void *)adev); 1177 + if (adev->ip_blocks[i].version->type == block_type) { 1178 + r = adev->ip_blocks[i].version->funcs->wait_for_idle((void *)adev); 1179 1179 if (r) 1180 1180 return r; 1181 1181 break; ··· 1191 1191 int i; 1192 1192 1193 1193 for (i = 0; i < adev->num_ip_blocks; i++) { 1194 - if (!adev->ip_block_status[i].valid) 1194 + if (!adev->ip_blocks[i].status.valid) 1195 1195 continue; 1196 - if (adev->ip_blocks[i].type == block_type) 1197 - return adev->ip_blocks[i].funcs->is_idle((void *)adev); 1196 + if (adev->ip_blocks[i].version->type == block_type) 1197 + return adev->ip_blocks[i].version->funcs->is_idle((void *)adev); 1198 1198 } 1199 1199 return true; 1200 1200 1201 1201 } 1202 1202 1203 - const struct amdgpu_ip_block_version * amdgpu_get_ip_block( 1204 - struct amdgpu_device *adev, 1205 - enum amd_ip_block_type type) 1203 + struct amdgpu_ip_block * amdgpu_get_ip_block(struct amdgpu_device *adev, 1204 + enum amd_ip_block_type type) 1206 1205 { 1207 1206 int i; 1208 1207 1209 1208 for (i = 0; i < adev->num_ip_blocks; i++) 1210 - if (adev->ip_blocks[i].type == type) 1209 + if (adev->ip_blocks[i].version->type == type) 1211 1210 return &adev->ip_blocks[i]; 1212 1211 1213 1212 return NULL; ··· 1227 1228 enum amd_ip_block_type type, 1228 1229 u32 major, u32 minor) 1229 1230 { 1230 - const struct amdgpu_ip_block_version *ip_block; 1231 - ip_block = amdgpu_get_ip_block(adev, type); 1231 + struct amdgpu_ip_block *ip_block = amdgpu_get_ip_block(adev, type); 1232 1232 1233 - if (ip_block && ((ip_block->major > major) || 1234 - ((ip_block->major == major) && 1235 - (ip_block->minor >= minor)))) 1233 + if (ip_block && ((ip_block->version->major > major) || 1234 + ((ip_block->version->major == major) && 1235 + (ip_block->version->minor >= minor)))) 1236 1236 return 0; 1237 1237 1238 1238 return 1; 1239 + } 1240 + 1241 + /** 1242 + * amdgpu_ip_block_add 1243 + * 1244 + * @adev: amdgpu_device pointer 1245 + * @ip_block_version: pointer to the IP to add 1246 + * 1247 + * Adds the IP block driver information to the collection of IPs 1248 + * on the asic. 1249 + */ 1250 + int amdgpu_ip_block_add(struct amdgpu_device *adev, 1251 + const struct amdgpu_ip_block_version *ip_block_version) 1252 + { 1253 + if (!ip_block_version) 1254 + return -EINVAL; 1255 + 1256 + adev->ip_blocks[adev->num_ip_blocks++].version = ip_block_version; 1257 + 1258 + return 0; 1239 1259 } 1240 1260 1241 1261 static void amdgpu_device_enable_virtual_display(struct amdgpu_device *adev) ··· 1357 1339 return -EINVAL; 1358 1340 } 1359 1341 1360 - adev->ip_block_status = kcalloc(adev->num_ip_blocks, 1361 - sizeof(struct amdgpu_ip_block_status), GFP_KERNEL); 1362 - if (adev->ip_block_status == NULL) 1363 - return -ENOMEM; 1364 - 1365 - if (adev->ip_blocks == NULL) { 1366 - DRM_ERROR("No IP blocks found!\n"); 1367 - return r; 1368 - } 1369 - 1370 1342 for (i = 0; i < adev->num_ip_blocks; i++) { 1371 1343 if ((amdgpu_ip_block_mask & (1 << i)) == 0) { 1372 1344 DRM_ERROR("disabled ip block: %d\n", i); 1373 - adev->ip_block_status[i].valid = false; 1345 + adev->ip_blocks[i].status.valid = false; 1374 1346 } else { 1375 - if (adev->ip_blocks[i].funcs->early_init) { 1376 - r = adev->ip_blocks[i].funcs->early_init((void *)adev); 1347 + if (adev->ip_blocks[i].version->funcs->early_init) { 1348 + r = adev->ip_blocks[i].version->funcs->early_init((void *)adev); 1377 1349 if (r == -ENOENT) { 1378 - adev->ip_block_status[i].valid = false; 1350 + adev->ip_blocks[i].status.valid = false; 1379 1351 } else if (r) { 1380 - DRM_ERROR("early_init of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1352 + DRM_ERROR("early_init of IP block <%s> failed %d\n", 1353 + adev->ip_blocks[i].version->funcs->name, r); 1381 1354 return r; 1382 1355 } else { 1383 - adev->ip_block_status[i].valid = true; 1356 + adev->ip_blocks[i].status.valid = true; 1384 1357 } 1385 1358 } else { 1386 - adev->ip_block_status[i].valid = true; 1359 + adev->ip_blocks[i].status.valid = true; 1387 1360 } 1388 1361 } 1389 1362 } ··· 1390 1381 int i, r; 1391 1382 1392 1383 for (i = 0; i < adev->num_ip_blocks; i++) { 1393 - if (!adev->ip_block_status[i].valid) 1384 + if (!adev->ip_blocks[i].status.valid) 1394 1385 continue; 1395 - r = adev->ip_blocks[i].funcs->sw_init((void *)adev); 1386 + r = adev->ip_blocks[i].version->funcs->sw_init((void *)adev); 1396 1387 if (r) { 1397 - DRM_ERROR("sw_init of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1388 + DRM_ERROR("sw_init of IP block <%s> failed %d\n", 1389 + adev->ip_blocks[i].version->funcs->name, r); 1398 1390 return r; 1399 1391 } 1400 - adev->ip_block_status[i].sw = true; 1392 + adev->ip_blocks[i].status.sw = true; 1401 1393 /* need to do gmc hw init early so we can allocate gpu mem */ 1402 - if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_GMC) { 1394 + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { 1403 1395 r = amdgpu_vram_scratch_init(adev); 1404 1396 if (r) { 1405 1397 DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r); 1406 1398 return r; 1407 1399 } 1408 - r = adev->ip_blocks[i].funcs->hw_init((void *)adev); 1400 + r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev); 1409 1401 if (r) { 1410 1402 DRM_ERROR("hw_init %d failed %d\n", i, r); 1411 1403 return r; ··· 1416 1406 DRM_ERROR("amdgpu_wb_init failed %d\n", r); 1417 1407 return r; 1418 1408 } 1419 - adev->ip_block_status[i].hw = true; 1409 + adev->ip_blocks[i].status.hw = true; 1420 1410 } 1421 1411 } 1422 1412 1423 1413 for (i = 0; i < adev->num_ip_blocks; i++) { 1424 - if (!adev->ip_block_status[i].sw) 1414 + if (!adev->ip_blocks[i].status.sw) 1425 1415 continue; 1426 1416 /* gmc hw init is done early */ 1427 - if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_GMC) 1417 + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) 1428 1418 continue; 1429 - r = adev->ip_blocks[i].funcs->hw_init((void *)adev); 1419 + r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev); 1430 1420 if (r) { 1431 - DRM_ERROR("hw_init of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1421 + DRM_ERROR("hw_init of IP block <%s> failed %d\n", 1422 + adev->ip_blocks[i].version->funcs->name, r); 1432 1423 return r; 1433 1424 } 1434 - adev->ip_block_status[i].hw = true; 1425 + adev->ip_blocks[i].status.hw = true; 1435 1426 } 1436 1427 1437 1428 return 0; ··· 1443 1432 int i = 0, r; 1444 1433 1445 1434 for (i = 0; i < adev->num_ip_blocks; i++) { 1446 - if (!adev->ip_block_status[i].valid) 1435 + if (!adev->ip_blocks[i].status.valid) 1447 1436 continue; 1448 - if (adev->ip_blocks[i].funcs->late_init) { 1449 - r = adev->ip_blocks[i].funcs->late_init((void *)adev); 1437 + if (adev->ip_blocks[i].version->funcs->late_init) { 1438 + r = adev->ip_blocks[i].version->funcs->late_init((void *)adev); 1450 1439 if (r) { 1451 - DRM_ERROR("late_init of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1440 + DRM_ERROR("late_init of IP block <%s> failed %d\n", 1441 + adev->ip_blocks[i].version->funcs->name, r); 1452 1442 return r; 1453 1443 } 1454 - adev->ip_block_status[i].late_initialized = true; 1444 + adev->ip_blocks[i].status.late_initialized = true; 1455 1445 } 1456 1446 /* skip CG for VCE/UVD, it's handled specially */ 1457 - if (adev->ip_blocks[i].type != AMD_IP_BLOCK_TYPE_UVD && 1458 - adev->ip_blocks[i].type != AMD_IP_BLOCK_TYPE_VCE) { 1447 + if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD && 1448 + adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE) { 1459 1449 /* enable clockgating to save power */ 1460 - r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, 1461 - AMD_CG_STATE_GATE); 1450 + r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1451 + AMD_CG_STATE_GATE); 1462 1452 if (r) { 1463 1453 DRM_ERROR("set_clockgating_state(gate) of IP block <%s> failed %d\n", 1464 - adev->ip_blocks[i].funcs->name, r); 1454 + adev->ip_blocks[i].version->funcs->name, r); 1465 1455 return r; 1466 1456 } 1467 1457 } ··· 1477 1465 1478 1466 /* need to disable SMC first */ 1479 1467 for (i = 0; i < adev->num_ip_blocks; i++) { 1480 - if (!adev->ip_block_status[i].hw) 1468 + if (!adev->ip_blocks[i].status.hw) 1481 1469 continue; 1482 - if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_SMC) { 1470 + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) { 1483 1471 /* ungate blocks before hw fini so that we can shutdown the blocks safely */ 1484 - r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, 1485 - AMD_CG_STATE_UNGATE); 1472 + r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1473 + AMD_CG_STATE_UNGATE); 1486 1474 if (r) { 1487 1475 DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", 1488 - adev->ip_blocks[i].funcs->name, r); 1476 + adev->ip_blocks[i].version->funcs->name, r); 1489 1477 return r; 1490 1478 } 1491 - r = adev->ip_blocks[i].funcs->hw_fini((void *)adev); 1479 + r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev); 1492 1480 /* XXX handle errors */ 1493 1481 if (r) { 1494 1482 DRM_DEBUG("hw_fini of IP block <%s> failed %d\n", 1495 - adev->ip_blocks[i].funcs->name, r); 1483 + adev->ip_blocks[i].version->funcs->name, r); 1496 1484 } 1497 - adev->ip_block_status[i].hw = false; 1485 + adev->ip_blocks[i].status.hw = false; 1498 1486 break; 1499 1487 } 1500 1488 } 1501 1489 1502 1490 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1503 - if (!adev->ip_block_status[i].hw) 1491 + if (!adev->ip_blocks[i].status.hw) 1504 1492 continue; 1505 - if (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_GMC) { 1493 + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { 1506 1494 amdgpu_wb_fini(adev); 1507 1495 amdgpu_vram_scratch_fini(adev); 1508 1496 } 1509 1497 /* ungate blocks before hw fini so that we can shutdown the blocks safely */ 1510 - r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, 1511 - AMD_CG_STATE_UNGATE); 1498 + r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1499 + AMD_CG_STATE_UNGATE); 1512 1500 if (r) { 1513 - DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1501 + DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", 1502 + adev->ip_blocks[i].version->funcs->name, r); 1514 1503 return r; 1515 1504 } 1516 - r = adev->ip_blocks[i].funcs->hw_fini((void *)adev); 1505 + r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev); 1517 1506 /* XXX handle errors */ 1518 1507 if (r) { 1519 - DRM_DEBUG("hw_fini of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1508 + DRM_DEBUG("hw_fini of IP block <%s> failed %d\n", 1509 + adev->ip_blocks[i].version->funcs->name, r); 1520 1510 } 1521 - adev->ip_block_status[i].hw = false; 1511 + adev->ip_blocks[i].status.hw = false; 1522 1512 } 1523 1513 1524 1514 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1525 - if (!adev->ip_block_status[i].sw) 1515 + if (!adev->ip_blocks[i].status.sw) 1526 1516 continue; 1527 - r = adev->ip_blocks[i].funcs->sw_fini((void *)adev); 1517 + r = adev->ip_blocks[i].version->funcs->sw_fini((void *)adev); 1528 1518 /* XXX handle errors */ 1529 1519 if (r) { 1530 - DRM_DEBUG("sw_fini of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1520 + DRM_DEBUG("sw_fini of IP block <%s> failed %d\n", 1521 + adev->ip_blocks[i].version->funcs->name, r); 1531 1522 } 1532 - adev->ip_block_status[i].sw = false; 1533 - adev->ip_block_status[i].valid = false; 1523 + adev->ip_blocks[i].status.sw = false; 1524 + adev->ip_blocks[i].status.valid = false; 1534 1525 } 1535 1526 1536 1527 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1537 - if (!adev->ip_block_status[i].late_initialized) 1528 + if (!adev->ip_blocks[i].status.late_initialized) 1538 1529 continue; 1539 - if (adev->ip_blocks[i].funcs->late_fini) 1540 - adev->ip_blocks[i].funcs->late_fini((void *)adev); 1541 - adev->ip_block_status[i].late_initialized = false; 1530 + if (adev->ip_blocks[i].version->funcs->late_fini) 1531 + adev->ip_blocks[i].version->funcs->late_fini((void *)adev); 1532 + adev->ip_blocks[i].status.late_initialized = false; 1542 1533 } 1543 1534 1544 1535 return 0; ··· 1559 1544 } 1560 1545 1561 1546 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1562 - if (!adev->ip_block_status[i].valid) 1547 + if (!adev->ip_blocks[i].status.valid) 1563 1548 continue; 1564 1549 /* ungate blocks so that suspend can properly shut them down */ 1565 1550 if (i != AMD_IP_BLOCK_TYPE_SMC) { 1566 - r = adev->ip_blocks[i].funcs->set_clockgating_state((void *)adev, 1567 - AMD_CG_STATE_UNGATE); 1551 + r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1552 + AMD_CG_STATE_UNGATE); 1568 1553 if (r) { 1569 - DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1554 + DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", 1555 + adev->ip_blocks[i].version->funcs->name, r); 1570 1556 } 1571 1557 } 1572 1558 /* XXX handle errors */ 1573 - r = adev->ip_blocks[i].funcs->suspend(adev); 1559 + r = adev->ip_blocks[i].version->funcs->suspend(adev); 1574 1560 /* XXX handle errors */ 1575 1561 if (r) { 1576 - DRM_ERROR("suspend of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1562 + DRM_ERROR("suspend of IP block <%s> failed %d\n", 1563 + adev->ip_blocks[i].version->funcs->name, r); 1577 1564 } 1578 1565 } 1579 1566 ··· 1587 1570 int i, r; 1588 1571 1589 1572 for (i = 0; i < adev->num_ip_blocks; i++) { 1590 - if (!adev->ip_block_status[i].valid) 1573 + if (!adev->ip_blocks[i].status.valid) 1591 1574 continue; 1592 - r = adev->ip_blocks[i].funcs->resume(adev); 1575 + r = adev->ip_blocks[i].version->funcs->resume(adev); 1593 1576 if (r) { 1594 - DRM_ERROR("resume of IP block <%s> failed %d\n", adev->ip_blocks[i].funcs->name, r); 1577 + DRM_ERROR("resume of IP block <%s> failed %d\n", 1578 + adev->ip_blocks[i].version->funcs->name, r); 1595 1579 return r; 1596 1580 } 1597 1581 } ··· 1903 1885 amdgpu_fence_driver_fini(adev); 1904 1886 amdgpu_fbdev_fini(adev); 1905 1887 r = amdgpu_fini(adev); 1906 - kfree(adev->ip_block_status); 1907 - adev->ip_block_status = NULL; 1908 1888 adev->accel_working = false; 1909 1889 /* free i2c buses */ 1910 1890 amdgpu_i2c_fini(adev); ··· 2141 2125 bool asic_hang = false; 2142 2126 2143 2127 for (i = 0; i < adev->num_ip_blocks; i++) { 2144 - if (!adev->ip_block_status[i].valid) 2128 + if (!adev->ip_blocks[i].status.valid) 2145 2129 continue; 2146 - if (adev->ip_blocks[i].funcs->check_soft_reset) 2147 - adev->ip_block_status[i].hang = 2148 - adev->ip_blocks[i].funcs->check_soft_reset(adev); 2149 - if (adev->ip_block_status[i].hang) { 2150 - DRM_INFO("IP block:%d is hang!\n", i); 2130 + if (adev->ip_blocks[i].version->funcs->check_soft_reset) 2131 + adev->ip_blocks[i].status.hang = 2132 + adev->ip_blocks[i].version->funcs->check_soft_reset(adev); 2133 + if (adev->ip_blocks[i].status.hang) { 2134 + DRM_INFO("IP block:%s is hung!\n", adev->ip_blocks[i].version->funcs->name); 2151 2135 asic_hang = true; 2152 2136 } 2153 2137 } ··· 2159 2143 int i, r = 0; 2160 2144 2161 2145 for (i = 0; i < adev->num_ip_blocks; i++) { 2162 - if (!adev->ip_block_status[i].valid) 2146 + if (!adev->ip_blocks[i].status.valid) 2163 2147 continue; 2164 - if (adev->ip_block_status[i].hang && 2165 - adev->ip_blocks[i].funcs->pre_soft_reset) { 2166 - r = adev->ip_blocks[i].funcs->pre_soft_reset(adev); 2148 + if (adev->ip_blocks[i].status.hang && 2149 + adev->ip_blocks[i].version->funcs->pre_soft_reset) { 2150 + r = adev->ip_blocks[i].version->funcs->pre_soft_reset(adev); 2167 2151 if (r) 2168 2152 return r; 2169 2153 } ··· 2177 2161 int i; 2178 2162 2179 2163 for (i = 0; i < adev->num_ip_blocks; i++) { 2180 - if (!adev->ip_block_status[i].valid) 2164 + if (!adev->ip_blocks[i].status.valid) 2181 2165 continue; 2182 - if ((adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_GMC) || 2183 - (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_SMC) || 2184 - (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_ACP) || 2185 - (adev->ip_blocks[i].type == AMD_IP_BLOCK_TYPE_DCE)) { 2186 - if (adev->ip_block_status[i].hang) { 2166 + if ((adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) || 2167 + (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) || 2168 + (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_ACP) || 2169 + (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE)) { 2170 + if (adev->ip_blocks[i].status.hang) { 2187 2171 DRM_INFO("Some block need full reset!\n"); 2188 2172 return true; 2189 2173 } ··· 2197 2181 int i, r = 0; 2198 2182 2199 2183 for (i = 0; i < adev->num_ip_blocks; i++) { 2200 - if (!adev->ip_block_status[i].valid) 2184 + if (!adev->ip_blocks[i].status.valid) 2201 2185 continue; 2202 - if (adev->ip_block_status[i].hang && 2203 - adev->ip_blocks[i].funcs->soft_reset) { 2204 - r = adev->ip_blocks[i].funcs->soft_reset(adev); 2186 + if (adev->ip_blocks[i].status.hang && 2187 + adev->ip_blocks[i].version->funcs->soft_reset) { 2188 + r = adev->ip_blocks[i].version->funcs->soft_reset(adev); 2205 2189 if (r) 2206 2190 return r; 2207 2191 } ··· 2215 2199 int i, r = 0; 2216 2200 2217 2201 for (i = 0; i < adev->num_ip_blocks; i++) { 2218 - if (!adev->ip_block_status[i].valid) 2202 + if (!adev->ip_blocks[i].status.valid) 2219 2203 continue; 2220 - if (adev->ip_block_status[i].hang && 2221 - adev->ip_blocks[i].funcs->post_soft_reset) 2222 - r = adev->ip_blocks[i].funcs->post_soft_reset(adev); 2204 + if (adev->ip_blocks[i].status.hang && 2205 + adev->ip_blocks[i].version->funcs->post_soft_reset) 2206 + r = adev->ip_blocks[i].version->funcs->post_soft_reset(adev); 2223 2207 if (r) 2224 2208 return r; 2225 2209 }
+6 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
··· 306 306 } 307 307 308 308 for (i = 0; i < adev->num_ip_blocks; i++) { 309 - if (adev->ip_blocks[i].type == type && 310 - adev->ip_block_status[i].valid) { 311 - ip.hw_ip_version_major = adev->ip_blocks[i].major; 312 - ip.hw_ip_version_minor = adev->ip_blocks[i].minor; 309 + if (adev->ip_blocks[i].version->type == type && 310 + adev->ip_blocks[i].status.valid) { 311 + ip.hw_ip_version_major = adev->ip_blocks[i].version->major; 312 + ip.hw_ip_version_minor = adev->ip_blocks[i].version->minor; 313 313 ip.capabilities_flags = 0; 314 314 ip.available_rings = ring_mask; 315 315 ip.ib_start_alignment = ib_start_alignment; ··· 345 345 } 346 346 347 347 for (i = 0; i < adev->num_ip_blocks; i++) 348 - if (adev->ip_blocks[i].type == type && 349 - adev->ip_block_status[i].valid && 348 + if (adev->ip_blocks[i].version->type == type && 349 + adev->ip_blocks[i].status.valid && 350 350 count < AMDGPU_HW_IP_INSTANCE_MAX_COUNT) 351 351 count++; 352 352
+10 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
··· 299 299 return ret; 300 300 } 301 301 302 - const struct amd_ip_funcs amdgpu_pp_ip_funcs = { 302 + static const struct amd_ip_funcs amdgpu_pp_ip_funcs = { 303 303 .name = "amdgpu_powerplay", 304 304 .early_init = amdgpu_pp_early_init, 305 305 .late_init = amdgpu_pp_late_init, ··· 315 315 .soft_reset = amdgpu_pp_soft_reset, 316 316 .set_clockgating_state = amdgpu_pp_set_clockgating_state, 317 317 .set_powergating_state = amdgpu_pp_set_powergating_state, 318 + }; 319 + 320 + const struct amdgpu_ip_block_version amdgpu_pp_ip_block = 321 + { 322 + .type = AMD_IP_BLOCK_TYPE_SMC, 323 + .major = 1, 324 + .minor = 0, 325 + .rev = 0, 326 + .funcs = &amdgpu_pp_ip_funcs, 318 327 };
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.h
··· 28 28 29 29 #include "amd_shared.h" 30 30 31 - extern const struct amd_ip_funcs amdgpu_pp_ip_funcs; 31 + extern const struct amdgpu_ip_block_version amdgpu_pp_ip_block; 32 32 33 33 #endif /* __AMDGPU_POWERPLAY_H__ */
+3 -3
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
··· 346 346 static bool amdgpu_vm_ring_has_compute_vm_bug(struct amdgpu_ring *ring) 347 347 { 348 348 struct amdgpu_device *adev = ring->adev; 349 - const struct amdgpu_ip_block_version *ip_block; 349 + const struct amdgpu_ip_block *ip_block; 350 350 351 351 if (ring->funcs->type != AMDGPU_RING_TYPE_COMPUTE) 352 352 /* only compute rings */ ··· 356 356 if (!ip_block) 357 357 return false; 358 358 359 - if (ip_block->major <= 7) { 359 + if (ip_block->version->major <= 7) { 360 360 /* gfx7 has no workaround */ 361 361 return true; 362 - } else if (ip_block->major == 8) { 362 + } else if (ip_block->version->major == 8) { 363 363 if (adev->gfx.mec_fw_version >= 673) 364 364 /* gfx8 is fixed in MEC firmware 673 */ 365 365 return false;
+9
drivers/gpu/drm/amd/amdgpu/ci_dpm.c
··· 6663 6663 adev->pm.dpm.thermal.irq.num_types = AMDGPU_THERMAL_IRQ_LAST; 6664 6664 adev->pm.dpm.thermal.irq.funcs = &ci_dpm_irq_funcs; 6665 6665 } 6666 + 6667 + const struct amdgpu_ip_block_version ci_dpm_ip_block = 6668 + { 6669 + .type = AMD_IP_BLOCK_TYPE_SMC, 6670 + .major = 7, 6671 + .minor = 0, 6672 + .rev = 0, 6673 + .funcs = &ci_dpm_ip_funcs, 6674 + };
+77 -740
drivers/gpu/drm/amd/amdgpu/cik.c
··· 1641 1641 adev->virtualization.virtual_caps |= AMDGPU_PASSTHROUGH_MODE; 1642 1642 } 1643 1643 1644 - static const struct amdgpu_ip_block_version bonaire_ip_blocks[] = 1645 - { 1646 - /* ORDER MATTERS! */ 1647 - { 1648 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1649 - .major = 1, 1650 - .minor = 0, 1651 - .rev = 0, 1652 - .funcs = &cik_common_ip_funcs, 1653 - }, 1654 - { 1655 - .type = AMD_IP_BLOCK_TYPE_GMC, 1656 - .major = 7, 1657 - .minor = 0, 1658 - .rev = 0, 1659 - .funcs = &gmc_v7_0_ip_funcs, 1660 - }, 1661 - { 1662 - .type = AMD_IP_BLOCK_TYPE_IH, 1663 - .major = 2, 1664 - .minor = 0, 1665 - .rev = 0, 1666 - .funcs = &cik_ih_ip_funcs, 1667 - }, 1668 - { 1669 - .type = AMD_IP_BLOCK_TYPE_SMC, 1670 - .major = 7, 1671 - .minor = 0, 1672 - .rev = 0, 1673 - .funcs = &amdgpu_pp_ip_funcs, 1674 - }, 1675 - { 1676 - .type = AMD_IP_BLOCK_TYPE_DCE, 1677 - .major = 8, 1678 - .minor = 2, 1679 - .rev = 0, 1680 - .funcs = &dce_v8_0_ip_funcs, 1681 - }, 1682 - { 1683 - .type = AMD_IP_BLOCK_TYPE_GFX, 1684 - .major = 7, 1685 - .minor = 2, 1686 - .rev = 0, 1687 - .funcs = &gfx_v7_0_ip_funcs, 1688 - }, 1689 - { 1690 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1691 - .major = 2, 1692 - .minor = 0, 1693 - .rev = 0, 1694 - .funcs = &cik_sdma_ip_funcs, 1695 - }, 1696 - { 1697 - .type = AMD_IP_BLOCK_TYPE_UVD, 1698 - .major = 4, 1699 - .minor = 2, 1700 - .rev = 0, 1701 - .funcs = &uvd_v4_2_ip_funcs, 1702 - }, 1703 - { 1704 - .type = AMD_IP_BLOCK_TYPE_VCE, 1705 - .major = 2, 1706 - .minor = 0, 1707 - .rev = 0, 1708 - .funcs = &vce_v2_0_ip_funcs, 1709 - }, 1710 - }; 1711 - 1712 - static const struct amdgpu_ip_block_version bonaire_ip_blocks_vd[] = 1713 - { 1714 - /* ORDER MATTERS! */ 1715 - { 1716 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1717 - .major = 1, 1718 - .minor = 0, 1719 - .rev = 0, 1720 - .funcs = &cik_common_ip_funcs, 1721 - }, 1722 - { 1723 - .type = AMD_IP_BLOCK_TYPE_GMC, 1724 - .major = 7, 1725 - .minor = 0, 1726 - .rev = 0, 1727 - .funcs = &gmc_v7_0_ip_funcs, 1728 - }, 1729 - { 1730 - .type = AMD_IP_BLOCK_TYPE_IH, 1731 - .major = 2, 1732 - .minor = 0, 1733 - .rev = 0, 1734 - .funcs = &cik_ih_ip_funcs, 1735 - }, 1736 - { 1737 - .type = AMD_IP_BLOCK_TYPE_SMC, 1738 - .major = 7, 1739 - .minor = 0, 1740 - .rev = 0, 1741 - .funcs = &amdgpu_pp_ip_funcs, 1742 - }, 1743 - { 1744 - .type = AMD_IP_BLOCK_TYPE_DCE, 1745 - .major = 8, 1746 - .minor = 2, 1747 - .rev = 0, 1748 - .funcs = &dce_virtual_ip_funcs, 1749 - }, 1750 - { 1751 - .type = AMD_IP_BLOCK_TYPE_GFX, 1752 - .major = 7, 1753 - .minor = 2, 1754 - .rev = 0, 1755 - .funcs = &gfx_v7_0_ip_funcs, 1756 - }, 1757 - { 1758 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1759 - .major = 2, 1760 - .minor = 0, 1761 - .rev = 0, 1762 - .funcs = &cik_sdma_ip_funcs, 1763 - }, 1764 - { 1765 - .type = AMD_IP_BLOCK_TYPE_UVD, 1766 - .major = 4, 1767 - .minor = 2, 1768 - .rev = 0, 1769 - .funcs = &uvd_v4_2_ip_funcs, 1770 - }, 1771 - { 1772 - .type = AMD_IP_BLOCK_TYPE_VCE, 1773 - .major = 2, 1774 - .minor = 0, 1775 - .rev = 0, 1776 - .funcs = &vce_v2_0_ip_funcs, 1777 - }, 1778 - }; 1779 - 1780 - static const struct amdgpu_ip_block_version hawaii_ip_blocks[] = 1781 - { 1782 - /* ORDER MATTERS! */ 1783 - { 1784 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1785 - .major = 1, 1786 - .minor = 0, 1787 - .rev = 0, 1788 - .funcs = &cik_common_ip_funcs, 1789 - }, 1790 - { 1791 - .type = AMD_IP_BLOCK_TYPE_GMC, 1792 - .major = 7, 1793 - .minor = 0, 1794 - .rev = 0, 1795 - .funcs = &gmc_v7_0_ip_funcs, 1796 - }, 1797 - { 1798 - .type = AMD_IP_BLOCK_TYPE_IH, 1799 - .major = 2, 1800 - .minor = 0, 1801 - .rev = 0, 1802 - .funcs = &cik_ih_ip_funcs, 1803 - }, 1804 - { 1805 - .type = AMD_IP_BLOCK_TYPE_SMC, 1806 - .major = 7, 1807 - .minor = 0, 1808 - .rev = 0, 1809 - .funcs = &amdgpu_pp_ip_funcs, 1810 - }, 1811 - { 1812 - .type = AMD_IP_BLOCK_TYPE_DCE, 1813 - .major = 8, 1814 - .minor = 5, 1815 - .rev = 0, 1816 - .funcs = &dce_v8_0_ip_funcs, 1817 - }, 1818 - { 1819 - .type = AMD_IP_BLOCK_TYPE_GFX, 1820 - .major = 7, 1821 - .minor = 3, 1822 - .rev = 0, 1823 - .funcs = &gfx_v7_0_ip_funcs, 1824 - }, 1825 - { 1826 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1827 - .major = 2, 1828 - .minor = 0, 1829 - .rev = 0, 1830 - .funcs = &cik_sdma_ip_funcs, 1831 - }, 1832 - { 1833 - .type = AMD_IP_BLOCK_TYPE_UVD, 1834 - .major = 4, 1835 - .minor = 2, 1836 - .rev = 0, 1837 - .funcs = &uvd_v4_2_ip_funcs, 1838 - }, 1839 - { 1840 - .type = AMD_IP_BLOCK_TYPE_VCE, 1841 - .major = 2, 1842 - .minor = 0, 1843 - .rev = 0, 1844 - .funcs = &vce_v2_0_ip_funcs, 1845 - }, 1846 - }; 1847 - 1848 - static const struct amdgpu_ip_block_version hawaii_ip_blocks_vd[] = 1849 - { 1850 - /* ORDER MATTERS! */ 1851 - { 1852 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1853 - .major = 1, 1854 - .minor = 0, 1855 - .rev = 0, 1856 - .funcs = &cik_common_ip_funcs, 1857 - }, 1858 - { 1859 - .type = AMD_IP_BLOCK_TYPE_GMC, 1860 - .major = 7, 1861 - .minor = 0, 1862 - .rev = 0, 1863 - .funcs = &gmc_v7_0_ip_funcs, 1864 - }, 1865 - { 1866 - .type = AMD_IP_BLOCK_TYPE_IH, 1867 - .major = 2, 1868 - .minor = 0, 1869 - .rev = 0, 1870 - .funcs = &cik_ih_ip_funcs, 1871 - }, 1872 - { 1873 - .type = AMD_IP_BLOCK_TYPE_SMC, 1874 - .major = 7, 1875 - .minor = 0, 1876 - .rev = 0, 1877 - .funcs = &amdgpu_pp_ip_funcs, 1878 - }, 1879 - { 1880 - .type = AMD_IP_BLOCK_TYPE_DCE, 1881 - .major = 8, 1882 - .minor = 5, 1883 - .rev = 0, 1884 - .funcs = &dce_virtual_ip_funcs, 1885 - }, 1886 - { 1887 - .type = AMD_IP_BLOCK_TYPE_GFX, 1888 - .major = 7, 1889 - .minor = 3, 1890 - .rev = 0, 1891 - .funcs = &gfx_v7_0_ip_funcs, 1892 - }, 1893 - { 1894 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1895 - .major = 2, 1896 - .minor = 0, 1897 - .rev = 0, 1898 - .funcs = &cik_sdma_ip_funcs, 1899 - }, 1900 - { 1901 - .type = AMD_IP_BLOCK_TYPE_UVD, 1902 - .major = 4, 1903 - .minor = 2, 1904 - .rev = 0, 1905 - .funcs = &uvd_v4_2_ip_funcs, 1906 - }, 1907 - { 1908 - .type = AMD_IP_BLOCK_TYPE_VCE, 1909 - .major = 2, 1910 - .minor = 0, 1911 - .rev = 0, 1912 - .funcs = &vce_v2_0_ip_funcs, 1913 - }, 1914 - }; 1915 - 1916 - static const struct amdgpu_ip_block_version kabini_ip_blocks[] = 1917 - { 1918 - /* ORDER MATTERS! */ 1919 - { 1920 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1921 - .major = 1, 1922 - .minor = 0, 1923 - .rev = 0, 1924 - .funcs = &cik_common_ip_funcs, 1925 - }, 1926 - { 1927 - .type = AMD_IP_BLOCK_TYPE_GMC, 1928 - .major = 7, 1929 - .minor = 0, 1930 - .rev = 0, 1931 - .funcs = &gmc_v7_0_ip_funcs, 1932 - }, 1933 - { 1934 - .type = AMD_IP_BLOCK_TYPE_IH, 1935 - .major = 2, 1936 - .minor = 0, 1937 - .rev = 0, 1938 - .funcs = &cik_ih_ip_funcs, 1939 - }, 1940 - { 1941 - .type = AMD_IP_BLOCK_TYPE_SMC, 1942 - .major = 7, 1943 - .minor = 0, 1944 - .rev = 0, 1945 - .funcs = &amdgpu_pp_ip_funcs, 1946 - }, 1947 - { 1948 - .type = AMD_IP_BLOCK_TYPE_DCE, 1949 - .major = 8, 1950 - .minor = 3, 1951 - .rev = 0, 1952 - .funcs = &dce_v8_0_ip_funcs, 1953 - }, 1954 - { 1955 - .type = AMD_IP_BLOCK_TYPE_GFX, 1956 - .major = 7, 1957 - .minor = 2, 1958 - .rev = 0, 1959 - .funcs = &gfx_v7_0_ip_funcs, 1960 - }, 1961 - { 1962 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1963 - .major = 2, 1964 - .minor = 0, 1965 - .rev = 0, 1966 - .funcs = &cik_sdma_ip_funcs, 1967 - }, 1968 - { 1969 - .type = AMD_IP_BLOCK_TYPE_UVD, 1970 - .major = 4, 1971 - .minor = 2, 1972 - .rev = 0, 1973 - .funcs = &uvd_v4_2_ip_funcs, 1974 - }, 1975 - { 1976 - .type = AMD_IP_BLOCK_TYPE_VCE, 1977 - .major = 2, 1978 - .minor = 0, 1979 - .rev = 0, 1980 - .funcs = &vce_v2_0_ip_funcs, 1981 - }, 1982 - }; 1983 - 1984 - static const struct amdgpu_ip_block_version kabini_ip_blocks_vd[] = 1985 - { 1986 - /* ORDER MATTERS! */ 1987 - { 1988 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1989 - .major = 1, 1990 - .minor = 0, 1991 - .rev = 0, 1992 - .funcs = &cik_common_ip_funcs, 1993 - }, 1994 - { 1995 - .type = AMD_IP_BLOCK_TYPE_GMC, 1996 - .major = 7, 1997 - .minor = 0, 1998 - .rev = 0, 1999 - .funcs = &gmc_v7_0_ip_funcs, 2000 - }, 2001 - { 2002 - .type = AMD_IP_BLOCK_TYPE_IH, 2003 - .major = 2, 2004 - .minor = 0, 2005 - .rev = 0, 2006 - .funcs = &cik_ih_ip_funcs, 2007 - }, 2008 - { 2009 - .type = AMD_IP_BLOCK_TYPE_SMC, 2010 - .major = 7, 2011 - .minor = 0, 2012 - .rev = 0, 2013 - .funcs = &amdgpu_pp_ip_funcs, 2014 - }, 2015 - { 2016 - .type = AMD_IP_BLOCK_TYPE_DCE, 2017 - .major = 8, 2018 - .minor = 3, 2019 - .rev = 0, 2020 - .funcs = &dce_virtual_ip_funcs, 2021 - }, 2022 - { 2023 - .type = AMD_IP_BLOCK_TYPE_GFX, 2024 - .major = 7, 2025 - .minor = 2, 2026 - .rev = 0, 2027 - .funcs = &gfx_v7_0_ip_funcs, 2028 - }, 2029 - { 2030 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2031 - .major = 2, 2032 - .minor = 0, 2033 - .rev = 0, 2034 - .funcs = &cik_sdma_ip_funcs, 2035 - }, 2036 - { 2037 - .type = AMD_IP_BLOCK_TYPE_UVD, 2038 - .major = 4, 2039 - .minor = 2, 2040 - .rev = 0, 2041 - .funcs = &uvd_v4_2_ip_funcs, 2042 - }, 2043 - { 2044 - .type = AMD_IP_BLOCK_TYPE_VCE, 2045 - .major = 2, 2046 - .minor = 0, 2047 - .rev = 0, 2048 - .funcs = &vce_v2_0_ip_funcs, 2049 - }, 2050 - }; 2051 - 2052 - static const struct amdgpu_ip_block_version mullins_ip_blocks[] = 2053 - { 2054 - /* ORDER MATTERS! */ 2055 - { 2056 - .type = AMD_IP_BLOCK_TYPE_COMMON, 2057 - .major = 1, 2058 - .minor = 0, 2059 - .rev = 0, 2060 - .funcs = &cik_common_ip_funcs, 2061 - }, 2062 - { 2063 - .type = AMD_IP_BLOCK_TYPE_GMC, 2064 - .major = 7, 2065 - .minor = 0, 2066 - .rev = 0, 2067 - .funcs = &gmc_v7_0_ip_funcs, 2068 - }, 2069 - { 2070 - .type = AMD_IP_BLOCK_TYPE_IH, 2071 - .major = 2, 2072 - .minor = 0, 2073 - .rev = 0, 2074 - .funcs = &cik_ih_ip_funcs, 2075 - }, 2076 - { 2077 - .type = AMD_IP_BLOCK_TYPE_SMC, 2078 - .major = 7, 2079 - .minor = 0, 2080 - .rev = 0, 2081 - .funcs = &amdgpu_pp_ip_funcs, 2082 - }, 2083 - { 2084 - .type = AMD_IP_BLOCK_TYPE_DCE, 2085 - .major = 8, 2086 - .minor = 3, 2087 - .rev = 0, 2088 - .funcs = &dce_v8_0_ip_funcs, 2089 - }, 2090 - { 2091 - .type = AMD_IP_BLOCK_TYPE_GFX, 2092 - .major = 7, 2093 - .minor = 2, 2094 - .rev = 0, 2095 - .funcs = &gfx_v7_0_ip_funcs, 2096 - }, 2097 - { 2098 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2099 - .major = 2, 2100 - .minor = 0, 2101 - .rev = 0, 2102 - .funcs = &cik_sdma_ip_funcs, 2103 - }, 2104 - { 2105 - .type = AMD_IP_BLOCK_TYPE_UVD, 2106 - .major = 4, 2107 - .minor = 2, 2108 - .rev = 0, 2109 - .funcs = &uvd_v4_2_ip_funcs, 2110 - }, 2111 - { 2112 - .type = AMD_IP_BLOCK_TYPE_VCE, 2113 - .major = 2, 2114 - .minor = 0, 2115 - .rev = 0, 2116 - .funcs = &vce_v2_0_ip_funcs, 2117 - }, 2118 - }; 2119 - 2120 - static const struct amdgpu_ip_block_version mullins_ip_blocks_vd[] = 2121 - { 2122 - /* ORDER MATTERS! */ 2123 - { 2124 - .type = AMD_IP_BLOCK_TYPE_COMMON, 2125 - .major = 1, 2126 - .minor = 0, 2127 - .rev = 0, 2128 - .funcs = &cik_common_ip_funcs, 2129 - }, 2130 - { 2131 - .type = AMD_IP_BLOCK_TYPE_GMC, 2132 - .major = 7, 2133 - .minor = 0, 2134 - .rev = 0, 2135 - .funcs = &gmc_v7_0_ip_funcs, 2136 - }, 2137 - { 2138 - .type = AMD_IP_BLOCK_TYPE_IH, 2139 - .major = 2, 2140 - .minor = 0, 2141 - .rev = 0, 2142 - .funcs = &cik_ih_ip_funcs, 2143 - }, 2144 - { 2145 - .type = AMD_IP_BLOCK_TYPE_SMC, 2146 - .major = 7, 2147 - .minor = 0, 2148 - .rev = 0, 2149 - .funcs = &amdgpu_pp_ip_funcs, 2150 - }, 2151 - { 2152 - .type = AMD_IP_BLOCK_TYPE_DCE, 2153 - .major = 8, 2154 - .minor = 3, 2155 - .rev = 0, 2156 - .funcs = &dce_virtual_ip_funcs, 2157 - }, 2158 - { 2159 - .type = AMD_IP_BLOCK_TYPE_GFX, 2160 - .major = 7, 2161 - .minor = 2, 2162 - .rev = 0, 2163 - .funcs = &gfx_v7_0_ip_funcs, 2164 - }, 2165 - { 2166 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2167 - .major = 2, 2168 - .minor = 0, 2169 - .rev = 0, 2170 - .funcs = &cik_sdma_ip_funcs, 2171 - }, 2172 - { 2173 - .type = AMD_IP_BLOCK_TYPE_UVD, 2174 - .major = 4, 2175 - .minor = 2, 2176 - .rev = 0, 2177 - .funcs = &uvd_v4_2_ip_funcs, 2178 - }, 2179 - { 2180 - .type = AMD_IP_BLOCK_TYPE_VCE, 2181 - .major = 2, 2182 - .minor = 0, 2183 - .rev = 0, 2184 - .funcs = &vce_v2_0_ip_funcs, 2185 - }, 2186 - }; 2187 - 2188 - static const struct amdgpu_ip_block_version kaveri_ip_blocks[] = 2189 - { 2190 - /* ORDER MATTERS! */ 2191 - { 2192 - .type = AMD_IP_BLOCK_TYPE_COMMON, 2193 - .major = 1, 2194 - .minor = 0, 2195 - .rev = 0, 2196 - .funcs = &cik_common_ip_funcs, 2197 - }, 2198 - { 2199 - .type = AMD_IP_BLOCK_TYPE_GMC, 2200 - .major = 7, 2201 - .minor = 0, 2202 - .rev = 0, 2203 - .funcs = &gmc_v7_0_ip_funcs, 2204 - }, 2205 - { 2206 - .type = AMD_IP_BLOCK_TYPE_IH, 2207 - .major = 2, 2208 - .minor = 0, 2209 - .rev = 0, 2210 - .funcs = &cik_ih_ip_funcs, 2211 - }, 2212 - { 2213 - .type = AMD_IP_BLOCK_TYPE_SMC, 2214 - .major = 7, 2215 - .minor = 0, 2216 - .rev = 0, 2217 - .funcs = &amdgpu_pp_ip_funcs, 2218 - }, 2219 - { 2220 - .type = AMD_IP_BLOCK_TYPE_DCE, 2221 - .major = 8, 2222 - .minor = 1, 2223 - .rev = 0, 2224 - .funcs = &dce_v8_0_ip_funcs, 2225 - }, 2226 - { 2227 - .type = AMD_IP_BLOCK_TYPE_GFX, 2228 - .major = 7, 2229 - .minor = 1, 2230 - .rev = 0, 2231 - .funcs = &gfx_v7_0_ip_funcs, 2232 - }, 2233 - { 2234 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2235 - .major = 2, 2236 - .minor = 0, 2237 - .rev = 0, 2238 - .funcs = &cik_sdma_ip_funcs, 2239 - }, 2240 - { 2241 - .type = AMD_IP_BLOCK_TYPE_UVD, 2242 - .major = 4, 2243 - .minor = 2, 2244 - .rev = 0, 2245 - .funcs = &uvd_v4_2_ip_funcs, 2246 - }, 2247 - { 2248 - .type = AMD_IP_BLOCK_TYPE_VCE, 2249 - .major = 2, 2250 - .minor = 0, 2251 - .rev = 0, 2252 - .funcs = &vce_v2_0_ip_funcs, 2253 - }, 2254 - }; 2255 - 2256 - static const struct amdgpu_ip_block_version kaveri_ip_blocks_vd[] = 2257 - { 2258 - /* ORDER MATTERS! */ 2259 - { 2260 - .type = AMD_IP_BLOCK_TYPE_COMMON, 2261 - .major = 1, 2262 - .minor = 0, 2263 - .rev = 0, 2264 - .funcs = &cik_common_ip_funcs, 2265 - }, 2266 - { 2267 - .type = AMD_IP_BLOCK_TYPE_GMC, 2268 - .major = 7, 2269 - .minor = 0, 2270 - .rev = 0, 2271 - .funcs = &gmc_v7_0_ip_funcs, 2272 - }, 2273 - { 2274 - .type = AMD_IP_BLOCK_TYPE_IH, 2275 - .major = 2, 2276 - .minor = 0, 2277 - .rev = 0, 2278 - .funcs = &cik_ih_ip_funcs, 2279 - }, 2280 - { 2281 - .type = AMD_IP_BLOCK_TYPE_SMC, 2282 - .major = 7, 2283 - .minor = 0, 2284 - .rev = 0, 2285 - .funcs = &amdgpu_pp_ip_funcs, 2286 - }, 2287 - { 2288 - .type = AMD_IP_BLOCK_TYPE_DCE, 2289 - .major = 8, 2290 - .minor = 1, 2291 - .rev = 0, 2292 - .funcs = &dce_virtual_ip_funcs, 2293 - }, 2294 - { 2295 - .type = AMD_IP_BLOCK_TYPE_GFX, 2296 - .major = 7, 2297 - .minor = 1, 2298 - .rev = 0, 2299 - .funcs = &gfx_v7_0_ip_funcs, 2300 - }, 2301 - { 2302 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2303 - .major = 2, 2304 - .minor = 0, 2305 - .rev = 0, 2306 - .funcs = &cik_sdma_ip_funcs, 2307 - }, 2308 - { 2309 - .type = AMD_IP_BLOCK_TYPE_UVD, 2310 - .major = 4, 2311 - .minor = 2, 2312 - .rev = 0, 2313 - .funcs = &uvd_v4_2_ip_funcs, 2314 - }, 2315 - { 2316 - .type = AMD_IP_BLOCK_TYPE_VCE, 2317 - .major = 2, 2318 - .minor = 0, 2319 - .rev = 0, 2320 - .funcs = &vce_v2_0_ip_funcs, 2321 - }, 2322 - }; 2323 - 2324 - int cik_set_ip_blocks(struct amdgpu_device *adev) 2325 - { 2326 - if (adev->enable_virtual_display) { 2327 - switch (adev->asic_type) { 2328 - case CHIP_BONAIRE: 2329 - adev->ip_blocks = bonaire_ip_blocks_vd; 2330 - adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks_vd); 2331 - break; 2332 - case CHIP_HAWAII: 2333 - adev->ip_blocks = hawaii_ip_blocks_vd; 2334 - adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks_vd); 2335 - break; 2336 - case CHIP_KAVERI: 2337 - adev->ip_blocks = kaveri_ip_blocks_vd; 2338 - adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks_vd); 2339 - break; 2340 - case CHIP_KABINI: 2341 - adev->ip_blocks = kabini_ip_blocks_vd; 2342 - adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks_vd); 2343 - break; 2344 - case CHIP_MULLINS: 2345 - adev->ip_blocks = mullins_ip_blocks_vd; 2346 - adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks_vd); 2347 - break; 2348 - default: 2349 - /* FIXME: not supported yet */ 2350 - return -EINVAL; 2351 - } 2352 - } else { 2353 - switch (adev->asic_type) { 2354 - case CHIP_BONAIRE: 2355 - adev->ip_blocks = bonaire_ip_blocks; 2356 - adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks); 2357 - break; 2358 - case CHIP_HAWAII: 2359 - adev->ip_blocks = hawaii_ip_blocks; 2360 - adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks); 2361 - break; 2362 - case CHIP_KAVERI: 2363 - adev->ip_blocks = kaveri_ip_blocks; 2364 - adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks); 2365 - break; 2366 - case CHIP_KABINI: 2367 - adev->ip_blocks = kabini_ip_blocks; 2368 - adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks); 2369 - break; 2370 - case CHIP_MULLINS: 2371 - adev->ip_blocks = mullins_ip_blocks; 2372 - adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks); 2373 - break; 2374 - default: 2375 - /* FIXME: not supported yet */ 2376 - return -EINVAL; 2377 - } 2378 - } 2379 - 2380 - return 0; 2381 - } 2382 - 2383 1644 static const struct amdgpu_asic_funcs cik_asic_funcs = 2384 1645 { 2385 1646 .read_disabled_bios = &cik_read_disabled_bios, ··· 1873 2612 return 0; 1874 2613 } 1875 2614 1876 - const struct amd_ip_funcs cik_common_ip_funcs = { 2615 + static const struct amd_ip_funcs cik_common_ip_funcs = { 1877 2616 .name = "cik_common", 1878 2617 .early_init = cik_common_early_init, 1879 2618 .late_init = NULL, ··· 1889 2628 .set_clockgating_state = cik_common_set_clockgating_state, 1890 2629 .set_powergating_state = cik_common_set_powergating_state, 1891 2630 }; 2631 + 2632 + static const struct amdgpu_ip_block_version cik_common_ip_block = 2633 + { 2634 + .type = AMD_IP_BLOCK_TYPE_COMMON, 2635 + .major = 1, 2636 + .minor = 0, 2637 + .rev = 0, 2638 + .funcs = &cik_common_ip_funcs, 2639 + }; 2640 + 2641 + int cik_set_ip_blocks(struct amdgpu_device *adev) 2642 + { 2643 + switch (adev->asic_type) { 2644 + case CHIP_BONAIRE: 2645 + amdgpu_ip_block_add(adev, &cik_common_ip_block); 2646 + amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); 2647 + amdgpu_ip_block_add(adev, &cik_ih_ip_block); 2648 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2649 + if (adev->enable_virtual_display) 2650 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2651 + else 2652 + amdgpu_ip_block_add(adev, &dce_v8_2_ip_block); 2653 + amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); 2654 + amdgpu_ip_block_add(adev, &cik_sdma_ip_block); 2655 + amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); 2656 + amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); 2657 + break; 2658 + case CHIP_HAWAII: 2659 + amdgpu_ip_block_add(adev, &cik_common_ip_block); 2660 + amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); 2661 + amdgpu_ip_block_add(adev, &cik_ih_ip_block); 2662 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2663 + if (adev->enable_virtual_display) 2664 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2665 + else 2666 + amdgpu_ip_block_add(adev, &dce_v8_5_ip_block); 2667 + amdgpu_ip_block_add(adev, &gfx_v7_3_ip_block); 2668 + amdgpu_ip_block_add(adev, &cik_sdma_ip_block); 2669 + amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); 2670 + amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); 2671 + break; 2672 + case CHIP_KAVERI: 2673 + amdgpu_ip_block_add(adev, &cik_common_ip_block); 2674 + amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); 2675 + amdgpu_ip_block_add(adev, &cik_ih_ip_block); 2676 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2677 + if (adev->enable_virtual_display) 2678 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2679 + else 2680 + amdgpu_ip_block_add(adev, &dce_v8_1_ip_block); 2681 + amdgpu_ip_block_add(adev, &gfx_v7_1_ip_block); 2682 + amdgpu_ip_block_add(adev, &cik_sdma_ip_block); 2683 + amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); 2684 + amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); 2685 + break; 2686 + case CHIP_KABINI: 2687 + case CHIP_MULLINS: 2688 + amdgpu_ip_block_add(adev, &cik_common_ip_block); 2689 + amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); 2690 + amdgpu_ip_block_add(adev, &cik_ih_ip_block); 2691 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2692 + if (adev->enable_virtual_display) 2693 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2694 + else 2695 + amdgpu_ip_block_add(adev, &dce_v8_3_ip_block); 2696 + amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); 2697 + amdgpu_ip_block_add(adev, &cik_sdma_ip_block); 2698 + amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); 2699 + amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); 2700 + break; 2701 + default: 2702 + /* FIXME: not supported yet */ 2703 + return -EINVAL; 2704 + } 2705 + return 0; 2706 + }
-2
drivers/gpu/drm/amd/amdgpu/cik.h
··· 24 24 #ifndef __CIK_H__ 25 25 #define __CIK_H__ 26 26 27 - extern const struct amd_ip_funcs cik_common_ip_funcs; 28 - 29 27 void cik_srbm_select(struct amdgpu_device *adev, 30 28 u32 me, u32 pipe, u32 queue, u32 vmid); 31 29 int cik_set_ip_blocks(struct amdgpu_device *adev);
+10 -1
drivers/gpu/drm/amd/amdgpu/cik_ih.c
··· 413 413 return 0; 414 414 } 415 415 416 - const struct amd_ip_funcs cik_ih_ip_funcs = { 416 + static const struct amd_ip_funcs cik_ih_ip_funcs = { 417 417 .name = "cik_ih", 418 418 .early_init = cik_ih_early_init, 419 419 .late_init = NULL, ··· 441 441 if (adev->irq.ih_funcs == NULL) 442 442 adev->irq.ih_funcs = &cik_ih_funcs; 443 443 } 444 + 445 + const struct amdgpu_ip_block_version cik_ih_ip_block = 446 + { 447 + .type = AMD_IP_BLOCK_TYPE_IH, 448 + .major = 2, 449 + .minor = 0, 450 + .rev = 0, 451 + .funcs = &cik_ih_ip_funcs, 452 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/cik_ih.h
··· 24 24 #ifndef __CIK_IH_H__ 25 25 #define __CIK_IH_H__ 26 26 27 - extern const struct amd_ip_funcs cik_ih_ip_funcs; 27 + extern const struct amdgpu_ip_block_version cik_ih_ip_block; 28 28 29 29 #endif
+10 -1
drivers/gpu/drm/amd/amdgpu/cik_sdma.c
··· 1190 1190 return 0; 1191 1191 } 1192 1192 1193 - const struct amd_ip_funcs cik_sdma_ip_funcs = { 1193 + static const struct amd_ip_funcs cik_sdma_ip_funcs = { 1194 1194 .name = "cik_sdma", 1195 1195 .early_init = cik_sdma_early_init, 1196 1196 .late_init = NULL, ··· 1342 1342 adev->vm_manager.vm_pte_num_rings = adev->sdma.num_instances; 1343 1343 } 1344 1344 } 1345 + 1346 + const struct amdgpu_ip_block_version cik_sdma_ip_block = 1347 + { 1348 + .type = AMD_IP_BLOCK_TYPE_SDMA, 1349 + .major = 2, 1350 + .minor = 0, 1351 + .rev = 0, 1352 + .funcs = &cik_sdma_ip_funcs, 1353 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/cik_sdma.h
··· 24 24 #ifndef __CIK_SDMA_H__ 25 25 #define __CIK_SDMA_H__ 26 26 27 - extern const struct amd_ip_funcs cik_sdma_ip_funcs; 27 + extern const struct amdgpu_ip_block_version cik_sdma_ip_block; 28 28 29 29 #endif
+9
drivers/gpu/drm/amd/amdgpu/cz_dpm.c
··· 2296 2296 if (NULL == adev->pm.funcs) 2297 2297 adev->pm.funcs = &cz_dpm_funcs; 2298 2298 } 2299 + 2300 + const struct amdgpu_ip_block_version cz_dpm_ip_block = 2301 + { 2302 + .type = AMD_IP_BLOCK_TYPE_SMC, 2303 + .major = 8, 2304 + .minor = 0, 2305 + .rev = 0, 2306 + .funcs = &cz_dpm_ip_funcs, 2307 + };
+9 -1
drivers/gpu/drm/amd/amdgpu/cz_ih.c
··· 394 394 return 0; 395 395 } 396 396 397 - const struct amd_ip_funcs cz_ih_ip_funcs = { 397 + static const struct amd_ip_funcs cz_ih_ip_funcs = { 398 398 .name = "cz_ih", 399 399 .early_init = cz_ih_early_init, 400 400 .late_init = NULL, ··· 423 423 adev->irq.ih_funcs = &cz_ih_funcs; 424 424 } 425 425 426 + const struct amdgpu_ip_block_version cz_ih_ip_block = 427 + { 428 + .type = AMD_IP_BLOCK_TYPE_IH, 429 + .major = 3, 430 + .minor = 0, 431 + .rev = 0, 432 + .funcs = &cz_ih_ip_funcs, 433 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/cz_ih.h
··· 24 24 #ifndef __CZ_IH_H__ 25 25 #define __CZ_IH_H__ 26 26 27 - extern const struct amd_ip_funcs cz_ih_ip_funcs; 27 + extern const struct amdgpu_ip_block_version cz_ih_ip_block; 28 28 29 29 #endif /* __CZ_IH_H__ */
+19 -1
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
··· 3470 3470 return 0; 3471 3471 } 3472 3472 3473 - const struct amd_ip_funcs dce_v10_0_ip_funcs = { 3473 + static const struct amd_ip_funcs dce_v10_0_ip_funcs = { 3474 3474 .name = "dce_v10_0", 3475 3475 .early_init = dce_v10_0_early_init, 3476 3476 .late_init = NULL, ··· 3801 3801 adev->hpd_irq.num_types = AMDGPU_HPD_LAST; 3802 3802 adev->hpd_irq.funcs = &dce_v10_0_hpd_irq_funcs; 3803 3803 } 3804 + 3805 + const struct amdgpu_ip_block_version dce_v10_0_ip_block = 3806 + { 3807 + .type = AMD_IP_BLOCK_TYPE_DCE, 3808 + .major = 10, 3809 + .minor = 0, 3810 + .rev = 0, 3811 + .funcs = &dce_v10_0_ip_funcs, 3812 + }; 3813 + 3814 + const struct amdgpu_ip_block_version dce_v10_1_ip_block = 3815 + { 3816 + .type = AMD_IP_BLOCK_TYPE_DCE, 3817 + .major = 10, 3818 + .minor = 1, 3819 + .rev = 0, 3820 + .funcs = &dce_v10_0_ip_funcs, 3821 + };
+3 -1
drivers/gpu/drm/amd/amdgpu/dce_v10_0.h
··· 24 24 #ifndef __DCE_V10_0_H__ 25 25 #define __DCE_V10_0_H__ 26 26 27 - extern const struct amd_ip_funcs dce_v10_0_ip_funcs; 27 + 28 + extern const struct amdgpu_ip_block_version dce_v10_0_ip_block; 29 + extern const struct amdgpu_ip_block_version dce_v10_1_ip_block; 28 30 29 31 void dce_v10_0_disable_dce(struct amdgpu_device *adev); 30 32
+19 -1
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
··· 3527 3527 return 0; 3528 3528 } 3529 3529 3530 - const struct amd_ip_funcs dce_v11_0_ip_funcs = { 3530 + static const struct amd_ip_funcs dce_v11_0_ip_funcs = { 3531 3531 .name = "dce_v11_0", 3532 3532 .early_init = dce_v11_0_early_init, 3533 3533 .late_init = NULL, ··· 3857 3857 adev->hpd_irq.num_types = AMDGPU_HPD_LAST; 3858 3858 adev->hpd_irq.funcs = &dce_v11_0_hpd_irq_funcs; 3859 3859 } 3860 + 3861 + const struct amdgpu_ip_block_version dce_v11_0_ip_block = 3862 + { 3863 + .type = AMD_IP_BLOCK_TYPE_DCE, 3864 + .major = 11, 3865 + .minor = 0, 3866 + .rev = 0, 3867 + .funcs = &dce_v11_0_ip_funcs, 3868 + }; 3869 + 3870 + const struct amdgpu_ip_block_version dce_v11_2_ip_block = 3871 + { 3872 + .type = AMD_IP_BLOCK_TYPE_DCE, 3873 + .major = 11, 3874 + .minor = 2, 3875 + .rev = 0, 3876 + .funcs = &dce_v11_0_ip_funcs, 3877 + };
+2 -1
drivers/gpu/drm/amd/amdgpu/dce_v11_0.h
··· 24 24 #ifndef __DCE_V11_0_H__ 25 25 #define __DCE_V11_0_H__ 26 26 27 - extern const struct amd_ip_funcs dce_v11_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version dce_v11_0_ip_block; 28 + extern const struct amdgpu_ip_block_version dce_v11_2_ip_block; 28 29 29 30 void dce_v11_0_disable_dce(struct amdgpu_device *adev); 30 31
+19 -1
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
··· 2734 2734 return 0; 2735 2735 } 2736 2736 2737 - const struct amd_ip_funcs dce_v6_0_ip_funcs = { 2737 + static const struct amd_ip_funcs dce_v6_0_ip_funcs = { 2738 2738 .name = "dce_v6_0", 2739 2739 .early_init = dce_v6_0_early_init, 2740 2740 .late_init = NULL, ··· 3075 3075 adev->hpd_irq.num_types = AMDGPU_HPD_LAST; 3076 3076 adev->hpd_irq.funcs = &dce_v6_0_hpd_irq_funcs; 3077 3077 } 3078 + 3079 + const struct amdgpu_ip_block_version dce_v6_0_ip_block = 3080 + { 3081 + .type = AMD_IP_BLOCK_TYPE_DCE, 3082 + .major = 6, 3083 + .minor = 0, 3084 + .rev = 0, 3085 + .funcs = &dce_v6_0_ip_funcs, 3086 + }; 3087 + 3088 + const struct amdgpu_ip_block_version dce_v6_4_ip_block = 3089 + { 3090 + .type = AMD_IP_BLOCK_TYPE_DCE, 3091 + .major = 6, 3092 + .minor = 4, 3093 + .rev = 0, 3094 + .funcs = &dce_v6_0_ip_funcs, 3095 + };
+2 -1
drivers/gpu/drm/amd/amdgpu/dce_v6_0.h
··· 24 24 #ifndef __DCE_V6_0_H__ 25 25 #define __DCE_V6_0_H__ 26 26 27 - extern const struct amd_ip_funcs dce_v6_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version dce_v6_0_ip_block; 28 + extern const struct amdgpu_ip_block_version dce_v6_4_ip_block; 28 29 29 30 void dce_v6_0_disable_dce(struct amdgpu_device *adev); 30 31
+46 -1
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
··· 3308 3308 return 0; 3309 3309 } 3310 3310 3311 - const struct amd_ip_funcs dce_v8_0_ip_funcs = { 3311 + static const struct amd_ip_funcs dce_v8_0_ip_funcs = { 3312 3312 .name = "dce_v8_0", 3313 3313 .early_init = dce_v8_0_early_init, 3314 3314 .late_init = NULL, ··· 3638 3638 adev->hpd_irq.num_types = AMDGPU_HPD_LAST; 3639 3639 adev->hpd_irq.funcs = &dce_v8_0_hpd_irq_funcs; 3640 3640 } 3641 + 3642 + const struct amdgpu_ip_block_version dce_v8_0_ip_block = 3643 + { 3644 + .type = AMD_IP_BLOCK_TYPE_DCE, 3645 + .major = 8, 3646 + .minor = 0, 3647 + .rev = 0, 3648 + .funcs = &dce_v8_0_ip_funcs, 3649 + }; 3650 + 3651 + const struct amdgpu_ip_block_version dce_v8_1_ip_block = 3652 + { 3653 + .type = AMD_IP_BLOCK_TYPE_DCE, 3654 + .major = 8, 3655 + .minor = 1, 3656 + .rev = 0, 3657 + .funcs = &dce_v8_0_ip_funcs, 3658 + }; 3659 + 3660 + const struct amdgpu_ip_block_version dce_v8_2_ip_block = 3661 + { 3662 + .type = AMD_IP_BLOCK_TYPE_DCE, 3663 + .major = 8, 3664 + .minor = 2, 3665 + .rev = 0, 3666 + .funcs = &dce_v8_0_ip_funcs, 3667 + }; 3668 + 3669 + const struct amdgpu_ip_block_version dce_v8_3_ip_block = 3670 + { 3671 + .type = AMD_IP_BLOCK_TYPE_DCE, 3672 + .major = 8, 3673 + .minor = 3, 3674 + .rev = 0, 3675 + .funcs = &dce_v8_0_ip_funcs, 3676 + }; 3677 + 3678 + const struct amdgpu_ip_block_version dce_v8_5_ip_block = 3679 + { 3680 + .type = AMD_IP_BLOCK_TYPE_DCE, 3681 + .major = 8, 3682 + .minor = 5, 3683 + .rev = 0, 3684 + .funcs = &dce_v8_0_ip_funcs, 3685 + };
+5 -1
drivers/gpu/drm/amd/amdgpu/dce_v8_0.h
··· 24 24 #ifndef __DCE_V8_0_H__ 25 25 #define __DCE_V8_0_H__ 26 26 27 - extern const struct amd_ip_funcs dce_v8_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version dce_v8_0_ip_block; 28 + extern const struct amdgpu_ip_block_version dce_v8_1_ip_block; 29 + extern const struct amdgpu_ip_block_version dce_v8_2_ip_block; 30 + extern const struct amdgpu_ip_block_version dce_v8_3_ip_block; 31 + extern const struct amdgpu_ip_block_version dce_v8_5_ip_block; 28 32 29 33 void dce_v8_0_disable_dce(struct amdgpu_device *adev); 30 34
+9 -1
drivers/gpu/drm/amd/amdgpu/dce_virtual.c
··· 574 574 return 0; 575 575 } 576 576 577 - const struct amd_ip_funcs dce_virtual_ip_funcs = { 577 + static const struct amd_ip_funcs dce_virtual_ip_funcs = { 578 578 .name = "dce_virtual", 579 579 .early_init = dce_virtual_early_init, 580 580 .late_init = NULL, ··· 824 824 adev->crtc_irq.funcs = &dce_virtual_crtc_irq_funcs; 825 825 } 826 826 827 + const struct amdgpu_ip_block_version dce_virtual_ip_block = 828 + { 829 + .type = AMD_IP_BLOCK_TYPE_DCE, 830 + .major = 1, 831 + .minor = 0, 832 + .rev = 0, 833 + .funcs = &dce_virtual_ip_funcs, 834 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/dce_virtual.h
··· 24 24 #ifndef __DCE_VIRTUAL_H__ 25 25 #define __DCE_VIRTUAL_H__ 26 26 27 - extern const struct amd_ip_funcs dce_virtual_ip_funcs; 27 + extern const struct amdgpu_ip_block_version dce_virtual_ip_block; 28 28 29 29 #endif 30 30
+10 -1
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
··· 3206 3206 return 0; 3207 3207 } 3208 3208 3209 - const struct amd_ip_funcs gfx_v6_0_ip_funcs = { 3209 + static const struct amd_ip_funcs gfx_v6_0_ip_funcs = { 3210 3210 .name = "gfx_v6_0", 3211 3211 .early_init = gfx_v6_0_early_init, 3212 3212 .late_init = NULL, ··· 3344 3344 cu_info->number = active_cu_number; 3345 3345 cu_info->ao_cu_mask = ao_cu_mask; 3346 3346 } 3347 + 3348 + const struct amdgpu_ip_block_version gfx_v6_0_ip_block = 3349 + { 3350 + .type = AMD_IP_BLOCK_TYPE_GFX, 3351 + .major = 6, 3352 + .minor = 0, 3353 + .rev = 0, 3354 + .funcs = &gfx_v6_0_ip_funcs, 3355 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.h
··· 24 24 #ifndef __GFX_V6_0_H__ 25 25 #define __GFX_V6_0_H__ 26 26 27 - extern const struct amd_ip_funcs gfx_v6_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version gfx_v6_0_ip_block; 28 28 29 29 #endif
+37 -1
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
··· 5087 5087 return 0; 5088 5088 } 5089 5089 5090 - const struct amd_ip_funcs gfx_v7_0_ip_funcs = { 5090 + static const struct amd_ip_funcs gfx_v7_0_ip_funcs = { 5091 5091 .name = "gfx_v7_0", 5092 5092 .early_init = gfx_v7_0_early_init, 5093 5093 .late_init = gfx_v7_0_late_init, ··· 5270 5270 cu_info->number = active_cu_number; 5271 5271 cu_info->ao_cu_mask = ao_cu_mask; 5272 5272 } 5273 + 5274 + const struct amdgpu_ip_block_version gfx_v7_0_ip_block = 5275 + { 5276 + .type = AMD_IP_BLOCK_TYPE_GFX, 5277 + .major = 7, 5278 + .minor = 0, 5279 + .rev = 0, 5280 + .funcs = &gfx_v7_0_ip_funcs, 5281 + }; 5282 + 5283 + const struct amdgpu_ip_block_version gfx_v7_1_ip_block = 5284 + { 5285 + .type = AMD_IP_BLOCK_TYPE_GFX, 5286 + .major = 7, 5287 + .minor = 1, 5288 + .rev = 0, 5289 + .funcs = &gfx_v7_0_ip_funcs, 5290 + }; 5291 + 5292 + const struct amdgpu_ip_block_version gfx_v7_2_ip_block = 5293 + { 5294 + .type = AMD_IP_BLOCK_TYPE_GFX, 5295 + .major = 7, 5296 + .minor = 2, 5297 + .rev = 0, 5298 + .funcs = &gfx_v7_0_ip_funcs, 5299 + }; 5300 + 5301 + const struct amdgpu_ip_block_version gfx_v7_3_ip_block = 5302 + { 5303 + .type = AMD_IP_BLOCK_TYPE_GFX, 5304 + .major = 7, 5305 + .minor = 3, 5306 + .rev = 0, 5307 + .funcs = &gfx_v7_0_ip_funcs, 5308 + };
+4 -1
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.h
··· 24 24 #ifndef __GFX_V7_0_H__ 25 25 #define __GFX_V7_0_H__ 26 26 27 - extern const struct amd_ip_funcs gfx_v7_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version gfx_v7_0_ip_block; 28 + extern const struct amdgpu_ip_block_version gfx_v7_1_ip_block; 29 + extern const struct amdgpu_ip_block_version gfx_v7_2_ip_block; 30 + extern const struct amdgpu_ip_block_version gfx_v7_3_ip_block; 28 31 29 32 #endif
+19 -1
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
··· 6504 6504 return 0; 6505 6505 } 6506 6506 6507 - const struct amd_ip_funcs gfx_v8_0_ip_funcs = { 6507 + static const struct amd_ip_funcs gfx_v8_0_ip_funcs = { 6508 6508 .name = "gfx_v8_0", 6509 6509 .early_init = gfx_v8_0_early_init, 6510 6510 .late_init = gfx_v8_0_late_init, ··· 6734 6734 cu_info->number = active_cu_number; 6735 6735 cu_info->ao_cu_mask = ao_cu_mask; 6736 6736 } 6737 + 6738 + const struct amdgpu_ip_block_version gfx_v8_0_ip_block = 6739 + { 6740 + .type = AMD_IP_BLOCK_TYPE_GFX, 6741 + .major = 8, 6742 + .minor = 0, 6743 + .rev = 0, 6744 + .funcs = &gfx_v8_0_ip_funcs, 6745 + }; 6746 + 6747 + const struct amdgpu_ip_block_version gfx_v8_1_ip_block = 6748 + { 6749 + .type = AMD_IP_BLOCK_TYPE_GFX, 6750 + .major = 8, 6751 + .minor = 1, 6752 + .rev = 0, 6753 + .funcs = &gfx_v8_0_ip_funcs, 6754 + };
+2 -1
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.h
··· 24 24 #ifndef __GFX_V8_0_H__ 25 25 #define __GFX_V8_0_H__ 26 26 27 - extern const struct amd_ip_funcs gfx_v8_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version gfx_v8_0_ip_block; 28 + extern const struct amdgpu_ip_block_version gfx_v8_1_ip_block; 28 29 29 30 #endif
+9 -1
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
··· 1030 1030 return 0; 1031 1031 } 1032 1032 1033 - const struct amd_ip_funcs gmc_v6_0_ip_funcs = { 1033 + static const struct amd_ip_funcs gmc_v6_0_ip_funcs = { 1034 1034 .name = "gmc_v6_0", 1035 1035 .early_init = gmc_v6_0_early_init, 1036 1036 .late_init = gmc_v6_0_late_init, ··· 1069 1069 adev->mc.vm_fault.funcs = &gmc_v6_0_irq_funcs; 1070 1070 } 1071 1071 1072 + const struct amdgpu_ip_block_version gmc_v6_0_ip_block = 1073 + { 1074 + .type = AMD_IP_BLOCK_TYPE_GMC, 1075 + .major = 6, 1076 + .minor = 0, 1077 + .rev = 0, 1078 + .funcs = &gmc_v6_0_ip_funcs, 1079 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.h
··· 24 24 #ifndef __GMC_V6_0_H__ 25 25 #define __GMC_V6_0_H__ 26 26 27 - extern const struct amd_ip_funcs gmc_v6_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version gmc_v6_0_ip_block; 28 28 29 29 #endif
+19 -1
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
··· 1235 1235 return 0; 1236 1236 } 1237 1237 1238 - const struct amd_ip_funcs gmc_v7_0_ip_funcs = { 1238 + static const struct amd_ip_funcs gmc_v7_0_ip_funcs = { 1239 1239 .name = "gmc_v7_0", 1240 1240 .early_init = gmc_v7_0_early_init, 1241 1241 .late_init = gmc_v7_0_late_init, ··· 1273 1273 adev->mc.vm_fault.num_types = 1; 1274 1274 adev->mc.vm_fault.funcs = &gmc_v7_0_irq_funcs; 1275 1275 } 1276 + 1277 + const struct amdgpu_ip_block_version gmc_v7_0_ip_block = 1278 + { 1279 + .type = AMD_IP_BLOCK_TYPE_GMC, 1280 + .major = 7, 1281 + .minor = 0, 1282 + .rev = 0, 1283 + .funcs = &gmc_v7_0_ip_funcs, 1284 + }; 1285 + 1286 + const struct amdgpu_ip_block_version gmc_v7_4_ip_block = 1287 + { 1288 + .type = AMD_IP_BLOCK_TYPE_GMC, 1289 + .major = 7, 1290 + .minor = 4, 1291 + .rev = 0, 1292 + .funcs = &gmc_v7_0_ip_funcs, 1293 + };
+2 -1
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.h
··· 24 24 #ifndef __GMC_V7_0_H__ 25 25 #define __GMC_V7_0_H__ 26 26 27 - extern const struct amd_ip_funcs gmc_v7_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version gmc_v7_0_ip_block; 28 + extern const struct amdgpu_ip_block_version gmc_v7_4_ip_block; 28 29 29 30 #endif
+28 -1
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
··· 1436 1436 return 0; 1437 1437 } 1438 1438 1439 - const struct amd_ip_funcs gmc_v8_0_ip_funcs = { 1439 + static const struct amd_ip_funcs gmc_v8_0_ip_funcs = { 1440 1440 .name = "gmc_v8_0", 1441 1441 .early_init = gmc_v8_0_early_init, 1442 1442 .late_init = gmc_v8_0_late_init, ··· 1477 1477 adev->mc.vm_fault.num_types = 1; 1478 1478 adev->mc.vm_fault.funcs = &gmc_v8_0_irq_funcs; 1479 1479 } 1480 + 1481 + const struct amdgpu_ip_block_version gmc_v8_0_ip_block = 1482 + { 1483 + .type = AMD_IP_BLOCK_TYPE_GMC, 1484 + .major = 8, 1485 + .minor = 0, 1486 + .rev = 0, 1487 + .funcs = &gmc_v8_0_ip_funcs, 1488 + }; 1489 + 1490 + const struct amdgpu_ip_block_version gmc_v8_1_ip_block = 1491 + { 1492 + .type = AMD_IP_BLOCK_TYPE_GMC, 1493 + .major = 8, 1494 + .minor = 1, 1495 + .rev = 0, 1496 + .funcs = &gmc_v8_0_ip_funcs, 1497 + }; 1498 + 1499 + const struct amdgpu_ip_block_version gmc_v8_5_ip_block = 1500 + { 1501 + .type = AMD_IP_BLOCK_TYPE_GMC, 1502 + .major = 8, 1503 + .minor = 5, 1504 + .rev = 0, 1505 + .funcs = &gmc_v8_0_ip_funcs, 1506 + };
+3 -1
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.h
··· 24 24 #ifndef __GMC_V8_0_H__ 25 25 #define __GMC_V8_0_H__ 26 26 27 - extern const struct amd_ip_funcs gmc_v8_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version gmc_v8_0_ip_block; 28 + extern const struct amdgpu_ip_block_version gmc_v8_1_ip_block; 29 + extern const struct amdgpu_ip_block_version gmc_v8_5_ip_block; 28 30 29 31 #endif
+9 -1
drivers/gpu/drm/amd/amdgpu/iceland_ih.c
··· 392 392 return 0; 393 393 } 394 394 395 - const struct amd_ip_funcs iceland_ih_ip_funcs = { 395 + static const struct amd_ip_funcs iceland_ih_ip_funcs = { 396 396 .name = "iceland_ih", 397 397 .early_init = iceland_ih_early_init, 398 398 .late_init = NULL, ··· 421 421 adev->irq.ih_funcs = &iceland_ih_funcs; 422 422 } 423 423 424 + const struct amdgpu_ip_block_version iceland_ih_ip_block = 425 + { 426 + .type = AMD_IP_BLOCK_TYPE_IH, 427 + .major = 2, 428 + .minor = 4, 429 + .rev = 0, 430 + .funcs = &iceland_ih_ip_funcs, 431 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/iceland_ih.h
··· 24 24 #ifndef __ICELAND_IH_H__ 25 25 #define __ICELAND_IH_H__ 26 26 27 - extern const struct amd_ip_funcs iceland_ih_ip_funcs; 27 + extern const struct amdgpu_ip_block_version iceland_ih_ip_block; 28 28 29 29 #endif /* __ICELAND_IH_H__ */
+9
drivers/gpu/drm/amd/amdgpu/kv_dpm.c
··· 3292 3292 adev->pm.dpm.thermal.irq.num_types = AMDGPU_THERMAL_IRQ_LAST; 3293 3293 adev->pm.dpm.thermal.irq.funcs = &kv_dpm_irq_funcs; 3294 3294 } 3295 + 3296 + const struct amdgpu_ip_block_version kv_dpm_ip_block = 3297 + { 3298 + .type = AMD_IP_BLOCK_TYPE_SMC, 3299 + .major = 7, 3300 + .minor = 0, 3301 + .rev = 0, 3302 + .funcs = &kv_dpm_ip_funcs, 3303 + };
+10 -1
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
··· 1187 1187 return 0; 1188 1188 } 1189 1189 1190 - const struct amd_ip_funcs sdma_v2_4_ip_funcs = { 1190 + static const struct amd_ip_funcs sdma_v2_4_ip_funcs = { 1191 1191 .name = "sdma_v2_4", 1192 1192 .early_init = sdma_v2_4_early_init, 1193 1193 .late_init = NULL, ··· 1340 1340 adev->vm_manager.vm_pte_num_rings = adev->sdma.num_instances; 1341 1341 } 1342 1342 } 1343 + 1344 + const struct amdgpu_ip_block_version sdma_v2_4_ip_block = 1345 + { 1346 + .type = AMD_IP_BLOCK_TYPE_SDMA, 1347 + .major = 2, 1348 + .minor = 4, 1349 + .rev = 0, 1350 + .funcs = &sdma_v2_4_ip_funcs, 1351 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.h
··· 24 24 #ifndef __SDMA_V2_4_H__ 25 25 #define __SDMA_V2_4_H__ 26 26 27 - extern const struct amd_ip_funcs sdma_v2_4_ip_funcs; 27 + extern const struct amdgpu_ip_block_version sdma_v2_4_ip_block; 28 28 29 29 #endif
+19 -1
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
··· 1527 1527 return 0; 1528 1528 } 1529 1529 1530 - const struct amd_ip_funcs sdma_v3_0_ip_funcs = { 1530 + static const struct amd_ip_funcs sdma_v3_0_ip_funcs = { 1531 1531 .name = "sdma_v3_0", 1532 1532 .early_init = sdma_v3_0_early_init, 1533 1533 .late_init = NULL, ··· 1683 1683 adev->vm_manager.vm_pte_num_rings = adev->sdma.num_instances; 1684 1684 } 1685 1685 } 1686 + 1687 + const struct amdgpu_ip_block_version sdma_v3_0_ip_block = 1688 + { 1689 + .type = AMD_IP_BLOCK_TYPE_SDMA, 1690 + .major = 3, 1691 + .minor = 0, 1692 + .rev = 0, 1693 + .funcs = &sdma_v3_0_ip_funcs, 1694 + }; 1695 + 1696 + const struct amdgpu_ip_block_version sdma_v3_1_ip_block = 1697 + { 1698 + .type = AMD_IP_BLOCK_TYPE_SDMA, 1699 + .major = 3, 1700 + .minor = 1, 1701 + .rev = 0, 1702 + .funcs = &sdma_v3_0_ip_funcs, 1703 + };
+2 -1
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.h
··· 24 24 #ifndef __SDMA_V3_0_H__ 25 25 #define __SDMA_V3_0_H__ 26 26 27 - extern const struct amd_ip_funcs sdma_v3_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version sdma_v3_0_ip_block; 28 + extern const struct amdgpu_ip_block_version sdma_v3_1_ip_block; 28 29 29 30 #endif
+40 -248
drivers/gpu/drm/amd/amdgpu/si.c
··· 1812 1812 return 0; 1813 1813 } 1814 1814 1815 - const struct amd_ip_funcs si_common_ip_funcs = { 1815 + static const struct amd_ip_funcs si_common_ip_funcs = { 1816 1816 .name = "si_common", 1817 1817 .early_init = si_common_early_init, 1818 1818 .late_init = NULL, ··· 1829 1829 .set_powergating_state = si_common_set_powergating_state, 1830 1830 }; 1831 1831 1832 - static const struct amdgpu_ip_block_version verde_ip_blocks[] = 1832 + static const struct amdgpu_ip_block_version si_common_ip_block = 1833 1833 { 1834 - { 1835 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1836 - .major = 1, 1837 - .minor = 0, 1838 - .rev = 0, 1839 - .funcs = &si_common_ip_funcs, 1840 - }, 1841 - { 1842 - .type = AMD_IP_BLOCK_TYPE_GMC, 1843 - .major = 6, 1844 - .minor = 0, 1845 - .rev = 0, 1846 - .funcs = &gmc_v6_0_ip_funcs, 1847 - }, 1848 - { 1849 - .type = AMD_IP_BLOCK_TYPE_IH, 1850 - .major = 1, 1851 - .minor = 0, 1852 - .rev = 0, 1853 - .funcs = &si_ih_ip_funcs, 1854 - }, 1855 - { 1856 - .type = AMD_IP_BLOCK_TYPE_SMC, 1857 - .major = 6, 1858 - .minor = 0, 1859 - .rev = 0, 1860 - .funcs = &amdgpu_pp_ip_funcs, 1861 - }, 1862 - { 1863 - .type = AMD_IP_BLOCK_TYPE_DCE, 1864 - .major = 6, 1865 - .minor = 0, 1866 - .rev = 0, 1867 - .funcs = &dce_v6_0_ip_funcs, 1868 - }, 1869 - { 1870 - .type = AMD_IP_BLOCK_TYPE_GFX, 1871 - .major = 6, 1872 - .minor = 0, 1873 - .rev = 0, 1874 - .funcs = &gfx_v6_0_ip_funcs, 1875 - }, 1876 - { 1877 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1878 - .major = 1, 1879 - .minor = 0, 1880 - .rev = 0, 1881 - .funcs = &si_dma_ip_funcs, 1882 - }, 1883 - /* { 1884 - .type = AMD_IP_BLOCK_TYPE_UVD, 1885 - .major = 3, 1886 - .minor = 1, 1887 - .rev = 0, 1888 - .funcs = &si_null_ip_funcs, 1889 - }, 1890 - { 1891 - .type = AMD_IP_BLOCK_TYPE_VCE, 1892 - .major = 1, 1893 - .minor = 0, 1894 - .rev = 0, 1895 - .funcs = &si_null_ip_funcs, 1896 - }, 1897 - */ 1898 - }; 1899 - 1900 - 1901 - static const struct amdgpu_ip_block_version verde_ip_blocks_vd[] = 1902 - { 1903 - { 1904 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1905 - .major = 1, 1906 - .minor = 0, 1907 - .rev = 0, 1908 - .funcs = &si_common_ip_funcs, 1909 - }, 1910 - { 1911 - .type = AMD_IP_BLOCK_TYPE_GMC, 1912 - .major = 6, 1913 - .minor = 0, 1914 - .rev = 0, 1915 - .funcs = &gmc_v6_0_ip_funcs, 1916 - }, 1917 - { 1918 - .type = AMD_IP_BLOCK_TYPE_IH, 1919 - .major = 1, 1920 - .minor = 0, 1921 - .rev = 0, 1922 - .funcs = &si_ih_ip_funcs, 1923 - }, 1924 - { 1925 - .type = AMD_IP_BLOCK_TYPE_SMC, 1926 - .major = 6, 1927 - .minor = 0, 1928 - .rev = 0, 1929 - .funcs = &amdgpu_pp_ip_funcs, 1930 - }, 1931 - { 1932 - .type = AMD_IP_BLOCK_TYPE_DCE, 1933 - .major = 6, 1934 - .minor = 0, 1935 - .rev = 0, 1936 - .funcs = &dce_virtual_ip_funcs, 1937 - }, 1938 - { 1939 - .type = AMD_IP_BLOCK_TYPE_GFX, 1940 - .major = 6, 1941 - .minor = 0, 1942 - .rev = 0, 1943 - .funcs = &gfx_v6_0_ip_funcs, 1944 - }, 1945 - { 1946 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1947 - .major = 1, 1948 - .minor = 0, 1949 - .rev = 0, 1950 - .funcs = &si_dma_ip_funcs, 1951 - }, 1952 - /* { 1953 - .type = AMD_IP_BLOCK_TYPE_UVD, 1954 - .major = 3, 1955 - .minor = 1, 1956 - .rev = 0, 1957 - .funcs = &si_null_ip_funcs, 1958 - }, 1959 - { 1960 - .type = AMD_IP_BLOCK_TYPE_VCE, 1961 - .major = 1, 1962 - .minor = 0, 1963 - .rev = 0, 1964 - .funcs = &si_null_ip_funcs, 1965 - }, 1966 - */ 1967 - }; 1968 - 1969 - static const struct amdgpu_ip_block_version hainan_ip_blocks[] = 1970 - { 1971 - { 1972 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1973 - .major = 1, 1974 - .minor = 0, 1975 - .rev = 0, 1976 - .funcs = &si_common_ip_funcs, 1977 - }, 1978 - { 1979 - .type = AMD_IP_BLOCK_TYPE_GMC, 1980 - .major = 6, 1981 - .minor = 0, 1982 - .rev = 0, 1983 - .funcs = &gmc_v6_0_ip_funcs, 1984 - }, 1985 - { 1986 - .type = AMD_IP_BLOCK_TYPE_IH, 1987 - .major = 1, 1988 - .minor = 0, 1989 - .rev = 0, 1990 - .funcs = &si_ih_ip_funcs, 1991 - }, 1992 - { 1993 - .type = AMD_IP_BLOCK_TYPE_SMC, 1994 - .major = 6, 1995 - .minor = 0, 1996 - .rev = 0, 1997 - .funcs = &amdgpu_pp_ip_funcs, 1998 - }, 1999 - { 2000 - .type = AMD_IP_BLOCK_TYPE_GFX, 2001 - .major = 6, 2002 - .minor = 0, 2003 - .rev = 0, 2004 - .funcs = &gfx_v6_0_ip_funcs, 2005 - }, 2006 - { 2007 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2008 - .major = 1, 2009 - .minor = 0, 2010 - .rev = 0, 2011 - .funcs = &si_dma_ip_funcs, 2012 - }, 2013 - }; 2014 - 2015 - static const struct amdgpu_ip_block_version hainan_ip_blocks_vd[] = 2016 - { 2017 - { 2018 - .type = AMD_IP_BLOCK_TYPE_COMMON, 2019 - .major = 1, 2020 - .minor = 0, 2021 - .rev = 0, 2022 - .funcs = &si_common_ip_funcs, 2023 - }, 2024 - { 2025 - .type = AMD_IP_BLOCK_TYPE_GMC, 2026 - .major = 6, 2027 - .minor = 0, 2028 - .rev = 0, 2029 - .funcs = &gmc_v6_0_ip_funcs, 2030 - }, 2031 - { 2032 - .type = AMD_IP_BLOCK_TYPE_IH, 2033 - .major = 1, 2034 - .minor = 0, 2035 - .rev = 0, 2036 - .funcs = &si_ih_ip_funcs, 2037 - }, 2038 - { 2039 - .type = AMD_IP_BLOCK_TYPE_SMC, 2040 - .major = 6, 2041 - .minor = 0, 2042 - .rev = 0, 2043 - .funcs = &amdgpu_pp_ip_funcs, 2044 - }, 2045 - { 2046 - .type = AMD_IP_BLOCK_TYPE_DCE, 2047 - .major = 1, 2048 - .minor = 0, 2049 - .rev = 0, 2050 - .funcs = &dce_virtual_ip_funcs, 2051 - }, 2052 - { 2053 - .type = AMD_IP_BLOCK_TYPE_GFX, 2054 - .major = 6, 2055 - .minor = 0, 2056 - .rev = 0, 2057 - .funcs = &gfx_v6_0_ip_funcs, 2058 - }, 2059 - { 2060 - .type = AMD_IP_BLOCK_TYPE_SDMA, 2061 - .major = 1, 2062 - .minor = 0, 2063 - .rev = 0, 2064 - .funcs = &si_dma_ip_funcs, 2065 - }, 1834 + .type = AMD_IP_BLOCK_TYPE_COMMON, 1835 + .major = 1, 1836 + .minor = 0, 1837 + .rev = 0, 1838 + .funcs = &si_common_ip_funcs, 2066 1839 }; 2067 1840 2068 1841 int si_set_ip_blocks(struct amdgpu_device *adev) ··· 1844 2071 case CHIP_VERDE: 1845 2072 case CHIP_TAHITI: 1846 2073 case CHIP_PITCAIRN: 2074 + amdgpu_ip_block_add(adev, &si_common_ip_block); 2075 + amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block); 2076 + amdgpu_ip_block_add(adev, &si_ih_ip_block); 2077 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2078 + if (adev->enable_virtual_display) 2079 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2080 + else 2081 + amdgpu_ip_block_add(adev, &dce_v6_0_ip_block); 2082 + amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block); 2083 + amdgpu_ip_block_add(adev, &si_dma_ip_block); 2084 + /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */ 2085 + /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */ 2086 + break; 1847 2087 case CHIP_OLAND: 1848 - if (adev->enable_virtual_display) { 1849 - adev->ip_blocks = verde_ip_blocks_vd; 1850 - adev->num_ip_blocks = ARRAY_SIZE(verde_ip_blocks_vd); 1851 - } else { 1852 - adev->ip_blocks = verde_ip_blocks; 1853 - adev->num_ip_blocks = ARRAY_SIZE(verde_ip_blocks); 1854 - } 2088 + amdgpu_ip_block_add(adev, &si_common_ip_block); 2089 + amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block); 2090 + amdgpu_ip_block_add(adev, &si_ih_ip_block); 2091 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2092 + if (adev->enable_virtual_display) 2093 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2094 + else 2095 + amdgpu_ip_block_add(adev, &dce_v6_4_ip_block); 2096 + amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block); 2097 + amdgpu_ip_block_add(adev, &si_dma_ip_block); 2098 + /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */ 2099 + /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */ 1855 2100 break; 1856 2101 case CHIP_HAINAN: 1857 - if (adev->enable_virtual_display) { 1858 - adev->ip_blocks = hainan_ip_blocks_vd; 1859 - adev->num_ip_blocks = ARRAY_SIZE(hainan_ip_blocks_vd); 1860 - } else { 1861 - adev->ip_blocks = hainan_ip_blocks; 1862 - adev->num_ip_blocks = ARRAY_SIZE(hainan_ip_blocks); 1863 - } 2102 + amdgpu_ip_block_add(adev, &si_common_ip_block); 2103 + amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block); 2104 + amdgpu_ip_block_add(adev, &si_ih_ip_block); 2105 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2106 + if (adev->enable_virtual_display) 2107 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2108 + amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block); 2109 + amdgpu_ip_block_add(adev, &si_dma_ip_block); 1864 2110 break; 1865 2111 default: 1866 2112 BUG();
-2
drivers/gpu/drm/amd/amdgpu/si.h
··· 24 24 #ifndef __SI_H__ 25 25 #define __SI_H__ 26 26 27 - extern const struct amd_ip_funcs si_common_ip_funcs; 28 - 29 27 void si_srbm_select(struct amdgpu_device *adev, 30 28 u32 me, u32 pipe, u32 queue, u32 vmid); 31 29 int si_set_ip_blocks(struct amdgpu_device *adev);
+10 -1
drivers/gpu/drm/amd/amdgpu/si_dma.c
··· 745 745 return 0; 746 746 } 747 747 748 - const struct amd_ip_funcs si_dma_ip_funcs = { 748 + static const struct amd_ip_funcs si_dma_ip_funcs = { 749 749 .name = "si_dma", 750 750 .early_init = si_dma_early_init, 751 751 .late_init = NULL, ··· 903 903 adev->vm_manager.vm_pte_num_rings = adev->sdma.num_instances; 904 904 } 905 905 } 906 + 907 + const struct amdgpu_ip_block_version si_dma_ip_block = 908 + { 909 + .type = AMD_IP_BLOCK_TYPE_SDMA, 910 + .major = 1, 911 + .minor = 0, 912 + .rev = 0, 913 + .funcs = &si_dma_ip_funcs, 914 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/si_dma.h
··· 24 24 #ifndef __SI_DMA_H__ 25 25 #define __SI_DMA_H__ 26 26 27 - extern const struct amd_ip_funcs si_dma_ip_funcs; 27 + extern const struct amdgpu_ip_block_version si_dma_ip_block; 28 28 29 29 #endif
+8
drivers/gpu/drm/amd/amdgpu/si_dpm.c
··· 8011 8011 adev->pm.dpm.thermal.irq.funcs = &si_dpm_irq_funcs; 8012 8012 } 8013 8013 8014 + const struct amdgpu_ip_block_version si_dpm_ip_block = 8015 + { 8016 + .type = AMD_IP_BLOCK_TYPE_SMC, 8017 + .major = 6, 8018 + .minor = 0, 8019 + .rev = 0, 8020 + .funcs = &si_dpm_ip_funcs, 8021 + };
+9 -1
drivers/gpu/drm/amd/amdgpu/si_ih.c
··· 268 268 return 0; 269 269 } 270 270 271 - const struct amd_ip_funcs si_ih_ip_funcs = { 271 + static const struct amd_ip_funcs si_ih_ip_funcs = { 272 272 .name = "si_ih", 273 273 .early_init = si_ih_early_init, 274 274 .late_init = NULL, ··· 297 297 adev->irq.ih_funcs = &si_ih_funcs; 298 298 } 299 299 300 + const struct amdgpu_ip_block_version si_ih_ip_block = 301 + { 302 + .type = AMD_IP_BLOCK_TYPE_IH, 303 + .major = 1, 304 + .minor = 0, 305 + .rev = 0, 306 + .funcs = &si_ih_ip_funcs, 307 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/si_ih.h
··· 24 24 #ifndef __SI_IH_H__ 25 25 #define __SI_IH_H__ 26 26 27 - extern const struct amd_ip_funcs si_ih_ip_funcs; 27 + extern const struct amdgpu_ip_block_version si_ih_ip_block; 28 28 29 29 #endif
+9 -1
drivers/gpu/drm/amd/amdgpu/tonga_ih.c
··· 455 455 return 0; 456 456 } 457 457 458 - const struct amd_ip_funcs tonga_ih_ip_funcs = { 458 + static const struct amd_ip_funcs tonga_ih_ip_funcs = { 459 459 .name = "tonga_ih", 460 460 .early_init = tonga_ih_early_init, 461 461 .late_init = NULL, ··· 487 487 adev->irq.ih_funcs = &tonga_ih_funcs; 488 488 } 489 489 490 + const struct amdgpu_ip_block_version tonga_ih_ip_block = 491 + { 492 + .type = AMD_IP_BLOCK_TYPE_IH, 493 + .major = 3, 494 + .minor = 0, 495 + .rev = 0, 496 + .funcs = &tonga_ih_ip_funcs, 497 + };
+2 -2
drivers/gpu/drm/amd/amdgpu/tonga_ih.h
··· 24 24 #ifndef __TONGA_IH_H__ 25 25 #define __TONGA_IH_H__ 26 26 27 - extern const struct amd_ip_funcs tonga_ih_ip_funcs; 27 + extern const struct amdgpu_ip_block_version tonga_ih_ip_block; 28 28 29 - #endif /* __CZ_IH_H__ */ 29 + #endif /* __TONGA_IH_H__ */
+10 -1
drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
··· 723 723 } 724 724 } 725 725 726 - const struct amd_ip_funcs uvd_v4_2_ip_funcs = { 726 + static const struct amd_ip_funcs uvd_v4_2_ip_funcs = { 727 727 .name = "uvd_v4_2", 728 728 .early_init = uvd_v4_2_early_init, 729 729 .late_init = NULL, ··· 780 780 adev->uvd.irq.num_types = 1; 781 781 adev->uvd.irq.funcs = &uvd_v4_2_irq_funcs; 782 782 } 783 + 784 + const struct amdgpu_ip_block_version uvd_v4_2_ip_block = 785 + { 786 + .type = AMD_IP_BLOCK_TYPE_UVD, 787 + .major = 4, 788 + .minor = 2, 789 + .rev = 0, 790 + .funcs = &uvd_v4_2_ip_funcs, 791 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/uvd_v4_2.h
··· 24 24 #ifndef __UVD_V4_2_H__ 25 25 #define __UVD_V4_2_H__ 26 26 27 - extern const struct amd_ip_funcs uvd_v4_2_ip_funcs; 27 + extern const struct amdgpu_ip_block_version uvd_v4_2_ip_block; 28 28 29 29 #endif
+10 -1
drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
··· 774 774 } 775 775 } 776 776 777 - const struct amd_ip_funcs uvd_v5_0_ip_funcs = { 777 + static const struct amd_ip_funcs uvd_v5_0_ip_funcs = { 778 778 .name = "uvd_v5_0", 779 779 .early_init = uvd_v5_0_early_init, 780 780 .late_init = NULL, ··· 831 831 adev->uvd.irq.num_types = 1; 832 832 adev->uvd.irq.funcs = &uvd_v5_0_irq_funcs; 833 833 } 834 + 835 + const struct amdgpu_ip_block_version uvd_v5_0_ip_block = 836 + { 837 + .type = AMD_IP_BLOCK_TYPE_UVD, 838 + .major = 5, 839 + .minor = 0, 840 + .rev = 0, 841 + .funcs = &uvd_v5_0_ip_funcs, 842 + };
+1 -1
drivers/gpu/drm/amd/amdgpu/uvd_v5_0.h
··· 24 24 #ifndef __UVD_V5_0_H__ 25 25 #define __UVD_V5_0_H__ 26 26 27 - extern const struct amd_ip_funcs uvd_v5_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version uvd_v5_0_ip_block; 28 28 29 29 #endif
+28 -1
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
··· 1001 1001 } 1002 1002 } 1003 1003 1004 - const struct amd_ip_funcs uvd_v6_0_ip_funcs = { 1004 + static const struct amd_ip_funcs uvd_v6_0_ip_funcs = { 1005 1005 .name = "uvd_v6_0", 1006 1006 .early_init = uvd_v6_0_early_init, 1007 1007 .late_init = NULL, ··· 1096 1096 adev->uvd.irq.num_types = 1; 1097 1097 adev->uvd.irq.funcs = &uvd_v6_0_irq_funcs; 1098 1098 } 1099 + 1100 + const struct amdgpu_ip_block_version uvd_v6_0_ip_block = 1101 + { 1102 + .type = AMD_IP_BLOCK_TYPE_UVD, 1103 + .major = 6, 1104 + .minor = 0, 1105 + .rev = 0, 1106 + .funcs = &uvd_v6_0_ip_funcs, 1107 + }; 1108 + 1109 + const struct amdgpu_ip_block_version uvd_v6_2_ip_block = 1110 + { 1111 + .type = AMD_IP_BLOCK_TYPE_UVD, 1112 + .major = 6, 1113 + .minor = 2, 1114 + .rev = 0, 1115 + .funcs = &uvd_v6_0_ip_funcs, 1116 + }; 1117 + 1118 + const struct amdgpu_ip_block_version uvd_v6_3_ip_block = 1119 + { 1120 + .type = AMD_IP_BLOCK_TYPE_UVD, 1121 + .major = 6, 1122 + .minor = 3, 1123 + .rev = 0, 1124 + .funcs = &uvd_v6_0_ip_funcs, 1125 + };
+3 -1
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.h
··· 24 24 #ifndef __UVD_V6_0_H__ 25 25 #define __UVD_V6_0_H__ 26 26 27 - extern const struct amd_ip_funcs uvd_v6_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version uvd_v6_0_ip_block; 28 + extern const struct amdgpu_ip_block_version uvd_v6_2_ip_block; 29 + extern const struct amdgpu_ip_block_version uvd_v6_3_ip_block; 28 30 29 31 #endif
+10 -1
drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
··· 592 592 return vce_v2_0_start(adev); 593 593 } 594 594 595 - const struct amd_ip_funcs vce_v2_0_ip_funcs = { 595 + static const struct amd_ip_funcs vce_v2_0_ip_funcs = { 596 596 .name = "vce_v2_0", 597 597 .early_init = vce_v2_0_early_init, 598 598 .late_init = NULL, ··· 646 646 { 647 647 adev->vce.irq.num_types = 1; 648 648 adev->vce.irq.funcs = &vce_v2_0_irq_funcs; 649 + }; 650 + 651 + const struct amdgpu_ip_block_version vce_v2_0_ip_block = 652 + { 653 + .type = AMD_IP_BLOCK_TYPE_VCE, 654 + .major = 2, 655 + .minor = 0, 656 + .rev = 0, 657 + .funcs = &vce_v2_0_ip_funcs, 649 658 };
+1 -1
drivers/gpu/drm/amd/amdgpu/vce_v2_0.h
··· 24 24 #ifndef __VCE_V2_0_H__ 25 25 #define __VCE_V2_0_H__ 26 26 27 - extern const struct amd_ip_funcs vce_v2_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version vce_v2_0_ip_block; 28 28 29 29 #endif
+28 -1
drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
··· 807 807 amdgpu_ring_write(ring, seq); 808 808 } 809 809 810 - const struct amd_ip_funcs vce_v3_0_ip_funcs = { 810 + static const struct amd_ip_funcs vce_v3_0_ip_funcs = { 811 811 .name = "vce_v3_0", 812 812 .early_init = vce_v3_0_early_init, 813 813 .late_init = NULL, ··· 897 897 { 898 898 adev->vce.irq.num_types = 1; 899 899 adev->vce.irq.funcs = &vce_v3_0_irq_funcs; 900 + }; 901 + 902 + const struct amdgpu_ip_block_version vce_v3_0_ip_block = 903 + { 904 + .type = AMD_IP_BLOCK_TYPE_VCE, 905 + .major = 3, 906 + .minor = 0, 907 + .rev = 0, 908 + .funcs = &vce_v3_0_ip_funcs, 909 + }; 910 + 911 + const struct amdgpu_ip_block_version vce_v3_1_ip_block = 912 + { 913 + .type = AMD_IP_BLOCK_TYPE_VCE, 914 + .major = 3, 915 + .minor = 1, 916 + .rev = 0, 917 + .funcs = &vce_v3_0_ip_funcs, 918 + }; 919 + 920 + const struct amdgpu_ip_block_version vce_v3_4_ip_block = 921 + { 922 + .type = AMD_IP_BLOCK_TYPE_VCE, 923 + .major = 3, 924 + .minor = 4, 925 + .rev = 0, 926 + .funcs = &vce_v3_0_ip_funcs, 900 927 };
+3 -1
drivers/gpu/drm/amd/amdgpu/vce_v3_0.h
··· 24 24 #ifndef __VCE_V3_0_H__ 25 25 #define __VCE_V3_0_H__ 26 26 27 - extern const struct amd_ip_funcs vce_v3_0_ip_funcs; 27 + extern const struct amdgpu_ip_block_version vce_v3_0_ip_block; 28 + extern const struct amdgpu_ip_block_version vce_v3_1_ip_block; 29 + extern const struct amdgpu_ip_block_version vce_v3_4_ip_block; 28 30 29 31 #endif
+108 -729
drivers/gpu/drm/amd/amdgpu/vi.c
··· 858 858 WREG32(mmBIF_DOORBELL_APER_EN, tmp); 859 859 } 860 860 861 - /* topaz has no DCE, UVD, VCE */ 862 - static const struct amdgpu_ip_block_version topaz_ip_blocks[] = 863 - { 864 - /* ORDER MATTERS! */ 865 - { 866 - .type = AMD_IP_BLOCK_TYPE_COMMON, 867 - .major = 2, 868 - .minor = 0, 869 - .rev = 0, 870 - .funcs = &vi_common_ip_funcs, 871 - }, 872 - { 873 - .type = AMD_IP_BLOCK_TYPE_GMC, 874 - .major = 7, 875 - .minor = 4, 876 - .rev = 0, 877 - .funcs = &gmc_v7_0_ip_funcs, 878 - }, 879 - { 880 - .type = AMD_IP_BLOCK_TYPE_IH, 881 - .major = 2, 882 - .minor = 4, 883 - .rev = 0, 884 - .funcs = &iceland_ih_ip_funcs, 885 - }, 886 - { 887 - .type = AMD_IP_BLOCK_TYPE_SMC, 888 - .major = 7, 889 - .minor = 1, 890 - .rev = 0, 891 - .funcs = &amdgpu_pp_ip_funcs, 892 - }, 893 - { 894 - .type = AMD_IP_BLOCK_TYPE_GFX, 895 - .major = 8, 896 - .minor = 0, 897 - .rev = 0, 898 - .funcs = &gfx_v8_0_ip_funcs, 899 - }, 900 - { 901 - .type = AMD_IP_BLOCK_TYPE_SDMA, 902 - .major = 2, 903 - .minor = 4, 904 - .rev = 0, 905 - .funcs = &sdma_v2_4_ip_funcs, 906 - }, 907 - }; 908 - 909 - static const struct amdgpu_ip_block_version topaz_ip_blocks_vd[] = 910 - { 911 - /* ORDER MATTERS! */ 912 - { 913 - .type = AMD_IP_BLOCK_TYPE_COMMON, 914 - .major = 2, 915 - .minor = 0, 916 - .rev = 0, 917 - .funcs = &vi_common_ip_funcs, 918 - }, 919 - { 920 - .type = AMD_IP_BLOCK_TYPE_GMC, 921 - .major = 7, 922 - .minor = 4, 923 - .rev = 0, 924 - .funcs = &gmc_v7_0_ip_funcs, 925 - }, 926 - { 927 - .type = AMD_IP_BLOCK_TYPE_IH, 928 - .major = 2, 929 - .minor = 4, 930 - .rev = 0, 931 - .funcs = &iceland_ih_ip_funcs, 932 - }, 933 - { 934 - .type = AMD_IP_BLOCK_TYPE_SMC, 935 - .major = 7, 936 - .minor = 1, 937 - .rev = 0, 938 - .funcs = &amdgpu_pp_ip_funcs, 939 - }, 940 - { 941 - .type = AMD_IP_BLOCK_TYPE_DCE, 942 - .major = 1, 943 - .minor = 0, 944 - .rev = 0, 945 - .funcs = &dce_virtual_ip_funcs, 946 - }, 947 - { 948 - .type = AMD_IP_BLOCK_TYPE_GFX, 949 - .major = 8, 950 - .minor = 0, 951 - .rev = 0, 952 - .funcs = &gfx_v8_0_ip_funcs, 953 - }, 954 - { 955 - .type = AMD_IP_BLOCK_TYPE_SDMA, 956 - .major = 2, 957 - .minor = 4, 958 - .rev = 0, 959 - .funcs = &sdma_v2_4_ip_funcs, 960 - }, 961 - }; 962 - 963 - static const struct amdgpu_ip_block_version tonga_ip_blocks[] = 964 - { 965 - /* ORDER MATTERS! */ 966 - { 967 - .type = AMD_IP_BLOCK_TYPE_COMMON, 968 - .major = 2, 969 - .minor = 0, 970 - .rev = 0, 971 - .funcs = &vi_common_ip_funcs, 972 - }, 973 - { 974 - .type = AMD_IP_BLOCK_TYPE_GMC, 975 - .major = 8, 976 - .minor = 0, 977 - .rev = 0, 978 - .funcs = &gmc_v8_0_ip_funcs, 979 - }, 980 - { 981 - .type = AMD_IP_BLOCK_TYPE_IH, 982 - .major = 3, 983 - .minor = 0, 984 - .rev = 0, 985 - .funcs = &tonga_ih_ip_funcs, 986 - }, 987 - { 988 - .type = AMD_IP_BLOCK_TYPE_SMC, 989 - .major = 7, 990 - .minor = 1, 991 - .rev = 0, 992 - .funcs = &amdgpu_pp_ip_funcs, 993 - }, 994 - { 995 - .type = AMD_IP_BLOCK_TYPE_DCE, 996 - .major = 10, 997 - .minor = 0, 998 - .rev = 0, 999 - .funcs = &dce_v10_0_ip_funcs, 1000 - }, 1001 - { 1002 - .type = AMD_IP_BLOCK_TYPE_GFX, 1003 - .major = 8, 1004 - .minor = 0, 1005 - .rev = 0, 1006 - .funcs = &gfx_v8_0_ip_funcs, 1007 - }, 1008 - { 1009 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1010 - .major = 3, 1011 - .minor = 0, 1012 - .rev = 0, 1013 - .funcs = &sdma_v3_0_ip_funcs, 1014 - }, 1015 - { 1016 - .type = AMD_IP_BLOCK_TYPE_UVD, 1017 - .major = 5, 1018 - .minor = 0, 1019 - .rev = 0, 1020 - .funcs = &uvd_v5_0_ip_funcs, 1021 - }, 1022 - { 1023 - .type = AMD_IP_BLOCK_TYPE_VCE, 1024 - .major = 3, 1025 - .minor = 0, 1026 - .rev = 0, 1027 - .funcs = &vce_v3_0_ip_funcs, 1028 - }, 1029 - }; 1030 - 1031 - static const struct amdgpu_ip_block_version tonga_ip_blocks_vd[] = 1032 - { 1033 - /* ORDER MATTERS! */ 1034 - { 1035 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1036 - .major = 2, 1037 - .minor = 0, 1038 - .rev = 0, 1039 - .funcs = &vi_common_ip_funcs, 1040 - }, 1041 - { 1042 - .type = AMD_IP_BLOCK_TYPE_GMC, 1043 - .major = 8, 1044 - .minor = 0, 1045 - .rev = 0, 1046 - .funcs = &gmc_v8_0_ip_funcs, 1047 - }, 1048 - { 1049 - .type = AMD_IP_BLOCK_TYPE_IH, 1050 - .major = 3, 1051 - .minor = 0, 1052 - .rev = 0, 1053 - .funcs = &tonga_ih_ip_funcs, 1054 - }, 1055 - { 1056 - .type = AMD_IP_BLOCK_TYPE_SMC, 1057 - .major = 7, 1058 - .minor = 1, 1059 - .rev = 0, 1060 - .funcs = &amdgpu_pp_ip_funcs, 1061 - }, 1062 - { 1063 - .type = AMD_IP_BLOCK_TYPE_DCE, 1064 - .major = 10, 1065 - .minor = 0, 1066 - .rev = 0, 1067 - .funcs = &dce_virtual_ip_funcs, 1068 - }, 1069 - { 1070 - .type = AMD_IP_BLOCK_TYPE_GFX, 1071 - .major = 8, 1072 - .minor = 0, 1073 - .rev = 0, 1074 - .funcs = &gfx_v8_0_ip_funcs, 1075 - }, 1076 - { 1077 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1078 - .major = 3, 1079 - .minor = 0, 1080 - .rev = 0, 1081 - .funcs = &sdma_v3_0_ip_funcs, 1082 - }, 1083 - { 1084 - .type = AMD_IP_BLOCK_TYPE_UVD, 1085 - .major = 5, 1086 - .minor = 0, 1087 - .rev = 0, 1088 - .funcs = &uvd_v5_0_ip_funcs, 1089 - }, 1090 - { 1091 - .type = AMD_IP_BLOCK_TYPE_VCE, 1092 - .major = 3, 1093 - .minor = 0, 1094 - .rev = 0, 1095 - .funcs = &vce_v3_0_ip_funcs, 1096 - }, 1097 - }; 1098 - 1099 - static const struct amdgpu_ip_block_version fiji_ip_blocks[] = 1100 - { 1101 - /* ORDER MATTERS! */ 1102 - { 1103 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1104 - .major = 2, 1105 - .minor = 0, 1106 - .rev = 0, 1107 - .funcs = &vi_common_ip_funcs, 1108 - }, 1109 - { 1110 - .type = AMD_IP_BLOCK_TYPE_GMC, 1111 - .major = 8, 1112 - .minor = 5, 1113 - .rev = 0, 1114 - .funcs = &gmc_v8_0_ip_funcs, 1115 - }, 1116 - { 1117 - .type = AMD_IP_BLOCK_TYPE_IH, 1118 - .major = 3, 1119 - .minor = 0, 1120 - .rev = 0, 1121 - .funcs = &tonga_ih_ip_funcs, 1122 - }, 1123 - { 1124 - .type = AMD_IP_BLOCK_TYPE_SMC, 1125 - .major = 7, 1126 - .minor = 1, 1127 - .rev = 0, 1128 - .funcs = &amdgpu_pp_ip_funcs, 1129 - }, 1130 - { 1131 - .type = AMD_IP_BLOCK_TYPE_DCE, 1132 - .major = 10, 1133 - .minor = 1, 1134 - .rev = 0, 1135 - .funcs = &dce_v10_0_ip_funcs, 1136 - }, 1137 - { 1138 - .type = AMD_IP_BLOCK_TYPE_GFX, 1139 - .major = 8, 1140 - .minor = 0, 1141 - .rev = 0, 1142 - .funcs = &gfx_v8_0_ip_funcs, 1143 - }, 1144 - { 1145 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1146 - .major = 3, 1147 - .minor = 0, 1148 - .rev = 0, 1149 - .funcs = &sdma_v3_0_ip_funcs, 1150 - }, 1151 - { 1152 - .type = AMD_IP_BLOCK_TYPE_UVD, 1153 - .major = 6, 1154 - .minor = 0, 1155 - .rev = 0, 1156 - .funcs = &uvd_v6_0_ip_funcs, 1157 - }, 1158 - { 1159 - .type = AMD_IP_BLOCK_TYPE_VCE, 1160 - .major = 3, 1161 - .minor = 0, 1162 - .rev = 0, 1163 - .funcs = &vce_v3_0_ip_funcs, 1164 - }, 1165 - }; 1166 - 1167 - static const struct amdgpu_ip_block_version fiji_ip_blocks_vd[] = 1168 - { 1169 - /* ORDER MATTERS! */ 1170 - { 1171 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1172 - .major = 2, 1173 - .minor = 0, 1174 - .rev = 0, 1175 - .funcs = &vi_common_ip_funcs, 1176 - }, 1177 - { 1178 - .type = AMD_IP_BLOCK_TYPE_GMC, 1179 - .major = 8, 1180 - .minor = 5, 1181 - .rev = 0, 1182 - .funcs = &gmc_v8_0_ip_funcs, 1183 - }, 1184 - { 1185 - .type = AMD_IP_BLOCK_TYPE_IH, 1186 - .major = 3, 1187 - .minor = 0, 1188 - .rev = 0, 1189 - .funcs = &tonga_ih_ip_funcs, 1190 - }, 1191 - { 1192 - .type = AMD_IP_BLOCK_TYPE_SMC, 1193 - .major = 7, 1194 - .minor = 1, 1195 - .rev = 0, 1196 - .funcs = &amdgpu_pp_ip_funcs, 1197 - }, 1198 - { 1199 - .type = AMD_IP_BLOCK_TYPE_DCE, 1200 - .major = 10, 1201 - .minor = 1, 1202 - .rev = 0, 1203 - .funcs = &dce_virtual_ip_funcs, 1204 - }, 1205 - { 1206 - .type = AMD_IP_BLOCK_TYPE_GFX, 1207 - .major = 8, 1208 - .minor = 0, 1209 - .rev = 0, 1210 - .funcs = &gfx_v8_0_ip_funcs, 1211 - }, 1212 - { 1213 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1214 - .major = 3, 1215 - .minor = 0, 1216 - .rev = 0, 1217 - .funcs = &sdma_v3_0_ip_funcs, 1218 - }, 1219 - { 1220 - .type = AMD_IP_BLOCK_TYPE_UVD, 1221 - .major = 6, 1222 - .minor = 0, 1223 - .rev = 0, 1224 - .funcs = &uvd_v6_0_ip_funcs, 1225 - }, 1226 - { 1227 - .type = AMD_IP_BLOCK_TYPE_VCE, 1228 - .major = 3, 1229 - .minor = 0, 1230 - .rev = 0, 1231 - .funcs = &vce_v3_0_ip_funcs, 1232 - }, 1233 - }; 1234 - 1235 - static const struct amdgpu_ip_block_version polaris11_ip_blocks[] = 1236 - { 1237 - /* ORDER MATTERS! */ 1238 - { 1239 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1240 - .major = 2, 1241 - .minor = 0, 1242 - .rev = 0, 1243 - .funcs = &vi_common_ip_funcs, 1244 - }, 1245 - { 1246 - .type = AMD_IP_BLOCK_TYPE_GMC, 1247 - .major = 8, 1248 - .minor = 1, 1249 - .rev = 0, 1250 - .funcs = &gmc_v8_0_ip_funcs, 1251 - }, 1252 - { 1253 - .type = AMD_IP_BLOCK_TYPE_IH, 1254 - .major = 3, 1255 - .minor = 1, 1256 - .rev = 0, 1257 - .funcs = &tonga_ih_ip_funcs, 1258 - }, 1259 - { 1260 - .type = AMD_IP_BLOCK_TYPE_SMC, 1261 - .major = 7, 1262 - .minor = 2, 1263 - .rev = 0, 1264 - .funcs = &amdgpu_pp_ip_funcs, 1265 - }, 1266 - { 1267 - .type = AMD_IP_BLOCK_TYPE_DCE, 1268 - .major = 11, 1269 - .minor = 2, 1270 - .rev = 0, 1271 - .funcs = &dce_v11_0_ip_funcs, 1272 - }, 1273 - { 1274 - .type = AMD_IP_BLOCK_TYPE_GFX, 1275 - .major = 8, 1276 - .minor = 0, 1277 - .rev = 0, 1278 - .funcs = &gfx_v8_0_ip_funcs, 1279 - }, 1280 - { 1281 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1282 - .major = 3, 1283 - .minor = 1, 1284 - .rev = 0, 1285 - .funcs = &sdma_v3_0_ip_funcs, 1286 - }, 1287 - { 1288 - .type = AMD_IP_BLOCK_TYPE_UVD, 1289 - .major = 6, 1290 - .minor = 3, 1291 - .rev = 0, 1292 - .funcs = &uvd_v6_0_ip_funcs, 1293 - }, 1294 - { 1295 - .type = AMD_IP_BLOCK_TYPE_VCE, 1296 - .major = 3, 1297 - .minor = 4, 1298 - .rev = 0, 1299 - .funcs = &vce_v3_0_ip_funcs, 1300 - }, 1301 - }; 1302 - 1303 - static const struct amdgpu_ip_block_version polaris11_ip_blocks_vd[] = 1304 - { 1305 - /* ORDER MATTERS! */ 1306 - { 1307 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1308 - .major = 2, 1309 - .minor = 0, 1310 - .rev = 0, 1311 - .funcs = &vi_common_ip_funcs, 1312 - }, 1313 - { 1314 - .type = AMD_IP_BLOCK_TYPE_GMC, 1315 - .major = 8, 1316 - .minor = 1, 1317 - .rev = 0, 1318 - .funcs = &gmc_v8_0_ip_funcs, 1319 - }, 1320 - { 1321 - .type = AMD_IP_BLOCK_TYPE_IH, 1322 - .major = 3, 1323 - .minor = 1, 1324 - .rev = 0, 1325 - .funcs = &tonga_ih_ip_funcs, 1326 - }, 1327 - { 1328 - .type = AMD_IP_BLOCK_TYPE_SMC, 1329 - .major = 7, 1330 - .minor = 2, 1331 - .rev = 0, 1332 - .funcs = &amdgpu_pp_ip_funcs, 1333 - }, 1334 - { 1335 - .type = AMD_IP_BLOCK_TYPE_DCE, 1336 - .major = 11, 1337 - .minor = 2, 1338 - .rev = 0, 1339 - .funcs = &dce_virtual_ip_funcs, 1340 - }, 1341 - { 1342 - .type = AMD_IP_BLOCK_TYPE_GFX, 1343 - .major = 8, 1344 - .minor = 0, 1345 - .rev = 0, 1346 - .funcs = &gfx_v8_0_ip_funcs, 1347 - }, 1348 - { 1349 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1350 - .major = 3, 1351 - .minor = 1, 1352 - .rev = 0, 1353 - .funcs = &sdma_v3_0_ip_funcs, 1354 - }, 1355 - { 1356 - .type = AMD_IP_BLOCK_TYPE_UVD, 1357 - .major = 6, 1358 - .minor = 3, 1359 - .rev = 0, 1360 - .funcs = &uvd_v6_0_ip_funcs, 1361 - }, 1362 - { 1363 - .type = AMD_IP_BLOCK_TYPE_VCE, 1364 - .major = 3, 1365 - .minor = 4, 1366 - .rev = 0, 1367 - .funcs = &vce_v3_0_ip_funcs, 1368 - }, 1369 - }; 1370 - 1371 - static const struct amdgpu_ip_block_version cz_ip_blocks[] = 1372 - { 1373 - /* ORDER MATTERS! */ 1374 - { 1375 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1376 - .major = 2, 1377 - .minor = 0, 1378 - .rev = 0, 1379 - .funcs = &vi_common_ip_funcs, 1380 - }, 1381 - { 1382 - .type = AMD_IP_BLOCK_TYPE_GMC, 1383 - .major = 8, 1384 - .minor = 0, 1385 - .rev = 0, 1386 - .funcs = &gmc_v8_0_ip_funcs, 1387 - }, 1388 - { 1389 - .type = AMD_IP_BLOCK_TYPE_IH, 1390 - .major = 3, 1391 - .minor = 0, 1392 - .rev = 0, 1393 - .funcs = &cz_ih_ip_funcs, 1394 - }, 1395 - { 1396 - .type = AMD_IP_BLOCK_TYPE_SMC, 1397 - .major = 8, 1398 - .minor = 0, 1399 - .rev = 0, 1400 - .funcs = &amdgpu_pp_ip_funcs 1401 - }, 1402 - { 1403 - .type = AMD_IP_BLOCK_TYPE_DCE, 1404 - .major = 11, 1405 - .minor = 0, 1406 - .rev = 0, 1407 - .funcs = &dce_v11_0_ip_funcs, 1408 - }, 1409 - { 1410 - .type = AMD_IP_BLOCK_TYPE_GFX, 1411 - .major = 8, 1412 - .minor = 0, 1413 - .rev = 0, 1414 - .funcs = &gfx_v8_0_ip_funcs, 1415 - }, 1416 - { 1417 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1418 - .major = 3, 1419 - .minor = 0, 1420 - .rev = 0, 1421 - .funcs = &sdma_v3_0_ip_funcs, 1422 - }, 1423 - { 1424 - .type = AMD_IP_BLOCK_TYPE_UVD, 1425 - .major = 6, 1426 - .minor = 0, 1427 - .rev = 0, 1428 - .funcs = &uvd_v6_0_ip_funcs, 1429 - }, 1430 - { 1431 - .type = AMD_IP_BLOCK_TYPE_VCE, 1432 - .major = 3, 1433 - .minor = 0, 1434 - .rev = 0, 1435 - .funcs = &vce_v3_0_ip_funcs, 1436 - }, 1437 - #if defined(CONFIG_DRM_AMD_ACP) 1438 - { 1439 - .type = AMD_IP_BLOCK_TYPE_ACP, 1440 - .major = 2, 1441 - .minor = 2, 1442 - .rev = 0, 1443 - .funcs = &acp_ip_funcs, 1444 - }, 1445 - #endif 1446 - }; 1447 - 1448 - static const struct amdgpu_ip_block_version cz_ip_blocks_vd[] = 1449 - { 1450 - /* ORDER MATTERS! */ 1451 - { 1452 - .type = AMD_IP_BLOCK_TYPE_COMMON, 1453 - .major = 2, 1454 - .minor = 0, 1455 - .rev = 0, 1456 - .funcs = &vi_common_ip_funcs, 1457 - }, 1458 - { 1459 - .type = AMD_IP_BLOCK_TYPE_GMC, 1460 - .major = 8, 1461 - .minor = 0, 1462 - .rev = 0, 1463 - .funcs = &gmc_v8_0_ip_funcs, 1464 - }, 1465 - { 1466 - .type = AMD_IP_BLOCK_TYPE_IH, 1467 - .major = 3, 1468 - .minor = 0, 1469 - .rev = 0, 1470 - .funcs = &cz_ih_ip_funcs, 1471 - }, 1472 - { 1473 - .type = AMD_IP_BLOCK_TYPE_SMC, 1474 - .major = 8, 1475 - .minor = 0, 1476 - .rev = 0, 1477 - .funcs = &amdgpu_pp_ip_funcs 1478 - }, 1479 - { 1480 - .type = AMD_IP_BLOCK_TYPE_DCE, 1481 - .major = 11, 1482 - .minor = 0, 1483 - .rev = 0, 1484 - .funcs = &dce_virtual_ip_funcs, 1485 - }, 1486 - { 1487 - .type = AMD_IP_BLOCK_TYPE_GFX, 1488 - .major = 8, 1489 - .minor = 0, 1490 - .rev = 0, 1491 - .funcs = &gfx_v8_0_ip_funcs, 1492 - }, 1493 - { 1494 - .type = AMD_IP_BLOCK_TYPE_SDMA, 1495 - .major = 3, 1496 - .minor = 0, 1497 - .rev = 0, 1498 - .funcs = &sdma_v3_0_ip_funcs, 1499 - }, 1500 - { 1501 - .type = AMD_IP_BLOCK_TYPE_UVD, 1502 - .major = 6, 1503 - .minor = 0, 1504 - .rev = 0, 1505 - .funcs = &uvd_v6_0_ip_funcs, 1506 - }, 1507 - { 1508 - .type = AMD_IP_BLOCK_TYPE_VCE, 1509 - .major = 3, 1510 - .minor = 0, 1511 - .rev = 0, 1512 - .funcs = &vce_v3_0_ip_funcs, 1513 - }, 1514 - #if defined(CONFIG_DRM_AMD_ACP) 1515 - { 1516 - .type = AMD_IP_BLOCK_TYPE_ACP, 1517 - .major = 2, 1518 - .minor = 2, 1519 - .rev = 0, 1520 - .funcs = &acp_ip_funcs, 1521 - }, 1522 - #endif 1523 - }; 1524 - 1525 - int vi_set_ip_blocks(struct amdgpu_device *adev) 1526 - { 1527 - if (adev->enable_virtual_display) { 1528 - switch (adev->asic_type) { 1529 - case CHIP_TOPAZ: 1530 - adev->ip_blocks = topaz_ip_blocks_vd; 1531 - adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks_vd); 1532 - break; 1533 - case CHIP_FIJI: 1534 - adev->ip_blocks = fiji_ip_blocks_vd; 1535 - adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks_vd); 1536 - break; 1537 - case CHIP_TONGA: 1538 - adev->ip_blocks = tonga_ip_blocks_vd; 1539 - adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks_vd); 1540 - break; 1541 - case CHIP_POLARIS11: 1542 - case CHIP_POLARIS10: 1543 - adev->ip_blocks = polaris11_ip_blocks_vd; 1544 - adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks_vd); 1545 - break; 1546 - 1547 - case CHIP_CARRIZO: 1548 - case CHIP_STONEY: 1549 - adev->ip_blocks = cz_ip_blocks_vd; 1550 - adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_vd); 1551 - break; 1552 - default: 1553 - /* FIXME: not supported yet */ 1554 - return -EINVAL; 1555 - } 1556 - } else { 1557 - switch (adev->asic_type) { 1558 - case CHIP_TOPAZ: 1559 - adev->ip_blocks = topaz_ip_blocks; 1560 - adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks); 1561 - break; 1562 - case CHIP_FIJI: 1563 - adev->ip_blocks = fiji_ip_blocks; 1564 - adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks); 1565 - break; 1566 - case CHIP_TONGA: 1567 - adev->ip_blocks = tonga_ip_blocks; 1568 - adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); 1569 - break; 1570 - case CHIP_POLARIS11: 1571 - case CHIP_POLARIS10: 1572 - adev->ip_blocks = polaris11_ip_blocks; 1573 - adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks); 1574 - break; 1575 - case CHIP_CARRIZO: 1576 - case CHIP_STONEY: 1577 - adev->ip_blocks = cz_ip_blocks; 1578 - adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks); 1579 - break; 1580 - default: 1581 - /* FIXME: not supported yet */ 1582 - return -EINVAL; 1583 - } 1584 - } 1585 - 1586 - return 0; 1587 - } 1588 - 1589 861 #define ATI_REV_ID_FUSE_MACRO__ADDRESS 0xC0014044 1590 862 #define ATI_REV_ID_FUSE_MACRO__SHIFT 9 1591 863 #define ATI_REV_ID_FUSE_MACRO__MASK 0x00001E00 ··· 1257 1985 return 0; 1258 1986 } 1259 1987 1260 - const struct amd_ip_funcs vi_common_ip_funcs = { 1988 + static const struct amd_ip_funcs vi_common_ip_funcs = { 1261 1989 .name = "vi_common", 1262 1990 .early_init = vi_common_early_init, 1263 1991 .late_init = NULL, ··· 1274 2002 .set_powergating_state = vi_common_set_powergating_state, 1275 2003 }; 1276 2004 2005 + static const struct amdgpu_ip_block_version vi_common_ip_block = 2006 + { 2007 + .type = AMD_IP_BLOCK_TYPE_COMMON, 2008 + .major = 1, 2009 + .minor = 0, 2010 + .rev = 0, 2011 + .funcs = &vi_common_ip_funcs, 2012 + }; 2013 + 2014 + int vi_set_ip_blocks(struct amdgpu_device *adev) 2015 + { 2016 + switch (adev->asic_type) { 2017 + case CHIP_TOPAZ: 2018 + /* topaz has no DCE, UVD, VCE */ 2019 + amdgpu_ip_block_add(adev, &vi_common_ip_block); 2020 + amdgpu_ip_block_add(adev, &gmc_v7_4_ip_block); 2021 + amdgpu_ip_block_add(adev, &iceland_ih_ip_block); 2022 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2023 + if (adev->enable_virtual_display) 2024 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2025 + amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); 2026 + amdgpu_ip_block_add(adev, &sdma_v2_4_ip_block); 2027 + break; 2028 + case CHIP_FIJI: 2029 + amdgpu_ip_block_add(adev, &vi_common_ip_block); 2030 + amdgpu_ip_block_add(adev, &gmc_v8_5_ip_block); 2031 + amdgpu_ip_block_add(adev, &tonga_ih_ip_block); 2032 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2033 + if (adev->enable_virtual_display) 2034 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2035 + else 2036 + amdgpu_ip_block_add(adev, &dce_v10_1_ip_block); 2037 + amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); 2038 + amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); 2039 + amdgpu_ip_block_add(adev, &uvd_v6_0_ip_block); 2040 + amdgpu_ip_block_add(adev, &vce_v3_0_ip_block); 2041 + break; 2042 + case CHIP_TONGA: 2043 + amdgpu_ip_block_add(adev, &vi_common_ip_block); 2044 + amdgpu_ip_block_add(adev, &gmc_v8_0_ip_block); 2045 + amdgpu_ip_block_add(adev, &tonga_ih_ip_block); 2046 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2047 + if (adev->enable_virtual_display) 2048 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2049 + else 2050 + amdgpu_ip_block_add(adev, &dce_v10_0_ip_block); 2051 + amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); 2052 + amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); 2053 + amdgpu_ip_block_add(adev, &uvd_v5_0_ip_block); 2054 + amdgpu_ip_block_add(adev, &vce_v3_0_ip_block); 2055 + break; 2056 + case CHIP_POLARIS11: 2057 + case CHIP_POLARIS10: 2058 + amdgpu_ip_block_add(adev, &vi_common_ip_block); 2059 + amdgpu_ip_block_add(adev, &gmc_v8_1_ip_block); 2060 + amdgpu_ip_block_add(adev, &tonga_ih_ip_block); 2061 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2062 + if (adev->enable_virtual_display) 2063 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2064 + else 2065 + amdgpu_ip_block_add(adev, &dce_v11_2_ip_block); 2066 + amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); 2067 + amdgpu_ip_block_add(adev, &sdma_v3_1_ip_block); 2068 + amdgpu_ip_block_add(adev, &uvd_v6_3_ip_block); 2069 + amdgpu_ip_block_add(adev, &vce_v3_4_ip_block); 2070 + break; 2071 + case CHIP_CARRIZO: 2072 + amdgpu_ip_block_add(adev, &vi_common_ip_block); 2073 + amdgpu_ip_block_add(adev, &gmc_v8_0_ip_block); 2074 + amdgpu_ip_block_add(adev, &cz_ih_ip_block); 2075 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2076 + if (adev->enable_virtual_display) 2077 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2078 + else 2079 + amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); 2080 + amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); 2081 + amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); 2082 + amdgpu_ip_block_add(adev, &uvd_v6_0_ip_block); 2083 + amdgpu_ip_block_add(adev, &vce_v3_1_ip_block); 2084 + #if defined(CONFIG_DRM_AMD_ACP) 2085 + amdgpu_ip_block_add(adev, &acp_ip_block); 2086 + #endif 2087 + break; 2088 + case CHIP_STONEY: 2089 + amdgpu_ip_block_add(adev, &vi_common_ip_block); 2090 + amdgpu_ip_block_add(adev, &gmc_v8_0_ip_block); 2091 + amdgpu_ip_block_add(adev, &cz_ih_ip_block); 2092 + amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2093 + if (adev->enable_virtual_display) 2094 + amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2095 + else 2096 + amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); 2097 + amdgpu_ip_block_add(adev, &gfx_v8_1_ip_block); 2098 + amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); 2099 + amdgpu_ip_block_add(adev, &uvd_v6_2_ip_block); 2100 + amdgpu_ip_block_add(adev, &vce_v3_4_ip_block); 2101 + #if defined(CONFIG_DRM_AMD_ACP) 2102 + amdgpu_ip_block_add(adev, &acp_ip_block); 2103 + #endif 2104 + break; 2105 + default: 2106 + /* FIXME: not supported yet */ 2107 + return -EINVAL; 2108 + } 2109 + 2110 + return 0; 2111 + }
-2
drivers/gpu/drm/amd/amdgpu/vi.h
··· 24 24 #ifndef __VI_H__ 25 25 #define __VI_H__ 26 26 27 - extern const struct amd_ip_funcs vi_common_ip_funcs; 28 - 29 27 void vi_srbm_select(struct amdgpu_device *adev, 30 28 u32 me, u32 pipe, u32 queue, u32 vmid); 31 29 int vi_set_ip_blocks(struct amdgpu_device *adev);