gaudi2.c (dc934c183d43d30e49eacddc76b9882a7e3c1cde) | gaudi2.c (e1ef053e08c9b56c0de0635beea75466e97a7383) |
---|---|
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" --- 2426 unchanged lines hidden (view full) --- 2435 prop->first_available_user_sob[0] = GAUDI2_RESERVED_SOB_NUMBER + 2436 (num_sync_stream_queues * HL_RSVD_SOBS); 2437 2438 prop->first_available_user_mon[0] = GAUDI2_RESERVED_MON_NUMBER + 2439 (num_sync_stream_queues * HL_RSVD_MONS); 2440 2441 prop->first_available_user_interrupt = GAUDI2_IRQ_NUM_USER_FIRST; 2442 prop->tpc_interrupt_id = GAUDI2_IRQ_NUM_TPC_ASSERT; | 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" --- 2426 unchanged lines hidden (view full) --- 2435 prop->first_available_user_sob[0] = GAUDI2_RESERVED_SOB_NUMBER + 2436 (num_sync_stream_queues * HL_RSVD_SOBS); 2437 2438 prop->first_available_user_mon[0] = GAUDI2_RESERVED_MON_NUMBER + 2439 (num_sync_stream_queues * HL_RSVD_MONS); 2440 2441 prop->first_available_user_interrupt = GAUDI2_IRQ_NUM_USER_FIRST; 2442 prop->tpc_interrupt_id = GAUDI2_IRQ_NUM_TPC_ASSERT; |
2443 prop->unexpected_user_error_interrupt_id = GAUDI2_IRQ_NUM_UNEXPECTED_ERROR; |
|
2443 2444 prop->first_available_cq[0] = GAUDI2_RESERVED_CQ_NUMBER; 2445 2446 prop->fw_cpu_boot_dev_sts0_valid = false; 2447 prop->fw_cpu_boot_dev_sts1_valid = false; 2448 prop->hard_reset_done_by_fw = false; 2449 prop->gic_interrupts_enable = true; 2450 --- 890 unchanged lines hidden (view full) --- 3341static void gaudi2_user_interrupt_setup(struct hl_device *hdev) 3342{ 3343 struct asic_fixed_properties *prop = &hdev->asic_prop; 3344 int i, j, k; 3345 3346 /* Initialize TPC interrupt */ 3347 HL_USR_INTR_STRUCT_INIT(hdev->tpc_interrupt, hdev, 0, HL_USR_INTERRUPT_TPC); 3348 | 2444 2445 prop->first_available_cq[0] = GAUDI2_RESERVED_CQ_NUMBER; 2446 2447 prop->fw_cpu_boot_dev_sts0_valid = false; 2448 prop->fw_cpu_boot_dev_sts1_valid = false; 2449 prop->hard_reset_done_by_fw = false; 2450 prop->gic_interrupts_enable = true; 2451 --- 890 unchanged lines hidden (view full) --- 3342static void gaudi2_user_interrupt_setup(struct hl_device *hdev) 3343{ 3344 struct asic_fixed_properties *prop = &hdev->asic_prop; 3345 int i, j, k; 3346 3347 /* Initialize TPC interrupt */ 3348 HL_USR_INTR_STRUCT_INIT(hdev->tpc_interrupt, hdev, 0, HL_USR_INTERRUPT_TPC); 3349 |
3350 /* Initialize general purpose interrupt */ 3351 HL_USR_INTR_STRUCT_INIT(hdev->unexpected_error_interrupt, hdev, 0, 3352 HL_USR_INTERRUPT_UNEXPECTED); 3353 |
|
3349 /* Initialize common user CQ interrupt */ 3350 HL_USR_INTR_STRUCT_INIT(hdev->common_user_cq_interrupt, hdev, 3351 HL_COMMON_USER_CQ_INTERRUPT_ID, HL_USR_INTERRUPT_CQ); 3352 3353 /* Initialize common decoder interrupt */ 3354 HL_USR_INTR_STRUCT_INIT(hdev->common_decoder_interrupt, hdev, 3355 HL_COMMON_DEC_INTERRUPT_ID, HL_USR_INTERRUPT_DECODER); 3356 --- 643 unchanged lines hidden (view full) --- 4000 case GAUDI2_IRQ_NUM_EVENT_QUEUE: 4001 return "gaudi2 cpu eq"; 4002 case GAUDI2_IRQ_NUM_COMPLETION: 4003 return "gaudi2 completion"; 4004 case GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ... GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM: 4005 return gaudi2_vdec_irq_name[irq_number - GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM]; 4006 case GAUDI2_IRQ_NUM_TPC_ASSERT: 4007 return "gaudi2 tpc assert"; | 3354 /* Initialize common user CQ interrupt */ 3355 HL_USR_INTR_STRUCT_INIT(hdev->common_user_cq_interrupt, hdev, 3356 HL_COMMON_USER_CQ_INTERRUPT_ID, HL_USR_INTERRUPT_CQ); 3357 3358 /* Initialize common decoder interrupt */ 3359 HL_USR_INTR_STRUCT_INIT(hdev->common_decoder_interrupt, hdev, 3360 HL_COMMON_DEC_INTERRUPT_ID, HL_USR_INTERRUPT_DECODER); 3361 --- 643 unchanged lines hidden (view full) --- 4005 case GAUDI2_IRQ_NUM_EVENT_QUEUE: 4006 return "gaudi2 cpu eq"; 4007 case GAUDI2_IRQ_NUM_COMPLETION: 4008 return "gaudi2 completion"; 4009 case GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ... GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM: 4010 return gaudi2_vdec_irq_name[irq_number - GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM]; 4011 case GAUDI2_IRQ_NUM_TPC_ASSERT: 4012 return "gaudi2 tpc assert"; |
4013 case GAUDI2_IRQ_NUM_UNEXPECTED_ERROR: 4014 return "gaudi2 tpc assert"; |
|
4008 case GAUDI2_IRQ_NUM_USER_FIRST ... GAUDI2_IRQ_NUM_USER_LAST: 4009 return "gaudi2 user completion"; 4010 default: 4011 return "invalid"; 4012 } 4013} 4014 4015static void gaudi2_dec_disable_msix(struct hl_device *hdev, u32 max_irq_num) --- 104 unchanged lines hidden (view full) --- 4120 rc = request_threaded_irq(irq, hl_irq_handler_user_interrupt, 4121 hl_irq_user_interrupt_thread_handler, IRQF_ONESHOT, 4122 gaudi2_irq_name(GAUDI2_IRQ_NUM_TPC_ASSERT), &hdev->tpc_interrupt); 4123 if (rc) { 4124 dev_err(hdev->dev, "Failed to request IRQ %d", irq); 4125 goto free_dec_irq; 4126 } 4127 | 4015 case GAUDI2_IRQ_NUM_USER_FIRST ... GAUDI2_IRQ_NUM_USER_LAST: 4016 return "gaudi2 user completion"; 4017 default: 4018 return "invalid"; 4019 } 4020} 4021 4022static void gaudi2_dec_disable_msix(struct hl_device *hdev, u32 max_irq_num) --- 104 unchanged lines hidden (view full) --- 4127 rc = request_threaded_irq(irq, hl_irq_handler_user_interrupt, 4128 hl_irq_user_interrupt_thread_handler, IRQF_ONESHOT, 4129 gaudi2_irq_name(GAUDI2_IRQ_NUM_TPC_ASSERT), &hdev->tpc_interrupt); 4130 if (rc) { 4131 dev_err(hdev->dev, "Failed to request IRQ %d", irq); 4132 goto free_dec_irq; 4133 } 4134 |
4135 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_UNEXPECTED_ERROR); 4136 rc = request_irq(irq, hl_irq_handler_user_interrupt, 0, 4137 gaudi2_irq_name(GAUDI2_IRQ_NUM_UNEXPECTED_ERROR), 4138 &hdev->unexpected_error_interrupt); 4139 if (rc) { 4140 dev_err(hdev->dev, "Failed to request IRQ %d", irq); 4141 goto free_tpc_irq; 4142 } 4143 |
|
4128 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, user_irq_init_cnt = 0; 4129 user_irq_init_cnt < prop->user_interrupt_count; 4130 i++, j++, user_irq_init_cnt++) { 4131 4132 irq = pci_irq_vector(hdev->pdev, i); 4133 rc = request_threaded_irq(irq, hl_irq_handler_user_interrupt, 4134 hl_irq_user_interrupt_thread_handler, IRQF_ONESHOT, 4135 gaudi2_irq_name(i), &hdev->user_interrupt[j]); --- 10 unchanged lines hidden (view full) --- 4146 4147free_user_irq: 4148 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count; 4149 i < GAUDI2_IRQ_NUM_USER_FIRST + user_irq_init_cnt ; i++, j++) { 4150 4151 irq = pci_irq_vector(hdev->pdev, i); 4152 free_irq(irq, &hdev->user_interrupt[j]); 4153 } | 4144 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, user_irq_init_cnt = 0; 4145 user_irq_init_cnt < prop->user_interrupt_count; 4146 i++, j++, user_irq_init_cnt++) { 4147 4148 irq = pci_irq_vector(hdev->pdev, i); 4149 rc = request_threaded_irq(irq, hl_irq_handler_user_interrupt, 4150 hl_irq_user_interrupt_thread_handler, IRQF_ONESHOT, 4151 gaudi2_irq_name(i), &hdev->user_interrupt[j]); --- 10 unchanged lines hidden (view full) --- 4162 4163free_user_irq: 4164 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count; 4165 i < GAUDI2_IRQ_NUM_USER_FIRST + user_irq_init_cnt ; i++, j++) { 4166 4167 irq = pci_irq_vector(hdev->pdev, i); 4168 free_irq(irq, &hdev->user_interrupt[j]); 4169 } |
4170 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_UNEXPECTED_ERROR); 4171 free_irq(irq, &hdev->unexpected_error_interrupt); 4172free_tpc_irq: 4173 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT); 4174 free_irq(irq, &hdev->tpc_interrupt); |
|
4154free_dec_irq: 4155 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_DEC_LAST + 1); 4156free_event_irq: 4157 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4158 free_irq(irq, cq); 4159 4160free_completion_irq: 4161 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); --- 18 unchanged lines hidden (view full) --- 4180 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION)); 4181 4182 for (i = GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ; i <= GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM ; i++) { 4183 irq = pci_irq_vector(hdev->pdev, i); 4184 synchronize_irq(irq); 4185 } 4186 4187 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT)); | 4175free_dec_irq: 4176 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_DEC_LAST + 1); 4177free_event_irq: 4178 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4179 free_irq(irq, cq); 4180 4181free_completion_irq: 4182 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); --- 18 unchanged lines hidden (view full) --- 4201 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION)); 4202 4203 for (i = GAUDI2_IRQ_NUM_DCORE0_DEC0_NRM ; i <= GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM ; i++) { 4204 irq = pci_irq_vector(hdev->pdev, i); 4205 synchronize_irq(irq); 4206 } 4207 4208 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT)); |
4209 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_UNEXPECTED_ERROR)); |
|
4188 4189 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = 0 ; j < hdev->asic_prop.user_interrupt_count; 4190 i++, j++) { 4191 irq = pci_irq_vector(hdev->pdev, i); 4192 synchronize_irq(irq); 4193 } 4194 4195 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE)); --- 14 unchanged lines hidden (view full) --- 4210 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4211 free_irq(irq, &hdev->event_queue); 4212 4213 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM + 1); 4214 4215 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT); 4216 free_irq(irq, &hdev->tpc_interrupt); 4217 | 4210 4211 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = 0 ; j < hdev->asic_prop.user_interrupt_count; 4212 i++, j++) { 4213 irq = pci_irq_vector(hdev->pdev, i); 4214 synchronize_irq(irq); 4215 } 4216 4217 synchronize_irq(pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE)); --- 14 unchanged lines hidden (view full) --- 4232 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); 4233 free_irq(irq, &hdev->event_queue); 4234 4235 gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM + 1); 4236 4237 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_TPC_ASSERT); 4238 free_irq(irq, &hdev->tpc_interrupt); 4239 |
4240 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_UNEXPECTED_ERROR); 4241 free_irq(irq, &hdev->unexpected_error_interrupt); 4242 |
|
4218 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, k = 0; 4219 k < hdev->asic_prop.user_interrupt_count ; i++, j++, k++) { 4220 4221 irq = pci_irq_vector(hdev->pdev, i); 4222 free_irq(irq, &hdev->user_interrupt[j]); 4223 } 4224 4225 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); --- 6939 unchanged lines hidden --- | 4243 for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, k = 0; 4244 k < hdev->asic_prop.user_interrupt_count ; i++, j++, k++) { 4245 4246 irq = pci_irq_vector(hdev->pdev, i); 4247 free_irq(irq, &hdev->user_interrupt[j]); 4248 } 4249 4250 irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); --- 6939 unchanged lines hidden --- |