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

drm/amdgpu: split mmhub callbacks into ras and non-ras ones

mmhub ras is only avaiable in cerntain mmhub ip
generation.

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Dennis Li <Dennis.Li@amd.com>
Reviewed-by: John Clements <John.Clements@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Hawking Zhang and committed by
Alex Deucher
8bc7b360 68d705dd

+74 -29
+6 -5
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 3142 3142 if (adev->asic_reset_res) 3143 3143 goto fail; 3144 3144 3145 - if (adev->mmhub.funcs && adev->mmhub.funcs->reset_ras_error_count) 3146 - adev->mmhub.funcs->reset_ras_error_count(adev); 3145 + if (adev->mmhub.ras_funcs && 3146 + adev->mmhub.ras_funcs->reset_ras_error_count) 3147 + adev->mmhub.ras_funcs->reset_ras_error_count(adev); 3147 3148 } else { 3148 3149 3149 3150 task_barrier_full(&hive->tb); ··· 4379 4378 4380 4379 if (!r && amdgpu_ras_intr_triggered()) { 4381 4380 list_for_each_entry(tmp_adev, device_list_handle, reset_list) { 4382 - if (tmp_adev->mmhub.funcs && 4383 - tmp_adev->mmhub.funcs->reset_ras_error_count) 4384 - tmp_adev->mmhub.funcs->reset_ras_error_count(tmp_adev); 4381 + if (tmp_adev->mmhub.ras_funcs && 4382 + tmp_adev->mmhub.ras_funcs->reset_ras_error_count) 4383 + tmp_adev->mmhub.ras_funcs->reset_ras_error_count(tmp_adev); 4385 4384 } 4386 4385 4387 4386 amdgpu_ras_intr_cleared();
+25 -3
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
··· 30 30 #include "amdgpu_gmc.h" 31 31 #include "amdgpu_ras.h" 32 32 #include "amdgpu_xgmi.h" 33 + #include "mmhub_v1_0.h" 34 + #include "mmhub_v9_4.h" 35 + #include "mmhub_v1_7.h" 33 36 34 37 /** 35 38 * amdgpu_gmc_pdb0_alloc - allocate vram for pdb0 ··· 401 398 return r; 402 399 } 403 400 404 - if (adev->mmhub.funcs && adev->mmhub.funcs->ras_late_init) { 405 - r = adev->mmhub.funcs->ras_late_init(adev); 401 + /* initialize mmhub ras funcs */ 402 + switch (adev->asic_type) { 403 + case CHIP_VEGA20: 404 + adev->mmhub.ras_funcs = &mmhub_v1_0_ras_funcs; 405 + break; 406 + case CHIP_ARCTURUS: 407 + adev->mmhub.ras_funcs = &mmhub_v9_4_ras_funcs; 408 + break; 409 + case CHIP_ALDEBARAN: 410 + adev->mmhub.ras_funcs = &mmhub_v1_7_ras_funcs; 411 + break; 412 + default: 413 + /* mmhub ras is not available */ 414 + break; 415 + } 416 + 417 + if (adev->mmhub.ras_funcs && 418 + adev->mmhub.ras_funcs->ras_late_init) { 419 + r = adev->mmhub.ras_funcs->ras_late_init(adev); 406 420 if (r) 407 421 return r; 408 422 } ··· 443 423 adev->umc.ras_funcs->ras_fini) 444 424 adev->umc.ras_funcs->ras_fini(adev); 445 425 446 - amdgpu_mmhub_ras_fini(adev); 426 + if (adev->mmhub.ras_funcs && 427 + adev->mmhub.ras_funcs->ras_fini) 428 + amdgpu_mmhub_ras_fini(adev); 447 429 448 430 if (adev->gmc.xgmi.ras_funcs && 449 431 adev->gmc.xgmi.ras_funcs->ras_fini)
+8 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h
··· 21 21 #ifndef __AMDGPU_MMHUB_H__ 22 22 #define __AMDGPU_MMHUB_H__ 23 23 24 - struct amdgpu_mmhub_funcs { 25 - void (*ras_init)(struct amdgpu_device *adev); 24 + struct amdgpu_mmhub_ras_funcs { 26 25 int (*ras_late_init)(struct amdgpu_device *adev); 26 + void (*ras_fini)(struct amdgpu_device *adev); 27 27 void (*query_ras_error_count)(struct amdgpu_device *adev, 28 - void *ras_error_status); 28 + void *ras_error_status); 29 + void (*query_ras_error_status)(struct amdgpu_device *adev); 29 30 void (*reset_ras_error_count)(struct amdgpu_device *adev); 31 + }; 32 + 33 + struct amdgpu_mmhub_funcs { 30 34 u64 (*get_fb_location)(struct amdgpu_device *adev); 31 35 void (*init)(struct amdgpu_device *adev); 32 36 int (*gart_enable)(struct amdgpu_device *adev); ··· 44 40 uint64_t page_table_base); 45 41 void (*update_power_gating)(struct amdgpu_device *adev, 46 42 bool enable); 47 - void (*query_ras_error_status)(struct amdgpu_device *adev); 48 43 }; 49 44 50 45 struct amdgpu_mmhub { 51 46 struct ras_common_if *ras_if; 52 47 const struct amdgpu_mmhub_funcs *funcs; 48 + const struct amdgpu_mmhub_ras_funcs *ras_funcs; 53 49 }; 54 50 55 51 int amdgpu_mmhub_ras_late_init(struct amdgpu_device *adev);
+12 -8
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
··· 799 799 adev->gfx.funcs->query_ras_error_status(adev); 800 800 break; 801 801 case AMDGPU_RAS_BLOCK__MMHUB: 802 - if (adev->mmhub.funcs->query_ras_error_count) 803 - adev->mmhub.funcs->query_ras_error_count(adev, &err_data); 802 + if (adev->mmhub.ras_funcs && 803 + adev->mmhub.ras_funcs->query_ras_error_count) 804 + adev->mmhub.ras_funcs->query_ras_error_count(adev, &err_data); 804 805 805 - if (adev->mmhub.funcs->query_ras_error_status) 806 - adev->mmhub.funcs->query_ras_error_status(adev); 806 + if (adev->mmhub.ras_funcs && 807 + adev->mmhub.ras_funcs->query_ras_error_status) 808 + adev->mmhub.ras_funcs->query_ras_error_status(adev); 807 809 break; 808 810 case AMDGPU_RAS_BLOCK__PCIE_BIF: 809 811 if (adev->nbio.ras_funcs && ··· 859 857 adev->gfx.funcs->reset_ras_error_status(adev); 860 858 break; 861 859 case AMDGPU_RAS_BLOCK__MMHUB: 862 - if (adev->mmhub.funcs->reset_ras_error_count) 863 - adev->mmhub.funcs->reset_ras_error_count(adev); 860 + if (adev->mmhub.ras_funcs && 861 + adev->mmhub.ras_funcs->reset_ras_error_count) 862 + adev->mmhub.ras_funcs->reset_ras_error_count(adev); 864 863 break; 865 864 case AMDGPU_RAS_BLOCK__SDMA: 866 865 if (adev->sdma.funcs->reset_ras_error_count) ··· 1518 1515 adev->gfx.funcs->query_ras_error_status(adev); 1519 1516 break; 1520 1517 case AMDGPU_RAS_BLOCK__MMHUB: 1521 - if (adev->mmhub.funcs->query_ras_error_status) 1522 - adev->mmhub.funcs->query_ras_error_status(adev); 1518 + if (adev->mmhub.ras_funcs && 1519 + adev->mmhub.ras_funcs->query_ras_error_status) 1520 + adev->mmhub.ras_funcs->query_ras_error_status(adev); 1523 1521 break; 1524 1522 default: 1525 1523 break;
+3 -2
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
··· 1241 1241 } 1242 1242 } 1243 1243 1244 - if (adev->mmhub.funcs && adev->mmhub.funcs->reset_ras_error_count) 1245 - adev->mmhub.funcs->reset_ras_error_count(adev); 1244 + if (adev->mmhub.ras_funcs && 1245 + adev->mmhub.ras_funcs->reset_ras_error_count) 1246 + adev->mmhub.ras_funcs->reset_ras_error_count(adev); 1246 1247 1247 1248 r = amdgpu_gmc_ras_late_init(adev); 1248 1249 if (r)
+5 -1
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
··· 776 776 } 777 777 } 778 778 779 - const struct amdgpu_mmhub_funcs mmhub_v1_0_funcs = { 779 + const struct amdgpu_mmhub_ras_funcs mmhub_v1_0_ras_funcs = { 780 780 .ras_late_init = amdgpu_mmhub_ras_late_init, 781 + .ras_fini = amdgpu_mmhub_ras_fini, 781 782 .query_ras_error_count = mmhub_v1_0_query_ras_error_count, 782 783 .reset_ras_error_count = mmhub_v1_0_reset_ras_error_count, 784 + }; 785 + 786 + const struct amdgpu_mmhub_funcs mmhub_v1_0_funcs = { 783 787 .get_fb_location = mmhub_v1_0_get_fb_location, 784 788 .init = mmhub_v1_0_init, 785 789 .gart_enable = mmhub_v1_0_gart_enable,
+1
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.h
··· 24 24 #define __MMHUB_V1_0_H__ 25 25 26 26 extern const struct amdgpu_mmhub_funcs mmhub_v1_0_funcs; 27 + extern const struct amdgpu_mmhub_ras_funcs mmhub_v1_0_ras_funcs; 27 28 28 29 #endif
+6 -2
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c
··· 1313 1313 } 1314 1314 } 1315 1315 1316 - const struct amdgpu_mmhub_funcs mmhub_v1_7_funcs = { 1316 + const struct amdgpu_mmhub_ras_funcs mmhub_v1_7_ras_funcs = { 1317 1317 .ras_late_init = amdgpu_mmhub_ras_late_init, 1318 + .ras_fini = amdgpu_mmhub_ras_fini, 1318 1319 .query_ras_error_count = mmhub_v1_7_query_ras_error_count, 1319 1320 .reset_ras_error_count = mmhub_v1_7_reset_ras_error_count, 1321 + .query_ras_error_status = mmhub_v1_7_query_ras_error_status, 1322 + }; 1323 + 1324 + const struct amdgpu_mmhub_funcs mmhub_v1_7_funcs = { 1320 1325 .get_fb_location = mmhub_v1_7_get_fb_location, 1321 1326 .init = mmhub_v1_7_init, 1322 1327 .gart_enable = mmhub_v1_7_gart_enable, ··· 1330 1325 .set_clockgating = mmhub_v1_7_set_clockgating, 1331 1326 .get_clockgating = mmhub_v1_7_get_clockgating, 1332 1327 .setup_vm_pt_regs = mmhub_v1_7_setup_vm_pt_regs, 1333 - .query_ras_error_status = mmhub_v1_7_query_ras_error_status, 1334 1328 };
+1
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.h
··· 24 24 #define __MMHUB_V1_7_H__ 25 25 26 26 extern const struct amdgpu_mmhub_funcs mmhub_v1_7_funcs; 27 + extern const struct amdgpu_mmhub_ras_funcs mmhub_v1_7_ras_funcs; 27 28 28 29 #endif
-1
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
··· 689 689 } 690 690 691 691 const struct amdgpu_mmhub_funcs mmhub_v2_0_funcs = { 692 - .ras_late_init = amdgpu_mmhub_ras_late_init, 693 692 .init = mmhub_v2_0_init, 694 693 .gart_enable = mmhub_v2_0_gart_enable, 695 694 .set_fault_enable_default = mmhub_v2_0_set_fault_enable_default,
-1
drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c
··· 616 616 } 617 617 618 618 const struct amdgpu_mmhub_funcs mmhub_v2_3_funcs = { 619 - .ras_late_init = amdgpu_mmhub_ras_late_init, 620 619 .init = mmhub_v2_3_init, 621 620 .gart_enable = mmhub_v2_3_gart_enable, 622 621 .set_fault_enable_default = mmhub_v2_3_set_fault_enable_default,
+6 -2
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
··· 1652 1652 } 1653 1653 } 1654 1654 1655 - const struct amdgpu_mmhub_funcs mmhub_v9_4_funcs = { 1655 + const struct amdgpu_mmhub_ras_funcs mmhub_v9_4_ras_funcs = { 1656 1656 .ras_late_init = amdgpu_mmhub_ras_late_init, 1657 + .ras_fini = amdgpu_mmhub_ras_fini, 1657 1658 .query_ras_error_count = mmhub_v9_4_query_ras_error_count, 1658 1659 .reset_ras_error_count = mmhub_v9_4_reset_ras_error_count, 1660 + .query_ras_error_status = mmhub_v9_4_query_ras_error_status, 1661 + }; 1662 + 1663 + const struct amdgpu_mmhub_funcs mmhub_v9_4_funcs = { 1659 1664 .get_fb_location = mmhub_v9_4_get_fb_location, 1660 1665 .init = mmhub_v9_4_init, 1661 1666 .gart_enable = mmhub_v9_4_gart_enable, ··· 1669 1664 .set_clockgating = mmhub_v9_4_set_clockgating, 1670 1665 .get_clockgating = mmhub_v9_4_get_clockgating, 1671 1666 .setup_vm_pt_regs = mmhub_v9_4_setup_vm_pt_regs, 1672 - .query_ras_error_status = mmhub_v9_4_query_ras_error_status, 1673 1667 };
+1
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.h
··· 24 24 #define __MMHUB_V9_4_H__ 25 25 26 26 extern const struct amdgpu_mmhub_funcs mmhub_v9_4_funcs; 27 + extern const struct amdgpu_mmhub_ras_funcs mmhub_v9_4_ras_funcs; 27 28 28 29 #endif