gaudi2.c (601223589990101edc0bf6adccaf8cd376a431cc) | gaudi2.c (4713ace3246644519bf93cc8ea6e44efe57fc3ec) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2 3/* 4 * Copyright 2020-2022 HabanaLabs, Ltd. 5 * All Rights Reserved. 6 */ 7 8#include "gaudi2P.h" --- 2334 unchanged lines hidden (view full) --- 2343 2344 prop->first_available_user_sob[0] = GAUDI2_RESERVED_SOB_NUMBER + 2345 (num_sync_stream_queues * HL_RSVD_SOBS); 2346 2347 prop->first_available_user_mon[0] = GAUDI2_RESERVED_MON_NUMBER + 2348 (num_sync_stream_queues * HL_RSVD_MONS); 2349 2350 prop->first_available_user_interrupt = GAUDI2_IRQ_NUM_USER_FIRST; | 1// SPDX-License-Identifier: GPL-2.0 2 3/* 4 * Copyright 2020-2022 HabanaLabs, Ltd. 5 * All Rights Reserved. 6 */ 7 8#include "gaudi2P.h" --- 2334 unchanged lines hidden (view full) --- 2343 2344 prop->first_available_user_sob[0] = GAUDI2_RESERVED_SOB_NUMBER + 2345 (num_sync_stream_queues * HL_RSVD_SOBS); 2346 2347 prop->first_available_user_mon[0] = GAUDI2_RESERVED_MON_NUMBER + 2348 (num_sync_stream_queues * HL_RSVD_MONS); 2349 2350 prop->first_available_user_interrupt = GAUDI2_IRQ_NUM_USER_FIRST; |
2351 prop->tpc_interrupt_id = GAUDI2_IRQ_NUM_TPC_ASSERT; |
|
2351 2352 prop->first_available_cq[0] = GAUDI2_RESERVED_CQ_NUMBER; 2353 2354 prop->fw_cpu_boot_dev_sts0_valid = false; 2355 prop->fw_cpu_boot_dev_sts1_valid = false; 2356 prop->hard_reset_done_by_fw = false; 2357 prop->gic_interrupts_enable = true; 2358 --- 871 unchanged lines hidden (view full) --- 3230 region->used = 1; 3231} 3232 3233static void gaudi2_user_interrupt_setup(struct hl_device *hdev) 3234{ 3235 struct asic_fixed_properties *prop = &hdev->asic_prop; 3236 int i, j, k; 3237 | 2352 2353 prop->first_available_cq[0] = GAUDI2_RESERVED_CQ_NUMBER; 2354 2355 prop->fw_cpu_boot_dev_sts0_valid = false; 2356 prop->fw_cpu_boot_dev_sts1_valid = false; 2357 prop->hard_reset_done_by_fw = false; 2358 prop->gic_interrupts_enable = true; 2359 --- 871 unchanged lines hidden (view full) --- 3231 region->used = 1; 3232} 3233 3234static void gaudi2_user_interrupt_setup(struct hl_device *hdev) 3235{ 3236 struct asic_fixed_properties *prop = &hdev->asic_prop; 3237 int i, j, k; 3238 |
3239 /* Initialize TPC interrupt */ 3240 HL_USR_INTR_STRUCT_INIT(hdev->tpc_interrupt, hdev, 0, HL_USR_INTERRUPT_TPC); 3241 |
|
3238 /* Initialize common user CQ interrupt */ 3239 HL_USR_INTR_STRUCT_INIT(hdev->common_user_cq_interrupt, hdev, 3240 HL_COMMON_USER_CQ_INTERRUPT_ID, HL_USR_INTERRUPT_CQ); 3241 3242 /* Initialize common decoder interrupt */ 3243 HL_USR_INTR_STRUCT_INIT(hdev->common_decoder_interrupt, hdev, 3244 HL_COMMON_DEC_INTERRUPT_ID, HL_USR_INTERRUPT_DECODER); 3245 --- 641 unchanged lines hidden (view full) --- 3887{ 3888 switch (irq_number) { 3889 case GAUDI2_IRQ_NUM_EVENT_QUEUE: 3890 return "gaudi2 cpu eq"; 3891 case GAUDI2_IRQ_NUM_COMPLETION: 3892 return "gaudi2 completion"; 3893 case GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ... GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM: 3894 return gaudi2_vdec_irq_name[irq_number - GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM]; | 3242 /* Initialize common user CQ interrupt */ 3243 HL_USR_INTR_STRUCT_INIT(hdev->common_user_cq_interrupt, hdev, 3244 HL_COMMON_USER_CQ_INTERRUPT_ID, HL_USR_INTERRUPT_CQ); 3245 3246 /* Initialize common decoder interrupt */ 3247 HL_USR_INTR_STRUCT_INIT(hdev->common_decoder_interrupt, hdev, 3248 HL_COMMON_DEC_INTERRUPT_ID, HL_USR_INTERRUPT_DECODER); 3249 --- 641 unchanged lines hidden (view full) --- 3891{ 3892 switch (irq_number) { 3893 case GAUDI2_IRQ_NUM_EVENT_QUEUE: 3894 return "gaudi2 cpu eq"; 3895 case GAUDI2_IRQ_NUM_COMPLETION: 3896 return "gaudi2 completion"; 3897 case GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ... GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM: 3898 return gaudi2_vdec_irq_name[irq_number - GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM]; |
3899 case GAUDI2_IRQ_NUM_TPC_ASSERT: 3900 return "gaudi2 tpc assert"; |
|
3895 case GAUDI2_IRQ_NUM_USER_FIRST ... GAUDI2_IRQ_NUM_USER_LAST: 3896 return "gaudi2 user completion"; 3897 default: 3898 return "invalid"; 3899 } 3900} 3901 3902static void gaudi2_dec_disable_msix(struct hl_device *hdev, u32 max_irq_num) --- 96 unchanged lines hidden (view full) --- 3999 } 4000 4001 rc = gaudi2_dec_enable_msix(hdev); 4002 if (rc) { 4003 dev_err(hdev->dev, "Failed to enable decoder IRQ"); 4004 goto free_event_irq; 4005 } 4006 | 3901 case GAUDI2_IRQ_NUM_USER_FIRST ... GAUDI2_IRQ_NUM_USER_LAST: 3902 return "gaudi2 user completion"; 3903 default: 3904 return "invalid"; 3905 } 3906} 3907 3908static void gaudi2_dec_disable_msix(struct hl_device *hdev, u32 max_irq_num) --- 96 unchanged lines hidden (view full) --- 4005 } 4006 4007 rc = gaudi2_dec_enable_msix(hdev); 4008 if (rc) { 4009 dev_err(hdev->dev, "Failed to enable decoder IRQ"); 4010 goto free_event_irq; 4011 } 4012 |
4013 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT); 4014 rc = request_threaded_irq(irq, hl_irq_handler_user_interrupt, 4015 hl_irq_user_interrupt_thread_handler, IRQF_ONESHOT, 4016 gaudi2_irq_name(GAUDI2_IRQ_NUM_TPC_ASSERT), &hdev->tpc_interrupt); 4017 if (rc) { 4018 dev_err(hdev->dev, "Failed to request IRQ %d", irq); 4019 goto free_dec_irq; 4020 } 4021 |
|
4007 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, user_irq_init_cnt = 0; 4008 user_irq_init_cnt < prop->user_interrupt_count; 4009 i++, j++, user_irq_init_cnt++) { 4010 4011 irq = pci_irq_vector(hdev->pdev, i); 4012 irq_handler = hl_irq_handler_user_interrupt; 4013 4014 rc = request_threaded_irq(irq, irq_handler, hl_irq_user_interrupt_thread_handler, --- 11 unchanged lines hidden (view full) --- 4026 4027free_user_irq: 4028 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count; 4029 i < GAUDI2_IRQ_NUM_USER_FIRST + user_irq_init_cnt ; i++, j++) { 4030 4031 irq = pci_irq_vector(hdev->pdev, i); 4032 free_irq(irq, &hdev->user_interrupt[j]); 4033 } | 4022 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, user_irq_init_cnt = 0; 4023 user_irq_init_cnt < prop->user_interrupt_count; 4024 i++, j++, user_irq_init_cnt++) { 4025 4026 irq = pci_irq_vector(hdev->pdev, i); 4027 irq_handler = hl_irq_handler_user_interrupt; 4028 4029 rc = request_threaded_irq(irq, irq_handler, hl_irq_user_interrupt_thread_handler, --- 11 unchanged lines hidden (view full) --- 4041 4042free_user_irq: 4043 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count; 4044 i < GAUDI2_IRQ_NUM_USER_FIRST + user_irq_init_cnt ; i++, j++) { 4045 4046 irq = pci_irq_vector(hdev->pdev, i); 4047 free_irq(irq, &hdev->user_interrupt[j]); 4048 } |
4034 4035 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM + 1); 4036 | 4049free_dec_irq: 4050 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_DEC_LAST + 1); |
4037free_event_irq: 4038 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4039 free_irq(irq, cq); 4040 4041free_completion_irq: 4042 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); 4043 free_irq(irq, cq); 4044 --- 15 unchanged lines hidden (view full) --- 4060 /* Wait for all pending IRQs to be finished */ 4061 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION)); 4062 4063 for (i = GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ; i <= GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM ; i++) { 4064 irq = pci_irq_vector(hdev->pdev, i); 4065 synchronize_irq(irq); 4066 } 4067 | 4051free_event_irq: 4052 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4053 free_irq(irq, cq); 4054 4055free_completion_irq: 4056 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); 4057 free_irq(irq, cq); 4058 --- 15 unchanged lines hidden (view full) --- 4074 /* Wait for all pending IRQs to be finished */ 4075 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION)); 4076 4077 for (i = GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ; i <= GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM ; i++) { 4078 irq = pci_irq_vector(hdev->pdev, i); 4079 synchronize_irq(irq); 4080 } 4081 |
4082 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT)); 4083 |
|
4068 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = 0 ; j < hdev->asic_prop.user_interrupt_count; 4069 i++, j++) { 4070 irq = pci_irq_vector(hdev->pdev, i); 4071 synchronize_irq(irq); 4072 } 4073 4074 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE)); 4075} --- 10 unchanged lines hidden (view full) --- 4086 4087 gaudi2_sync_irqs(hdev); 4088 4089 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4090 free_irq(irq, &hdev->event_queue); 4091 4092 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM + 1); 4093 | 4084 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = 0 ; j < hdev->asic_prop.user_interrupt_count; 4085 i++, j++) { 4086 irq = pci_irq_vector(hdev->pdev, i); 4087 synchronize_irq(irq); 4088 } 4089 4090 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE)); 4091} --- 10 unchanged lines hidden (view full) --- 4102 4103 gaudi2_sync_irqs(hdev); 4104 4105 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4106 free_irq(irq, &hdev->event_queue); 4107 4108 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM + 1); 4109 |
4110 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT); 4111 free_irq(irq, &hdev->tpc_interrupt); 4112 |
|
4094 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, k = 0; 4095 k < hdev->asic_prop.user_interrupt_count ; i++, j++, k++) { 4096 4097 irq = pci_irq_vector(hdev->pdev, i); 4098 free_irq(irq, &hdev->user_interrupt[j]); 4099 } 4100 4101 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); --- 6672 unchanged lines hidden --- | 4113 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, k = 0; 4114 k < hdev->asic_prop.user_interrupt_count ; i++, j++, k++) { 4115 4116 irq = pci_irq_vector(hdev->pdev, i); 4117 free_irq(irq, &hdev->user_interrupt[j]); 4118 } 4119 4120 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); --- 6672 unchanged lines hidden --- |