Skip to content

Commit 14d25d8

Browse files
dlibemanrodrigovivi
authored andcommitted
drm/xe: change old msi irq api to a new one
As a preparation for msix support, changing for new msi irq api which supports both msi and msix. Reviewed-by: Ohad Sharabi <[email protected]> Signed-off-by: Dani Liberman <[email protected]> Signed-off-by: Rodrigo Vivi <[email protected]> [Rebase fixes by Rodrigo]
1 parent dbac286 commit 14d25d8

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

drivers/gpu/drm/xe/xe_irq.c

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -555,23 +555,24 @@ static void irq_uninstall(struct drm_device *drm, void *arg)
555555
{
556556
struct xe_device *xe = arg;
557557
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
558-
int irq = pdev->irq;
558+
int irq;
559559

560560
if (!xe->irq.enabled)
561561
return;
562562

563563
xe->irq.enabled = false;
564564
xe_irq_reset(xe);
565+
566+
irq = pci_irq_vector(pdev, 0);
565567
free_irq(irq, xe);
566-
if (pdev->msi_enabled)
567-
pci_disable_msi(pdev);
568+
pci_free_irq_vectors(pdev);
568569
}
569570

570571
int xe_irq_install(struct xe_device *xe)
571572
{
572-
int irq = to_pci_dev(xe->drm.dev)->irq;
573+
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
573574
irq_handler_t irq_handler;
574-
int err;
575+
int err, irq;
575576

576577
irq_handler = xe_irq_handler(xe);
577578
if (!irq_handler) {
@@ -581,16 +582,35 @@ int xe_irq_install(struct xe_device *xe)
581582

582583
xe_irq_reset(xe);
583584

584-
err = request_irq(irq, irq_handler,
585-
IRQF_SHARED, DRIVER_NAME, xe);
586-
if (err < 0)
585+
err = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI);
586+
if (err < 0) {
587+
drm_err(&xe->drm, "MSI: Failed to enable support %d\n", err);
587588
return err;
589+
}
590+
591+
irq = pci_irq_vector(pdev, 0);
592+
err = request_irq(irq, irq_handler, IRQF_SHARED, DRIVER_NAME, xe);
593+
if (err < 0) {
594+
drm_err(&xe->drm, "Failed to request MSI IRQ %d\n", err);
595+
goto free_pci_irq_vectors;
596+
}
588597

589598
xe->irq.enabled = true;
590599

591600
xe_irq_postinstall(xe);
592601

593-
return drmm_add_action_or_reset(&xe->drm, irq_uninstall, xe);
602+
err = drmm_add_action_or_reset(&xe->drm, irq_uninstall, xe);
603+
if (err)
604+
goto free_irq_handler;
605+
606+
return 0;
607+
608+
free_irq_handler:
609+
free_irq(irq, xe);
610+
free_pci_irq_vectors:
611+
pci_free_irq_vectors(pdev);
612+
613+
return err;
594614
}
595615

596616
void xe_irq_shutdown(struct xe_device *xe)

drivers/gpu/drm/xe/xe_pci.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -670,9 +670,6 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
670670

671671
pci_set_master(pdev);
672672

673-
if (pci_enable_msi(pdev) < 0)
674-
drm_dbg(&xe->drm, "can't enable MSI");
675-
676673
err = xe_info_init(xe, desc, subplatform_desc);
677674
if (err)
678675
goto err_pci_disable;

0 commit comments

Comments
 (0)