irq.c (bcfcd084aacddbb1893ff0c8f41fda23ed861458) irq.c (4713ace3246644519bf93cc8ea6e44efe57fc3ec)
1// SPDX-License-Identifier: GPL-2.0
2
3/*
4 * Copyright 2016-2022 HabanaLabs, Ltd.
5 * All Rights Reserved.
6 */
7
8#include "habanalabs.h"

--- 311 unchanged lines hidden (view full) ---

320 job->free_obj_head = ts_reg_free_list_head;
321 job->hdev = hdev;
322 queue_work(hdev->ts_free_obj_wq, &job->free_obj);
323 } else {
324 kfree(job);
325 }
326}
327
1// SPDX-License-Identifier: GPL-2.0
2
3/*
4 * Copyright 2016-2022 HabanaLabs, Ltd.
5 * All Rights Reserved.
6 */
7
8#include "habanalabs.h"

--- 311 unchanged lines hidden (view full) ---

320 job->free_obj_head = ts_reg_free_list_head;
321 job->hdev = hdev;
322 queue_work(hdev->ts_free_obj_wq, &job->free_obj);
323 } else {
324 kfree(job);
325 }
326}
327
328static void handle_tpc_interrupt(struct hl_device *hdev)
329{
330 u64 event_mask;
331 u32 flags;
332
333 event_mask = HL_NOTIFIER_EVENT_TPC_ASSERT |
334 HL_NOTIFIER_EVENT_USER_ENGINE_ERR |
335 HL_NOTIFIER_EVENT_DEVICE_RESET;
336
337 flags = HL_DRV_RESET_DELAY;
338
339 dev_err_ratelimited(hdev->dev, "Received TPC assert\n");
340 hl_device_cond_reset(hdev, flags, event_mask);
341}
342
328/**
329 * hl_irq_handler_user_interrupt - irq handler for user interrupts
330 *
331 * @irq: irq number
332 * @arg: pointer to user interrupt structure
333 *
334 */
335irqreturn_t hl_irq_handler_user_interrupt(int irq, void *arg)

--- 26 unchanged lines hidden (view full) ---

362 handle_user_interrupt(hdev, user_int);
363 break;
364 case HL_USR_INTERRUPT_DECODER:
365 handle_user_interrupt(hdev, &hdev->common_decoder_interrupt);
366
367 /* Handle decoder interrupt registered on this specific irq */
368 handle_user_interrupt(hdev, user_int);
369 break;
343/**
344 * hl_irq_handler_user_interrupt - irq handler for user interrupts
345 *
346 * @irq: irq number
347 * @arg: pointer to user interrupt structure
348 *
349 */
350irqreturn_t hl_irq_handler_user_interrupt(int irq, void *arg)

--- 26 unchanged lines hidden (view full) ---

377 handle_user_interrupt(hdev, user_int);
378 break;
379 case HL_USR_INTERRUPT_DECODER:
380 handle_user_interrupt(hdev, &hdev->common_decoder_interrupt);
381
382 /* Handle decoder interrupt registered on this specific irq */
383 handle_user_interrupt(hdev, user_int);
384 break;
385 case HL_USR_INTERRUPT_TPC:
386 handle_tpc_interrupt(hdev);
387 break;
370 default:
371 break;
372 }
373
374 return IRQ_HANDLED;
375}
376
377/**

--- 224 unchanged lines hidden ---
388 default:
389 break;
390 }
391
392 return IRQ_HANDLED;
393}
394
395/**

--- 224 unchanged lines hidden ---