aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index 10ce40d2c040..238b46c304cc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -118,6 +118,11 @@ const char *ras_block_string[] = {
118#define ras_err_str(i) (ras_error_string[ffs(i)]) 118#define ras_err_str(i) (ras_error_string[ffs(i)])
119#define ras_block_str(i) (ras_block_string[i]) 119#define ras_block_str(i) (ras_block_string[i])
120 120
121enum amdgpu_ras_flags {
122 AMDGPU_RAS_FLAG_INIT_BY_VBIOS = 1,
123};
124#define RAS_DEFAULT_FLAGS (AMDGPU_RAS_FLAG_INIT_BY_VBIOS)
125
121static void amdgpu_ras_self_test(struct amdgpu_device *adev) 126static void amdgpu_ras_self_test(struct amdgpu_device *adev)
122{ 127{
123 /* TODO */ 128 /* TODO */
@@ -1387,13 +1392,16 @@ int amdgpu_ras_init(struct amdgpu_device *adev)
1387 &con->supported); 1392 &con->supported);
1388 con->features = 0; 1393 con->features = 0;
1389 INIT_LIST_HEAD(&con->head); 1394 INIT_LIST_HEAD(&con->head);
1395 /* Might need get this flag from vbios. */
1396 con->flags = RAS_DEFAULT_FLAGS;
1390 1397
1391 if (amdgpu_ras_recovery_init(adev)) 1398 if (amdgpu_ras_recovery_init(adev))
1392 goto recovery_out; 1399 goto recovery_out;
1393 1400
1394 amdgpu_ras_mask &= AMDGPU_RAS_BLOCK_MASK; 1401 amdgpu_ras_mask &= AMDGPU_RAS_BLOCK_MASK;
1395 1402
1396 amdgpu_ras_enable_all_features(adev, 1); 1403 if (con->flags & AMDGPU_RAS_FLAG_INIT_BY_VBIOS)
1404 amdgpu_ras_enable_all_features(adev, 1);
1397 1405
1398 if (amdgpu_ras_fs_init(adev)) 1406 if (amdgpu_ras_fs_init(adev))
1399 goto fs_out; 1407 goto fs_out;
@@ -1413,6 +1421,30 @@ recovery_out:
1413 return -EINVAL; 1421 return -EINVAL;
1414} 1422}
1415 1423
1424/* do some init work after IP late init as dependence */
1425void amdgpu_ras_post_init(struct amdgpu_device *adev)
1426{
1427 struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
1428 struct ras_manager *obj, *tmp;
1429
1430 if (!con)
1431 return;
1432
1433 /* We enable ras on all hw_supported block, but as boot parameter might
1434 * disable some of them and one or more IP has not implemented yet.
1435 * So we disable them on behalf.
1436 */
1437 if (con->flags & AMDGPU_RAS_FLAG_INIT_BY_VBIOS) {
1438 list_for_each_entry_safe(obj, tmp, &con->head, node) {
1439 if (!amdgpu_ras_is_supported(adev, obj->head.block)) {
1440 amdgpu_ras_feature_enable(adev, &obj->head, 0);
1441 /* there should be no any reference. */
1442 WARN_ON(alive_obj(obj));
1443 }
1444 };
1445 }
1446}
1447
1416/* do some fini work before IP fini as dependence */ 1448/* do some fini work before IP fini as dependence */
1417int amdgpu_ras_pre_fini(struct amdgpu_device *adev) 1449int amdgpu_ras_pre_fini(struct amdgpu_device *adev)
1418{ 1450{