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

drm/amdgpu: Modify nbio block to fit for the unified ras block data and ops

1.Modify nbio block to fit for the unified ras block data and ops.
2.Change amdgpu_nbio_ras_funcs to amdgpu_nbio_ras, and the corresponding variable name remove _funcs suffix.
3.Remove the const flag of mmhub ras variable so that nbio ras block can be able to be inserted into amdgpu device ras block link list.
4.Invoke amdgpu_ras_register_ras_block function to register nbio ras block into amdgpu device ras block link list.
5.Remove the redundant code about nbio in amdgpu_ras.c after using the unified ras block.

Signed-off-by: yipechai <YiPeng.Chai@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: John Clements <john.clements@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

yipechai and committed by
Alex Deucher
2e54fe5d 5e67bba3

+43 -41
+6 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
··· 199 199 * ack the interrupt if it is there 200 200 */ 201 201 if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__PCIE_BIF)) { 202 - if (adev->nbio.ras_funcs && 203 - adev->nbio.ras_funcs->handle_ras_controller_intr_no_bifring) 204 - adev->nbio.ras_funcs->handle_ras_controller_intr_no_bifring(adev); 202 + if (adev->nbio.ras && 203 + adev->nbio.ras->handle_ras_controller_intr_no_bifring) 204 + adev->nbio.ras->handle_ras_controller_intr_no_bifring(adev); 205 205 206 - if (adev->nbio.ras_funcs && 207 - adev->nbio.ras_funcs->handle_ras_err_event_athub_intr_no_bifring) 208 - adev->nbio.ras_funcs->handle_ras_err_event_athub_intr_no_bifring(adev); 206 + if (adev->nbio.ras && 207 + adev->nbio.ras->handle_ras_err_event_athub_intr_no_bifring) 208 + adev->nbio.ras->handle_ras_err_event_athub_intr_no_bifring(adev); 209 209 } 210 210 211 211 return ret;
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.c
··· 22 22 #include "amdgpu.h" 23 23 #include "amdgpu_ras.h" 24 24 25 - int amdgpu_nbio_ras_late_init(struct amdgpu_device *adev) 25 + int amdgpu_nbio_ras_late_init(struct amdgpu_device *adev, void *ras_info) 26 26 { 27 27 int r; 28 28 struct ras_ih_if ih_info = {
+4 -7
drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h
··· 47 47 u32 ref_and_mask_sdma7; 48 48 }; 49 49 50 - struct amdgpu_nbio_ras_funcs { 50 + struct amdgpu_nbio_ras { 51 + struct amdgpu_ras_block_object ras_block; 51 52 void (*handle_ras_controller_intr_no_bifring)(struct amdgpu_device *adev); 52 53 void (*handle_ras_err_event_athub_intr_no_bifring)(struct amdgpu_device *adev); 53 54 int (*init_ras_controller_interrupt)(struct amdgpu_device *adev); 54 55 int (*init_ras_err_event_athub_interrupt)(struct amdgpu_device *adev); 55 - void (*query_ras_error_count)(struct amdgpu_device *adev, 56 - void *ras_error_status); 57 - int (*ras_late_init)(struct amdgpu_device *adev); 58 - void (*ras_fini)(struct amdgpu_device *adev); 59 56 }; 60 57 61 58 struct amdgpu_nbio_funcs { ··· 101 104 struct amdgpu_irq_src ras_err_event_athub_irq; 102 105 struct ras_common_if *ras_if; 103 106 const struct amdgpu_nbio_funcs *funcs; 104 - const struct amdgpu_nbio_ras_funcs *ras_funcs; 107 + struct amdgpu_nbio_ras *ras; 105 108 }; 106 109 107 - int amdgpu_nbio_ras_late_init(struct amdgpu_device *adev); 110 + int amdgpu_nbio_ras_late_init(struct amdgpu_device *adev, void *ras_info); 108 111 void amdgpu_nbio_ras_fini(struct amdgpu_device *adev); 109 112 #endif
+10 -12
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
··· 999 999 block_obj->hw_ops->query_ras_error_status(adev); 1000 1000 break; 1001 1001 case AMDGPU_RAS_BLOCK__PCIE_BIF: 1002 - if (adev->nbio.ras_funcs && 1003 - adev->nbio.ras_funcs->query_ras_error_count) 1004 - adev->nbio.ras_funcs->query_ras_error_count(adev, &err_data); 1005 - break; 1006 1002 case AMDGPU_RAS_BLOCK__XGMI_WAFL: 1007 1003 case AMDGPU_RAS_BLOCK__HDP: 1008 1004 if (!block_obj || !block_obj->hw_ops) { ··· 2381 2385 case CHIP_VEGA20: 2382 2386 case CHIP_ARCTURUS: 2383 2387 case CHIP_ALDEBARAN: 2384 - if (!adev->gmc.xgmi.connected_to_cpu) 2385 - adev->nbio.ras_funcs = &nbio_v7_4_ras_funcs; 2388 + if (!adev->gmc.xgmi.connected_to_cpu) { 2389 + adev->nbio.ras = &nbio_v7_4_ras; 2390 + amdgpu_ras_register_ras_block(adev, &adev->nbio.ras->ras_block); 2391 + } 2386 2392 break; 2387 2393 default: 2388 2394 /* nbio ras is not available */ 2389 2395 break; 2390 2396 } 2391 2397 2392 - if (adev->nbio.ras_funcs && 2393 - adev->nbio.ras_funcs->init_ras_controller_interrupt) { 2394 - r = adev->nbio.ras_funcs->init_ras_controller_interrupt(adev); 2398 + if (adev->nbio.ras && 2399 + adev->nbio.ras->init_ras_controller_interrupt) { 2400 + r = adev->nbio.ras->init_ras_controller_interrupt(adev); 2395 2401 if (r) 2396 2402 goto release_con; 2397 2403 } 2398 2404 2399 - if (adev->nbio.ras_funcs && 2400 - adev->nbio.ras_funcs->init_ras_err_event_athub_interrupt) { 2401 - r = adev->nbio.ras_funcs->init_ras_err_event_athub_interrupt(adev); 2405 + if (adev->nbio.ras && 2406 + adev->nbio.ras->init_ras_err_event_athub_interrupt) { 2407 + r = adev->nbio.ras->init_ras_err_event_athub_interrupt(adev); 2402 2408 if (r) 2403 2409 goto release_con; 2404 2410 }
+13 -4
drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
··· 658 658 DOORBELL_INTERRUPT_DISABLE, enable ? 0 : 1); 659 659 } 660 660 661 - const struct amdgpu_nbio_ras_funcs nbio_v7_4_ras_funcs = { 661 + const struct amdgpu_ras_block_hw_ops nbio_v7_4_ras_hw_ops = { 662 + .query_ras_error_count = nbio_v7_4_query_ras_error_count, 663 + }; 664 + 665 + struct amdgpu_nbio_ras nbio_v7_4_ras = { 666 + .ras_block = { 667 + .name = "pcie_bif", 668 + .block = AMDGPU_RAS_BLOCK__PCIE_BIF, 669 + .hw_ops = &nbio_v7_4_ras_hw_ops, 670 + .ras_late_init = amdgpu_nbio_ras_late_init, 671 + .ras_fini = amdgpu_nbio_ras_fini, 672 + }, 662 673 .handle_ras_controller_intr_no_bifring = nbio_v7_4_handle_ras_controller_intr_no_bifring, 663 674 .handle_ras_err_event_athub_intr_no_bifring = nbio_v7_4_handle_ras_err_event_athub_intr_no_bifring, 664 675 .init_ras_controller_interrupt = nbio_v7_4_init_ras_controller_interrupt, 665 676 .init_ras_err_event_athub_interrupt = nbio_v7_4_init_ras_err_event_athub_interrupt, 666 - .query_ras_error_count = nbio_v7_4_query_ras_error_count, 667 - .ras_late_init = amdgpu_nbio_ras_late_init, 668 - .ras_fini = amdgpu_nbio_ras_fini, 669 677 }; 678 + 670 679 671 680 static void nbio_v7_4_program_ltr(struct amdgpu_device *adev) 672 681 {
+1 -1
drivers/gpu/drm/amd/amdgpu/nbio_v7_4.h
··· 29 29 extern const struct nbio_hdp_flush_reg nbio_v7_4_hdp_flush_reg; 30 30 extern const struct nbio_hdp_flush_reg nbio_v7_4_hdp_flush_reg_ald; 31 31 extern const struct amdgpu_nbio_funcs nbio_v7_4_funcs; 32 - extern const struct amdgpu_nbio_ras_funcs nbio_v7_4_ras_funcs; 32 + extern struct amdgpu_nbio_ras nbio_v7_4_ras; 33 33 34 34 #endif
+8 -10
drivers/gpu/drm/amd/amdgpu/soc15.c
··· 1224 1224 if (amdgpu_sriov_vf(adev)) 1225 1225 xgpu_ai_mailbox_get_irq(adev); 1226 1226 1227 - if (adev->nbio.ras_funcs && 1228 - adev->nbio.ras_funcs->ras_late_init) 1229 - r = adev->nbio.ras_funcs->ras_late_init(adev); 1227 + if (adev->nbio.ras && adev->nbio.ras->ras_block.ras_late_init) 1228 + r = adev->nbio.ras->ras_block.ras_late_init(adev, NULL); 1230 1229 1231 1230 return r; 1232 1231 } ··· 1248 1249 { 1249 1250 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 1250 1251 1251 - if (adev->nbio.ras_funcs && 1252 - adev->nbio.ras_funcs->ras_fini) 1253 - adev->nbio.ras_funcs->ras_fini(adev); 1252 + if (adev->nbio.ras && adev->nbio.ras->ras_block.ras_fini) 1253 + adev->nbio.ras->ras_block.ras_fini(adev); 1254 1254 1255 1255 if (adev->df.funcs && 1256 1256 adev->df.funcs->sw_fini) ··· 1316 1318 1317 1319 if (adev->nbio.ras_if && 1318 1320 amdgpu_ras_is_supported(adev, adev->nbio.ras_if->block)) { 1319 - if (adev->nbio.ras_funcs && 1320 - adev->nbio.ras_funcs->init_ras_controller_interrupt) 1321 + if (adev->nbio.ras && 1322 + adev->nbio.ras->init_ras_controller_interrupt) 1321 1323 amdgpu_irq_put(adev, &adev->nbio.ras_controller_irq, 0); 1322 - if (adev->nbio.ras_funcs && 1323 - adev->nbio.ras_funcs->init_ras_err_event_athub_interrupt) 1324 + if (adev->nbio.ras && 1325 + adev->nbio.ras->init_ras_err_event_athub_interrupt) 1324 1326 amdgpu_irq_put(adev, &adev->nbio.ras_err_event_athub_irq, 0); 1325 1327 } 1326 1328